Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 18.12.2010, 22:30   #1 (permalink)
Света=)
Новичок
 
Аватар для Света=)
 
Регистрация: 18.12.2010
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Lightbulb Задачки. Паскаль АВС.

Дорогие программисты, помогите пожалуйсто решить несколько задачек=(
Я в паскале совсем тупая ничего непонимаю, помогите хотяб с некоторыми написать=(( буду очень длагодарна
1) Дано натуральное число N. Получить в порядке возрастания N первых натуральных чисел, которые не делятся ни на какие простые числа, кроме 2, 3 и 5.
2) Поменять местами треугольники квадратной матрицы, расположенные выше и ниже боковой диагонали.
3) В квадратной матрице найти номер строки с минимальной суммой её элементов и номер столбца с максимальной суммой элементов. Элементы найденной строки поменять местами с соответствующим элементом найденного столбца.
4) Дана строка символов. Необходимо определить в тексте позицию последнего появления определённого слова.
5) Описать, используя структуру данных запись, расписание(предмет, предподаватель, номер, группы, день недели, часы, аудитория). Составить программу определяющую, какая нагрузка у заданного предподавателя на этой недели и список групп, у которых он ведёт занятия.
Света=) вне форума   Ответить с цитированием

Старый 18.12.2010, 22:30
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Решение вашего вопроса должно упроститься после прочтения похожих топиков

Решить задачки
Турбо Паскаль или Фри Паскаль. Задание по теме Типизированный файл
Задачки на массивы. Паскаль
Задачки на Pascal
Помогите с решением задачки

Старый 19.12.2010, 10:46   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Света=) Посмотреть сообщение
1) Дано натуральное число N. Получить в порядке возрастания N первых натуральных чисел, которые не делятся ни на какие простые числа, кроме 2, 3 и 5.
Да, интересная задачка - пришлось-таки голову поломать. Но вот что прискорбно: условие можно толковать двояко:
1. Отселектировать числа, которые делятся ХОТЯ БЫ НА ОДНО из чисел (2, 3, 5) и не содержат никаких других простых множителей. Этому условию отвечают 2, 3, 4, 5, 6, 8, 9, 10 и т.д. Программа поиска таких чисел выглядит так:
Код:
VAR
 N,i,m:Byte;
 A,B,d:LongInt;
BEGIN
 Write('N (<256) = ');
 ReadLn(N);
 A:=0;
 i:=0;
 Repeat
  A:=A+1;
  B:=A;
  repeat
   d:=B div 2;
   m:=B mod 2;
   B:=d;
  until (m>0) or ((B=1) and (m=0));
  If m>0 then
   begin
    B:=B*2+m;
    repeat
     d:=B div 3;
     m:=B mod 3;
     B:=d;
    until (m>0) or ((B=1) and (m=0));
    If m>0 then
     begin
      B:=B*3+m;
      repeat
       d:=B div 5;
       m:=B mod 5;
       B:=d;
      until (m>0) or ((B=1) and (m=0));
     end;
   end;
  If m=0 then
   begin
    Write(A:8);
    i:=i+1;
   end;
 Until i=N;
 ReadLn;
END.
2. Отселектировать числа, которые делятся ОДНОВРЕМЕННО на 2, 3 и 5 и тоже не содержат никаких других простых множителей. Этому условию отвечают 30, 60, 90, 240 и т.д. Тогда так:
Код:
VAR
 N,i,m:Byte;
 A,B,d:LongInt;
 b2,b3,b5:Boolean;
BEGIN
 Write('N (<256) = ');
 ReadLn(N);
 A:=0;
 i:=0;
 Repeat
  A:=A+1;
  B:=A;
  b2:=false;
  b3:=false;
  b5:=false;
  repeat
   d:=B div 2;
   m:=B mod 2;
   if m=0 then b2:=true;
   B:=d;
  until (m>0) or ((B=1) and (m=0));
  If m>0 then
   begin
    B:=B*2+m;
    repeat
     d:=B div 3;
     m:=B mod 3;
     if m=0 then b3:=true;
     B:=d;
    until (m>0) or ((B=1) and (m=0));
    If m>0 then
     begin
      B:=B*3+m;
      repeat
       d:=B div 5;
       m:=B mod 5;
       if m=0 then b5:=true;
       B:=d;
      until (m>0) or ((B=1) and (m=0));
     end;
   end;
  If (m=0) and b2 and b3 and b5 then
   begin
    Write(A:8);
    i:=i+1;
   end;
 Until i=N;
 ReadLn;
