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

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

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

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


Пионер
**

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

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


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


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


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

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

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


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


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


Пионер
**

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

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


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

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


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


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

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

Репутация: -  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 
 К началу страницы 
+ Ответить 
APAL
сообщение 15.05.2004 9:33
Сообщение #5


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

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

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


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

Код
(* cvbcxvhdfg *)


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


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

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

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


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


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


Пионер
**

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

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


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


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


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

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

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


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


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


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

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

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


Код

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


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
P@sh@
сообщение 15.05.2004 19:01
Сообщение #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 
 К началу страницы 
+ Ответить 
Altair
сообщение 15.05.2004 19:35
Сообщение #11


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

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

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


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

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


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


Бывалый
***

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

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


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


Пионер
**

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

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


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


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


Бывалый
***

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

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


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


Бывалый
***

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

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


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


Пионер
**

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

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


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


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


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

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

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


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

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


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
GLuk
сообщение 16.05.2004 20:22
Сообщение #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 
 К началу страницы 
+ Ответить 
Altair
сообщение 17.05.2004 6:19
Сообщение #19


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

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

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


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

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

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

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


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


Профи
****

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

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


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

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

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

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

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

 



- Текстовая версия 28.07.2025 18:54
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"