Очень нужна помощь, Первые буквы служебных слов сделать заглавными. - Убрать "лишние |
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}
Я нашел исходник который делает первые два пункта, попытался сам дописать третий . В строчке где подчеркивание выдает ошибку. Без вставленного мной куска (он наиболее смещен+ переменные)все работало корректно. Если кто то может помочь, помогите, времени у меня совсем не осталось. Заранее всем спасибо. Код 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 |
volvo |
22.04.2008 10:05
Сообщение
#2
|
Гость |
Ты забыл Begin/End. Если этого не делать, то в Case после метки и двоеточия возможен только один оператор, а у тебя их несколько...
|
ANRECH |
22.04.2008 12:55
Сообщение
#3
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: 0 |
Уважаемый volvo "Ты забыл Begin/End." я не забыл, я посто не знаю, у меня бейсик на школьном уровне и все...
По отдельным строкам я еще понимаю, с книжкой , но тут я "плаваю"... если можно ткни пальцем куда поставить Begin/End ошибку пишет такую. Error 133: Cannot evaluate this expression Извини если туплю. Сообщение отредактировано: ANRECH - 22.04.2008 12:57 |
Ozzя |
22.04.2008 13:13
Сообщение
#4
|
Гуру Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: 16 |
case s[i] of Выделяй блоки begin .. end отступами, тяжело читать. |
ANRECH |
22.04.2008 15:52
Сообщение
#5
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: 0 |
Большое всем спасибо, за помощь.
Исправил(в своем сообщении тоже), но сейчас ошибка на insert - String expression expected. Помогите кто может. Я сам наверное не разберусь. Сообщение отредактировано: ANRECH - 22.04.2008 15:56 |
maksimla |
22.04.2008 17:30
Сообщение
#6
|
Знаток Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: 1 |
Nk:=0; вот твоя ошибка тут ожидается :LongInt;
Insert(Nk,S,Na+1); а тут ожидают в nk тип string я так новенький магу и неправильно подсказать думать вам -------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
volvo |
22.04.2008 17:49
Сообщение
#7
|
Гость |
str(nk, k); { <--- Этого не хватает }(использовал K только потому, что на данный момент она все равно инициализируется ниже по тексту, но вообще можешь сделать доп. переменную, или написать функцию типа IntToStr, чтоб лишние переменные не плодить...) |
ANRECH |
22.04.2008 17:57
Сообщение
#8
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: 0 |
Всем спасибо. Сейчас у меня инет отрубят... Завтра отпишусь СПАСИБО
Все работает, в некоторых случаях немножко не корректно, но меня полностью устраивает. Огромное всем спасибо! Здоровья вам ребята и удачи. Сообщение отредактировано: ANRECH - 23.04.2008 8:14 |
ANRECH |
15.05.2008 16:56
Сообщение
#9
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Репутация: 0 |
Вопрос отпал. а как удалить пустое сообщение я не знаю.
удалите пожалуйста. Сообщение отредактировано: ANRECH - 15.05.2008 17:06 |
Текстовая версия | 24.05.2024 4:08 |