Пятница, 24.01.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: Seqular, Pavel  

Удалить коментарии
snaper1993Дата: Понедельник, 24.11.2008, 23:16 | Сообщение # 1
Бывалый
Группа: Пользователи
Сообщений: 121
Репутация: 2
Замечания: 0%
Статус: 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
Репутация: 16
Замечания: 0%
Статус: Offline
Используй функции POS и DELETE, они почти всё сами сделают.

Скажем дружно- нафиг нужно!
 
snaper1993Дата: Вторник, 25.11.2008, 01:00 | Сообщение # 3
Бывалый
Группа: Пользователи
Сообщений: 121
Репутация: 2
Замечания: 0%
Статус: Offline
а где их нужно использовать!
Напишы приблезительно!


Я - желанный гость Сайта взаимопомощи программистам Pascal А ты?
 
AlexanderДата: Вторник, 25.11.2008, 03:25 | Сообщение # 4
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
читаешь строку из файла, ищешь в ней одну из скобок, а затем вторую. Если вторую нашёл, то удаляешь их и всё, что между ними. Если нет, то удаляешь всё до конца строки и ищешь закрывающуюся скобку уже в следующей строке и т.д.

Скажем дружно- нафиг нужно!
 
snaper1993Дата: Вторник, 25.11.2008, 03:56 | Сообщение # 5
Бывалый
Группа: Пользователи
Сообщений: 121
Репутация: 2
Замечания: 0%
Статус: Offline
Блин ниче не понимаю!
можеш приблезительный код написать!


Я - желанный гость Сайта взаимопомощи программистам Pascal А ты?
 
SeqularДата: Вторник, 25.11.2008, 06:54 | Сообщение # 6
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Не все так просто. Надо еще проверить, не стоит ли комментарий ВНУТРИ блока '', являющегося строковой константой. Если стоит - нужно его проигнорировать.

Поддерживаю также проект сообщество молодых сисадминов
 
snaper1993Дата: Вторник, 25.11.2008, 06:59 | Сообщение # 7
Бывалый
Группа: Пользователи
Сообщений: 121
Репутация: 2
Замечания: 0%
Статус: Offline
Seqular, Ну ти моешь помож с кодом!
А то мне на завтра уже нада ета задачка и шыфрование!
Пожалуста! Я очень прошу!


Я - желанный гость Сайта взаимопомощи программистам Pascal А ты?
 
AlexanderДата: Вторник, 25.11.2008, 07:56 | Сообщение # 8
Всевышний
Группа: Модераторы
Сообщений: 475
Репутация: 16
Замечания: 0%
Статус: Offline
Quote (Ыулгдфк)
Не все так просто. Надо еще проверить, не стоит ли комментарий ВНУТРИ блока ''

Ваша правда. Но сначала предлагаю без этого сделать, а проверить внутри ли блока очень просто- если до комментария " встречается нечётное число раз, то внутри.


Скажем дружно- нафиг нужно!

Сообщение отредактировал Alexander - Вторник, 25.11.2008, 07:57
 
snaper1993Дата: Среда, 26.11.2008, 07:42 | Сообщение # 9
Бывалый
Группа: Пользователи
Сообщений: 121
Репутация: 2
Замечания: 0%
Статус: Offline
Ну так ктото мне поможет!
Пожалуста! suspect


Я - желанный гость Сайта взаимопомощи программистам Pascal А ты?
 
SeqularДата: Четверг, 27.11.2008, 20:49 | Сообщение # 10
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: 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
Репутация: 35
Статус: Offline
Фрагменты записи в новый файл обработанных строк допиши сам

Поддерживаю также проект сообщество молодых сисадминов
 
snaper1993Дата: Четверг, 27.11.2008, 22:32 | Сообщение # 12
Бывалый
Группа: Пользователи
Сообщений: 121
Репутация: 2
Замечания: 0%
Статус: Offline
Quote

. Ищем '{'.
3.1. Если есть - Ищем до конца строки в поисках '}'
3.1.1. Если есть - удаляем все, что между ними.
3.1.2. Если нет - удаляем до конца строки, читаем новую и повторяем с 3.1.
3.2. Если нет - идем на пункт 2.

Seqular, а как ето реализовать в паскале, ато чото я не знаю! sad


Я - желанный гость Сайта взаимопомощи программистам Pascal А ты?
 
SeqularДата: Четверг, 27.11.2008, 22:35 | Сообщение # 13
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
snaper1993, Почитай справку по функции Pos(). Она возвращает позицию вхождения подстроки в строку.

Поддерживаю также проект сообщество молодых сисадминов
 
snaper1993Дата: Пятница, 28.11.2008, 02:08 | Сообщение # 14
Бывалый
Группа: Пользователи
Сообщений: 121
Репутация: 2
Замечания: 0%
Статус: Offline
Ну пожалуста помоги с кодом! Умоляю!!! cry

Добавлено (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
Репутация: 16
Замечания: 0%
Статус: 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 зашкаливает- это плохо, ещё нужно обработать второй вариант скобок).


Скажем дружно- нафиг нужно!
 
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;