• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Задачки. Паскаль АВС.

Света=)

Ученик
Регистрация
18 Дек 2010
Сообщения
7
Реакции
0
Баллы
0
Задачки. Паскаль АВС.

Дорогие программисты, помогите пожалуйсто решить несколько задачек=(
Я в паскале совсем тупая ничего непонимаю, помогите хотяб с некоторыми написать=(( буду очень длагодарна:tehnari_ru_102:
1) Дано натуральное число N. Получить в порядке возрастания N первых натуральных чисел, которые не делятся ни на какие простые числа, кроме 2, 3 и 5.
2) Поменять местами треугольники квадратной матрицы, расположенные выше и ниже боковой диагонали.
3) В квадратной матрице найти номер строки с минимальной суммой её элементов и номер столбца с максимальной суммой элементов. Элементы найденной строки поменять местами с соответствующим элементом найденного столбца.
4) Дана строка символов. Необходимо определить в тексте позицию последнего появления определённого слова.
5) Описать, используя структуру данных запись, расписание(предмет, предподаватель, номер, группы, день недели, часы, аудитория). Составить программу определяющую, какая нагрузка у заданного предподавателя на этой недели и список групп, у которых он ведёт занятия.
 
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.
Вот и поди знай, что имел в виду автор задачи!
 
Ну да, 1ю задачу можно было по разному подумать, по идеи "которые делятся ХОТЯ БЫ НА ОДНО из чисел (2, 3, 5)" но тогда получается, что это все числа кроме 1, так что наверно всё таки "которые делятся ОДНОВРЕМЕННО на 2, 3 и 5". Извени, что дала такую задачку неуточнив у препода, что тут спрашивается. Вижу пришлось сильно попотеть=( Пасиб за неё.=)
 
Последнее редактирование:
Ну да, 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.
 
По идеи надо первым способом) Оставила вот так:

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.

Если что, покажу другой способ=)
 
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.
 
пасиб, работает) по мойму в конце ReadLn; можно и не писать )
 
пасиб, работает) по мойму в конце ReadLn; можно и не писать )
Так это просто останов. Без него моргнет и выскочит туда, откуда программа запускалась, да и всё, и не даст на результат посмотреть.
Да, там еще 6-я снизу строка (WriteLn(S);) - отладочная, ее нужно удалить (забыл это сделать перед выкладыванием).
 
3) В квадратной матрице найти номер строки с минимальной суммой её элементов и номер столбца с максимальной суммой элементов. Элементы найденной строки поменять местами с соответствующим элементом найденного столбца.
5) Описать, используя структуру данных запись, расписание(предмет, предподаватель, номер, группы, день недели, часы, аудитория). Составить программу определяющую, какая нагрузка у заданного предподавателя на этой недели и список групп, у которых он ведёт занятия.
Простите, уже надоела наверн, мне всё ещё нужны эти 2 задачки. Если надо уточнить условие, или что-нибудь ещё - скажите:tehnari_ru_657:
 
Назад
Сверху