Всем привет! В данный момент пытаюсь реализовать следующую задачу: нужно в текстовом файле (кол-во) В строк с позиции(строка) А поменять местами с В строками позиции(строки) С, то есть какбы переставить их местами. А,В,С вводятся с клавиатуры. Вот мои наработки:
programm perstr;
var a,b,c,j :integer;
f,newf: text;
st:string;
procedure jmp(x: integer);
var i: integer;
s: string;
beginfor i:=1to x-1do
readln(f1,s);
end;
begin
assign(f,'xx.txt');
reset(f);
assign(newf,'yy.txt');
reset(newf);
readln(a);
readln(b);
readln(c);
for j:=1to a-1dobegin
readln(f,st);
writeln(newf,st);
end;
close(f);
reset(f);
jmp(c);
for j:=1to b-1dobegin
readln(f,st);
writeln(newf,st);
end;
close(f);
reset(f);
jmp(a+b);
for j:=1to c-a-b dobegin
readln(f,st);
writeln(newf,st);
end;
close(f);
reset(f);
jmp(a);
for j:=1to b dobegin
readln(f,st);
writeln(newf,st);
end;
close(f);
close(newf);
end.
Есть сообщение об ошибке: отсутствует begin. Скажу честно, pascal подзабыл. Какие будут замечание, предложения по реализации? Как довести это до ума?
volvo
23.09.2009 16:03
Цитата
Есть сообщение об ошибке: отсутствует begin.
Нет слова Programm в Паскале, поэтому компилятор тебя и не понимает... Убери лишнюю букву и исправляй ошибки дальше (у тебя там еще неописанные переменные есть).
Rocket
23.09.2009 17:59
Цитата(volvo @ 23.09.2009 13:03)
Нет слова Programm в Паскале, поэтому компилятор тебя и не понимает... Убери лишнюю букву и исправляй ошибки дальше (у тебя там еще неописанные переменные есть).
Угу, все исправил и дописал, - работает:
program perstr;
var a,b,c,j :integer;
f,newf: text;
st:string;
procedure jmp(x: integer);
var i: integer;
s: string;
beginfor i:=1to x-1do
readln(f,s);
end;
begin
assign(f,'xx.txt');
reset(f);
assign(newf,'yy.txt');
rewrite(newf);
readln(a);
readln(b);
readln(c);
for j:=1to a-1dobegin
readln(f,st);
writeln(newf,st);
end;
close(f);
reset(f);
jmp(c);
for j:=1to b dobegin
readln(f,st);
writeln(newf,st);
end;
close(f);
reset(f);
jmp(a+b);
for j:=1to c-a-b dobegin
readln(f,st);
writeln(newf,st);
end;
close(f);
reset(f);
jmp(a);
for j:=1to b dobegin
readln(f,st);
writeln(newf,st);
end;
close(f);
reset(f);
jmp(c+b);
whilenot eof(f) dobegin
readln(f,st);
writeln(newf,st);
end;
close(f);
close(newf);
end.
Но, когда я написал отдельную процедуру для записи в новый файл, программа стала работать некорректно. Исходный файл: aaa bbb ccc ddd fff hhh jjj kkk lll xxx yyy zzz
А=2, В=2, С=5. То есть видно, что не записывается по одной строки в каждом обмениваемом блоке. Вот код:
program code;
var a,b,c,j :integer;
f,newf: text;
st:string;
procedure jmp(x: integer);
var i: integer;
s: string;
beginfor i:=1to x-1do
readln(f,s);
end;
procedure work(y: integer);
var i: integer;
s: string;
beginfor i:=1to y do
readln(f,s);
writeln(newf,s);
end;
begin
assign(f,'xx.txt');
reset(f);
assign(newf,'yy.txt');
rewrite(newf);
readln(a);
readln(b);
readln(c);
work(a-1);
close(f);
reset(f);
jmp(c);
work(b);
close(f);
reset(f);
jmp(a+b);
work(c-a-b);
close(f);
reset(f);
jmp(a);
work(b);
close(f);
reset(f);
jmp(c+b);
whilenot eof(f) dobegin
readln(f,st);
writeln(newf,st);
end;
close(f);
close(newf);
end.
Как исправить?
volvo
23.09.2009 18:12
Цитата
Как исправить?
Не понял... У меня после прогона программы (с твоим файлом) файл YY.TXT принял вот такой вид:
aaa fff hhh ddd bbb ccc jjj kkk lll xxx yyy zzz
, то есть, как и запрашивалось...
Rocket
23.09.2009 19:50
Цитата(volvo @ 23.09.2009 15:12)
Не понял... У меня после прогона программы (с твоим файлом) файл YY.TXT принял вот такой вид:
aaa fff hhh ddd bbb ccc jjj kkk lll xxx yyy zzz
, то есть, как и запрашивалось...
Вы запускали program code , верно?
volvo
23.09.2009 20:18
Да, именно его.
Rocket
23.09.2009 20:34
Цитата(volvo @ 23.09.2009 17:18)
Да, именно его.
Хм... а у меня упорно YY.txt принимает вид:
Цитата
aaa hhh ddd ccc jjj kkk lll xxx yyy zzz
Чертовщина?!
volvo
23.09.2009 20:38
Скорее, влияет то, что я компилирую FPC 2.2.0... Турбо Паскаль мне пока недоступен.
Lapp
24.09.2009 9:18
Цитата(volvo @ 23.09.2009 17:38)
Скорее, влияет то, ...
Явно повлияло то, что в процедуре Work оператор WriteLn выпал из цикла.. Rocket, учись делать правильные отступы, иначе намучишься с такими проблемами. И других намучишь, потому что крыша едет, когда такое смотришь - воистину:
Цитата(Rocket @ 23.09.2009 17:34)
Чертовщина?!
Но стоит отформатировать - и сразу все становится ясно)).
Lapp
24.09.2009 10:12
Еще пара замечаний: 1. Не нужно делать Close перед Reset. 2. Для пропуска строки не нужен параметр: ReadLn(f). Соответственно, пропадает надобность в переменной s в процедуре Jmp (которую лучше назвать Jump все же)).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.