Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2010, 15:45   #1
Alexsssandr
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 12
Печаль Работа с текстом в Pascal

Дан текст. Найти наибольшее количество идущих подряд цифр.

Я написал программу только она выводит первое значение а не максимальное количество идущих подряд.Не могу найти что ни так:

Код:
var
s:string;
i,j,b,g,a:integer;

begin
 b:=0; j:=0;a:=0;
read(s);
 for i:=1 to length(s) do begin
    if (s[i]='0')or (s[i]='1')or (s[i]='2')or (s[i]='3')or (s[i]='4')or (s[i]='5')or (s[i]='6')or (s[i]='7')or (s[i]='8')or (s[i]='9') then inc(b)
Else
  begin
    inc(j);
    If a<b then a:=b;
    b:=0;
  end;
End;

readln;
Writeln(a);
readln;

Последний раз редактировалось Stilet; 10.03.2010 в 16:21.
Alexsssandr вне форума Ответить с цитированием
Старый 10.03.2010, 16:05   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

читаешь первый символ, проверяешь цифра или нет, сравниваешь со вторым, если одинаковы, включаем счетчик (inc(k) к примеру), сравниваем с третьим, если не то, пишем в массив значение счетчика, обнуляем его, и по новой
потом в массиве находим максимальный элемент, вот и всё
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 10.03.2010, 16:44   #3
Lemo
Форумчанин
 
Аватар для Lemo
 
Регистрация: 13.10.2008
Сообщений: 714
Радость

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

 var
 st:string;
 a,i,count:integer;

begin
  count:=0;
  a:=0;
  st:='I li123ke De34556lphi so m13333331uch.';

  for I := 1 to Length(st) do
    begin
      if (st[i] in ['0'..'9']) then
        begin
          inc(count);



        end
      else
       begin

         if count>a then a:=count;

          count:=0;
       end;


    end;
   writeLn('Count : ', a);
    readln;

end.
Lemo вне форума Ответить с цитированием
Старый 10.03.2010, 16:48   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

можно вот так:
Код:
{Дан текст. Найти наибольшее количество идущих подряд цифр. }
var
  s:string;
  i, CurLen, MaxI, MaxLen : integer;

begin
  WriteLn('Vvedite striku: ');
  readln(s);

  s := s + '*'; {это чтобы обработать и тот случай, 
                когда строка заканчивается цифрами}
  CurLen := 0;
  MaxLen := 0;
  for i:=1 to length(s) do
    if (s[i] in ['0'..'9']) then 
      inc(CurLen)
    else begin
      if CurLen>MaxLen then begin
        MaxLen := CurLen;
        MaxI := i - CurLen;
      end;
      CurLen := 0;        
    end;

  Writeln('Maximalno cifr = ', MaxLen, ' v stroke s pozicii ',MaxI);
  readln; 
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.03.2010, 16:54   #5
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

Другой вариант:
Код:
Var 
  s: string;
  i,len,max: integer;

Begin
  len := 0;
  max := 0;
  read(s);
  
  For i:=1 To length(s) Do
    Begin
      If (s[i]>='0') And (s[i]<='9') Then 
		inc(len)
      Else  
		len := 0;
		
      If len>max Then max := len;

    End;

  Writeln(max);
  readln;
End.
Дело в том, что если макс. число цифр стоит в конце, напр.: 345345sdfgsdf35634534563 ,то присвоение max не выполнится.
Код:
If (s[i]>='0') And (s[i]<='9') Then inc(len)
      Else
        Begin
          If len>max Then max := len;
          len := 0;
        End;
Так как последний символ - цифра.
Indian вне форума Ответить с цитированием
Старый 10.03.2010, 17:03   #6
fenix-elite
Пользователь
 
Аватар для fenix-elite
 
Регистрация: 02.11.2008
Сообщений: 75
По умолчанию

Вот мой вариант
Код:
var
 s:string;
 i,m1,m2:integer;

begin
 writeln('Enter string');
 readln(s);
 s:=s+'-';

 for i:=1 to length(s) do begin
  if (ord(s[i])>=47)and(ord(s[i])<=57) then
   inc(m1)
    else begin
     if m1>m2 then
      m2:=m1;
     m1:=0;
    end;
 end;
 writeln('samaya dlinnaya posledovatelnost iz cifr = ',m2);
 readln;
 end.
«Когда ты действительно чего-то хочешь, вся Вселенная помогает тебе осуществить твою мечту».(с) Пауло Коэльо
fenix-elite вне форума Ответить с цитированием
Старый 10.03.2010, 17:05   #7
fenix-elite
Пользователь
 
Аватар для fenix-elite
 
Регистрация: 02.11.2008
Сообщений: 75
По умолчанию

Serge_Bliznykov, ооо мы с вами почти одинакого сделали )) Интересно как еще сделать обработку, если последний символ в строке - цифра? Кроме добавления любого символа в конец?
«Когда ты действительно чего-то хочешь, вся Вселенная помогает тебе осуществить твою мечту».(с) Пауло Коэльо
fenix-elite вне форума Ответить с цитированием
Старый 10.03.2010, 18:15   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Интересно как еще сделать обработку, если последний символ в строке - цифра? Кроме добавления любого символа в конец?
да элементарно.
после выхода из цикла проверять счётчик на больше максима.
например, в вашем коде:
Код:
for i:=1 to length(s) do begin
  if (s[i]>='0')and(s[i]<='9') then
   inc(m1)
    else begin
     if m1>m2 then
      m2:=m1;
     m1:=0;
    end;
 end;
 if m1>m2 then
      m2:=m1;
p.s. а вот коды вместо '0' и '9' Вы использовали СОВЕРШЕННО ЗРЯ! Это ровным счётом ничего не даёт, кроме затуманивания алгоритма, лишний преобразований данных (операция ORD()) (я уже не говорю о том, что так проще ошибиться!!! - ЧТО ВЫ И СДЕЛАЛИ!!!!) короче, минусов много - плюсов - ни одного!
код 47 - это символ '/'
попробуйте Ваш код проверить на строчке s12d////////99
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстом fakir9999 Общие вопросы Delphi 3 04.06.2009 16:28
работа с текстом... Poll Помощь студентам 5 23.01.2009 11:43
Работа с текстом(C++) silent_witcher Помощь студентам 1 13.12.2008 17:55