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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2010, 15:01   #1
neomax38
Пользователь
 
Регистрация: 17.09.2010
Сообщений: 72
По умолчанию Строки в паскале

Нужно сделать проверку букв: Если строчные то вывести их заглавными в результат строки.

Код:
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     : 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);
  end;
  WriteLn('Source string:');
  WriteLn('"', SStr, '"');
  WriteLn('Result string:');
  WriteLn('"', DStr, '"');
  WriteLn('Summa: ', Sum);
END.

Последний раз редактировалось neomax38; 17.12.2010 в 15:05.
neomax38 вне форума Ответить с цитированием
Старый 17.12.2010, 15:26   #2
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Так покатит?
Код:
for i:=1 to length(stroka) do
if stroka[i] in ['a'..'z'] then stroka[i]:=chr(ord(s[i]-32);
Используются коды клавиш, для русских букв будет чуть по сложнее,т.к. там они в своих номерах терпят разрыв, вообщем посмотрите таблицу ascii
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строки в паскале neomax38 Помощь студентам 0 13.12.2010 14:43
Строки в паскале! vlad1991 Помощь студентам 3 11.11.2010 22:18
Строки в Паскале Lev.F Помощь студентам 0 06.06.2010 13:34
Строки В ПАСКАЛЕ hohol90 Помощь студентам 2 03.12.2009 16:31
Строки в Паскале COLD Помощь студентам 2 28.05.2009 14:46