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


Ответ
 
Опции темы Опции просмотра
Старый 29.12.2012, 13:40   #11 (permalink)
hamchuk250894
Member
 
Регистрация: 09.12.2012
Сообщений: 45
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Хорошо. Заранее благодарен.
hamchuk250894 вне форума   Ответить с цитированием

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

Могу вам помочь отправив ссылки на похожие обсуждения

Pascal
Pascal ABC
Последовательность чисел. Паскаль
Pascal RGR
Pascal

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

Уф, допилил, кажется. Предлагаются три варианта. В кодах с файлами поправьте имена и пути. Еще прошу прощения за переход на английские ремарки - мне так удобнее:

1. Без файла с исправленными ошибками (их там две; выделены красным):
Код:
uses crt;
const
 nmax=30;
var
 a:array[1..nmax] of byte;
 n,i,j,k,mx,imx:byte;
Begin
 clrscr;
 repeat
  write('The length of array up to ',nmax,' n=');
  readln(n);
 until n in [1..nmax];
 writeln('Enter the array elements including ones forming the serrated sequences');
 for i:=1 to n do
  begin
   write('a[',i,']=');
   readln(a[i]);
  end;
 clrscr;
 writeln('Array:');
 for i:=1 to n do write(a[i],' ');
 writeln;
 writeln;
 i:=2;
 mx:=0;
 imx:=0;
 while i<n do
  if ((a[i]>a[i-1])and(a[i]>a[i+1]))or((a[i]<a[i-1])and(a[i]<a[i+1])) then
   begin
    j:=i;
    k:=2;
    while(j<=n-1)and(((a[j]>a[j-1])and(a[j]>a[j+1]))or((a[j]<a[j-1])and(a[j]<a[j+1]))) do
     begin
      j:=j+1;
      k:=k+1;
     end;
    if k>mx then
     begin
      mx:=k;
      imx:=i-1;
     end;
    i:=i+k-1;
   end
   else i:=i+1;
 if mx=0 then write('No serrated sequence!')
 else
 begin
  for i:=imx to imx+mx-1 do write(a[i],' ');
  writeln;
  write('Its length= ',mx);
 end;
 readln
End.
2. С текстовым файлом:
Код:
uses crt;
const
 nmax=30;
var
 a:array[1..nmax] of byte;
 n,i,k,mx,imx,a1,a2,a3:byte;
 f:Text;
Begin
 Assign(f,'D:\xxx.txt');
 Rewrite(f);
 clrscr;
 repeat
  write('The length of array up to ',nmax,' n=');
  readln(n);
 until n in [1..nmax];
 writeln('Enter the array elements including ones forming the serrated sequences');
 for i:=1 to n do
  begin
   write('a[',i,']=');
   readln(a[i]);
  end;
 clrscr;
 writeln('Array:');
 for i:=1 to n do
  begin
   write(a[i],' ');
   if i<n then write(f,a[i],' ') else write(f,a[i]);
  end;
 Close(f);
 Reset(f);
 writeln;
 writeln;
 i:=2;
 mx:=0;
 imx:=0;
 Read(f,a1,a2,a3);
 while Not(Eof(f)) do
  if ((a2>a1)and(a2>a3))or((a2<a1)and(a2<a3)) then
   begin
    k:=3;
    while Not(Eof(f))and(((a2>a1)and(a2>a3))or((a2<a1)and(a2<a3))) do
     begin
      a1:=a2;
      a2:=a3;
      read(f,a3);
      if Not(Eof(f))and(((a2>a1)and(a2>a3))or((a2<a1)and(a2<a3))) then k:=k+1;
     end;
    if k>mx then
     begin
      mx:=k;
      imx:=i-1;
     end;
    i:=i+k-1;
    a1:=a2;
    a2:=a3;
    If Not(EoF(f)) then read(f,a3);
   end
   else
   if Not(EoF(f)) then
    begin
     a1:=a2;
     a2:=a3;
     read(f,a3);
     i:=i+1;
    end;
 if mx=0 then write('No serrated sequence!')
 else
 begin
  writeln('Maximal serrated sequence= ',mx);
  Reset(f);
  for i:=1 to imx-1 do read(f,a1);
  for i:=imx to imx+mx-1 do
   begin
    read(f,a1);
    write(a1,' ');
   end;
  Close(f);
  writeln;
  write('Its length= ',mx);
 end;
 readln
End.
3. С типизированным файлом:
Код:
uses crt;
const
 nmax=30;
var
 a:array[1..nmax] of byte;
 n,i,k,mx,imx,a1,a2,a3:byte;
 f:file of byte;
