Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 22.01.2018
Сообщений: 2

Ссылка на объект не указывает на экземпляр объекта

22.01.2018, 17:30. Показов 926. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, в чем может быть проблема. Программа выдает список вершин являйщихся: листьями, не листьями, родителми листьев, и список вершин заданного уровня. Все вроде работает НО
Ошибка возникает в процедуре PrintFath, в строке WRITELN(Temp^.Name).

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
PROGRAM Tree(INPUT, OUTPUT);
TYPE
  Ukaz = ^Node;
  Node = RECORD
           Name: STRING;       // имя узла
           Urov: INTEGER;    // уровень узла в исходном дереве
           Flag: BOOLEAN;    // является ли сын последним
           Left, Right: Ukaz;  // сыновья узла
           Fath: Ukaz;       // отец узла
         END;
 
VAR
  FIn: TEXT;
  Prev, kon, Root, P: ^Node;
  Check: BOOLEAN;
  I, N, Len, treeLevel, Level, L, tmp: INTEGER;
  Str, VertexName: STRING;
 
 
 
PROCEDURE PrintLeaf(Prev: Ukaz);
BEGIN
  IF (Prev <> NIL) 
  THEN
    BEGIN
      IF (Prev^.Left = NIL) //нет сыновей
      THEN    
        WRITELN(Prev^.Name);
      PrintLeaf(Prev^.Left);
      PrintLeaf(Prev^.Right);
    END
END;
 
 
PROCEDURE PrintNotLeaf(Prev: Ukaz);
BEGIN
 
  IF (Prev <> NIL)
  THEN
    BEGIN
      IF (Prev^.Left <> NIL)  //есть сыновья
      THEN       
        WRITELN(Prev^.Name);
      PrintNotLeaf(Prev^.Left);
      PrintNotLeaf(Prev^.Right);
    END
END;
 
 
PROCEDURE PrintFath(Check: BOOLEAN; Prev: Ukaz);
VAR
  Temp: Ukaz;
BEGIN
  IF (Prev <> NIL)
  THEN
    BEGIN
      IF (Prev^.Left = NIL) 
      THEN    
        BEGIN
          IF (Check = FALSE)
          THEN
            BEGIN
            
            // WRITELN(Prev^.Fath^.Name);
              New(Temp);
              Temp := Prev^.Fath;  
              WRITELN(Temp^.Name);
            END;
          Check:= TRUE;
          PrintFath(Check, Prev^.Right);
        END
      ELSE
        BEGIN
          Check:= FALSE;
          PrintFath(Check, Prev^.Left);
          Check:= FALSE;
          PrintFath(Check, Prev^.Right);
        END;
    END
END;
 
PROCEDURE PrintVertexexOnLevel(Level: INTEGER; Prev: Ukaz);
BEGIN
  IF (Prev <> NIL) 
  THEN
    BEGIN
      IF (Prev^.Urov = Level)
      THEN
        WRITELN(Prev^.Name);
      PrintVertexexOnLevel(Level, Prev^.Left);
      PrintVertexexOnLevel(Level, Prev^.Right);
    END
END;
 
 
 
 
 
