![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
klem4 |
![]()
Сообщение
#1
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Выслушаю вашу критику и соображения
Вот так сказать что на данный момент получается : Исходный код program Comments; {$R-} uses crt; const op : array [1..3] of string[2] = ('//','{','(*'); cl : array [1..3] of string[2] = ('','}','*)'); type TType = string; PArray = record P : ^TArray; size : word; end; TArray = array [1..1] of TType; TFile = text; function OpenFile(var f : TFile; path : TType) : boolean; begin assign(f, path); {$I-} reset(f); {$I+} OpenFile := (IOResult = 0); end; procedure SaveChanges(var f : text; arr : PArray); var i : word; begin rewrite(f); for i := 1 to arr.size do writeln(f,arr.p^[i]); close(f); end; procedure InitArray(var arr : PArray); begin arr.size := 0; GetMem(arr.p, arr.size * sizeof(TType)); end; procedure FillArray(var arr : PArray; var f : TFile); var temp : TType; newArr : ^Tarray; i : word; begin i := 0; while not(eof(f)) do begin readln(f, temp); inc(i); GetMem(newArr, arr.size * sizeof(TType) + sizeof(TType)); move(arr.p^[1], newArr^[1], arr.size * sizeof(TType)); FreeMem(arr.p, arr.size * sizeof(TType)); arr.p := newArr; inc(arr.size); arr.p^[i] := temp; end; end; procedure ClearArray(var arr : PArray); begin FreeMem(arr.p, arr.size * sizeof(TType)); end; procedure Check(var arr : PArray); var s : TType; i,j,k : word; begin i := 1; while (i <= arr.size) do begin s := arr.p^[i]; for k := 1 to 3 do if (pos(op[k],s) <> 0) then begin j := 1; while (j <= length(s)) do begin if s[j] = '''' then repeat inc(j); if j = length(s) then begin arr.p^[i] := s; inc(i); s := arr.p^[i]; end; until s[j] = ''''; if s[j] = '''' then inc(j); if op[k] = copy(s,j,length(op[k])) then if k = 1 then delete(s,j,255) else while (copy(s,j,length(cl[k])) <> cl[k]) do begin if j = length(s) then begin delete(s,j,1); arr.p^[i] := s; inc(i); s := arr.p^[i]; j := 1; end; delete(s,j,1); end else inc(j); if copy(s,j,length(cl[k])) = cl[k] then delete(s,j,length(cl[k])); end; end; arr.p^[i] := s; inc(i); end; end; var filePath : TType; checkFile : TFile; temp : PArray; begin clrscr; filePath := 'c:\input.txt'; if OpenFile (checkFile, filePath) then begin InitArray(temp); FillArray(temp, checkFile); Check(temp); SaveChanges(checkFile, temp); ClearArray(temp); end else writeln('Can"t open file : ' + filePath); writeln('Done !'); readln; end. Цитата in : //comment1 {comment2} no comment2 // comment3 no comment3 {comment3} {comment4} no comment4 {comment5} {connent6} writeln('{no comment5}'); {comment7} (*comment8*) no com{COMMENT}ment6 no comment7 (*comment9*) (*comment10*) writeln('(*no comment8*)') (*comment11*) type TSet = set of char = ['{','}']; out : no comment2 no comment3 no comment4 writeln('{no comment5}'); no comment6 no comment7 writeln('(*no comment8*)') type TSet = set of char = ['{','}']; Сообщение отредактировано: klem4 - 2.02.2006 14:02 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
![]() ![]() |
Altair |
![]()
Сообщение
#2
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
гы гы.... вход:
Цитата writeln(' //nokom1 " " //nokom2 '); выход Цитата writeln(' " " '); гы-гы ![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
klem4 |
![]()
Сообщение
#3
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Ах-ты .. молодец
![]() ![]() -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
![]() Олег, по-моему так и в Паскале не пройдет... Насколько я понял, нужно удалять комментарии из РАБОТАЮЩЕЙ Паскаль-программы? Я не прав? |
klem4 |
![]()
Сообщение
#5
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Хм действительно ... а я исправил уже, но это ладно, есть еще более плохая ситуация
writeln(' bababa '''' { no comment }'); тут программа выдает не вырный результат Чувствую буду переделывать все ![]() -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Altair |
![]()
Сообщение
#6
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата Олег, по-моему так и в Паскале не пройдет... пардом ми.... ![]() ну все равно, вот такое компилер пропускает (повторение '' - вывод ' на экран) Цитата begin writeln('//nokom1 '' //nokom2'); readln; end . а после выхода... Цитата begin writeln('//nokom1 '' readln; end . так, что, клем, гы ![]() зы блин сам нашел.... я в это время пост писал... Сообщение отредактировано: Altair - 1.02.2006 20:56 -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
klem4 |
![]()
Сообщение
#7
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Исходный код program Comments; {$R-} uses crt; const op : array [1..3] of string[2] = ('//','{','(*'); cl : array [1..3] of string[2] = ('','}','*)'); type TType = string; PArray = record P : ^TArray; size : word; end; TArray = array [1..1] of TType; TFile = text; function OpenFile(var f : TFile; path : TType) : boolean; begin assign(f, path); {$I-} reset(f); {$I+} OpenFile := (IOResult = 0); end; procedure SaveChanges(var f : text; arr : PArray); var i : word; begin rewrite(f); for i := 1 to arr.size do writeln(f,arr.p^[i]); close(f); end; procedure InitArray(var arr : PArray); begin arr.size := 0; GetMem(arr.p, arr.size * sizeof(TType)); end; procedure FillArray(var arr : PArray; var f : TFile); var temp : TType; newArr : ^Tarray; i : word; begin i := 0; while not(eof(f)) do begin readln(f, temp); inc(i); GetMem(newArr, arr.size * sizeof(TType) + sizeof(TType)); move(arr.p^[1], newArr^[1], arr.size * sizeof(TType)); FreeMem(arr.p, arr.size * sizeof(TType)); arr.p := newArr; inc(arr.size); arr.p^[i] := temp; end; end; procedure ClearArray(var arr : PArray); begin FreeMem(arr.p, arr.size * sizeof(TType)); end; procedure Check(var arr : PArray); var s : TType; i,j,k : word; begin i := 1; while (i <= arr.size) do begin s := arr.p^[i]; for k := 1 to 3 do if (pos(op[k],s) <> 0) then begin j := 1; while (j <= length(s)) do begin if s[j] = '''' then repeat inc(j); until (s[j] = '''') and (s[pred(j)] <> ''''); if s[j] = '''' then inc(j); if op[k] = copy(s,j,length(op[k])) then if k = 1 then delete(s,j,255) else while (copy(s,j,length(cl[k])) <> cl[k]) do begin if j = length(s) then begin delete(s,j,1); arr.p^[i] := s; inc(i); s := arr.p^[i]; j := 1; end; delete(s,j,1); end else inc(j); if copy(s,j,length(cl[k])) = cl[k] then delete(s,j,length(cl[k])); end; end; arr.p^[i] := s; inc(i); end; end; var filePath : TType; checkFile : TFile; temp : PArray; begin clrscr; filePath := 'c:\input.txt'; if OpenFile (checkFile, filePath) then begin InitArray(temp); FillArray(temp, checkFile); Check(temp); SaveChanges(checkFile, temp); ClearArray(temp); end else writeln('Can"t open file : ' + filePath); writeln('Done !'); readln; end. ![]() -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
klem4, рано радуемся
![]() Цитата (* Просто вешает программу...begin *) begin writeln(' test '); end. |
klem4 |
![]()
Сообщение
#9
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
А вот так
1 (* begin end*) 2 нормально ... гмм щас поправлю ... ![]() -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Altair |
![]()
Сообщение
#10
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата 1 (* begin end*) 2 не.. не нормально... потому что я тоже Цитата Насколько я понял, нужно удалять комментарии из РАБОТАЮЩЕЙ Паскаль-программы ![]() ![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
klem4 |
![]()
Сообщение
#11
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Кажись пофиксил
![]() Исходный код program Comments; {$R-} uses crt; const op : array [1..3] of string[2] = ('//','{','(*'); cl : array [1..3] of string[2] = ('','}','*)'); type TType = string; PArray = record P : ^TArray; size : word; end; TArray = array [1..1] of TType; TFile = text; function OpenFile(var f : TFile; path : TType) : boolean; begin assign(f, path); {$I-} reset(f); {$I+} OpenFile := (IOResult = 0); end; procedure SaveChanges(var f : text; arr : PArray); var i : word; begin rewrite(f); for i := 1 to arr.size do writeln(f,arr.p^[i]); close(f); end; procedure InitArray(var arr : PArray); begin arr.size := 0; GetMem(arr.p, arr.size * sizeof(TType)); end; procedure FillArray(var arr : PArray; var f : TFile); var temp : TType; newArr : ^Tarray; i : word; begin i := 0; while not(eof(f)) do begin readln(f, temp); inc(i); GetMem(newArr, arr.size * sizeof(TType) + sizeof(TType)); move(arr.p^[1], newArr^[1], arr.size * sizeof(TType)); FreeMem(arr.p, arr.size * sizeof(TType)); arr.p := newArr; inc(arr.size); arr.p^[i] := temp; end; end; procedure ClearArray(var arr : PArray); begin FreeMem(arr.p, arr.size * sizeof(TType)); end; procedure Check(var arr : PArray); var s : TType; i,j,k : word; begin i := 1; while (i <= arr.size) do begin s := arr.p^[i]; for k := 1 to 3 do if (pos(op[k],s) <> 0) then begin j := 1; while (j <= length(s)) do begin if s[j] = '''' then repeat inc(j); until (s[j] = '''') and (s[pred(j)] <> ''''); if s[j] = '''' then inc(j); if op[k] = copy(s,j,length(op[k])) then if k = 1 then delete(s,j,255) else while (copy(s,j,length(cl[k])) <> cl[k]) do begin if j = length(s) then begin delete(s,j,1); arr.p^[i] := s; inc(i); s := arr.p^[i]; j := 1; end else delete(s,j,1); end else inc(j); if copy(s,j,length(cl[k])) = cl[k] then delete(s,j,length(cl[k])); end; end; arr.p^[i] := s; inc(i); end; end; var filePath : TType; checkFile : TFile; temp : PArray; begin clrscr; filePath := 'c:\input.txt'; if OpenFile (checkFile, filePath) then begin InitArray(temp); FillArray(temp, checkFile); Check(temp); SaveChanges(checkFile, temp); ClearArray(temp); end else writeln('Can"t open file : ' + filePath); writeln('Done !'); readln; end. Сообщение отредактировано: klem4 - 1.02.2006 21:44 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
klem4, не совсем
![]() Смотри: Цитата {$I something.pas} begin // This is from something.pas PrintIt; end. Вполне рабочая программа... А после прогона твоей утилитки? ![]() Про директивы забыл? |
klem4 |
![]()
Сообщение
#13
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Да. И я еще баг нашел один, вобщем пока лавочку прикрою, как доделаю полностью, возобновим дебаты
![]() Надо тестировщика нанять. ![]() -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Altair |
![]()
Сообщение
#14
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
klem, ты это... не стесняйся, приходи еще...
![]() Ага, классный у вас форум, наверное на неделе загляну еще ... :D p.s. ![]() ![]() Сообщение отредактировано: Altair - 1.02.2006 21:46 -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
klem4 |
![]()
Сообщение
#15
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Закрываю временно тему, потому что если кто-то найдет за меня мои баги и напишет о них тут, я расстроюсь ;))
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
klem4 |
![]()
Сообщение
#16
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Вот значит очередной ласт вершн
![]() Исходный код program Comments; {$R-} uses crt; const op : array [1..3] of string[2] = ('//','{','(*'); cl : array [1..3] of string[2] = ('','}','*)'); type TType = string; PArray = record P : ^TArray; size : word; end; TArray = array [1..1] of TType; TFile = text; function OpenFile(var f : TFile; path : TType) : boolean; begin assign(f, path); {$I-} reset(f); {$I+} OpenFile := (IOResult = 0); end; procedure SaveChanges(var f : text; arr : PArray); var i : word; begin rewrite(f); for i := 1 to arr.size do writeln(f,arr.p^[i]); close(f); end; procedure InitArray(var arr : PArray); begin arr.size := 0; GetMem(arr.p, arr.size * sizeof(TType)); end; procedure FillArray(var arr : PArray; var f : TFile); var temp : TType; newArr : ^Tarray; i : word; begin i := 0; while not(eof(f)) do begin readln(f, temp); inc(i); GetMem(newArr, arr.size * sizeof(TType) + sizeof(TType)); move(arr.p^[1], newArr^[1], arr.size * sizeof(TType)); FreeMem(arr.p, arr.size * sizeof(TType)); arr.p := newArr; inc(arr.size); arr.p^[i] := temp; end; end; procedure ClearArray(var arr : PArray); begin FreeMem(arr.p, arr.size * sizeof(TType)); end; procedure Check(var arr : PArray); var s : TType; i,j,k : word; begin i := 1; while (i <= arr.size) do begin s := arr.p^[i]; for k := 1 to 3 do if (pos(op[k],s) <> 0) then begin j := 1; while (j <= length(s)) do begin if s[j] = '''' then repeat inc(j); until (s[j] = '''') and (s[pred(j)] <> '''') and (s[succ(j)] <> ''''); if s[j] = '''' then inc(j); if op[k] = copy(s,j,length(op[k])) then if (k = 2) and (s[succ(j)] = '$') then j := length(s) + 1 else if k = 1 then delete(s,j,255) else while (copy(s,j,length(cl[k])) <> cl[k]) do begin if (j = length(s)) or (s='') then begin delete(s,j,1); arr.p^[i] := s; inc(i); s := arr.p^[i]; j := 1; end else delete(s,j,1); end else inc(j); if copy(s,j,length(cl[k])) = cl[k] then delete(s,j,length(cl[k])); end; end; arr.p^[i] := s; inc(i); end; end; var filePath : TType; checkFile : TFile; temp : PArray; begin clrscr; filePath := 'c:\input.txt'; if OpenFile (checkFile, filePath) then begin InitArray(temp); FillArray(temp, checkFile); Check(temp); SaveChanges(checkFile, temp); ClearArray(temp); end else writeln('Can"t open file : ' + filePath); writeln('Done !'); readln; end. Цитата Пройден тест файл : {$I something.pas} begin // This is from something.pas PrintIt; end. begin writeln('//nokom1 '' //nokom2'); readln; end . //comment1 {comment2} no comment2 // comment3 no comment3 {comment3} {comment4} no comment4 {comment5} {connent6} writeln('{no comment5}'); {comment7} (*comment8*) no com{COMMENT}ment6 no comment7 (*comment9*) (*comment10*) writeln('(*no comment8*)') (*comment11*) type TSet = set of char = ['{','}']; (* begin *) begin writeln(' test '); end. 1 (* begin end*) 2 4{ begin1 end1 } 5 6{ begin2 end2 }7 8 { comme en t } 9 Сообщение отредактировано: klem4 - 2.02.2006 14:31 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
![]() Цитата (*$define test*) {$ifdef test} begin end {$endif} . |
klem4 |
![]()
Сообщение
#18
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Почему нет ?
Оставляет Цитата {$ifdef test} begin end {$endif} ... первая строка - это ведь коммент ?! -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#19
|
Гость ![]() |
Кто тебе сказал? Попробуй откомпилировать эту программу без "коммента", как ты выразился, и с ним
![]() |
klem4 |
![]()
Сообщение
#20
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Ага, это опятьже к той теме, зачем сделали (* кроме {
:D Добавил еще проверку ... program Comments; Сообщение отредактировано: volvo - 2.11.2006 17:28 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 17:12 |