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

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

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

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


Знаток
****

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

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


Всем привет! В данный момент пытаюсь реализовать следующую задачу: нужно в текстовом файле (кол-во) В строк с позиции(строка) А поменять местами с В строками позиции(строки) С, то есть какбы переставить их местами. А,В,С вводятся с клавиатуры.
Вот мои наработки:

programm perstr;
var a,b,c,j :integer;
f,newf: text;
st:string;

procedure jmp(x: integer);
var i: integer;
s: string;
begin
for i:=1 to x-1 do
readln(f1,s);
end;


begin

assign(f,'xx.txt');
reset(f);

assign(newf,'yy.txt');
reset(newf);

readln(a);
readln(b);
readln©;

for j:=1 to a-1 do
begin
readln(f,st);
writeln(newf,st);
end;

close(f);
reset(f);
jmp©;

for j:=1 to b-1 do
begin
readln(f,st);
writeln(newf,st);
end;

close(f);
reset(f);
jmp(a+b);

for j:=1 to c-a-b do
begin
readln(f,st);
writeln(newf,st);
end;

close(f);
reset(f);
jmp(a);

for j:=1 to b do
begin
readln(f,st);
writeln(newf,st);
end;

close(f);
close(newf);

end.


Есть сообщение об ошибке: отсутствует begin. Скажу честно, pascal подзабыл.
Какие будут замечание, предложения по реализации? Как довести это до ума?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Есть сообщение об ошибке: отсутствует begin.
Нет слова Programm в Паскале, поэтому компилятор тебя и не понимает... Убери лишнюю букву и исправляй ошибки дальше (у тебя там еще неописанные переменные есть).
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Знаток
****

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

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


Цитата(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;
begin
for i:=1 to x-1 do
readln(f,s);
end;


begin

assign(f,'xx.txt');
reset(f);

assign(newf,'yy.txt');
rewrite(newf);

readln(a);
readln(b);
readln©;

for j:=1 to a-1 do
begin
readln(f,st);
writeln(newf,st);
end;

close(f);
reset(f);
jmp©;

for j:=1 to b do
begin
readln(f,st);
writeln(newf,st);
end;

close(f);
reset(f);
jmp(a+b);

for j:=1 to c-a-b do
begin
readln(f,st);
writeln(newf,st);
end;

close(f);
reset(f);
jmp(a);

for j:=1 to b do
begin
readln(f,st);
writeln(newf,st);
end;

close(f);
reset(f);
jmp(c+b);

while not eof(f) do
begin
readln(f,st);
writeln(newf,st);
end;

close(f);
close(newf);

end.


Но, когда я написал отдельную процедуру для записи в новый файл, программа стала работать некорректно.
Исходный файл:
aaa
bbb
ccc
ddd
fff
hhh
jjj
kkk
lll
xxx
yyy
zzz

Новый файл:
aaa
hhh
ddd
ccc
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;
begin
for i:=1 to x-1 do
readln(f,s);
end;

procedure work(y: integer);
var i: integer;
s: string;
begin
for i:=1 to 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©;

work(a-1);
close(f);
reset(f);
jmp©;

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);

while not eof(f) do
begin
readln(f,st);
writeln(newf,st);
end;

close(f);
close(newf);
end.


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


Гость






Цитата
Как исправить?
Не понял... У меня после прогона программы (с твоим файлом) файл YY.TXT принял вот такой вид:
aaa
fff
hhh
ddd
bbb
ccc
jjj
kkk
lll
xxx
yyy
zzz
, то есть, как и запрашивалось...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Знаток
****

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

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


Цитата(volvo @ 23.09.2009 15:12) *

Не понял... У меня после прогона программы (с твоим файлом) файл YY.TXT принял вот такой вид:
aaa
fff
hhh
ddd
bbb
ccc
jjj
kkk
lll
xxx
yyy
zzz
, то есть, как и запрашивалось...

Вы запускали program code , верно?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Да, именно его.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Знаток
****

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

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


Цитата(volvo @ 23.09.2009 17:18) *

Да, именно его.

Хм... а у меня упорно YY.txt принимает вид:
Цитата

aaa
hhh
ddd
ccc
jjj
kkk
lll
xxx
yyy
zzz

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


Гость






Скорее, влияет то, что я компилирую FPC 2.2.0... Турбо Паскаль мне пока недоступен.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(volvo @ 23.09.2009 17:38) *
Скорее, влияет то, ...
Явно повлияло то, что в процедуре Work оператор WriteLn выпал из цикла.. smile.gif
Rocket, учись делать правильные отступы, иначе намучишься с такими проблемами. И других намучишь, потому что крыша едет, когда такое смотришь - воистину:
Цитата(Rocket @ 23.09.2009 17:34) *
Чертовщина?!
Но стоит отформатировать - и сразу все становится ясно)).


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Еще пара замечаний:
1. Не нужно делать Close перед Reset.
2. Для пропуска строки не нужен параметр: ReadLn(f). Соответственно, пропадает надобность в переменной s в процедуре Jmp (которую лучше назвать Jump все же)).


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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