![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Rocket |
![]()
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Всем привет! В данный момент пытаюсь реализовать следующую задачу: нужно в текстовом файле (кол-во) В строк с позиции(строка) А поменять местами с В строками позиции(строки) С, то есть какбы переставить их местами. А,В,С вводятся с клавиатуры.
Вот мои наработки:
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(c);
for j:=1 to a-1 do
begin
readln(f,st);
writeln(newf,st);
end;
close(f);
reset(f);
jmp(c);
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 подзабыл. Какие будут замечание, предложения по реализации? Как довести это до ума? |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Есть сообщение об ошибке: отсутствует begin. Нет слова Programm в Паскале, поэтому компилятор тебя и не понимает... Убери лишнюю букву и исправляй ошибки дальше (у тебя там еще неописанные переменные есть). |
Rocket |
![]()
Сообщение
#3
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Нет слова 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(c);
for j:=1 to a-1 do
begin
readln(f,st);
writeln(newf,st);
end;
close(f);
reset(f);
jmp(c);
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(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);
while not eof(f) do
begin
readln(f,st);
writeln(newf,st);
end;
close(f);
close(newf);
end.
Как исправить? |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата Как исправить? Не понял... У меня после прогона программы (с твоим файлом) файл YY.TXT принял вот такой вид:aaa |
Rocket |
![]()
Сообщение
#5
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Да, именно его.
|
Rocket |
![]()
Сообщение
#7
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Скорее, влияет то, что я компилирую FPC 2.2.0... Турбо Паскаль мне пока недоступен.
|
Lapp |
![]()
Сообщение
#9
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Скорее, влияет то, ... Явно повлияло то, что в процедуре Work оператор WriteLn выпал из цикла.. ![]() Rocket, учись делать правильные отступы, иначе намучишься с такими проблемами. И других намучишь, потому что крыша едет, когда такое смотришь - воистину: Чертовщина?! Но стоит отформатировать - и сразу все становится ясно)).-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Lapp |
![]()
Сообщение
#10
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Еще пара замечаний:
1. Не нужно делать Close перед Reset. 2. Для пропуска строки не нужен параметр: ReadLn(f). Соответственно, пропадает надобность в переменной s в процедуре Jmp (которую лучше назвать Jump все же)). -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 9:21 |