![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Jaxx |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 145 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
Вот я опять и появился. Теперь у меня задание еще более интересное. Смысл следующий: есть текстовый файл с исходником программы на Паскале, нужно-
1) первые буквы служебных слов сделать заглавными 2) текст комментариев заменить на их номер по порядку 3) переписать текст в новый файл с удалением лишних пробелов. Я понимаю, что тут может быть только один путь решения: создать массив (или множество) служебных слов, затем считывать текст файла посимвольно (т.к. служебные слова обязательно должны быть отделены от других пробелами или знаками препинания). Я прав? С комментариями попроще: просто найти символ '{' и проверить следующий после него, и если это не '$' то удалить все символы начиная с этого до символа '}'. Удаление пробелов еще проще. Но с первой частью задания у меня небольшие трудности. Решайте! :yes: В следующий раз давайте более подходящий заголовок -------------------- - Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата(Jaxx @ 6.04.05 11:26) Но с первой частью задания у меня небольшие трудности. Решайте! :yes: Посмотри вот эту мою программку... Программа форматирования Паскаль-программ Может, она натолкнет тебя на идею? ;) Кстати, я выкладывал на форум и программу удаления комментариев. Попробуй поискать и чуть-чуть подправить ее ... Кстати, не все так просто: Цитата С комментариями попроще: просто найти символ '{' и проверить следующий после него, и если это не '$' то удалить все символы начиная с этого до символа '}'. Есть еще комментарии вида "(* ... *)" ![]() |
Jaxx |
![]()
Сообщение
#3
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 145 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
Насчет (* *) я знаю. Тут смысл будет такой же, только символы другие. А тему я правильно назвал, ибо редактироваться будет текстовый файл, а не исходник. А что если первое задание поменять на немного другое: вывести на экран использованные в тексте служебные слова и для каждого из них вывести количество вхождений в текст.
-------------------- - Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата(Jaxx @ 6.04.05 11:44) Насчет (* *) я знаю. Тут смысл будет такой же, только символы другие. А ты в курсе, что есть Nested Comments, что усложняет работу? Ты бы попробовал, а потом посмотрим, просто это, или не очень...Цитата(Jaxx @ 6.04.05 11:44) А тему я правильно назвал, ибо редактироваться будет текстовый файл, а не исходник. Но это не просто текстовый файл, а файл содержащий исходник паскаль-программы. Или тебе не важно, что твоя программа НЕ будет компилироваться после обработки? А если важно, то тема должна называться так, как она называется сейчас...Цитата(Jaxx @ 6.04.05 11:44) А что если первое задание поменять на немного другое: вывести на экран использованные в тексте служебные слова и для каждого из них вывести количество вхождений в текст. Это катастрофически упрощает задачу, т.к. тебе не надо заменять слова в тексте, а достаточно просто запомнить их...А вот прежде чем запостить что-нибудь, надо решить, что ИМЕННО тебе нужно. Потому как если ты и далее будешь менять условия, то зачем надо начинать думать? |
Jaxx |
![]()
Сообщение
#5
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 145 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
Ладно, я все понял. Условие задачи остается начальное. У меня основная сложность заключается в поиске служебных слов. Я составил массив этих слов и массив разделителей (пробел, точка, точка с запятой и т.д.), но не знаю как в массив разделителей добавить знак конца строки и табуляции. Во-вторых, у меня вот какой вопрос (сразу говорю - тупой), файловую переменную какого типа нужно брать- Text? А вашу программку еще не смотрел - я на работе, а тут Паскаля нетути.
-------------------- - Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
|
Altair |
![]()
Сообщение
#6
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Jaxx, привет! Почти год тебя не было! С возвращением! :thanks:
Цитата файловую переменную какого типа нужно брать- Text? Да в принципе любую, но с TEXT будет проще работать ![]() Так что ее. Цитата но не знаю как в массив разделителей добавить знак конца строки и табуляции. Ну во-первых проще взять множетсво (и работать с ним проще будет в данном случае, и памяти меньше съест ![]() Во-вторых - зачем тебе знак конца строки? такого нету вообще ![]() Что до задачи, то алгоритм можно такой выбрать - разбить текс на слова (алгоритм ф FAQ"e моджернизировать что бьы только слова зарезервированные - из списка брал). И делаешь по заданию. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Jaxx |
![]()
Сообщение
#7
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 145 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
Привет и тебе, OlegZ !!! :thanks:
У меня ни на что нет времени. Значит, переменная будет Text. Понял. Насчет конца строки тоже понял. А что с табуляцией? Как ее в массив (множество) записать? -------------------- - Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
|
Jaxx |
![]()
Сообщение
#8
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 145 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
Я тут вот чего-то написал, правда нифига не работает. Гляньте, да поправьте, а то вроде с виду все должно работать (по крайней мере. идея симпатичная).
-------------------- - Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
|
Jaxx |
![]() ![]()
Сообщение
#9
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 145 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
Ну так что, никто мне не поможет?! Скажите, в где у меня ошибка! Только не говорите, что в генах...Главная проблема - в поиске и определении служебных слов. Остальное - сам справлюсь (по крайней мере постараюсь).
Сообщение отредактировано: Jaxx - 12.04.2005 14:11 -------------------- - Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
|
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Jaxx, ты ходил по первой ссылке, которую я тебе дал? Там что, по-твоему служебные слова для красоты в массив собраны? Наверное не просто так, а все-таки там тоже ищутся вхождения служебных слов. Читается файл строка за строкой, каждая строка разбивается на токены, и проверяешь, является ли очередной токен служебным словом. Как - смотри в том исходнике...
А в твоей программе есть проблема:
|
Altair |
![]()
Сообщение
#11
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
А зачем разбивать на слова?
вот еще способ без разбиения, прога во всех зарез. словах первую букуву делает большой. var -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Цитата(Oleg_Z @ 12.04.05 14:54) прога во всех зарез. словах первую букуву делает большой. :no: "Во всех зарезервированных словах, записанных только маленькими буквами". А если "FUNCTION a: integer", то что будет с FUNCTION ? P.S. Вроде типизированные константы еще не отменили ... ![]() |
Jaxx |
![]()
Сообщение
#13
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 145 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
Между прочим, OlegZ, твоя программа работает неправильно. Проверь сам. Ты пропустил проверку зарезервированных слов. То есть, после твоей проги из слова begin получается слово begIn и т.д. Нужно проверить, стоит ли слово отдельно, какие символы и знаки препинания стоят перед ним и после него.
Точнее, после знаков препинания все работает замечательно, а вот если зарезервированное слово входит в состав другого слова - ![]() Сообщение отредактировано: Jaxx - 12.04.2005 16:29 -------------------- - Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
|
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Цитата(Jaxx @ 12.04.05 16:27) после знаков препинания все работает замечательно, а вот если зарезервированное слово входит в состав другого слова - ![]() Oleg_Z, вот и ответ на твой вопрос: Цитата(Olez_Z @ 12.04.05 14:54) А зачем разбивать на слова? |
Jaxx |
![]()
Сообщение
#15
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 145 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
Вот в этом то и моя проблема. Как проверить, является ли слово действительно зарезервированным. Каким образом проверить символ, идущий перед этим словом и после него?
Сообщение отредактировано: Jaxx - 12.04.2005 17:06 -------------------- - Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
|
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
Ты меня понимать не хочешь? Я же тебе привел ссылку на рабочий код, который корректно определяет зарезервированные слова, что еще нужно?
Что-то по-моему, тема становится переливанием из пустого в порожнее... Я решение предлагаю - следует вопрос, "а как же это реализовать?"... Я еще раз повторяю - опять "В этом моя проблема". |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Кстати, если функцию progwork, написанную Oleg_Z чуть-чуть подредактировать, то она будет работать гораздо более корректно:
function is_letter(ch: char): boolean; |
Altair |
![]()
Сообщение
#18
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Ну раскритиковали
![]() Я шаблон для рассуждений дал ![]() такие элементы как BegIn легко устраняются путем изменения кода. (проверять на вхождениеодного словав другое). Так что разбивать на слова необязательно ![]() Цитата Во всех зарезервированных словах, записанных только маленькими буквами". А если "FUNCTION a: integer", то что будет с FUNCTION ? Ну для этого добавить в программуфункцию: Код Function UpStr(S:String):String; {перевод строки в верхний регистр} Var I:Byte; Begin For I:=1 To ORD(S[0]) Do Begin Case S[I] Of 'a'..'z':S[I]:=Chr(Ord(S[I])-$20); 'а'..'п':S[I]:=Chr(Ord(S[I])-$20); 'р'..'я':S[I]:=Chr(Ord(S[I])-$50) End End; UpStr:=S End; И вот эти строчки: Код for i:=1 to 51 do if pos(zar[i],s)<>0 then begin n:=pos(zar[i],s); s[n]:= upcase(s[n]); Заменитиь на: Код for i:=1 to 51 do if pos(UpStr(zar[i]),ipstr(s))<>0 then begin n:=pos(Upstr(zar[i]),upstr(s)); s[n]:= upcase(s[n]); ![]() Хотя возникает вопрос -если уже в большом регистре слово, зачем первую букву поднимать? ![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Jaxx |
![]()
Сообщение
#19
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 145 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
А в моём варианте проги, кроме заполнения массива есть ещё какие-нибудь ошибки? Если да, то покажите... :p2:
-------------------- - Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
|
volvo |
![]()
Сообщение
#20
|
Гость ![]() |
![]() Если работает, то нет ошибок. Или ты думаешь мы как-то по другому будем определять ее корректность? |
![]() ![]() |
![]() |
Текстовая версия | 21.07.2025 11:09 |