Помощь - Поиск - Пользователи - Календарь
Полная версия: НАЙДИТЕ ПЛИЗ ОШИБКУ
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Neon6868
Задание внизу на фотке!!!!!!!!!!
(Надо делать задание 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.


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

мисс_граффити
такие ошибки и компилятор прекрасно ловит:
Файл не открыт для чтения.
Сделал бы нормальное форматирование - увидел бы:
    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;

файл закрывается внутри цикла чтения....
мисс_граффити
вот так на некоторых файлах работает:
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
Я изменил прогу а она опять не работает!!!!!
Вот прога:

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
Во-первых,

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

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

А во вторых, где ты присваиваешь I и J какие-нибудь значения в основной программе? Другими словами, какие элементы ты меняешь местами в Myswap, объясни?
Neon6868
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.


мисс_граффити
Извини, а чем тебя не устроил мой код?
Не спорю, простор для оптимизации есть. Но он хотя бы работает!
compiler
Цитата(Neon6868 @ 9.03.2007 20:13) *

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

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

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
Просто в задании надо передать параметры (t,i,j) и сделать так, чтобы,если в тексте менее N строк, последние элементы массива были равны nil. Но всё равно спасибо!!! smile.gif
мисс_граффити
volvo, а можно вопрос?..
открывать сообщение или нет - на твое усмотрение.
Что тебе дает передача этого массива? Он же в процедуре не используется...
То есть что изменится, если мы напишем не так, а
Procedure Myswap(var i,j:ptrstr);
?
если я правильно поняла, будет ровно та же процедура, что у меня... только имена другие.

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

Neon6868
Я файл разделил на строки и прога стала работать! Но в задании наверно надо не обрезать строки а разделить текст на строки равной длины!! Такое возможно?????
Egor Vladimirovich
Цитата(Neon6868 @ 9.03.2007 22:57) *

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

Возможно.Просмотреть количество слов в файле,и разбить строки на равные.
Neon6868
Цитата(Egor Vladimirovich @ 10.03.2007 10:00) *

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


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

Посмотреть количество слов в файле? Ну раз ты разбивал файл на строки, ничего не будет стоить разбить строки на слова.. Вот сюда: Разбиение на слова
Neon6868
Прога теперь работает. yahoo!.gif Всем большое спасибо за помощь!!!!! 4.gif

Добавлено через 4 мин.
Цитата(Артемий2 @ 10.03.2007 13:52) *

Посмотреть количество слов в файле? Ну раз ты разбивал файл на строки, ничего не будет стоить разбить строки на слова.. Вот сюда: Разбиение на слова


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


Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.