![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Jaxx |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 145 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
1.Текст программы на Паскале хранится в файле на диске. Составить программу обработки текста программы: а)определить максимальную степень вложенности циклов в программе; б)определить общее количество строк и количество символов, отличных от пробела; в)удалить из текста программы все комментарии.
2.Текст программы на Паскале хранится в файле на диске. Составить программу обработки текста программы: а)первые буквы служебных слов сделать заглавными; б)текст комментария заменить на номер комментария по порядку; в)переписать текст программы в новый файл с минимальным количеством пробелов, сохранив их только там, где они необходимы. 3.Текст программы на Паскале хранится в файле на диске. Распечатать на экране текст программы таким образом, чтобы в каждой строке размещался только один оператор. Организовать смещение операторов относительно операторных скобок, как это принято в Паскале. Помогите сделать какую-нибудь одну ! -------------------- - Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
|
APAL |
![]()
Сообщение
#2
|
![]() Смотрю... ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: ![]() ![]() ![]() |
Первая, на мой взгляд, самая простая.
А циклы в ней имеются в виду все или конкретно какие-то. (for, while, repeat) -------------------- |
Jaxx |
![]()
Сообщение
#3
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 145 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
Я думаю, что нужна степень вложенности по каждому типу циклов, то есть вывести на экран по FOR - столько-то циклов, по WHILE - столько и т.д.
Добавлено (14.05.04 21:00): Жду дапамоги хоть по первой, а то свою курсовую я сюда уже закинул, чтобы помогли, а до этого мне еще одну из этих трех надо сдать, чтобы до курсовой собственно допустили. -------------------- - Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
|
Altair |
![]()
Сообщение
#4
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
первая пока
Код { 1.Текст программы на Паскале хранится в файле на диске. Составить программу обработки текста программы: + а)определить максимальную степень вложенности циклов в программе; б)определить общее количество строк и количество символов,отличных от пробела; в)удалить из текста программы все комментарии. } Program Format_Text_Program_Pascal; Uses CRT; var F,f2:text; {файл с текстом программы} filename:string; {путь к файлу} s:string; {читаемая строка из файла} NZ,i,ii,j,k,stringys,charsys:byte; z:boolean; c:char; koment:boolean; {-------------------} 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; {PROGRAM BEGIN ...} Begin repeat ClrScr; Writeln('Введите путь к файлу'); readln(filename); Assign(f,filename); {$I-} Reset(f); {$I+} until IOResult=0; {повторяем если произошла ошибка} While NOT EOF(F) do begin ReadLn(f,s); Inc(stringys); {Ищем символы исчитаем их} For k:=1 to Ord(s[0]) do If s[k]<>' ' then inc(chsrsys); {для избежания ошибок приводим строку к верхнему регистру} s:=UpStr(s); For I:=1 to ORD(S[0]) do begin If ((s[i]='F') and (s[i+1]='O') and (s[i+2]='R')) or ( (s[i]='W') and (s[i+1]='H') and (S[i+2]='I') and (s[i+3]='L') and (s[i+4]='E')) or ( (s[i]='R') and (S[i+1]='E') and (S[I+2]='P') and (S[I+3]='E') and (s[i+4]='A') and (s[i+5]='T') then begin {Значит цикл "открылся"} j:=i+1; {запомним, где цикл отрылся, а на 1 больше, чтобы потом заново его не посчитать } Inc(NZ); {увелич. счетчик вложенности циклов} For ii:=j to ORD(s[0]) do begin If ((s[ii]='E') and (s[ii+1]='N') and (s[ii+2]='D')) or ((s[ii]='U') and (S[ii+1]='N') and (S[ii+2]='T') and (s[Ii+3]='I') and (s[ii+4]='L')) then begin {цикл "закрылся"} Dec(NZ) end end end end end; CLose(F); Writeln('Информация о файле . . . . . . . . . . . . . .',filename); Writeln('Вложенность циклов равна . . . . . . . . . . .',NZ); Writeln('Колическво строк равно . . . . . . . . . . . .',stringys); Writeln(Количество символов, отличных от пробела равно ',charsys); Writeln('-------------------------------------------------------'); writeln; writeln('сейчас файл будет перезаписан - из него будут удалены коментарии'); Assign(f2,'datafile.tmp'); Rewrite(f2); Reset(f); While not Eof(f) do begin read(f,c); If c= '{' then koment:=true; If (c=('}') and (koment=true) then koment:=false; If koment=false then write(f,c) end; Close(f); Close(f2); Erase(f); Rename(f2,filename); Writeln('Программа выполнена.'); end. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
APAL |
![]()
Сообщение
#5
|
![]() Смотрю... ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: ![]() ![]() ![]() |
Комментарии могут еще обозначаться так:
Код (* cvbcxvhdfg *) -------------------- |
Altair |
![]()
Сообщение
#6
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Да, вот это проблемма, я забыл про это.
(Кто же додумался коментарии двумя символами делать. Ох уж эти борландцы) -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Jaxx |
![]()
Сообщение
#7
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 145 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
Я думаю, что комментарии типа (* *) можно не учитывать, так как мы таких не нигде не видели и нам не говорили о них.
-------------------- - Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
|
Altair |
![]()
Сообщение
#8
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Ну тогда как следует протестируйте эту прогу, я ее не проверял.
(писал в блокноте) -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
trminator |
![]()
Сообщение
#9
|
Четыре квадратика ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 579 Пол: Мужской Репутация: ![]() ![]() ![]() |
Код (*************************************** * Такие комментарии встречаются * достаточно часто: очень стильно * выглядит комментарий на несколько * строк, оформленный так. Он выделяется * в коде даже без подсветки =) ***************************************) -------------------- Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала |
P@sh@ |
![]()
Сообщение
#10
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 180 Пол: Мужской Репутация: ![]() ![]() ![]() |
Oleg_Z
несколько замечаний... 1. интересно, а что твоя прога скажет насчет такой вложенности? Код for i:=1 to n do for j:=1 to m do while x<z do inc(x); 2. после inc(nz) наверное надо вставить строчку if maxnz<nz then maxnz:=nz; и выводить соответственно... 3. если уж не нравится length(s), то и ord(s[0]) не используй, пиши уж byte(s[0]) - так вообще никаких функций не вызывается ![]() 4. вместо конструкций if (s[i]='A') and (... проще написать if copy(s,i,5)='WHILE' then ... конструктивные предложения будут чуть попозже... |
Altair |
![]()
Сообщение
#11
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
1. Да он не правильно посчитает.
2. не уверен, надо попробовать 3. хорошо, это просто привычка, что б ее... ![]() 4. Я не любля встроенных функций и процедур, вы же меня знаете, мне лишь бы что то переделать. ![]() Цитата конструктивные предложения будут чуть попозже... Посмотрим, может будет намного лучше моего варианта. Я вообщем подозревал, что с вложенностью будут проблеммы. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
P@sh@ |
![]()
Сообщение
#12
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 180 Пол: Мужской Репутация: ![]() ![]() ![]() |
а я люблю компактность + читабельность, поэтому лучше так: s[i]+s[i+1]+s[i+2]='END'
![]() |
Jaxx |
![]()
Сообщение
#13
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 145 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
у меня вообще со всем проблемы (если это кого-то интересует).
я тут откопал исходник программы которая очень красиво форматирует по ширине, но она делает текст с переносами. между прочим в прямом смысле, т.е. делит слова по слогам (не совсем правильно конечно), ставит знак переноса и кидает его на следующую строку. исходник если надо могу скинуть по e-mail а тут поместить не решусь, ибо занимает он около 850 строк. -------------------- - Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
|
P@sh@ |
![]()
Сообщение
#14
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 180 Пол: Мужской Репутация: ![]() ![]() ![]() |
короче, надо кроме for и while считать еще и beginы циклов и отдельно остальные beginы, чтоб в endах не запутаться...
|
P@sh@ |
![]()
Сообщение
#15
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 180 Пол: Мужской Репутация: ![]() ![]() ![]() |
форматирование текста по ширине путем вставки пробелов - это вообще элементарная задача, с переносами конечно посложнее, но не намного, главное правила переноса слов повторить по русскому
![]() |
Jaxx |
![]()
Сообщение
#16
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 145 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
это для вас задача элементарная. а мне месяц мучений над задачей сократил жизнь наверное на 3 года долгой и счастливой жизи.
-------------------- - Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
|
Altair |
![]()
Сообщение
#17
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата . а мне месяц мучений над задачей сократил жизнь наверное на 3 года долгой и счастливой жизи. Задачи еще никого не кусали и не убивали ![]() Программа форматирования текста по ширине лежит готовая здесь: http://forum.pascal.net.ru/index.php?showtopic=1949 Только надо строку пробелами дополнить? Или и так пойдет? -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
GLuk |
![]()
Сообщение
#18
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: ![]() ![]() ![]() |
А насчет вложенности циклов никаких реализаций кроме Oleg_Z нету??
Попробовал написать для неформатированного просто дофига просчета и условий. Может быть стоит его сначала отформатировать по правилам, что-то типа: 1. For i:=1 to 12 do begin end; 2. While i<9 do begin end; 3. Repeat Until KeyPressed; В том плане, что при последующей обработке мы знали что по любому, для первого случая: если после do что-то есть, то цикл FOR без конструкции begin/end. Тоже самое для остальных; Также не стоит забывать слово CASE и, вероятно, еще какие-нибудь, ща не помню ![]() Первоначально я использовал принцип нисходящего массива для регистрации текущих циклов и глобальную переменную LOOP, обозначающую признак первичного массива, так что насчет ЛЕГКОМЫСЛЕННЫХ ЗАЯВЛЕНИЙ по поводу простоты первой задачи стоит очень подумать... В целом свой алгоритм я выложил...а задача интересная. |
Altair |
![]()
Сообщение
#19
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата так что насчет ЛЕГКОМЫСЛЕННЫХ ЗАЯВЛЕНИЙ по поводу простоты первой задачи стоит очень подумать... Согласен с вами. Я думаю, что если бы это задание было простым, здесь уже вариантов 10 лежало. А то только мой, и то плохенький. Цитата В целом свой алгоритм я выложил...а задача интересная. Опять-таки согласен с вами, GLuk, мне кажется, что все алгоритмы, касающиеся обработки текста, очень интересны. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
GLuk |
![]()
Сообщение
#20
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: ![]() ![]() ![]() |
Oleg_Z: Обращайся ко мне пожалуйста на ТЫ, на ВЫ конечно приятно, но чуть пафосно..
![]() Все остальные задания простые, только не догнал краями насчет третьей задачи; "Организовать смещение операторов относительно операторных скобок, как это принято в Паскале" Что это значит?? Паскаль изучал далеко не по школьной программе, может по этому? |
![]() ![]() |
![]() |
Текстовая версия | 18.04.2025 16:23 |