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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2010, 07:02   #1
neomax38
Пользователь
 
Регистрация: 17.09.2010
Сообщений: 72
Лампочка Проверьте правильность написания строк

Задание: Сформировать новую строку из слов, состоящих только из латинских букв, и длиной не более 7 литер. Все строчные буквы в новой строке заменить на заглавные. Найти первое цифровое слово и найти сумму его цифр.

проблемы:
1)Если ввести слово с цифрами то это слово в результате не будет.
2)Если вводить большое кол-во слов, то последнее слово выведется не заменившись на заглавные буквы.

Код:
PROGRAM Lab;
CONST
  MaxLen        = 7;
TYPE
  SetOfChar     = Set of Char;
CONST
  Delim         : SetOfChar = [' '];
  Digit         : SetOfChar = ['0'..'9'];
  Latin         : SetOfChar = ['a'..'z', 'A'..'Z'];
VAR
  i,k   : Integer;
  SStr  : String;   {строка источник}
  DStr  : String;   {строка-результат}
  WStr  : String;   {строка с текущим выделенным словом}
  Sum   : Integer;  {сумма цифр первого цифрового слова}
  IsDigitWord,
  IsSummaComplete,  {признак завершения подсчёта суммы цифр}
  IsLatinWord : BOOLEAN;
BEGIN
  write ('vvedite stroku ');
   readln(SStr);
   {инициализация переменных}
  DStr:='';
  Sum:=0;

  IsSummaComplete:=FALSE;
  IsDigitWord:=TRUE;
  IsLatinWord:=TRUE;
  WStr:='';
  i:=1;
  while Length(SStr)+1>=i do begin
    {если встретился разделитель или закончилась обрабатываемая строка:
      - для латинских слов формируем результирующую строку
      - для цифровых слов устанавливаем признак завершения подсчёта суммы}
    if (SStr[i] in Delim) OR (i=Length(SStr)+1)
    then begin
      if IsLatinWord AND (Length(WStr)<=MaxLen) AND (Length(WStr)>0)
      then begin
        if Length(DStr)<>0
          then DStr:=DStr+' ';
        DStr:=DStr+WStr;
      end;

      IsSummaComplete:=IsSummaComplete OR IsDigitWord;

      IsDigitWord:=TRUE;
      IsLatinWord:=TRUE;
      WStr:='';
      {пропускаем все ограничители}
      while (Length(SStr)>=i) AND (SStr[i] in Delim) do Inc(i);
      if i>Length(SStr) then Break;
    end;

    {для латинских слов продолжаем выделять само слово}
    if SStr[i] in Latin
      then WStr:=WStr+SStr[i]
      else IsLatinWord:=FALSE;

    {для первого цифрового слова подсчитываем сумму цифр}
    if (SStr[i] in Digit) AND NOT IsSummaComplete
    then begin
      Sum:=Sum+(Byte(SStr[i]) - Byte('0'));
    end
    else begin
      IsDigitWord:=FALSE;
      if NOT IsSummaComplete
        then Sum:=0;
    end;
    Inc(i);

	{Все строчные буквы становятся заглаными}
    For k:=1 to Length(SStr) do
  Begin
    DStr[k]:=UpCase(DStr[k]);
    
  end;
  end;
  WriteLn('Source string:');
  WriteLn('"', SStr, '"');
  WriteLn('Result string:');
  WriteLn('"', DStr, '"');
  WriteLn('Summa: ', Sum);
  
END.
neomax38 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверьте правильность. helpme1 Общие вопросы C/C++ 3 23.11.2010 17:23
Правильность написания команд в VBA Noorty Microsoft Office Access 15 08.06.2010 17:31
Проверьте правильность написания кода в delphi neomaximus Помощь студентам 2 09.04.2009 17:29
Проверьте на правильность!! Dawystrik Общие вопросы Delphi 2 21.03.2009 21:04
Проверьте правильность Аленушка Помощь студентам 6 07.01.2009 17:07