Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 30.11.2008, 12:17   #1
kiko
Пользователь
 
Аватар для kiko
 
Регистрация: 19.11.2008
Адрес: подМОСКОВье
Сообщений: 24
Репутация: 10

icq: 499797341
Восклицание СИМВОЛЫ - помогите решить задачу на символы

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

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

icq: 450490пять84
По умолчанию

Код:

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, 13:26   #3
Romer9999
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 42
Репутация: 31
По умолчанию Шкет

Поскольку из Вашего условия не ясно, надо ли найти длину первой такой последовательности, или она только одна, или надо найти длины всех, я реализовал последний вариант - из него можно получить любой другой. Проверку на принадлежность символа к цифрам я произвожу с помощью оператора 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, 15:36   #4
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,049
Репутация: 5228
По умолчанию

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

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

icq: 450490пять84
По умолчанию

Самый простой способ дописать одну строчку 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, 17:09   #6
kiko
Пользователь
 
Аватар для kiko
 
Регистрация: 19.11.2008
Адрес: подМОСКОВье
Сообщений: 24
Репутация: 10

icq: 499797341
По умолчанию

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

Опции темы

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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Специальные символы HunterMan Win Api 5 05.06.2008 00:17
символы, int21 sergei64_89 Assembler 3 20.05.2008 10:33
символы Rend1 Общие вопросы Delphi 1 10.04.2008 01:39
непонятные символы XATAB Assembler 3 28.12.2007 12:23
Даны символы S1......... Artem1987 Помощь студентам 1 10.11.2007 15:59


09:03.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru