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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2008, 11:17   #1
kiko
Пользователь
 
Аватар для kiko
 
Регистрация: 19.11.2008
Сообщений: 24
Восклицание СИМВОЛЫ - помогите решить задачу на символы

Имеется строка, содержащая буквы латинского алфавита и цыфры. Вывести на экран длину наибольшей последовательности цифр, идущих подряд.

помогите пожалуйста
нет ничего не возможного ...
kiko вне форума Ответить с цитированием
Старый 30.11.2008, 11:52   #2
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Код:
uses crt;
var s:string;
    i,l,max:integer;
    M:set of char;
    flag:boolean;
begin
clrscr;
writeln('Input string');
readln(s);
M:=['0'..'9'];
flag:=false;
i:=0;l:=0;max:=0;
repeat
inc(i);
if s[i] in M then begin
                   if flag=false then begin
                                       flag:=true;
                                       l:=1;
                                      end
                      else inc(l); 
                  end
  else begin
        if flag then begin
                      if max<l then max:=l;
                      flag:=false;
                     end
       end;  
until i=length(s);
writeln(max);
end.
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 30.11.2008, 12:26   #3
Romer9999
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 42
По умолчанию Шкет

Поскольку из Вашего условия не ясно, надо ли найти длину первой такой последовательности, или она только одна, или надо найти длины всех, я реализовал последний вариант - из него можно получить любой другой. Проверку на принадлежность символа к цифрам я произвожу с помощью оператора in и множества '0'..'9' - так эта проверка выглядит наиболее компактно. Код с комментариями в приложении.
Удачи!
PHP код:
Const cset of char = ['0'..'9']; {Множество цифры в символьном представлении}
Var 
strstring;
    
jiinteger;
Begin
 readln 
(str); {Получаем строку}
 
i:= 1;
 while 
i<=length (str) do {Пока не конец строки}
  if 
str[iin c then {Если текущий символ содержится в множестве с (если это цифра)}
  
begin
   j
:= i+1; {Начиная со следующего символа}
   while (
j<=length(str)) and (str[jin c) do inc (j); {Движемся по строкепока она не кончится или очередной символ окажется буквой}
   
writeln (j-i); {Выводим количество идущих вподряд цифр}
   
i:= j+1; {Перескакиваем последовательность цифр и продолжаем искать такие последовательности в строке}
  
end  else inc (i); {Иначе просто переходим  следующему символу}
end
Romer9999 вне форума Ответить с цитированием
Старый 30.11.2008, 14:36   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

alex_fcsm, в коде ошибка. Не отрабатывается, если строка закончивается на последовательность цифр...
проверьте строку ааааа123456789
NB. самый простой способ устранить ошибку - перед циклом приклюсовать к строке любой не проверяемый символ.. например, пробел s:=s+' ';

___________________________________ __
Цитата:
Сообщение от Romer9999
Поскольку из Вашего условия не ясно, надо ли найти длину первой такой последовательности
похоже, Вы просто невнимательно прочитали условия задачи: ".... вывести на экран длину наибольшей последовательности .... "
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.11.2008, 14:39   #5
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Самый простой способ дописать одну строчку if l>max then max:=l;
Код:
uses crt;
var s:string;
    i,l,max:integer;
    M:set of char;
    flag:boolean;
begin
clrscr;
writeln('Input string');
readln(s);
M:=['0'..'9'];
flag:=false;
i:=0;l:=0;max:=0;
repeat
inc(i);
if s[i] in M then begin
                   if flag=false then begin
                                       flag:=true;
                                       l:=1;
                                      end
                      else inc(l); 
                  end
  else begin
        if flag then begin
                      if max<l then max:=l;
                      flag:=false;
                     end
       end;  
until i=length(s);
if l>max then max:=l;
writeln(max);
end.
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 30.11.2008, 16:09   #6
kiko
Пользователь
 
Аватар для kiko
 
Регистрация: 19.11.2008
Сообщений: 24
По умолчанию

спасибо
нет ничего не возможного ...
kiko вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Специальные символы HunterMan Win Api 5 05.06.2008 00:17
символы, int21 sergei64_89 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 20.05.2008 10:33
символы Rend1 Общие вопросы Delphi 1 10.04.2008 01:39
непонятные символы XATAB Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 28.12.2007 11:23
Даны символы S1......... Artem1987 Помощь студентам 1 10.11.2007 14:59