Begin
 Assign(f,'D:\xxx');
 Rewrite(f);
 clrscr;
 repeat
  write('The length of array up to ',nmax,' n=');
  readln(n);
 until n in [1..nmax];
 writeln('Enter the array elements including ones forming the serrated sequences');
 for i:=1 to n do
  begin
   write('a[',i,']=');
   readln(a[i]);
  end;
 clrscr;
 writeln('Array:');
 for i:=1 to n do
  begin
   write(a[i],' ');
   write(f,a[i]);
  end;
 Close(f);
 Reset(f);
 writeln;
 writeln;
 i:=2;
 mx:=0;
 imx:=0;
 Read(f,a1,a2,a3);
 while Not(Eof(f)) do
  if ((a2>a1)and(a2>a3))or((a2<a1)and(a2<a3)) then
   begin
    k:=3;
    while Not(Eof(f))and(((a2>a1)and(a2>a3))or((a2<a1)and(a2<a3))) do
     begin
      a1:=a2;
      a2:=a3;
      read(f,a3);
      if Not(Eof(f))and(((a2>a1)and(a2>a3))or((a2<a1)and(a2<a3))) then k:=k+1;
     end;
    if k>mx then
     begin
      mx:=k;
      imx:=i-1;
     end;
    i:=i+k-1;
    a1:=a2;
    a2:=a3;
    If Not(EoF(f)) then read(f,a3);
   end
   else
   if Not(EoF(f)) then
    begin
     a1:=a2;
     a2:=a3;
     read(f,a3);
     i:=i+1;
    end;
 if mx=0 then write('No serrated sequence!')
 else
 begin
  writeln('Maximal serrated sequence= ',mx);
  Reset(f);
  for i:=1 to imx-1 do read(f,a1);
  for i:=imx to imx+mx-1 do
   begin
    read(f,a1);
    write(a1,' ');
   end;
  Close(f);
  writeln;
  write('Its length= ',mx);
 end;
 readln
End.
Vladimir_S вне форума   Ответить с цитированием
Старый 29.12.2012, 18:14   #13 (permalink)
hamchuk250894
Member
 
Регистрация: 09.12.2012
Сообщений: 45
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо большое.
hamchuk250894 вне форума   Ответить с цитированием
Старый 03.01.2013, 11:19   #14 (permalink)
Student
Member
 
Регистрация: 14.12.2012
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Владимир, огромное спасибо за помощь))
Я вот текстовый файл посмотрел - у меня 2 вопроса:
1) как сделать чтобы корректно выводились отрицательные числа
2) если последнее число записанное в строку входит в последовательность то оно не выводится, например: вводим "121212" выводится только "12121" - почему?
Если не трудно, посмотрите пожалуйста
Student вне форума   Ответить с цитированием
Старый 03.01.2013, 14:18   #15 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Student Посмотреть сообщение
Если не трудно, посмотрите пожалуйста
Посмотрел. Поправил. И насчет отрицательных чисел - тоже.

1. С текстовым файлом:
Код:
uses crt;
const
 nmax=30;
var
 a:array[1..nmax] of Integer;
 n,i,k,mx,imx,a1,a2,a3:Integer;
 f:Text;
Begin
 Assign(f,'D:\xxx.txt');
 Rewrite(f);
 clrscr;
 repeat
  write('The length of array up to ',nmax,' n=');
  readln(n);
 until n in [1..nmax];
 writeln('Enter the array elements including ones forming the serrated sequences');
 for i:=1 to n do
  begin
   write('a[',i,']=');
   readln(a[i]);
  end;
 clrscr;
 writeln('Array:');
 for i:=1 to n do
  begin
   write(a[i],' ');
   if i<n then write(f,a[i],' ') else write(f,a[i]);
  end;
 Close(f);
 Reset(f);
 writeln;
 writeln;
 i:=2;
 mx:=0;
 imx:=0;
 Read(f,a1,a2,a3);
 while Not(Eof(f)) do
  if ((a2>a1)and(a2>a3))or((a2<a1)and(a2<a3)) then
   begin
    k:=3;
    while Not(Eof(f))and(((a2>a1)and(a2>a3))or((a2<a1)and(a2<a3))) do
     begin
      a1:=a2;
      a2:=a3;
      read(f,a3);
      if ((a2>a1)and(a2>a3))or((a2<a1)and(a2<a3)) then k:=k+1;
     end;
    if k>mx then
     begin
      mx:=k;
      imx:=i-1;
     end;
    i:=i+k-1;
    a1:=a2;
    a2:=a3;
    If Not(EoF(f)) then read(f,a3);
   end
   else
   if Not(EoF(f)) then
    begin
     a1:=a2;
     a2:=a3;
     read(f,a3);
     i:=i+1;
    end;
 if mx=0 then write('No serrated sequence!')
 else
 begin
  writeln('Maximal serrated sequence= ',mx);
  Reset(f);
  for i:=1 to imx-1 do read(f,a1);
  for i:=imx to imx+mx-1 do
   begin
    read(f,a1);
    write(a1,' ');
   end;
  Close(f);
  writeln;
  write('Its length= ',mx);
 end;
 readln
