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

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

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

 
 Ответить  Открыть новую тему 
> Нетипизированный файл
сообщение
Сообщение #1


Пионер
**

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

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


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

Вот мои наработки только я не пойму как мне сделать чтобы можно было найти например begin и после него все операторы были смещены вправо до end. Мне можно и словами))


program pr;
var
newfile,oldfile:file;
newname,oldname:string[20];
oblbuf:array[1..200,1..128] of byte;
count,result,res:word;
begin
repeat
writeln('vvedite imya ishodnogo file');
read(oldname);
assign(oldfile,oldname);
{$I-}
reset(oldfile);
{$I+}
res:=result;
if res <> 0
then
writeln('file no found');
until res=0;
writeln('vvedite imya vihodnogo file');
readln(newname);
assign(newfile,newname);
{$I-}
rewrite(newfile);
{$I+}
if result <> 0
then
begin
writeln('error ',newname);
HALT;
end;
repeat
blockread(oldfile,oblbuf,200,count);
{ вставка }
until count<200;
close(oldfile);
close(newfile);
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Пионер
**

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

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


Ну неужели никто помочьне может!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Слова begin/end repeat/until гарантированно являются первыми в строке, или исходник может быть таким:

program p; begin writeln('hello'); end.


и тебе его надо превратить в
program p;
begin
writeln('hello');
end.

?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

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

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


Цитата(volvo @ 16.04.2008 19:26) *

Слова begin/end repeat/until гарантированно являются первыми в строке, или исходник может быть таким:

program p; begin writeln('hello'); end.


и тебе его надо превратить в
program p;
begin
writeln('hello');
end.

?


ДА, объясни пожалуйста.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Что ДА? Если эти слова будут первыми в строке, то программа будет вот такой:

const off_str = '   ';

function trim(s: string): string;
var i: integer;
begin
while s[1] = ' ' do delete(s, 1, 1);
trim := s;
end;

var
f_in, f_out: text;
offset: integer;
s: string;
i: integer;

begin
assign(f_in, 'reform.txt'); reset(f_in);
assign(f_out, 'reform.rf'); rewrite(f_out);

offset := 0;

while not eof(f_in) do begin
readln(f_in, s);

if (pos('until', trim(s)) = 1) or (pos('end', trim(s)) = 1)
then dec(offset);


if s <> '' then
for i := 1 to offset do begin
s := off_str + s;
end;
writeln(f_out, s);

if (pos('repeat', trim(s)) = 1) or (pos('begin', trim(s)) = 1)
then inc(offset);


end;

close(f_out);
close(f_in);

end.
(Если хочется добавлять "лесенку" после других слов тоже - лучше добавить функцию, которая будет проверять начало прочитанной строки на некоторые зарезервированные слова)

Программа рабочая - я взял то, что было у тебя в первом посте, удалил пробелы в начале всех строк и запустил свою программу. Получилась лесенка...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

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

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


СПАСИБО!!! как можно у тебя репутацию поднять я все понял))0 еще раз огромное спасибо!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Perl. Just code it!
******

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

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



Цитата
как можно у тебя репутацию поднять


У тебя пока недостаточно сообщений на форуме для этого, я подниму репутацию volvo от твоего имени.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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