Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ НАЙДИТЕ ПЛИЗ ОШИБКУ

Автор: Neon6868 9.03.2007 3:05

Задание внизу на фотке!!!!!!!!!!
(Надо делать задание 2.3!!!)
Программа должна поменять 2 строки текста.Но она почему-то ничего не меняет!!!!! angry.gif
Вот программа:

Program DP;
const
d=250;
n=10;
k=25;
type
st=string[d];
ptrstr=^st;
mytext=array [1..n] of ptrstr;
t2=^mytext;
var
i,j:integer;
t:t2;
t1:text;
Procedure Myswap(var t:t2;i,j:integer);
var
a:ptrstr;
Begin
a:=t^[i];
t^[i]:=t^[j];
t^[j]:=a;
End;
Begin
assign(t1,'G:\abc.txt');
reset(t1);
new(t);
writeln;
for i:=1 to n do t^[i]:=nil;
for i:=1 to n do
begin
writeln;
for j:=1 to k do
begin
read(t1,t^[i]^[j]);
write(t^[i]^[j]);
end;
close(t1);
end;
writeln;
writeln('Vvedite i-uyu stroky matrici:');
readln(i);
writeln('Vvedite j-uyu stroky matrici:');
readln(j);
reset(t1);
myswap(t,i,j);
writeln('Preobrazovanii tekst:');
for i:=1 to n do
begin
writeln;
for j:=1 to k do
begin
read(t1,t^[i]^[j]);
write(t^[i]^[j]);
end;
end;
close(t1);
dispose(t);
End.


М
Теги!
мисс_граффити




Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: мисс_граффити 9.03.2007 3:31

такие ошибки и компилятор прекрасно ловит:
Файл не открыт для чтения.
Сделал бы нормальное форматирование - увидел бы:

    for i:=1 to n do
begin
writeln;
for j:=1 to k do
begin
read(t1,t^[i]^[j]);
write(t^[i]^[j]);
end;
close(t1);
end;

файл закрывается внутри цикла чтения....

Автор: мисс_граффити 9.03.2007 4:46

вот так на некоторых файлах работает:

Program DP;
const
d=250;
n=4;
k=10;
type
st=string[d];
ptrstr=^st;
mytext=array [1..n] of ptrstr;
t2=^mytext;
var
i,j:integer;
t:t2;
t1:text;
Procedure Myswap(var t_i,t_j:ptrstr);
var
a:ptrstr;
Begin
a:=t_i;
t_i:=t_j;
t_j:=a;
End;

Begin
assign(t1,'C:\abc.txt');
reset(t1);
new(t);
writeln;
for i:=1 to n do
begin
t^[i]^:='HereIsText';
for j:=1 to k do
read(t1,t^[i]^[j]);
writeln(t^[i]^);
end;
writeln;
writeln('Vvedite i-uyu stroky matrici:');
readln(i);
writeln('Vvedite j-uyu stroky matrici:');
readln(j);
myswap(t^[i],t^[j]);
writeln('Preobrazovanii tekst:');
for i:=1 to n do
writeln(t^[i]^);
close(t1);
dispose(t);
readln;
End.

Если в файле есть разбивка по строкам - могут быть проблемы...

Автор: Neon6868 10.03.2007 0:34

Я изменил прогу а она опять не работает!!!!!
Вот прога:


Program DP;
const
d=250;
n=10;
k=25;
type
st=string[d];
ptrstr=^st;
mytext=array [1..n] of ptrstr;
t2=^mytext;
var
x,y:integer;
t:t2;
t1:text;
i,j:ptrstr;
Procedure Myswap(var t:t2;var i,j:ptrstr);
var
a:ptrstr;
Begin
a:=i;
i:=j;
j:=a;
End;
Begin
assign(t1,'G:\abc.txt');
reset(t1);
new(t);
writeln;
for x:=1 to n do t^[x]:=nil;
for x:=1 to n do
begin
writeln;
for y:=1 to k do
begin
read(t1,t^[x]^[y]);
write(t^[x]^[y]);
end;
end;
close(t1);
reset(t1);
writeln;
writeln('Vvedite i-uyu stroky matrici:');
readln(x);
writeln('Vvedite j-uyu stroky matrici:');
readln(y);
myswap(t,t^[i],t^[j]);
writeln('Preobrazovanii tekst:');
for x:=1 to n do
begin
writeln;
for y:=1 to k do
begin
read(t1,t^[x]^[y]);
write(t^[x]^[y]);
end;
end;
close(t1);
dispose(t);
End.




Автор: volvo 10.03.2007 0:46

Во-первых,

var
x,y:integer;
t:t2;
t1:text;
i,j:integer; { <--- А не то, что было ... }

иначе программа не будет даже компилироваться, не то что работать...

А во вторых, где ты присваиваешь I и J какие-нибудь значения в основной программе? Другими словами, какие элементы ты меняешь местами в Myswap, объясни?

Автор: Neon6868 10.03.2007 1:13

i и j я ввожу с клавиатуры!!!!!
Вот переделал, но всё равно не работает!!!


Program DP;
const
d=250;
n=10;
k=25;
type
st=string[d];
ptrstr=^st;
mytext=array [1..n] of ptrstr;
t2=^mytext;
var
x,y:integer;
t:t2;
t1:text;
i,j:integer;
Procedure Myswap(var t:t2;var i,j:ptrstr);
var
a:ptrstr;
Begin
a:=i;
i:=j;
j:=a;
End;

