Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Задачки. Паскаль АВС. (http://www.tehnari.ru/f41/t43514/)

Света=) 18.12.2010 22:30

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

Vladimir_S 19.12.2010 10:46

Цитата:

Сообщение от Света=) (Сообщение 431451)
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.

Вот и поди знай, что имел в виду автор задачи!

Света=) 19.12.2010 13:01

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

Vladimir_S 19.12.2010 13:57

Цитата:

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

Эх, Света - да если бы на этом непонятки закончились! Рассмотрим вторую задачу:
Цитата:

Сообщение от Света=) (Сообщение 431451)
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.


Света=) 19.12.2010 16:17

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

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.

Если что, покажу другой способ=)

Vladimir_S 19.12.2010 18:08

Цитата:

Сообщение от Света=) (Сообщение 431451)
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.


Света=) 19.12.2010 19:25

пасиб, работает) по мойму в конце ReadLn; можно и не писать )

Vladimir_S 19.12.2010 19:28

Цитата:

Сообщение от Света=) (Сообщение 431799)
пасиб, работает) по мойму в конце ReadLn; можно и не писать )

Так это просто останов. Без него моргнет и выскочит туда, откуда программа запускалась, да и всё, и не даст на результат посмотреть.
Да, там еще 6-я снизу строка (WriteLn(S);) - отладочная, ее нужно удалить (забыл это сделать перед выкладыванием).

Света=) 26.12.2010 23:05

Цитата:

Сообщение от Света=) (Сообщение 431451)
3) В квадратной матрице найти номер строки с минимальной суммой её элементов и номер столбца с максимальной суммой элементов. Элементы найденной строки поменять местами с соответствующим элементом найденного столбца.

Цитата:

Сообщение от Света=) (Сообщение 431451)
5) Описать, используя структуру данных запись, расписание(предмет, предподаватель, номер, группы, день недели, часы, аудитория). Составить программу определяющую, какая нагрузка у заданного предподавателя на этой недели и список групп, у которых он ведёт занятия.

Простите, уже надоела наверн, мне всё ещё нужны эти 2 задачки. Если надо уточнить условие, или что-нибудь ещё - скажите:tehnari_ru_657:

Света=) 28.12.2010 16:35

помогите:(


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.