IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Очень нужна помощь, Первые буквы служебных слов сделать заглавными. - Убрать "лишние
ANRECH
сообщение 22.04.2008 9:35
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Я заочник, совершенно не знаю Pascal, а нужно решить такую задачу. Первые буквы служебных слов сделать заглавными. - Убрать "лишние" пробелы - Заменить комментарии на {1} {2}
Я нашел исходник который делает первые два пункта, попытался сам дописать третий smile.gif . В строчке где подчеркивание выдает ошибку. Без вставленного мной куска (он наиболее смещен+ переменные)все работало корректно. Если кто то может помочь, помогите, времени у меня совсем не осталось.
Заранее всем спасибо.

Код
program FileJob;
uses
    Crt;
const
     {Служебные слова.11 групп. 65 слов}
     Res2:array[1..6] of String[2] = ('TO','OF','IF','OR','IN','DO');
     Res3:array[1..14] of String[3] = ('SET','MOD','SHL','AND','FAR','SHR',
                                       'NIL','ASM','FOR','NOT','VAR','DIV',
                                       'XOR','END');
     Res4:array[1..11] of String[4] = ('NAME','FILE','NEAR','THEN','TYPE',
                                       'CASE','GOTO','UNIT','USES','WITH',
                                       'ELSE');
     Res5:array[1..7] of String[5] = ('ARRAY','BEGIN','CONST','UNTIL',
                                      'INDEX','WHILE','LABEL');
     Res6:array[1..9] of String[6] = ('STRING','OBJECT','PACKED','DOWNTO',
                                      'INLINE','PUBLIC','RECORD','REPEAT',
                                      'EXPORT');
     Res7:array[1..6] of String[7] = ('LIBRARY','EXPORTS','FORWARD',
                                      'PRIVATE','VIRTUAL','PROGRAM');
     Res8:array[1..4] of String[8] = ('ABSOLUTE','EXTERNAL','FUNCTION',
                                      'RESIDENT');
     Res9:array[1..5] of String[9] = ('ASSEMBLER','PROCEDURE','INHERITED',
                                      'INTERFACE','INTERRUPT');
     Res10:String[10] = 'DESTRUCTOR';
     Res11:String[11] = 'CONSTRUCTOR';
     Res14:String[14] = 'IMPLEMENTATION';

Var
   F,O:Text;                      {Рабочий файл}
   K,S,St:String;
   A:array[1..30,1..2] of Byte; {Смещение и длина слова}
   X,M,i,j:Byte;
   N:LongInt;
   Nc,Na,Dl,Nk:LongInt;
   Fnd:Boolean;
   Begin
     ClrScr;
     {Связываем с переменной}
     Write('Введите имя файла или "Ввод" для текущего (*.pas): ');
     ReadLn(S);
     If Length(S)=0 then
     begin
          S:=ParamStr(0);                {Ввод}
          S:=Copy(S,1,Pos('.',S))+'PAS';
     end;
     If Pos('.',S)=0 then Insert('.pas',S,Length(S)+1); {Если нет расширения -вставить}
     If Length(S)>12 then Halt;                         {Многовато для имени}
     St:=Copy(S,1,Pos('.',S))+'NEW';                    {Изменение расширения сохраняемого файла}
     Assign(F,S);
     Reset(F);
     Assign(O,St);
     ReWrite(O);
     N:=0;
     Nk:=0;    
     {Основной цикл}
     While not Eof(F) do
     begin
          ReadLn(F,S);
          {Если ненулевая строка}
          St:=S;
          
            For i:=1 to Length(S) do
            begin
            case s[i] of
                
                '{':begin
                inc(Nk);{номер коментария}
                Na:=Pos('{',S); {Начальная позиция}
                Nc:=Pos('}',S); {Конечная позиция}
                Dl:=Nc-Na; {Длинна коментария в символах}
                Delete(S,Na-1,Dl-1); {удоляем то, что в скобках}
                Insert(Nk,S,Na+1); {Ставим номер коментария}
                end;
            end;
            St:=S;
            end;
          
          
          If (Length(S)<>0) and (Length(S)<>1) then        {Если длинна строки не 0 и не 1}
          begin
          {Удаляем "лишние" пробелы}
          While Pos('  ',S)<>0 do Delete(S,Pos('  ',S),1);
          St:=S;  {Предохраняемся}
          For i:=1 to Length(S) do S[i]:=UpCase(S[i]);
          {64..91 - английский алфавит}
          {Убираем все остальные символы}
          For i:=1 to Length(S) do
          If (Ord(S[i])<=64) or (Ord(S[i])>=91) then S[i]:=#32; {S[i]присваиваем #32 (SP) удаляем символы}
          {}
          j:=0;
          Repeat
          i:=j+1;
          K:='';
          {Пропускаем пробелы}
          While (S[i]=' ') and (i<Length(S)) do Inc(i);
          If i<Length(S) then
          begin
          j:=i;
          {Выделяем слово}
          While (S[j]<>' ') and (j<Length(S)) do Inc(j);
          If (j=Length(S)) and (S[Ord(S[0])]<>' ') then Inc(j);
          K:=Copy(S,i,j-i);
          X:=1;
          {От I до J}
          {Служебные слова ищем по размеру  и делаем первые буквы заглавными}
          If K<>'' then
          Case (j-i) of
          2:For X:=1 to 6 do If (K=Res2[X]) then St[i]:=UpCase(St[i]);
          3:For X:=1 to 14 do If (K=Res3[X]) then St[i]:=UpCase(St[i]);
          4:For X:=1 to 11 do If (K=Res4[X]) then St[i]:=UpCase(St[i]);
          5:For X:=1 to 7 do If (K=Res5[X]) then St[i]:=UpCase(St[i]);
          6:For X:=1 to 9 do If (K=Res6[X]) then St[i]:=UpCase(St[i]);
          7:For X:=1 to 6 do If (K=Res7[X]) then St[i]:=UpCase(St[i]);
          8:For X:=1 to 4 do If (K=Res8[X]) then St[i]:=UpCase(St[i]);
          9:For X:=1 to 5 do If (K=Res9[X]) then St[i]:=UpCase(St[i]);
          10:If Res10=K then St[i]:=UpCase(St[i]);
          11:If Res11=K then St[i]:=UpCase(St[i]);
          14:If Res14=K then St[i]:=UpCase(St[i]);
          end;
          {Счетчик}
          Inc(N);
          GotoXY(1,2); Write(N);
          end;
          {Пока строка не кончится}
          Until (i>=Length(S));
          end;
          WriteLn(O,St);
     end;
     Close(F);
     Close(O);
     WriteLn(#13#10'Подходящих слов обработано: ',N);
     WriteLn('Нажми <ENTER> для выхода');
     ReadLn;{ожидание действий пользователя <ENTER>}
    
End.


Сообщение отредактировано: ANRECH - 22.04.2008 15:54
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 2:23
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"