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

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

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

 
 Ответить  Открыть новую тему 
> НАЙДИТЕ ПЛИЗ ОШИБКУ, Динамическая память и указатели
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

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


Задание внизу на фотке!!!!!!!!!!
(Надо делать задание 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.


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



Сообщение отредактировано: мисс_граффити -


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


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


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

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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


вот так на некоторых файлах работает:
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.

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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

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


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

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.



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


Гость






Во-первых,

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

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

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


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

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


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.




Сообщение отредактировано: Neon6868 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Человек
*****

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

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


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

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

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

Сообщение отредактировано: compiler -


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






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

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)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

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


Просто в задании надо передать параметры (t,i,j) и сделать так, чтобы,если в тексте менее N строк, последние элементы массива были равны nil. Но всё равно спасибо!!! smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


volvo, а можно вопрос?..
открывать сообщение или нет - на твое усмотрение.
Что тебе дает передача этого массива? Он же в процедуре не используется...
То есть что изменится, если мы напишем не так, а
Procedure Myswap(var i,j:ptrstr);
?
если я правильно поняла, будет ровно та же процедура, что у меня... только имена другие.

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



Сообщение отредактировано: volvo -


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

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


Я файл разделил на строки и прога стала работать! Но в задании наверно надо не обрезать строки а разделить текст на строки равной длины!! Такое возможно?????
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

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

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


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

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

Возможно.Просмотреть количество слов в файле,и разбить строки на равные.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

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


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

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


А как это можно сделать????
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Помощник капитана
****

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

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


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

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


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

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


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

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

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


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




Сообщение отредактировано: Neon6868 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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