Begin
assign(t1,'G:\abc.txt');
reset(t1);
new(t);
writeln;
for x:=1 to n do t^[x]:=nil;
for x:=1 to n do
begin
writeln;
for y:=1 to k do
begin
read(t1,t^[x]^[y]);
write(t^[x]^[y]);
end;
end;
close(t1);
reset(t1);
writeln;
writeln('Vvedite i-uyu stroky matrici:');
readln(i);
writeln('Vvedite j-uyu stroky matrici:');
readln(j);
myswap(t,t^[x],t^[y]);
writeln('Preobrazovanii tekst:');
for x:=1 to n do
begin
writeln;
for y:=1 to k do
begin
read(t1,t^[x]^[y]);
write(t^[x]^[y]);
end;
end;
close(t1);
dispose(t);
End.



Автор: мисс_граффити 10.03.2007 1:26

Извини, а чем тебя не устроил мой код?
Не спорю, простор для оптимизации есть. Но он хотя бы работает!

Автор: compiler 10.03.2007 1:29

Цитата(Neon6868 @ 9.03.2007 20:13) *

i и j я ввожу с клавиатуры!!!!!
Вот переделал, но всё равно не работает!!!

ИМХО, ошибка в переменных... (локальные/глобальные) работать надо в этом направлении...

Автор: volvo 10.03.2007 1:42

Здесь телепатов, чтобы разбираться, КАКОЙ у тебя входной файл - нету... Вот это работает на МОЕМ файле. Надо - бери и смотри, что я поменял, может, и переделаешь под то, что надо ТЕБЕ...

Program DP;

const
d = 250;
n = 10;
k = 25;

type
st = string[d];
ptrstr = ^st;
mytext = array[1 .. n] of ptrstr;
t2=^mytext;
var
x, y: integer;
t: t2;
t1: text;
i, j: integer;

Procedure Myswap(var t:t2;var i,j:ptrstr);
var a:ptrstr;
Begin
a:=i;
i:=j;
j:=a;
End;

Begin
assign(t1,'abc.txt');
reset(t1);
new(t);
writeln;

for x:=1 to n do t^[x]:=nil;

for x:=1 to n do begin
new(t^[x]);
writeln;
for y:=1 to k do begin
read(t1,t^[x]^[y]);
write(t^[x]^[y]);
end;
readln(t1);
end;

close(t1);
reset(t1);
writeln;
writeln('Vvedite i-uyu stroky matrici:');
readln(i);
writeln('Vvedite j-uyu stroky matrici:');
readln(j);
myswap(t,t^[i],t^[j]);
writeln('Preobrazovanii tekst:');
for x:=1 to n do begin
writeln;
for y:=1 to k do begin
{ read(t1,t^[x]^[y]); }
write(t^[x]^[y]);
end;
end;
close(t1);
dispose(t);
End.

(предупреждаю сразу, чтоб потом ни у кого не было желания говорить об ошибке: моя программа содержит memory leak, да, я знаю... КАК исправить - знаю, но делать не буду, ибо лень... Автору лень форматировать код как положено, а мне лень убрать leak)

Автор: Neon6868 10.03.2007 1:44

Просто в задании надо передать параметры (t,i,j) и сделать так, чтобы,если в тексте менее N строк, последние элементы массива были равны nil. Но всё равно спасибо!!! smile.gif

Автор: мисс_граффити 10.03.2007 2:15

volvo, а можно вопрос?..
открывать сообщение или нет - на твое усмотрение.
Что тебе дает передача этого массива? Он же в процедуре не используется...
То есть что изменится, если мы напишем не так, а

Procedure Myswap(var i,j:ptrstr);
?
если я правильно поняла, будет ровно та же процедура, что у меня... только имена другие.

М
Я просто не обратил внимание на эту процедуру... Как она была, так и оставил. Можно и убрать, конечно...
volvo


Автор: Neon6868 10.03.2007 2:57

Я файл разделил на строки и прога стала работать! Но в задании наверно надо не обрезать строки а разделить текст на строки равной длины!! Такое возможно?????

Автор: Egor Vladimirovich 10.03.2007 14:00

Цитата(Neon6868 @ 9.03.2007 22:57) *

Я файл разделил на строки и прога стала работать! Но в задании наверно надо не обрезать строки а разделить текст на строки равной длины!! Такое возможно?????

Возможно.Просмотреть количество слов в файле,и разбить строки на равные.

Автор: Neon6868 10.03.2007 17:23

Цитата(Egor Vladimirovich @ 10.03.2007 10:00) *

Возможно.Просмотреть количество слов в файле,и разбить строки на равные.


А как это можно сделать????

Автор: Артемий2 10.03.2007 17:52

Цитата
А как это можно сделать????

Посмотреть количество слов в файле? Ну раз ты разбивал файл на строки, ничего не будет стоить разбить строки на слова.. Вот сюда: http://forum.pascal.net.ru/index.php?showtopic=6972

Автор: Neon6868 10.03.2007 18:31

Прога теперь работает. yahoo!.gif Всем большое спасибо за помощь!!!!! 4.gif

Добавлено через 4 мин.

Цитата(Артемий2 @ 10.03.2007 13:52) *

Посмотреть количество слов в файле? Ну раз ты разбивал файл на строки, ничего не будет стоить разбить строки на слова.. Вот сюда: http://forum.pascal.net.ru/index.php?showtopic=6972


Спасибо, но разбивать на слова я лучше не буду!!! smile.gif