BEGIN
  ASSIGN(FIn,'input.txt');
  RESET(FIn);
  READLN(FIn, Str);
  
  New(Root);
 
  Root^.Name := Str;
  Root^.Urov := 0;
  treeLevel := 0;
  Root^.Flag := TRUE;     // флаг true -последний сын корня, false - нет
  Root^.Fath := NIL;      // корень дерева не имеет отца
  N := 0;                 // уровень вершины дерева
  Prev := Root;           // предыдущая вершина для следующей в файле
  WHILE NOT EOF (FIn) 
  DO
    BEGIN
      READLN(FIn, Str);
      L := 0; // инициализируем уровень вершины
      Len := Length(Str);
      WHILE Str[L+1] = '.' 
      DO
        L := L + 1;    // определение уровня вершины
      IF L > treeLevel 
      THEN
        treeLevel := L;
      VertexName := Copy(Str, L + 1, Len - L);        // опред имя вершины
      New(kon);
      kon^.Name := VertexName;
      kon^.Left := NIL;
      kon^.Right := NIL;
      kon^.Urov := L;
      IF L > N   // переход к следующему уровню вершин
      THEN             
        BEGIN
          Prev^.left := kon;
          kon^.Fath := Prev;     
          kon^.Flag := TRUE;     // последний сын
        END
      ELSE   // продолжение на этом уровне
        IF L = N 
        THEN  
          BEGIN
            Prev^.Right := kon;
            kon^.Fath := Prev^.Fath;  // тот же отец
            Prev^.Flag := FALSE;      // снятие признака не последнего сына
            kon^.Flag := TRUE;        // последний сын
          END
        ELSE                    // подъем по дереву на  N - K уровней
          BEGIN
            P := Prev;
            FOR I := 1 TO N - L 
            DO
              P:= P^.fath; // P - предыдущая вершина того же уровня
            
            kon^.Fath := P^.Fath; // отец тот же что и у брата
            P^.Right := kon;
            P^.Flag := FALSE;     // смена принака последнего сына
            kon^.Flag := TRUE;   //  новый посд сын
          END;
      N := L;      // текущий уровень
      Prev := kon;     // след вершина
    END;     
   Close(FIn);
 
 
   REPEAT
    Writeln('Выдать список вершин являйщихся:');
    WriteLn('1. Листьями');
    WriteLn('2. Не листьями');
    WriteLn('3. Родители листьев');
    WriteLn('4. Список вершин заданного уровня от вершины');
    WriteLn('5. Выход');
    Write('Выбираем : ');
    ReadLn(Tmp);         {  номер пункта меню }
    Case Tmp Of
      1 : Begin
            PrintLeaf(Root);
            WriteLn;
          END;  
      2 : Begin
            PrintNotLeaf(Root);
            Writeln;
          End;  
      3 : Begin
            Check:= False;
            PrintFath(Check, Root);
            Writeln;
          end;
      4 : Begin
            Write('Укажите уровень вершины: ');
            Readln(Level);
            if Level > treeLevel then
              Begin
                Writeln('Неверный уровень');
                Exit;
              end;
            PrintVertexexOnLevel(Level, Root);
            Writeln;
          end;
      5 : Halt
    End
  Until False
 
END.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.01.2018, 17:30
Ответы с готовыми решениями:

Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта
var l, p, rlog, rpass: text; var log, pass:string; begin rewrite(l,'log.txt'); rewrite(p,'pass.txt'); assign(l,...

Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта
Добрый день! Подскажите, пожалуйста, что здесь не так? var Fin, Fout : Text; N, M, nmin: integer; a, b, x: array of integer; ...

Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта
1 процедура создает очередь, 2 - вставляет после каждого положительного элемента заданное число, а 3 - должна сортировать очередь по...

3
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
22.01.2018, 17:32
Турбо-Паскаль таких ошибок не выдает. Компилируешь код в PascalABC.NET?
0
0 / 0 / 0
Регистрация: 22.01.2018
Сообщений: 2
22.01.2018, 17:33  [ТС]
да. в pascalABC.NET и The Dev+GNU Pascal IDE выдает эту ошибку
0
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
26.01.2018, 09:37
otb_redBaron, компилировал в pabc.net версии 3.3, не было такой ошибки. Файл input.txt приложите.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.01.2018, 09:37
Помогаю со студенческими работами здесь

Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта (массив изображений)
uses GraphABC; var p : array of picture; begin for var j := 1 to 2 do p := picture.Create(j+'.png'); for var j := 0 to 9 do ...

Program1.pas(8) : Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта
program files; var f,g:text;x:integer; begin assign(f,'E:\1.txt'); assign(g,'E:\chet.txt'); reset(f); rewrite(g);while not eof(f)...

Ссылка на объект не указывает на экземпляр объекта
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using VkNet; ...

Ссылка на объект не указывает на экземпляр объекта
Привет Всем! Помогите пожалуйста найти ошибку for (int i = 0; i &lt; dataGridView2.RowCount; i++) dataGridView2.Value = ...

Ссылка на объект не указывает на экземпляр объекта
public static string ReadBd(string name) { MySqlConnection myConnection = new MySqlConnection(connect); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru