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 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.04.2008 10:05
Сообщение #2


Гость






Ты забыл Begin/End. Если этого не делать, то в Case после метки и двоеточия возможен только один оператор, а у тебя их несколько...
 К началу страницы 
+ Ответить 
ANRECH
сообщение 22.04.2008 12:55
Сообщение #3





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

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


Уважаемый volvo "Ты забыл Begin/End." я не забыл, я посто не знаю, у меня бейсик на школьном уровне и все...
По отдельным строкам я еще понимаю, с книжкой smile.gif , но тут я "плаваю"...
если можно ткни пальцем куда поставить Begin/End
ошибку пишет такую.
Error 133: Cannot evaluate this expression

Извини если туплю. smile.gif


Сообщение отредактировано: ANRECH - 22.04.2008 12:57
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 22.04.2008 13:13
Сообщение #4


Гуру
*****

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

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


        case s[i] of
'{': begin
inc(N);{номер коментария}
...
end;


Выделяй блоки begin .. end отступами, тяжело читать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
ANRECH
сообщение 22.04.2008 15:52
Сообщение #5





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

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


Большое всем спасибо, за помощь.
Исправил(в своем сообщении тоже), но сейчас ошибка на insert - String expression expected.
Помогите кто может. Я сам наверное не разберусь.

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


Знаток
****

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

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


Nk:=0; вот твоя ошибка тут ожидается :LongInt;
Insert(Nk,S,Na+1); а тут ожидают в nk тип string

я так новенький магу и неправильно подсказать думать вам


--------------------
Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.04.2008 17:49
Сообщение #7


Гость






                str(nk, k); { <--- Этого не хватает }
Insert(k,S,Na+1);

(использовал K только потому, что на данный момент она все равно инициализируется ниже по тексту, но вообще можешь сделать доп. переменную, или написать функцию типа IntToStr, чтоб лишние переменные не плодить...)
 К началу страницы 
+ Ответить 
ANRECH
сообщение 22.04.2008 17:57
Сообщение #8





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

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


Всем спасибо. Сейчас у меня инет отрубят... Завтра отпишусь СПАСИБО smile.gif

Все работает, в некоторых случаях немножко не корректно, но меня полностью устраивает. smile.gif Огромное всем спасибо! Здоровья вам ребята и удачи.

Сообщение отредактировано: ANRECH - 23.04.2008 8:14
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
ANRECH
сообщение 15.05.2008 16:56
Сообщение #9





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

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


Вопрос отпал. а как удалить пустое сообщение я не знаю. smile.gif
удалите пожалуйста.

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

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

 



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