IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Несколько задач на работу с файлами и строками., 3 небольших задачи.
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 145
Пол: Мужской
Реальное имя: Павел

Репутация: -  0  +


1.Текст программы на Паскале хранится в файле на диске. Составить программу обработки текста программы: а)определить максимальную степень вложенности циклов в программе; б)определить общее количество строк и количество символов, отличных от пробела; в)удалить из текста программы все комментарии.
2.Текст программы на Паскале хранится в файле на диске. Составить программу обработки текста программы: а)первые буквы служебных слов сделать заглавными; б)текст комментария заменить на номер комментария по порядку; в)переписать текст программы в новый файл с минимальным количеством пробелов, сохранив их только там, где они необходимы.
3.Текст программы на Паскале хранится в файле на диске. Распечатать на экране текст программы таким образом, чтобы в каждой строке размещался только один оператор. Организовать смещение операторов относительно операторных скобок, как это принято в Паскале.
Помогите сделать какую-нибудь одну !


--------------------
- Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Смотрю...
*****

Группа: Пользователи
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

Репутация: -  6  +


Первая, на мой взгляд, самая простая.
А циклы в ней имеются в виду все или конкретно какие-то. (for, while, repeat)


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 145
Пол: Мужской
Реальное имя: Павел

Репутация: -  0  +


Я думаю, что нужна степень вложенности по каждому типу циклов, то есть вывести на экран по FOR - столько-то циклов, по WHILE - столько и т.д.

Добавлено (14.05.04 21:00):
Жду дапамоги хоть по первой, а то свою курсовую я сюда уже закинул, чтобы помогли, а до этого мне еще одну из этих трех надо сдать, чтобы до курсовой собственно допустили.


--------------------
- Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


первая пока
Код
{
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.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Смотрю...
*****

Группа: Пользователи
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

Репутация: -  6  +


Комментарии могут еще обозначаться так:

Код
(* cvbcxvhdfg *)


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Да, вот это проблемма, я забыл про это.
(Кто же додумался коментарии двумя символами делать. Ох уж эти борландцы)


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 145
Пол: Мужской
Реальное имя: Павел

Репутация: -  0  +


Я думаю, что комментарии типа (* *) можно не учитывать, так как мы таких не нигде не видели и нам не говорили о них.


--------------------
- Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Ну тогда как следует протестируйте эту прогу, я ее не проверял.
(писал в блокноте)


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Код

(***************************************
* Такие комментарии встречаются
* достаточно часто: очень стильно
* выглядит комментарий на несколько
* строк, оформленный так. Он выделяется
* в коде даже без подсветки =)
***************************************)


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской

Репутация: -  2  +


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]) - так вообще никаких функций не вызывается smile.gif

4. вместо конструкций if (s[i]='A') and (... проще написать
if copy(s,i,5)='WHILE' then ...

конструктивные предложения будут чуть попозже...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


1. Да он не правильно посчитает.
2. не уверен, надо попробовать
3. хорошо, это просто привычка, что б ее... smile.gif
4. Я не любля встроенных функций и процедур, вы же меня знаете, мне лишь бы что то переделать. smile.gif
Цитата
конструктивные предложения будут чуть попозже...

Посмотрим, может будет намного лучше моего варианта.
Я вообщем подозревал, что с вложенностью будут проблеммы.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской

Репутация: -  2  +


а я люблю компактность + читабельность, поэтому лучше так: s[i]+s[i+1]+s[i+2]='END' smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Пионер
**

Группа: Пользователи
Сообщений: 145
Пол: Мужской
Реальное имя: Павел

Репутация: -  0  +


у меня вообще со всем проблемы (если это кого-то интересует).
я тут откопал исходник программы которая очень красиво форматирует по ширине, но она делает текст с переносами. между прочим в прямом смысле, т.е.
делит слова по слогам (не совсем правильно конечно), ставит знак переноса и кидает его на следующую строку. исходник если надо могу скинуть по e-mail
а тут поместить не решусь, ибо занимает он около 850 строк.


--------------------
- Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской

Репутация: -  2  +


короче, надо кроме for и while считать еще и beginы циклов и отдельно остальные beginы, чтоб в endах не запутаться...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Бывалый
***

Группа: Пользователи
Сообщений: 180
Пол: Мужской

Репутация: -  2  +


форматирование текста по ширине путем вставки пробелов - это вообще элементарная задача, с переносами конечно посложнее, но не намного, главное правила переноса слов повторить по русскому smile.gif, или воспользоваться словарями ворда
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Пионер
**

Группа: Пользователи
Сообщений: 145
Пол: Мужской
Реальное имя: Павел

Репутация: -  0  +


это для вас задача элементарная. а мне месяц мучений над задачей сократил жизнь наверное на 3 года долгой и счастливой жизи.


--------------------
- Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
. а мне месяц мучений над задачей сократил жизнь наверное на 3 года долгой и счастливой жизи.

Задачи еще никого не кусали и не убивали smile.gif
Программа форматирования текста по ширине лежит готовая здесь:
http://forum.pascal.net.ru/index.php?showtopic=1949
Только надо строку пробелами дополнить? Или и так пойдет?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


А насчет вложенности циклов никаких реализаций кроме 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 и, вероятно, еще какие-нибудь, ща не помню rolleyes.gif в том плане, что оно дает нам END.
Первоначально я использовал принцип нисходящего массива для регистрации текущих циклов и глобальную переменную LOOP, обозначающую признак первичного массива, так что насчет ЛЕГКОМЫСЛЕННЫХ ЗАЯВЛЕНИЙ по поводу простоты первой задачи стоит очень подумать...
В целом свой алгоритм я выложил...а задача интересная.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
так что насчет ЛЕГКОМЫСЛЕННЫХ ЗАЯВЛЕНИЙ по поводу простоты первой задачи стоит очень подумать...

Согласен с вами. Я думаю, что если бы это задание было простым, здесь уже вариантов 10 лежало. А то только мой, и то плохенький.

Цитата
В целом свой алгоритм я выложил...а задача интересная.

Опять-таки согласен с вами, GLuk, мне кажется, что все алгоритмы, касающиеся обработки текста, очень интересны.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


Oleg_Z: Обращайся ко мне пожалуйста на ТЫ, на ВЫ конечно приятно, но чуть пафосно.. smile.gif

Все остальные задания простые, только не догнал краями насчет третьей задачи;

"Организовать смещение операторов относительно операторных скобок, как это принято в Паскале"

Что это значит??
Паскаль изучал далеко не по школьной программе, может по этому?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 17.04.2024 6:26
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name