Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу здесь за 20 тыс руб в месяц! alarforum@yandex.ru


Ответ
 
Опции темы
Старый 02.01.2012, 16:05   #1
Comst95
Новичок
Джуниор
 
Регистрация: 02.01.2012
Сообщений: 1
Вопрос Проблема с взаимодействием динамической и статической памяти - обращение к статической переменной

Здравствуйте!
Помогите решить проблему!
Задача такая: написать сортировку бинарным деревом, так что бы данные читались из текстового файла.
В текстовом файле:
"<имя> <число>"
и таких строчек неограниченное количество (собственно поэтому и нужно бинарное дерево).
Программа у меня написана, но есть проблема с чтением из файла. Я не знаю как обратится из динамической памяти к статической переменной.
Собственно, вот исходник (код):
[PASCAL]
type pointer=^pokupka;
pokupka= record
nazv:string;
cena:integer;
leftointer;
rightointer;

end;
var root,tempointer;
c:char;
m:integer;
input,output:text;
i,code: integer;
s: string;
procedure vvod(root,tempointer); {здесь идет сортировка деревом}
begin
if ((root^.cena>=temp^.cena) and (root^.left<>nil)) then
vvod(root^.left,temp);

if ((root^.cena>=temp^.cena) and (root^.left=nil)) then
root^.left:=temp;

if ((root^.cena<temp^.cena) and (root^.right<>nil)) then
vvod(root^.right,temp);

if ((root^.cena<temp^.cena) and (root^.right=nil)) then
root^.right:=temp;
end;

procedure vuvod(rootointer); {здесь вывод дерева}
begin
if root^.left<>nil then
vuvod(root^.left);

writeln(root^.nazv,' ',root^.cena);

if root^.right<>nil then
vuvod(root^.right);
end;

begin
new(root);
root:=nil;
i:=0;
assign(input,'nput.txt');
assign(output,'output.txt');
reset(input);
rewrite(output);
while not eof(input) do begin

repeat
read(input,c);
if c<>' ' then s:=s+c;
until c=' ';
temp^.nazv:=@s; {//////////проблема начинается здесь////////}
read(input,m);
temp^.cena:=m;
new(temp);
temp^.left:=nil;
temp^.right:=nil;
if root=nil then root:=temp
else vvod(root, temp);
end;
vuvod(root);
end.

[/PASCAL]

Последний раз редактировалось Comst95; 02.01.2012 в 17:33.
Comst95 вне форума Ответить с цитированием
Старый 03.01.2012, 17:46   #2
ViktorR
Участник клуба
 
Регистрация: 23.10.2010
Сообщений: 1,647
По умолчанию

1. Наверное не следует переопределять резервные слова.
Pointer - безтиповой указатель.
Код:
type   pnode = ^pokupka;
      pokupka = record
          nazv: string;
          cena: integer;
          left : pnode;
          righ : pnode;
      end;
var root,temp : pnode;
И так в других местах.
2. В том месте где идёт присвоение строки следует указать саму строку, а не адрес, с которого она начинается, поскольку поле nazv имеет тип string.

Код:
temp^.nazv := s;
Как-то так ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключение статической библиотеки к C# К_І C# (си шарп) 2 11.11.2011 14:41
адрес статической переменной EUGY Общие вопросы C/C++ 10 16.08.2011 22:14
Кольцевая очередь на массиве в статической памяти с элементами в динамической памяти ]tach[ Общие вопросы C/C++ 1 19.01.2011 13:16
Списки в статической памяти. *Натали* Помощь студентам 5 14.04.2010 10:48
объем статической памяти Juffin Общие вопросы Delphi 1 10.11.2009 16:07


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840