Удалить коментарии
|
|
snaper1993 | Дата: Понедельник, 24.11.2008, 23:16 | Сообщение # 1 |
Бывалый
Группа: Пользователи
Сообщений: 121
Статус: Offline
| Дан текст некоторой Паскаль- Программы. Ваша задача состоит в том, чтобы удалить из нее все комментарии и пустые строки. Как известно, комментарий в Паскаль- программе - это текст, который записан в фигурных дужках - {}, или в круглых дужках со звездочкой - (* *). Длина строки программы не может превышать 128 символов. Комментарий может занимать как часть строки, так и несколько строк программы. Вложенные комментарии в тексте отсутствуют. Входные данные: В файле Z2.dat содержится текст программы по комментариями. Исходные данные: В файл Z2.sol записать текст программы без комментариев. Пустые строки в файл не записывать. Пример: Z2.dat: var i:integer;{index } a:array[1..10] of real; (*massiv*) begin {rozvjazok zadachi} for i:=1 to 10 do a[i]:=i; {vyvid massiva} for i:=1 to 10 do writeln(a[i]); (*vse*) end. Z2.sol: var i:integer; a:array[1..10] of real; begin for i:=1 to 10 do a[i]:=i; for i:=1 to 10 do writeln(a[i]); end.
Я - желанный гость Сайта взаимопомощи программистам Pascal А ты?
|
|
| |
Alexander | Дата: Вторник, 25.11.2008, 00:41 | Сообщение # 2 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Используй функции POS и DELETE, они почти всё сами сделают.
Скажем дружно- нафиг нужно!
|
|
| |
snaper1993 | Дата: Вторник, 25.11.2008, 01:00 | Сообщение # 3 |
Бывалый
Группа: Пользователи
Сообщений: 121
Статус: Offline
| а где их нужно использовать! Напишы приблезительно!
Я - желанный гость Сайта взаимопомощи программистам Pascal А ты?
|
|
| |
Alexander | Дата: Вторник, 25.11.2008, 03:25 | Сообщение # 4 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| читаешь строку из файла, ищешь в ней одну из скобок, а затем вторую. Если вторую нашёл, то удаляешь их и всё, что между ними. Если нет, то удаляешь всё до конца строки и ищешь закрывающуюся скобку уже в следующей строке и т.д.
Скажем дружно- нафиг нужно!
|
|
| |
snaper1993 | Дата: Вторник, 25.11.2008, 03:56 | Сообщение # 5 |
Бывалый
Группа: Пользователи
Сообщений: 121
Статус: Offline
| Блин ниче не понимаю! можеш приблезительный код написать!
Я - желанный гость Сайта взаимопомощи программистам Pascal А ты?
|
|
| |
Seqular | Дата: Вторник, 25.11.2008, 06:54 | Сообщение # 6 |
Хранитель
Группа: Администраторы
Сообщений: 859
Статус: Offline
| Не все так просто. Надо еще проверить, не стоит ли комментарий ВНУТРИ блока '', являющегося строковой константой. Если стоит - нужно его проигнорировать.
Поддерживаю также проект сообщество молодых сисадминов
|
|
| |
snaper1993 | Дата: Вторник, 25.11.2008, 06:59 | Сообщение # 7 |
Бывалый
Группа: Пользователи
Сообщений: 121
Статус: Offline
| Seqular, Ну ти моешь помож с кодом! А то мне на завтра уже нада ета задачка и шыфрование! Пожалуста! Я очень прошу!
Я - желанный гость Сайта взаимопомощи программистам Pascal А ты?
|
|
| |
Alexander | Дата: Вторник, 25.11.2008, 07:56 | Сообщение # 8 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Quote (Ыулгдфк) Не все так просто. Надо еще проверить, не стоит ли комментарий ВНУТРИ блока '' Ваша правда. Но сначала предлагаю без этого сделать, а проверить внутри ли блока очень просто- если до комментария " встречается нечётное число раз, то внутри.
Скажем дружно- нафиг нужно!
Сообщение отредактировал Alexander - Вторник, 25.11.2008, 07:57 |
|
| |
snaper1993 | Дата: Среда, 26.11.2008, 07:42 | Сообщение # 9 |
Бывалый
Группа: Пользователи
Сообщений: 121
Статус: Offline
| Ну так ктото мне поможет! Пожалуста!
Я - желанный гость Сайта взаимопомощи программистам Pascal А ты?
|
|
| |
Seqular | Дата: Четверг, 27.11.2008, 20:49 | Сообщение # 10 |
Хранитель
Группа: Администраторы
Сообщений: 859
Статус: Offline
| Quote (Alexander) Но сначала предлагаю без этого сделать Поддерживаю. Проверить несложно. Итак, вот алгоритм: 1. Открыли файл. 2. Считали строку. 3. Ищем '{'. 3.1. Если есть - Ищем до конца строки в поисках '}' 3.1.1. Если есть - удаляем все, что между ними. 3.1.2. Если нет - удаляем до конца строки, читаем новую и повторяем с 3.1. 3.2. Если нет - идем на пункт 2. 4. Если конец файла - закрыть его. Если что не так - поправь. Ну нужно еще доработать алгоритм (3, 3.1) на поиск '(*' и '*)'. Кто знаком с Pos - без труда это сделают.
Поддерживаю также проект сообщество молодых сисадминов
|
|
| |
Seqular | Дата: Четверг, 27.11.2008, 20:50 | Сообщение # 11 |
Хранитель
Группа: Администраторы
Сообщений: 859
Статус: Offline
| Фрагменты записи в новый файл обработанных строк допиши сам
Поддерживаю также проект сообщество молодых сисадминов
|
|
| |
snaper1993 | Дата: Четверг, 27.11.2008, 22:32 | Сообщение # 12 |
Бывалый
Группа: Пользователи
Сообщений: 121
Статус: Offline
| Quote . Ищем '{'. 3.1. Если есть - Ищем до конца строки в поисках '}' 3.1.1. Если есть - удаляем все, что между ними. 3.1.2. Если нет - удаляем до конца строки, читаем новую и повторяем с 3.1. 3.2. Если нет - идем на пункт 2. Seqular, а как ето реализовать в паскале, ато чото я не знаю!
Я - желанный гость Сайта взаимопомощи программистам Pascal А ты?
|
|
| |
Seqular | Дата: Четверг, 27.11.2008, 22:35 | Сообщение # 13 |
Хранитель
Группа: Администраторы
Сообщений: 859
Статус: Offline
| snaper1993, Почитай справку по функции Pos(). Она возвращает позицию вхождения подстроки в строку.
Поддерживаю также проект сообщество молодых сисадминов
|
|
| |
snaper1993 | Дата: Пятница, 28.11.2008, 02:08 | Сообщение # 14 |
Бывалый
Группа: Пользователи
Сообщений: 121
Статус: Offline
| Ну пожалуста помоги с кодом! Умоляю!!! Добавлено (27.11.2008, 19:08) --------------------------------------------- ну вот например я понял как удалять букву "а" с строки: var st:string; begin Writeln('VVedite Stroku:'); readln(st); While Pos('a', st) <> 0 do delete (st, Pos('a', st),1); writeln (st); readln; end. Ну а с тем што нам нужно я не знаю как зделать!
Я - желанный гость Сайта взаимопомощи программистам Pascal А ты?
|
|
| |
Alexander | Дата: Пятница, 28.11.2008, 04:52 | Сообщение # 15 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Ну и тут тоже самое. Тут как-то так будет: Code while not eof(f) do begin ReadLn(f,s); While Pos('{', s) <> 0 do if Pos('}',s)<>0 then delete(s,Pos('{',s),Pos('}',s)-Pos('}',s)+1) else begin delete(s,Pos('{',s),Length(s)-Pos('{',s)+1); ReadLn(f,s); while Pos('}', s) = 0 do ReadLn(f,s); delete(s,1,Pos('}', s)); end; end; Код я конечно не проверял, но идея и способ реализации ясны(число вызовов Pos зашкаливает- это плохо, ещё нужно обработать второй вариант скобок).
Скажем дружно- нафиг нужно!
|
|
| |