Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620

Нельзя преобразовать тип ^TElem к integer

27.03.2019, 21:19. Показов 2614. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пытаюсь по этому:
Кликните здесь для просмотра всего текста
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
uses crt;
type
PNode=^Node;  {Указатель на узел}
 Node=record  {Тип запись в котором будет храниться информация}
   data:integer;
   left,right:PNode; {Ссылки на левого и правого сыновей}
end;
 
var
  Tree,p1:PNode; {Tree адрес корня дерева, p1-вспомогательная переменная}
  n,x,i:integer;
  ch:char; {для работы менюшки}
 
{Процедура добавления элемента }
procedure AddToTree (var Tree:PNode;x:integer); {Входные параметры - адрес корня дерева и добавл элемент }
begin
 if Tree=nil then  {Если дерево пустое то создаём его корень}
   begin
     New(Tree);   {Выделяем память }
     Tree^.data:=x;     {Добавляем данные }
     Tree^.left:=nil;     {Зануляем указатели на левого }
     Tree^.right:=nil;  {и правого сыновей }
      exit;
   end;
 if x < Tree^.data then   {Доб к левому или правому поддереву это завсит от вводимого элемента}
     AddToTree(Tree^.left,x)  {если меньше корня то в левое поддерево }
  else
    AddToTree(Tree^.right,x);  {если больше то в правое}
end;
примеру разобраться в деревьях, и сделать что-то подобное но с двойной структурой, чтоб в одну дату 2 информации помещались,, так вот, как мне объявить дату, чтобы в строке 46 if Age < T^.Data then и тому подобных, он не писал Нельзя преобразовать тип ^TElem к integer...

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
Uses Crt;
type
  TPElem = ^TElem;
  TElem = record
  Left,Right,Data: TPElem;
    Name : string;
    Age : integer;
    TNext : TPElem;
  end; 
var
  PList, T, Tree : TPElem;
  i:integer;
  begin
    while true do
    begin
        writeLn('Выберите действие');
        writeLn('1 - Добавление');
        writeLn('6 - Exit');
     i := Ord(readKey) - ord('0');
     case i of
  1:
  begin 
    var k:integer;
    var Age:integer;
    Write('Задайте количество сотрудников: ');
    Readln(k);
    for i := 1 to k do
    begin
      if Tree = nil then
      begin
        New(T);
        Tree := T;
      end
      else
      begin
        New(T^.TNext);
        T := T^.TNext;
      end;
      T^.TNext := nil;
      Write('Введите имя: ');
      Readln(T^.Data^.Name);
       Write('Введите возраст: ');
       Readln(Age);
       T^.Data^.Left:=nil;  
       T^.Data^.Right:=nil; 
      if Age < T^.Data then
     T^.Data^.Left:=Age
      else
     T^.Data^.Right:=Age;
    end; 
    end;
   6:
   exit
end;  
end;
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.03.2019, 21:19
Ответы с готовыми решениями:

Ошибка : Нельзя преобразовать тип array [1..8] of integer к integer
Дана целочисленная матрица В размером 5х8. Получить массив С из 0 и 1, в котором Ci=1, если в i –ой строке матрицы есть хотя бы один...

Нельзя преобразовать тип array [1.10] of integer к integer
Пытаюсь преобразовать программный код Mathcad в Паскаль Тут же выходит ошибка, - Нельзя преобразовать тип array of integer к integer ...

