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

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

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

 
 Ответить  Открыть новую тему 
> НАЙДИТЕ ПЛИЗ ОШИБКУ, Динамическая память и указатели
Neon6868
сообщение 8.03.2007 23:05
Сообщение #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.


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



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


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 8.03.2007 23:31
Сообщение #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 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 9.03.2007 0:46
Сообщение #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 
 К началу страницы 
+ Ответить 
Neon6868
сообщение 9.03.2007 20:34
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.03.2007 20:46
Сообщение #5


Гость






Во-первых,

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

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

А во вторых, где ты присваиваешь I и J какие-нибудь значения в основной программе? Другими словами, какие элементы ты меняешь местами в Myswap, объясни?
 К началу страницы 
+ Ответить 
Neon6868
сообщение 9.03.2007 21:13
Сообщение #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 - 9.03.2007 21:25
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 9.03.2007 21:26
Сообщение #7


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

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

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


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


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


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

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

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


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

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

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

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


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.03.2007 21:42
Сообщение #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)
 К началу страницы 
+ Ответить 
Neon6868
сообщение 9.03.2007 21:44
Сообщение #10


Пионер
**

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

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


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


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

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

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


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

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



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


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


Пионер
**

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

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


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


Новичок
*

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

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


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

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

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


Пионер
**

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

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


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

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


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


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

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

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


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

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


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


Пионер
**

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

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


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

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

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


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




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

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

 



- Текстовая версия 6.07.2025 16:59
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"