END.
Вот и поди знай, что имел в виду автор задачи!
Vladimir_S вне форума   Ответить с цитированием
Старый 19.12.2010, 13:01   #3 (permalink)
Света=)
Новичок
 
Аватар для Света=)
 
Регистрация: 18.12.2010
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Ну да, 1ю задачу можно было по разному подумать, по идеи "которые делятся ХОТЯ БЫ НА ОДНО из чисел (2, 3, 5)" но тогда получается, что это все числа кроме 1, так что наверно всё таки "которые делятся ОДНОВРЕМЕННО на 2, 3 и 5". Извени, что дала такую задачку неуточнив у препода, что тут спрашивается. Вижу пришлось сильно попотеть=( Пасиб за неё.=)

Последний раз редактировалось Света=); 19.12.2010 в 13:10
Света=) вне форума   Ответить с цитированием
Старый 19.12.2010, 13:57   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Света=) Посмотреть сообщение
Ну да, 1ю задачу можно было по разному подумать, по идеи "которые делятся ХОТЯ БЫ НА ОДНО из чисел (2, 3, 5)" но тогда получается, что это все числа кроме 1, так что наверно всё таки "которые делятся ОДНОВРЕМЕННО на 2, 3 и 5". Извени, что дала такую задачку неуточнив у препода, что тут спрашивается. Вижу пришлось сильно попотеть=( Пасиб за неё.=)
Эх, Света - да если бы на этом непонятки закончились! Рассмотрим вторую задачу:
Цитата:
Сообщение от Света=) Посмотреть сообщение
2) Поменять местами треугольники квадратной матрицы, расположенные выше и ниже боковой диагонали.
Во-первых, что это за "боковая диагональ"? Мне известны только главная и побочная. Ну ладно, будем считать что "боковая" это побочная. Но вот дальше... Видите ли, "поменять местами" два указанных треугольника можно двояко:
1. "Зеркально отразить" числа относительно побочной диагонали.
2. Мысленно воткнуть в самый центр матрицы ось, перпендикулярную плоскости, на которой написана матрица (неважно, попадет эта ось в элемент или нет - это зависит от четности) и, не трогая побочную диагональ, провернуть ось вместе с треугольниками на 180°.
Иными словами - считать матрицу осесимметричной (где ось - побочная диагональ) или центрально-симметричной?
Предлагаемая программа реализует оба способа в указанной последовательности:
Код:
Const
 N=5;
Var
 A,B:ARRAY[1..N,1..N] of Integer;
 i,j,D:Integer;
BEGIN
 Randomize;
 For i:=1 to N do
  For j:=1 to N do
   begin
    D:=Random(10);
    A[i,j]:=D-5;
   end;
 WriteLn('Initial matrix:');
 For i:=1 to N do
  begin
   For j:=1 to N do
    Write(A[i,j]:4);
   WriteLn;
  end;
 WriteLn('Transformed matrix (var.1):');
 For i:=1 to N do
  For j:=1 to N do
    B[i,j]:=A[N-j+1,N-i+1];
 For i:=1 to N do
  begin
   For j:=1 to N do
    Write(B[i,j]:4);
   WriteLn;
  end;
 WriteLn('Transformed matrix (var.2):');
 For i:=1 to N do
  For j:=1 to N do
     B[i,j]:=A[N-i+1,N-j+1];
 For i:=1 to N do B[i,N-i+1]:=A[i,N-i+1];
 For i:=1 to N do
  begin
   For j:=1 to N do
    Write(B[i,j]:4);
   WriteLn;
  end;
 Readln;
