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

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

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

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

Pascal: найти в строке все прогрессии

Mokingbird

Ученик
Регистрация
13 Ноя 2014
Сообщения
10
Реакции
0
Баллы
0
Pascal: найти в строке все прогрессии

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

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

Выходные данные:
2 4 6 8
1 3 5
 
Например, так:
Код:
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.
 
Наверное неточно сформулировала задание.. Строка типа String, и ее вводить с консоли через пробел. Но все равно спасибо)
 
Наверное неточно сформулировала задание.. Строка типа String, и ее вводить с консоли через пробел. Но все равно спасибо)
О, Боже - это еще городить преобразование строки в массив? Обязательно? Последовательный ввод чисел не годится?
 
Увы, обязательно :С задание дано на строки.
Тогда еще вопрос: нельзя ли через вспомогательный файл? Т.е. строку записать в файл и считать из него уже числа? Это бы сильно упростило дело.
 
Вот:
Код:
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.
 
Огромнейшее вам спасибо!!!
 
Огромнейшее вам спасибо!!!
Да не за что. Только вот не уверен я, что Ваши преподы это примут: могут потребовать, чтобы числа из строки выколупывать. Обращайтесь, если что - сделаем.
 
Назад
Сверху