![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
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 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
первая пока
Код { 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 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Да, вот это проблемма, я забыл про это.
(Кто же додумался коментарии двумя символами делать. Ох уж эти борландцы) -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Jaxx |
![]()
Сообщение
#7
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 145 Пол: Мужской Реальное имя: Павел Репутация: ![]() ![]() ![]() |
Я думаю, что комментарии типа (* *) можно не учитывать, так как мы таких не нигде не видели и нам не говорили о них.
-------------------- - Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
|
Altair |
![]()
Сообщение
#8
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Ну тогда как следует протестируйте эту прогу, я ее не проверял.
(писал в блокноте) -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
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 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
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 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата . а мне месяц мучений над задачей сократил жизнь наверное на 3 года долгой и счастливой жизи. Задачи еще никого не кусали и не убивали ![]() Программа форматирования текста по ширине лежит готовая здесь: http://pascal.dax.ru/forum/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 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата так что насчет ЛЕГКОМЫСЛЕННЫХ ЗАЯВЛЕНИЙ по поводу простоты первой задачи стоит очень подумать... Согласен с вами. Я думаю, что если бы это задание было простым, здесь уже вариантов 10 лежало. А то только мой, и то плохенький. Цитата В целом свой алгоритм я выложил...а задача интересная. Опять-таки согласен с вами, GLuk, мне кажется, что все алгоритмы, касающиеся обработки текста, очень интересны. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
GLuk |
![]()
Сообщение
#20
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 775 Пол: Мужской Репутация: ![]() ![]() ![]() |
Oleg_Z: Обращайся ко мне пожалуйста на ТЫ, на ВЫ конечно приятно, но чуть пафосно..
![]() Все остальные задания простые, только не догнал краями насчет третьей задачи; "Организовать смещение операторов относительно операторных скобок, как это принято в Паскале" Что это значит?? Паскаль изучал далеко не по школьной программе, может по этому? |
![]() ![]() |
![]() |
Текстовая версия | 28.07.2025 12:19 |