END.
Vladimir_S вне форума   Ответить с цитированием
Старый 19.12.2010, 16:17   #5 (permalink)
Света=)
Новичок
 
Аватар для Света=)
 
Регистрация: 18.12.2010
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

По идеи надо первым способом) Оставила вот так:

Program pr2;
Const
N=5;
Var
A,B:ARRAY[1..N,1..N] of Integer;
i,j,D:Integer;
BEGIN
Randomize;
For i:=1 to N do
For j:=1 to N do
begin
D:=Random(10);
A[i,j]:=D-5;
end;
WriteLn('Initial matrix:');
For i:=1 to N do
begin
For j:=1 to N do
Write(A[i,j]:4);
WriteLn;
end;
WriteLn('Transformed matrix:');
For i:=1 to N do
For j:=1 to N do
B[i,j]:=A[N-j+1,N-i+1];
For i:=1 to N do
begin
For j:=1 to N do
Write(B[i,j]:4);
WriteLn;
end;
END.

Если что, покажу другой способ=)
Света=) вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 19.12.2010, 18:08   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Света=) Посмотреть сообщение
4) Дана строка символов. Необходимо определить в тексте позицию последнего появления определённого слова.
Пожалуйста:
Код:
uses crt;
VAR
 S,W,Sbef,Saft:String;
 cnt,i,W_pos:byte;
BEGIN
 Clrscr;
 WriteLn('Enter the string:');
 ReadLn(S);
 WriteLn('Enter the word:');
 ReadLn(W);
 Repeat
  cnt:=pos(W,S);
  if cnt>0 then
   begin
    W_pos:=cnt;
    Sbef:=copy(S,1,cnt-1);
    Saft:=copy(S,cnt+Length(W),Length(S)-cnt-Length(W)+1);
    S:=Sbef;
    For i:=1 to Length(W) do
     S:=S+'*';
    S:=S+Saft;
    WriteLn(S);
   end;
 Until cnt=0;
 WriteLn('The last position of the word "'+W+'" is ',W_pos);
 ReadLn;
end.
Vladimir_S вне форума   Ответить с цитированием
Старый 19.12.2010, 19:25   #7 (permalink)
Света=)
Новичок
 
Аватар для Света=)
 
Регистрация: 18.12.2010
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

пасиб, работает) по мойму в конце ReadLn; можно и не писать )
Света=) вне форума   Ответить с цитированием
Старый 19.12.2010, 19:28   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Света=) Посмотреть сообщение
пасиб, работает) по мойму в конце ReadLn; можно и не писать )
Так это просто останов. Без него моргнет и выскочит туда, откуда программа запускалась, да и всё, и не даст на результат посмотреть.
Да, там еще 6-я снизу строка (WriteLn(S);) - отладочная, ее нужно удалить (забыл это сделать перед выкладыванием).
Vladimir_S вне форума   Ответить с цитированием
Старый 26.12.2010, 23:05   #9 (permalink)
Света=)
Новичок
 
Аватар для Света=)
 
Регистрация: 18.12.2010
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Света=) Посмотреть сообщение
3) В квадратной матрице найти номер строки с минимальной суммой её элементов и номер столбца с максимальной суммой элементов. Элементы найденной строки поменять местами с соответствующим элементом найденного столбца.
Цитата:
Сообщение от Света=) Посмотреть сообщение
5) Описать, используя структуру данных запись, расписание(предмет, предподаватель, номер, группы, день недели, часы, аудитория). Составить программу определяющую, какая нагрузка у заданного предподавателя на этой недели и список групп, у которых он ведёт занятия.
Простите, уже надоела наверн, мне всё ещё нужны эти 2 задачки. Если надо уточнить условие, или что-нибудь ещё - скажите
Света=) вне форума   Ответить с цитированием
Старый 28.12.2010, 16:35   #10 (permalink)
Света=)
Новичок
 
Аватар для Света=)
 
Регистрация: 18.12.2010
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

помогите
Света=) вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 09:32.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.