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

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Pascal: найти в строке все прогрессии (http://www.tehnari.ru/f41/t99469/)

Mokingbird 13.11.2014 14:20

Pascal: найти в строке все прогрессии
 
Помогите пожалуйста с задачей, совсем запуталась.
Строка представляет собой последовательность натуральных чисел, разделенных пробелом. Найти в ней все последовательности (не менее трех чисел), являющиеся арифметическими прогрессиями.

Входные данные:
1 3 4 6 2 4 6 8 1 3 5

Выходные данные:
2 4 6 8
1 3 5

Vladimir_S 13.11.2014 15:00

Например, так:
Код:

Const
 N=11;
 A:Array[1..N] of Integer=(1, 3, 4, 6, 2, 4, 6, 8, 1, 3, 5);

Var
 i:Integer;
 flag,flag1:boolean;

Begin
 for i:=1 to N do write(A[i],' ');
 writeln;
 i:=0;
 flag1:=false;
 flag:=true;
 Repeat
  Inc(i);
  repeat
  if (A[i+1]-A[i])=(A[i+2]-A[i+1]) then
    begin
    flag1:=true;
    if flag then
      begin
      write(A[i],' ',A[i+1],' ',A[i+2]);
      flag:=false;
      end
    else
      write(' ',A[i+2]);
    if i<N-2 then Inc(i);
    end;
  until (i>=N-2) or ((A[i+1]-A[i])<>(A[i+2]-A[i+1]));
  if i<N-2 then
  begin
    if flag1 then
    begin
      writeln;
      flag1:=false;
    end;
    flag:=true;
  end;
 Until i>=N-2;
 Readln
End.


Mokingbird 13.11.2014 15:16

Наверное неточно сформулировала задание.. Строка типа String, и ее вводить с консоли через пробел. Но все равно спасибо)

Vladimir_S 13.11.2014 15:43

Цитата:

Сообщение от Mokingbird (Сообщение 1079208)
Наверное неточно сформулировала задание.. Строка типа String, и ее вводить с консоли через пробел. Но все равно спасибо)

О, Боже - это еще городить преобразование строки в массив? Обязательно? Последовательный ввод чисел не годится?

Mokingbird 13.11.2014 15:53

Цитата:

Сообщение от Vladimir_S (Сообщение 1079215)
О, Боже - это еще городить преобразование строки в массив? Обязательно? Последовательный ввод чисел не годится?

Увы, обязательно :С задание дано на строки.

Vladimir_S 13.11.2014 16:02

Цитата:

Сообщение от Mokingbird (Сообщение 1079220)
Увы, обязательно :С задание дано на строки.

Тогда еще вопрос: нельзя ли через вспомогательный файл? Т.е. строку записать в файл и считать из него уже числа? Это бы сильно упростило дело.

Mokingbird 13.11.2014 16:06

Цитата:

Сообщение от Vladimir_S (Сообщение 1079231)
Тогда еще вопрос: нельзя ли через вспомогательный файл? Т.е. строку записать в файл и считать из него уже числа? Это бы сильно упростило дело.

Файлы можно)))

Vladimir_S 13.11.2014 16:23

Цитата:

Сообщение от Mokingbird (Сообщение 1079238)
Файлы можно)))

Вот:
Код:

Var
 N,i:Integer;
 flag,flag1:boolean;
 A:Array[1..100] of Integer;
 f:Text;
 S:String;

Begin
 Writeln('Enter the string: ');
 Readln(S);
 Assign(f,'fff.txt');
 Rewrite(f);
 Write(f,S);
 Close(f);
 Reset(f);
 N:=0;
 Repeat
  Inc(N);
  Read(f,A[N]);
 Until EoF(f);
 Close(f);
 Erase(f);
 writeln;
 i:=0;
 flag1:=false;
 flag:=true;
 Repeat
  Inc(i);
  repeat
  if (A[i+1]-A[i])=(A[i+2]-A[i+1]) then
    begin
    flag1:=true;
    if flag then
      begin
      write(A[i],' ',A[i+1],' ',A[i+2]);
      flag:=false;
      end
    else
      write(' ',A[i+2]);
    if i<N-2 then Inc(i);
    end;
  until (i>=N-2) or ((A[i+1]-A[i])<>(A[i+2]-A[i+1]));
  if i<N-2 then
  begin
    if flag1 then
    begin
      writeln;
      flag1:=false;
    end;
    flag:=true;
  end;
 Until i>=N-2;
 Readln
End.


Mokingbird 13.11.2014 16:28

Огромнейшее вам спасибо!!!

Vladimir_S 13.11.2014 16:31

Цитата:

Сообщение от Mokingbird (Сообщение 1079247)
Огромнейшее вам спасибо!!!

Да не за что. Только вот не уверен я, что Ваши преподы это примут: могут потребовать, чтобы числа из строки выколупывать. Обращайтесь, если что - сделаем.


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

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