End.
2. С типизированным файлом:
Код:
uses crt;
const
 nmax=30;
var
 a:array[1..nmax] of Integer;
 n,i,k,mx,imx,a1,a2,a3:Integer;
 f:file of Integer;
Begin
 Assign(f,'D:\xxx');
 Rewrite(f);
 clrscr;
 repeat
  write('The length of array up to ',nmax,' n=');
  readln(n);
 until n in [1..nmax];
 writeln('Enter the array elements including ones forming the serrated sequences');
 for i:=1 to n do
  begin
   write('a[',i,']=');
   readln(a[i]);
  end;
 clrscr;
 writeln('Array:');
 for i:=1 to n do
  begin
   write(a[i],' ');
   write(f,a[i]);
  end;
 Close(f);
 Reset(f);
 writeln;
 writeln;
 i:=2;
 mx:=0;
 imx:=0;
 Read(f,a1,a2,a3);
 while Not(Eof(f)) do
  if ((a2>a1)and(a2>a3))or((a2<a1)and(a2<a3)) then
   begin
    k:=3;
    while Not(Eof(f))and(((a2>a1)and(a2>a3))or((a2<a1)and(a2<a3))) do
     begin
      a1:=a2;
      a2:=a3;
      read(f,a3);
      if ((a2>a1)and(a2>a3))or((a2<a1)and(a2<a3)) then k:=k+1;
     end;
    if k>mx then
     begin
      mx:=k;
      imx:=i-1;
     end;
    i:=i+k-1;
    a1:=a2;
    a2:=a3;
    If Not(EoF(f)) then read(f,a3);
   end
   else
   if Not(EoF(f)) then
    begin
     a1:=a2;
     a2:=a3;
     read(f,a3);
     i:=i+1;
    end;
 if mx=0 then write('No serrated sequence!')
 else
 begin
  writeln('Maximal serrated sequence= ',mx);
  Reset(f);
  for i:=1 to imx-1 do read(f,a1);
  for i:=imx to imx+mx-1 do
   begin
    read(f,a1);
    write(a1,' ');
   end;
  Close(f);
  writeln;
  write('Its length= ',mx);
 end;
 readln
End.
Проверяйте. Я уж и не знаю - мне казалось, я на всяких комбинациях предыдущий вариант тестировал, и вроде всё получалось, ан вот поди ж ты!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 07.01.2013, 06:01   #16 (permalink)
JustYouSmile147
Новичок
 
Регистрация: 07.01.2013
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Попал на тему в поисках решения задачи с acmp, вот мое решение:

Цитата:
Program abc;
Var
n,mx,mmx,i:longint;
a1,a2,a3,a4:integer;
begin
Assign(input, 'input.txt');
Reset(input);
Assign(output, 'output.txt');
Rewrite(output);
read(n);
read(a1,a2,a3);
i:=2;
mx:=0;
mmx:=0;
While i<=n-1 do
if (i<=n-1)and(((a2>a1)and(a2>a3))or((a2<a1)and(a2<a3))) then
begin
mx:=mx+1;
i:=i+1;
if mx>mmx then mmx:=mx;
read(a4);
a1:=a2;
a2:=a3;
a3:=a4;
end
else begin
mx:=0;
i:=i+1;
read(a4);
a1:=a2;
a2:=a3;
a3:=a4;
end;
writeln(mmx+2);
end.
JustYouSmile147 вне форума   Ответить с цитированием
Старый 07.01.2013, 18:14   #17 (permalink)
hamchuk250894
Member
 
Регистрация: 09.12.2012
Сообщений: 45
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

а через случайные числа в векторе можно сделать это задание также через типизированный файл?
hamchuk250894 вне форума   Ответить с цитированием
Старый 07.01.2013, 18:56   #18 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от hamchuk250894 Посмотреть сообщение
а через случайные числа в векторе можно сделать это задание также через типизированный файл?
Можно. Заменив ввод с консоли генерацией случайных чисел.
Vladimir_S вне форума   Ответить с цитированием
Старый 07.01.2013, 19:26   #19 (permalink)
hamchuk250894
Member
 
Регистрация: 09.12.2012
Сообщений: 45
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

а как это сделать в программе?
hamchuk250894 вне форума   Ответить с цитированием
Старый 07.01.2013, 20:09   #20 (permalink)
Daniellos
Хозяин Медной Горы
 
Аватар для Daniellos
 
Регистрация: 01.08.2011
Адрес: Армавир
Сообщений: 12,159
Записей в дневнике: 8
Сказал(а) спасибо: 751
Поблагодарили 88 раз(а) в 27 сообщениях
Репутация: 57416
По умолчанию

вместо ввода с клавиатуры, активируй ГСЧ командой randomize;
Daniellos вне форума   Ответить с цитированием
Ads

Яндекс

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


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

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




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

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