Нельзя преобразовать тип array [1.10] of integer к integer
Не робит код в этом месте( uses GraphABC; ... var v: array of Picture; x2,y2: array of integer; ky: integer; ...

43
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
27.03.2019, 22:02
Вам текст в ошибке пишет не для красоты. Вдумайтесь в него и в эти строчки:

Цитата Сообщение от ololo111 Посмотреть сообщение
TElem = record
* Left,Right,Data: TPElem;
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
28.03.2019, 22:07  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
Вам текст в ошибке пишет не для красоты. Вдумайтесь в него и в эти строчки:
Сообщение от ololo111
TElem = record
* Left,Right,Data: TPElem;
если так сделать
Pascal
1
2
3
4
5
6
7
8
9
Uses Crt;
type
  TPElem = ^TElem;
  TElem = record
    Name : string;
    Age : integer;
    Left,Right,TNext : TPElem;
    Data : ^TPElem;
  end;
то он в 41й строке
Pascal
1
Readln(T^.Data^.Name);
пишет ''Name не объявлен в типе ^TElem''
нэйм же под рекордом объявлен, как в прошлой программе вместо нэйма была дата, точно так же как и нэйм стояла, и без проблем всё работало:
Кликните здесь для просмотра всего текста
Pascal
1
2
3
4
5
6
7
8
type
  TPElem = ^TElem;
  TElem = record
    Data : string;
    PNext : TPElem;
  end; ......
      Write('Введите имя: ');
      Readln(P^.Data);
, а тут не работает, почему не понятно

Добавлено через 100500 минут
мне надо чтоб можно было вводить имя, и имя было списком, и к списку с именем, к каждому именю добавлялось дерево с возрастом,, и чтоб имена можно было сортировать по возрасту, с выводом 1го и 2го.... а как объединить список с деревом, понятия не имею, был бы хотя бы пример какой нибудь...

Добавлено через ☺ минут
......
не понятно как в 1 элемент дерева, вводить 2 значения, хотябы так, без списков,,, чтоб сверху было имя, а снизу либо слева либо справа был возраст....
я думаю что вводится так:
Pascal
1
2
3
4
5
6
type PNode = ^Node;        { указатель на узел } 
     Node = record
       Name: string;  
       Age: byte;
       left, right: PNode; 
     end;
хотя откуда мне знать как правильно, ведь нигде об этом не написано, везде только про дерево с одним элементом, которое и записывается либо влево, либо вправо... а как добавить элемент который не распределяется, неизвестно...
и как вот учиться когда нет нужной информации, везде только чучуть поверхностно показывается, кусочек, а более подробная информация отсутствует, мол думайте сами гадайте сами... я же не бил гейтц блин

Добавлено через ☻ минут
ещё 1 вариант проргаммы,,
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
Uses Crt;
type inform = integer;
  TPElem = ^TElem;
  TElem = record
    key : byte;
    Name : string;
    Age : inform;
    Left,Right,TNext : TPElem;
  end; 
var
  T, Tree : TPElem;
  i:integer;
  begin
    while true do
    begin
        writeLn('Выберите действие');
        writeLn('1 - Добавление');
        writeLn('6 - Exit');
     i := Ord(readKey) - ord('0');
     case i of
  1:
  begin
    var k:integer;
    var x:integer;
    Write('Задайте количество сотрудников: ');
    Readln(k);
    for i := 1 to k do
    begin
      if Tree = nil then
      begin
        New(T);
        Tree := T;
      end
      else
      begin
        New(T^.TNext);
        T := T^.TNext;
      end;
      T^.TNext := nil;
      Write('Введите имя: ');
      Readln(T^.Name);
       Write('Введите возраст: ');
       Readln(x);
       T^.Age:=x;
       T^.key:=42;
       T^.Left:=nil;  
       T^.Right:=nil; 
      if x < T^.Age then
     T^.Left:=x
      else
     T^.Right:=x;
    end; 
    end;
   6:
   exit
end;  
end;
end.
(49) : Нельзя преобразовать тип integer к ^TElem.... (T^.Left:=x), а как тогда занести туда элемент Х? T^.Left^:=x или T^.Left:=@x и тому подобные попытки оканчиваются одинаково,, что здесь не так?
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
29.03.2019, 05:52
Вы пытаетесь по образцу, в котором есть подпрограммы, но почему-то не используете их!

А потом, age и name являются полями той же записи. Зачем к ним пытаться обратиться через data?
Тем более, что эту самую data вы и не создаёте…

А затем пытаетесь присвоить числовое значение туда, куда только что пихнули nil

Pascal
44
45
46
47
48
49
       T^.Data^.Left:=nil;  
       T^.Data^.Right:=nil; 
      if Age < T^.Data then
     T^.Data^.Left:=Age
      else
     T^.Data^.Right:=Age;
Добавлено через 1 минуту
Как-то так:
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
type
  TPElem = ^TElem;
  TElem = record
  Left,Right,Data: TPElem;
    Name : string;
    Age : integer;
    TNext : TPElem;
  end; 
var
  PList, T, Tree : TPElem;
begin
  while true do
    begin
      writeLn('Выберите действие');
      writeLn('1 - Добавление');
      writeLn('6 - Exit');
      var ans := ReadLnString('Выш выбор:').Trim;
      if ans.Length > 0 then
        case ans[1] of
          '1' :
          begin
            var k:integer;
            var Age:integer;
            Write('Задайте количество сотрудников: ');
            Readln(k);
            for var i := 1 to k do
              begin
                if Tree = nil then
                  begin
                    New(T);
                    Tree := T;
                  end
                else
                  begin
                    New(T^.TNext);
                    T := T^.TNext;
                  end;
                T^.TNext := nil;
                Write('Введите имя: ');
                Readln(T^.Name);
                Write('Введите возраст: ');
                Readln(Age);
//                T^.Left:=nil;  
//                T^.Right:=nil; 
//                if Age < T^.Age then
//                  T^.Left:=Age
//                else
//                  T^.Right:=Age;
            end; 
          end;
          '6' : exit
        end;  
    end;
end.
Только, не плохо бы знать, что вы там пытаетесь изобразить?
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
29.03.2019, 17:49  [ТС]
Цитата Сообщение от JuriiMW Посмотреть сообщение
Как-то так:
а как тогда записывать Age в правую ветку или в левую в зависимости от значения?
получается
Pascal
1
2
 T^.Data^.Left:=nil;  
       T^.Data^.Right:=nil;
ветки не надо обнулять? почему-то везде их обнуляют перед вводом туда значения, но нигде не пишется зачем...

блин, вот основная проблема в этих строчках
Pascal
1
2
3
4
if Age < T^.Age then
T^.Left:=Age
else
T^.Right:=Age;
в примерах это делается через процедуры,
Pascal
1
2
3
  if x < Tree^.data then
       AddToTree(Tree^.left, x)
  else AddToTree(Tree^.right, x);
а без процедур это сделать нереально? вот как вот тут бы разобраться....
добавить повторный ReadLn который будет записывать в нужную ветку чтоли, типа такого:
Pascal
1
2
3
4
if Age < T^.Age then
                 Readln(T^.Left)
               else
                 Readln(T^.Right);
а так он тоже не работает, зараза. "Нельзя считывать данные этого типа"
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
29.03.2019, 17:56
Давайте начнём с задания.
Постановку задачи в студию!
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
29.03.2019, 18:07  [ТС]
добавил вывод, вообщем надо как-то починить те закоментеные строчки, с записью Age в левую или правую ветку
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
Uses Crt;
type
  TPElem = ^TElem;
  TElem = record
  Left,Right: TPElem;
    Name : string;
    Age : integer;
    TNext : TPElem;
  end; 
var
  PList, T, Tree : TPElem;
  v:integer;
  begin
    while true do
    begin
        writeLn('Выберите действие');
        writeLn('1 - Добавление');
        writeLn('5 - Вывод');
        writeLn('6 - Exit');
       var ans := ReadLnString('Выш выбор:').Trim;
      if ans.Length > 0 then
        case ans[1] of
          '1' :
          begin
            var k:integer;
            var Age:integer;
            Write('Задайте количество сотрудников: ');
            Readln(k);
            for var i := 1 to k do
              begin
                if Tree = nil then
                  begin
                    New(T);
                    Tree := T;
                  end
                else
                  begin
                    New(T^.TNext);
                    T := T^.TNext;
                  end;
                T^.TNext := nil;
                Write('Введите имя: ');
                Readln(T^.Name);
                Write('Введите возраст: ');
                Readln(T^.Age);
//                T^.Left:=nil;  
//                T^.Right:=nil; 
//                if Age < T^.Age then
//                  T^.Left:=Age
//                else
//                  T^.Right:=Age;
            end; 
          end;
    '5' :begin
    Write('Список: ');
    T := Tree;
    if T = nil then
    write('пуст');
    while T <> nil do
    begin
      Write(T^.Name, ' ');
      Write(T^.Age, ' ');      
      T := T^.TNext;
    end; 
    end;
          '6' : exit
        end;  
    end;
end.
надо как-то дерево сделать, а то у меня опять какой-то список получается...

Добавлено через 5 минут
Цитата Сообщение от JuriiMW Посмотреть сообщение
Давайте начнём с задания.
Постановку задачи в студию!
мне надо чтоб можно было вводить имя и возраст, имя было списком, и к списку с именем, к каждому имени добавлялось дерево с возрастом,, и чтоб имена можно было сортировать по возрасту, с выводом 1го и 2го....

у меня есть полная программа со списком, в которую как раз и нужно добавить дерево, что я и пытаюсь уже 3й день
Кликните здесь для просмотра всего текста
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
Uses Crt;
type
  TPElem = ^TElem;
  TElem = record
    Data : string;
    PNext : TPElem;
  end; 
var
  PList, P : TPElem;
  i:integer;       
  begin
    while true do
    begin
        writeLn;
        writeLn('Выберите действие');
        writeLn('1 - Добавление');
        writeLn('2 - Удаление');
        writeLn('3 - Поиск');
        writeLn('4 - Редактирование');
        writeLn('5 - Вывод');   
        writeLn('6 - Exit');
     readln(i);
     case i of
  1:
  begin 
    var k:integer;
    Write('Задайте количество сотрудников: ');
    Readln(k);
    for i := 1 to k do
    begin
      if PList = nil then
      begin
        New(P);
        PList := P;
      end
      else
      begin
        New(P^.PNext);
        P := P^.PNext;
      end;
      P^.PNext := nil;
      Write('Введите имя: ');
      Readln(P^.Data);
    end; 
    end;
  2:
  begin
    var E:string;   
      if PList = nil then begin
      Write('Список пуст');
      Continue  
      end;
    Write('Задайте имя для удаления: ');
    Read(E);
    while (PList <> nil) and (PList^.Data = E) do
    begin
    P := PList;
      PList := P^.PNext;
      Dispose(P);
    end;
    P := PList;
    if P <> nil then
      while P^.PNext <> nil do
        if P^.PNext^.Data = E then
        begin
          P^.PNext := P^.PNext ^.PNext;
        end
        else
          P := P^.PNext; 
    end;
  3:
    begin
    var
    d:string;
    var flag: boolean;
     P := PList;
     flag := false;
        if P = nil then begin
        Write('Список пуст');
        Continue  
        end;
     writeln('введите имя сотрудника для поиска:');
     read(d);
      while (P <> nil) and (not flag) do
      begin  
        if d = P^.data then
        begin
          flag := true;
         write('имя найдено в списке');
          break;
        end
        else
          P := P^.PNext
      end;
    end; 
   4:
    begin
    var E,R:string;
      if Plist = nil then begin
      Write('Список пуст');
      Continue  
      end;
      P := PList;
    Write('Задайте имя для изменения: ');
    Readln(E);
    while P <> nil do
      if P^.Data = E then
    begin
      Write('Задайте новое имя: ');
      read(R);
      P^.Data:=R;
    end
        else
          P := P^.PNext; 
    end;
   5:
   begin
    Write('Список: ');
    P := PList;
    if P = nil then
    write('пуст');
    while P <> nil do
    begin
      Write(P^.Data, ' ');
      P := P^.PNext;
      end;
      end;
    6: exit
end;  
end;
end.
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
29.03.2019, 18:15
Это не ТЗ. ТЗ это то как должен относится ввод к выводу. А ваше "имя должно быть списком" выглядит как бред, полученный в результате выбора неправильных инструментов.
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
29.03.2019, 18:18  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
Это не ТЗ
что-за тз? тип записи ?
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
29.03.2019, 18:26
Текст Задания
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
29.03.2019, 18:29  [ТС]
как эти строки то сделать рабочими, чтоб без процедур
Pascal
1
2
3
4
5
6
7
                Readln(T^.Age);
//                T^.Left:=nil;  
//                T^.Right:=nil; 
//                if Age < T^.Age then
//                  T^.Left:=Age
//                else
//                  T^.Right:=Age;
чтоб в определённую ветку возраст вводился
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
29.03.2019, 18:39
Ну, не говорите ТЗ - разбирайтесь сами.
А для метода уточки, которым вы явно много, хоть и неосознанно, пользуетесь - форум не нужен.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
29.03.2019, 18:46
Ваш код не на PABC.NET
Вот статья с офф-сайта в тему: http://pascalabc.net/stati-po-... novyj-stil
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
29.03.2019, 18:55  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
Ну, не говорите ТЗ
так я же говорил,, 'реализовать поиск данных в списке для каждого поля набора данных. (поиск у меня есть) Дополнить алгоритмы поиска двоичным деревом поиска'... - это из написаного, но мне сказали что по сути надо добавить к списку деревья, будь то пол либо год рождения, итд... ну вот я и пытаюсь вначале добавить ввод этого дерева с возрастом,, потом уже делать поиск, но это потом

Добавлено через 3 минуты
Цитата Сообщение от JuriiMW Посмотреть сообщение
Ваш код не на PABC.NET
всмысле, я только на нём и пишу, досих пор всё работало, до этих строчек
Pascal
1
2
3
4
//                if Age < T^.Age then
//                  T^.Left:=Age
//                else
//                  T^.Right:=Age;
которые надо как-то реальзовать без процедур, т.к. изначальная вся программа без них была и работала, а с добавлением дepeвa, перестала
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
29.03.2019, 19:00
Цитата Сообщение от ololo111 Посмотреть сообщение
так я же говорил,, 'реализовать поиск данных
Где говорил?

Двоичное дерево поиска заполняется как дерево, а не список!

Добавлено через 2 минуты
И про какой „набор данных“ идёт речь?
Самолёты? Пароходы?
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
29.03.2019, 19:06  [ТС]
Цитата Сообщение от JuriiMW Посмотреть сообщение
И про какой „набор данных“ идёт речь?
имена и возраст

Добавлено через 44 секунды
Цитата Сообщение от JuriiMW Посмотреть сообщение
Вот статья с офф-сайта в тему: http://pascalabc.net/stati-po-... novyj-stil
ага, там везде пишут мол указатель можно не использовать, и ^ убрать, я убрал, так сразу везде ошибки появились.... обновить чтоли надо?
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
29.03.2019, 19:15  [ТС]
мне интересно, вот такую схему реально реализовать, при вводе возраста 18 до 65... это то что я пытаюсь
Миниатюры
Нельзя преобразовать тип ^TElem к integer  
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
29.03.2019, 21:06  [ТС]
так что, эти 4 строчки невозможно без процедур реализовать?
Pascal
1
2
3
4
if Age < T^.Age then
 T^.Left:=Age
   else
 T^.Right:=Age;
Добавлено через 1 час 35 минут
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
29.03.2019, 21:15
Цитата Сообщение от ololo111 Посмотреть сообщение
указатель можно не использовать, и ^ убрать
Убрать можно как раз если вы не будете использовать указатели. Но для этого надо заменить записи (record) на классы (class). Описываются они одинаково.
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
29.03.2019, 21:20  [ТС]
Шли третьи сутки...
попробовал через процедуры сделать, но он в 21й строке AddToTree(T^.Name, N) выдал ''Неверное количество параметров процедуры'', если в процедуре повторно прописать (Name:string); то он пишет "Неправильный тип параметров подпрограммы", я уже все типы перепробовал, а ему не нравится, N у меня стринг, 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
Uses Crt;
type
  TPElem = ^TElem;
  TElem = record
  Left,Right: TPElem;
    Name : string;
    Age : byte;
    TNext : TPElem;
  end; 
  
var
  PList, T, Tree : TPElem;
  i,A,k:byte;
  N:string;
  
procedure AddToTree( var T: TPElem; Name:string);  
begin
  if Tree = nil then begin
    New(T);
    Tree := T;
    AddToTree(T^.Name, N);
     AddToTree(T^.Age, A);
     T^.Left := nil;
     T^.Right := nil;
  Exit; end;
   New(T^.TNext);
   T := T^.TNext;
    AddToTree(T^.Name, N);
  if A < T^.Age then
       AddToTree(T^.Left, A)
  else AddToTree(T^.Right, A);
end; 
// //
 begin
    while true do
    begin
        writeLn('Выберите действие');
        writeLn('1 - Добавление');
        writeLn('5 - Вывод');
        writeLn('6 - Очистка');
        writeLn('7 - Exit');
       var ans := ReadLnString('Ваш выбор:').Trim;
      if ans.Length > 0 then
        case ans[1] of
            '1' :
             begin
               Write('Задайте количество сотрудников: ');
               Readln(k);
              for var i := 1 to k do
                begin
                 Write('Введите имя: ');
                 Readln(N);
                 AddToTree(T, N);
                 Write('Введите возраст: ');
                 Readln(A);
                 AddToTree(T, A);
                end; 
             end;
    '5' :begin
        ClrScr;
    Write('Список: ');
    T := Tree;
    if T = nil then
    writeln('пуст... ');
    while T <> nil do
    begin
      Write(T^.Name, ' ');
      Write(T^.Age, ' ');      
      T := T^.TNext;
    end; 
    end;
          '6' : begin
          Tree:=nil;
              ClrScr;
              writeln('Список очищен... ');
              end;
          '7' : exit
        end;  
    end;
end.
впервые такое пишу, примеров не нашел с двойными вводами, по этому печатаю так как мне кажется... вроде всё правильно да? как ему Name под указателем тогда подать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.03.2019, 21:20
Помогаю со студенческими работами здесь

Нельзя преобразовать тип integer к array [1.8] of integer
Естественное слияние.pas(116) : Нельзя преобразовать тип integer к array of integer program cal; uses Crt; type Matrix =...

Нельзя преобразовать тип real к integer
program lol; uses crt; var a,b,summ,raz,des:integer; begin Clrscr; summ:=0; for b:=1 to 2 do begin write('Введите...

Нельзя преобразовать тип real к integer
Помогите я начинающий пользователей это программой. Ввёл код и на 14 строке мне выдаёт ошибку: Program1.pas(14) : Нельзя преобразовать...

Нельзя преобразовать тип real к integer
Снова я, вылезает ошибка: Program3.pas(18) : Нельзя преобразовать тип real к integer Проверял построчно, ошибку найти не получается,...

Нельзя преобразовать тип char к integer
Помогите исправить ошибку. Я понимаю в чем заключается ошибка в 16 строке, но понятия не имею, как ее можно исправить. Скорее всего, тут...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru