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

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

27.03.2019, 21:19. Показов 3027. Ответов 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
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
29.03.2019, 23:03
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ololo111 Посмотреть сообщение
в 21й строке AddToTree(T^.Name, N) выдал ''Неверное количество параметров процедуры''
Обновитесь: http://pascalabc.net/ssyilki-dlya-skachivaniya
Это ошибка компилятора. У меня последняя версия, и в ней выдаёт правильную ошибку.
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
30.03.2019, 00:04  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
Обновитесь: http://pascalabc.net/ssyilki-dlya-skachivaniya
Это ошибка компилятора. У меня последняя версия, и в ней выдаёт правильную ошибку.
обновил, полностью удалил и заново установил, ничего не поменялось, та же ошибка в 21й строке AddToTree(T^.Name, N);
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
30.03.2019, 00:23
Цитата Сообщение от ololo111 Посмотреть сообщение
та же ошибка
Нет не та же. Теперь говорит что типы неправильные. Потому что так и есть.
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
30.03.2019, 00:38  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
ет не та же. Теперь говорит что типы неправильные. Потому что так и есть.
Pascal
1
 procedure AddToTree( var T: TPElem; Name:string);
? Name:string - не правильный? я все варианты перепробовал, даже не знаю как его преподнести, у меня же из N:string заносится в T^.Name:string,,
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
30.03.2019, 01:18
На оба параметра смотрите а не на последний.
0
 Аватар для JuriiMW
5096 / 2662 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
30.03.2019, 13:00
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
type
  tNode = class
    Name : String;
    Age  : Integer;
    Left, Right : tNode;
    
    constructor;
    begin
      Name := ReadLnString('Имя:');
      Age  := ReadLnInteger('Возвраст:');
      Left := nil; Right := nil;
    end;
  end;
 
function CreateTree(count : Integer) : tNode;
begin
  Result := New tNode;
  loop count-1 do
    begin
      var Cur := New tNode;
      var tmp := Result;
      repeat
        if Cur.Age > tmp.Age then
          if tmp.Right = nil then
            begin tmp.Right := Cur; tmp := nil; end
          else
            tmp := tmp.Right
        else
          if tmp.Left = nil then
            begin tmp.Left := Cur; tmp := nil; end
          else
            tmp := tmp.Left;
      until tmp = nil;
    end;
end;
 
procedure OutTree(Tree : tNode; Level : Integer := 0);
begin
  $'{#32*(Level*4)}{Tree.Age} : {Tree.Name}'.Println;
  if Tree.Left <> nil then OutTree(Tree.Left, Level+1);
  if Tree.Right <> nil then OutTree(Tree.Right, Level+1);
end;
  
begin
  var Root := CreateTree(ReadLnInteger('Количество сотрудников:'));
  OutTree(Root);
end.
1
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
30.03.2019, 16:18  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
На оба параметра смотрите а не на последний.
если поменять в вводе
Pascal
1
2
3
  Write('Введите имя: ');
ReadLn(N);
AddToTree(T^.Name, N);
а в процедуре
Pascal
1
 AddToTree(T, N);
так да? везде вроде как наоборот делают, а дальше если в процедуре AddToTree(T^.Age, A) поменять на AddToTree(T, A) как это было с Name,, то какая-то ерунда получается
Pascal
1
2
   AddToTree(T, N);
     AddToTree(T, A);
и в 22й строке выдаёт ошибку что нельзя преобразовать тип byte к string, но T ведь у меня не стринг,
вот пока вся программа
Кликните здесь для просмотра всего текста
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, N);
     AddToTree(T, 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^.Name, N);
                 Write('Введите возраст: ');
                 ReadLn(A);
                 AddToTree(T^.Age, 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.


Добавлено через ☺100500☺ минут
Цитата Сообщение от JuriiMW Посмотреть сообщение
Кликните здесь для просмотра всего текста
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
type
* tNode = class
* * Name : String;
* * Age *: Integer;
* * Left, Right : tNode;
constructor;
* * begin
* * * Name := ReadLnString('Имя:');
* * * Age *:= ReadLnInteger('Возвраст:');
* * * Left := nil; Right := nil;
* * end;
* end;
function CreateTree(count : Integer) : tNode;
begin
* Result := New tNode;
* loop count-1 do
* * begin
* * * var Cur := New tNode;
* * * var tmp := Result;
* * * repeat
* * * * if Cur.Age > tmp.Age then
* * * * * if tmp.Right = nil then
* * * * * * begin tmp.Right := Cur; tmp := nil; end
* * * * * else
* * * * * * tmp := tmp.Right
* * * * else
* * * * * if tmp.Left = nil then
* * * * * * begin tmp.Left := Cur; tmp := nil; end
* * * * * else
* * * * * * tmp := tmp.Left;
* * * until tmp = nil;
* * end;
end;
procedure OutTree(Tree : tNode; Level : Integer := 0);
begin
* $'{#32*(Level*4)}{Tree.Age} : {Tree.Name}'.Println;
* if Tree.Left <> nil then OutTree(Tree.Left, Level+1);
* if Tree.Right <> nil then OutTree(Tree.Right, Level+1);
end;
begin
* var Root := CreateTree(ReadLnInteger('Количество сотрудников:'));
* OutTree(Root);
end.
спасибо конечно, но мне бы со своей программой разобраться, а то тут как-то всё по современному, буду в курсе что и так ещё можно писать
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
31.03.2019, 20:16  [ТС]
почему-то вот такие вот команды
Pascal
1
2
AddToTree(T^.Name, N);
AddToTree(T^.Age, A);
не работают в паскале, вечно выдаёт Неправильный тип параметров подпрограммы, работает только если писать AddToTree(T, N); и AddToTree(T, А); - хрень какая-то, понятия не имею почему так, везде все перепробовал, все варианты перебрал и не работает,, у других тоже самое, и всё работает, а у меня не читается, чёрт знает почему, не заносит инфу в ячейки T^.Name - такого типа и всё.

Добавлено через 900 минут
вот как мне занести в AddToTree(T^.Left, A) и в AddToTree(T^.Right, A); байтовую информацию? почему он пишет что T^.Left и T^.Right это String??
30я и 31я строка,, и как мне тогда заносить целочисленное значение в правую или левую ячейку дерева,?
если так сделать, то тоже не работает... AddToTree(T^.Age^.Left, A) - пишет Нельзя разыменовать это выражение, так как оно не является типизированным указателем... и так и так он не работает, и как тогда?
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,Age,k:byte;
  N,Name:string;
  
procedure AddToTree( var T: TPElem; Name:string);  
begin
  if Tree = nil then begin
    New(T);
    Tree := T;
    T^.Name := N;
    T^.Age := A;
     T^.Left := nil;
     T^.Right := nil;
  Exit; end;
   New(T^.TNext);
   T := T^.TNext;
    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 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.
Добавлено через 17 минут
даже если байт на стринг поменять, то уже новая ошибка, после ввода возраста, в 26й строке New(T^.TNext); - Параметр цикла for в PascalABC.NET должен описываться в заголовке цикла... ок, добавил TNext сюда: procedure AddToTree( var T, TNext: TPElem; Name:string); - теперь в 29й строке AddToTree(T^.Left, A) выдаёт - Неверное количество параметров процедуры.... ну что-за фигня то а,

Добавлено через 5 часов 26 минут
New(T^.TNext); : Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта. ЧТОО??
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
31.03.2019, 20:27  [ТС]
шел 5й день...
Миниатюры
Нельзя преобразовать тип ^TElem к integer  
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
31.03.2019, 20:30  [ТС]
всеголишь добавил строку T:=Tree; перед New(T^.TNext);...
а у вас такое было?
Миниатюры
Нельзя преобразовать тип ^TElem к integer  
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
31.03.2019, 21:30
StackOverflow значит что у вас в программе возникла бесконечная рекурсия. То же самое даст эта программа:
Pascal
1
2
3
4
5
6
7
8
procedure p1;
begin
  p1;
end;
 
begin
  p1;
end.
1
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
31.03.2019, 22:32  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
То же самое даст эта программа:
ясно, только у меня не тоже самое
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
31.03.2019, 22:43
Разумеется будет не строчка в строчку. Но вы явно и не догадываетесь о тех тёмных уголках программирования, в которых может возникнуть StackOverflow так же как при переполнении из за рекурсии. Поэтому у вас таки из за рекурсии это.
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
31.03.2019, 23:18  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
Поэтому у вас таки из за рекурсии это.
да как так-то, у меня же идёт: если дерево пустое, то создаём его, записывает имя, возраст, обнуляем правую и левую ветку, и выход, всё... я даже через else делал, тоже самое получалось.... ну а дальше если снова при входе в процедуру добавления, дерево уже не пустое, то он эту 1ю часть пропускает, и переходит ко 2й, где создаёт следующую часть дерева, и заносит в неё имя, а дальше сравнивает возраст с предыдущим, и заносит его либо в правую либо в левую ветку, и всё, выход.... во всех примерах и объяснялках так же, 1 в 1,, только у меня не 1 элемент, а 2,, а там везде примеры по 1му элементу...
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
01.04.2019, 20:56  [ТС]
я вот не пойму, у меня ввод правильно работает? а то вывод у меня ничего не выдаёт, что не так непонимаю....

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
Uses Crt;
type
  TPElem = ^TElem;
  TElem = record
  Left,Right: TPElem;
    Name,Age : string;
    TNext : TPElem;
  end; 
  
var
  PList, T, Tree : TPElem;
  i,k:byte;
  N,A:string;
  
procedure AddToTree( var T: TPElem; Name:string); {ВВОД}
begin
  if Tree = nil then begin
    New(T);
    Tree := T;
    T^.Name := N;
    T^.Age := A;
     T^.Left := nil;
     T^.Right := nil;
   end; Exit;
   New(T^.TNext);
   T := T^.TNext;
    T^.Name := N;
  if A < T^.Age then
       AddToTree(T^.Left, A)
  else AddToTree(T^.Right, A);
end; 
// //
procedure Lkp(Tree:TPElem);  {ВЫВОД}
begin
  if Tree=nil then
  Writeln('Список пуст ');
   exit;     
  Write(Tree^.Name);
  Lkp(Tree^.left);  
  Writeln('  ',Tree^.Age);
  Lkp(Tree^.right);  
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
              ClrScr;
               Write('Задайте количество сотрудников: ');
               Readln(k);
              for i := 1 to k do
                begin
                 Write('Введите имя: ');
                 Readln(N);
                 AddToTree(T, N);
                 Write('Введите возраст: ');
                 Readln(A);
                 AddToTree(T, A);
                end; 
             end;
    '5' :begin         {ВЫВОД}
        ClrScr;
        writeln('Список: ');
        Lkp(Tree);
       end;
        '6' : begin
          Tree:=nil;
              ClrScr;
              writeln('Список очищен... ');
              end;
          '7' : exit
        end;  
    end;
end.
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
01.04.2019, 20:59
Когда что то работает не так как вы задумывали - используйте отладку, вместо того чтоб сразу на форум писать.
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
01.04.2019, 21:52  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
Когда что то работает не так как вы задумывали - используйте отладку, вместо того чтоб сразу на форум писать.
это как?
а в таком варианте у меня выводится только 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
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
Uses Crt;
type
  TPElem = ^TElem;
  TElem = record
  Left,Right: TPElem;
    Name,Age : string;
    TNext : TPElem;
  end; 
  
var
  PList, T, Tree : TPElem;
  i,k:byte;
  N,A:string;
  
procedure AddToTree( var T: TPElem; Name:string); {ВВОД}
begin
  if Tree = nil then begin
    New(T);
    Tree := T;
    T^.Name := N;
    T^.Age := A;
     T^.Left := nil;
     T^.Right := nil;
   end; Exit;
   New(T^.TNext);
   T := T^.TNext;
    T^.Name := N;
  if A < T^.Age then
       AddToTree(T^.Left, A)
  else AddToTree(T^.Right, A);
end; 
// //
procedure Lkp(T:TPElem);  {ВЫВОД}
begin
  Write(T^.Name);
  Lkp(T^.left);  
  Writeln('  ',T^.Age);
  Lkp(T^.right);  
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
              ClrScr;
               Write('Задайте количество сотрудников: ');
               Readln(k);
              for 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('пуст... ')
    else
      Write(T^.Name, ' ');
      Write(T^.Age, ' ');
     T := T^.TNext;
    while T <> nil do
        Lkp(Tree);
       end;
        '6' : begin
          Tree:=nil;
              ClrScr;
              writeln('Список очищен... ');
              end;
          '7' : exit
        end;  
    end;
end.
странно

Добавлено через 29 минут

нафиг я пошёл на програмиста....

теперь выводит только 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
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
//Uses Crt;
type
  TPElem = ^TElem;
  TElem = record
  Left,Right: TPElem;
    Name,Age : string;
    TNext : TPElem;
  end; 
  
var
  PList, T, Tree : TPElem;
  i,k:byte;
  N,A:string;
  
procedure AddToTree( var T: TPElem; Name:string); {ВВОД}
begin
  if Tree = nil then begin
    New(T);
    Tree := T;
    T^.Name := N;
    T^.Age:=A;
     T^.Left := nil;
     T^.Right := nil;
   end; Exit;
   Tree := T;
   New(T^.TNext);
   T := T^.TNext;
    T^.Name := N;
  if A < T^.Age then
       AddToTree(T^.Left, A)
  else AddToTree(T^.Right, A);
end; 
// //
procedure Lkp(T:TPElem);  {ВЫВОД}
begin
  Write(T^.Name);
  Lkp(T^.left);  
  Writeln('  ',T^.Age);
  Lkp(T^.right);  
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
             // ClrScr;
               Write('Задайте количество сотрудников: ');
               Readln(k);
              for i := 1 to k do
                begin
                 Write('Введите имя: ');
                 Readln(N);
                 Write('Введите возраст: ');
                 Readln(A);
                 AddToTree(Tree,A);
                end; 
             end;
    '5' :begin         {ВЫВОД}
      //  ClrScr;
    Write('Список: ');
    T := Tree;
    if T = nil then
    writeln('пуст... ')
    else
      Write(T^.Name, ' ');
      Write(T^.Age, ' ');
     T := T^.TNext;
    while T <> nil do
        Lkp(Tree);
       end;
        '6' : begin
          Tree:=nil;
     //         ClrScr;
              writeln('Список очищен... ');
              end;
          '7' : exit
        end;  
    end;
end.


Добавлено через 3 минуты
мне не понятно почему при отладке он не заходит в процеруду, тоесть сюда, во время ввода, и при повторном вводе
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  
procedure AddToTree( var T: TPElem; Name:string); {ВВОД}
begin
  if Tree = nil then begin
    New(T);
    Tree := T;
    T^.Name := N;
    T^.Age:=A;
     T^.Left := nil;
     T^.Right := nil;
   end; Exit;
   Tree := T;
   New(T^.TNext);
   T := T^.TNext;
    T^.Name := N;
  if A < T^.Age then
       AddToTree(T^.Left, A)
  else AddToTree(T^.Right, A);
end;
Добавлено через 1 минуту
он эти строки проходит и всё, как буд-то процедуры нет
Pascal
1
2
3
4
5
6
7
   begin
                 Write('Введите имя: ');
                 Readln(N);
                 Write('Введите возраст: ');
                 Readln(A);
                 AddToTree(Tree,A);
                end;
по идеи после AddToTree(Tree,A); он должен в процедуру лезть
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
01.04.2019, 22:21
Цитата Сообщение от ololo111 Посмотреть сообщение
мне не понятно почему при отладке он не заходит в процеруду
F7 это вход в подпрограмму, а F8 переход на следующую строчку без входа в подпрограмму.
Так же можно ставить точки останова, если тыкнуть слева (появится красный кружок). На них программа всегда останавливается, даже если по F9 запустить.
0
 Аватар для ololo111
166 / 52 / 36
Регистрация: 13.04.2012
Сообщений: 620
01.04.2019, 22:42  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
F7 это вход в подпрограмму
при F7 он у меня сюда заходит
Кликните здесь для просмотра всего текста
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
...
function ArrNToString(a: System.Array; indexes: array of integer; i: integer): string; forward;
 
function StructuredObjectToString(o: Object; n: integer := 0): string;
const
  nmax = 100;
  nmax1 = 30;
begin
  if o = nil then
    Result := 'nil' 
  else if o is System.Reflection.Pointer then
    Result := PointerToString(System.Reflection.Pointer.Unbox(o))
  else if (o.GetType = typeof(real)) or (o.GetType = typeof(decimal)) or (o.GetType = typeof(single)) then
    Result := FormatFloatNumber(o.ToString)
  else if (o.GetType = typeof(Complex)) then 
  begin
    var c := Complex(o);
    Result := '(' + StructuredObjectToString(c.Real) + ',' + StructuredObjectToString(c.Imaginary) + ')';
  end
  else if (o.GetType.IsPrimitive) or (o.GetType = typeof(string)) then
    Result := o.ToString
  else if o is System.Array then
  begin
    var a := o as System.Array;  
    Result := ArrNToString(a, new integer[a.Rank], 0); 
  end
  else if o is System.Collections.IEnumerable then
  begin
    var sb := new StringBuilder();
    var g := (o as System.Collections.IEnumerable).GetEnumerator();
    
    var isdictorset := o.GetType.Name.Equals('Dictionary`2') or o.GetType.Name.Equals('SortedDictionary`2') or (o.GetType = typeof(TypedSet)) or o.GetType.Name.Equals('HashSet`1') or o.GetType.Name.Equals('SortedSet`1');
    if isdictorset then
      sb.Append('{')
    else sb.Append('[');
    if g.MoveNext() then
      sb.Append(StructuredObjectToString(g.Current, n + 1));
    var cnt := 1;  
    while g.MoveNext() and (cnt < nmax) do 
    begin
      sb.Append(',');
      sb.Append(StructuredObjectToString(g.Current, n + 1));
      cnt += 1;
    end;
    if cnt >= nmax then 
      sb.Append(',...');
    
    if isdictorset then
      sb.Append('}')
    else sb.Append(']');
    Result := sb.ToString;
  end
  else if o.GetType.GetField('NullBasedArray') <> nil then
  begin
    var f := o.GetType.GetField('NullBasedArray');
    Result := StructuredObjectToString(f.GetValue(o));
  end
  else
  begin
    var q := RedefinedToString(o);
    var gg := o.GetType.FullName.StartsWith('System.Tuple');
    var gg1 := o.GetType.Name.StartsWith('KeyValuePair');
    if (q <> nil) and q.IsVirtual and not gg and not gg1 then
      Result := o.ToString
    else 
    begin
      var t := o.GetType;
      var sb := new System.Text.StringBuilder();
      sb.Append('(');
      if n > nmax1 then
        sb.Append('....')
      else 
        while t <> typeof(object) do
        begin
          var ff := t.GetFields(System.Reflection.BindingFlags.Public or System.Reflection.BindingFlags.Instance or System.Reflection.BindingFlags.DeclaredOnly);
          var pp := t.GetProperties(System.Reflection.BindingFlags.Public or System.Reflection.BindingFlags.Instance or System.Reflection.BindingFlags.DeclaredOnly);
          
          for var i := ff.Length - 1 downto 0 do
            sb.Insert(1, StructuredObjectToString(ff[i].GetValue(o), n + 1) + ',');
          
          for var i := pp.Length - 1 downto 0 do
            if pp[i].GetIndexParameters.Length = 0 then
              sb.Insert(1, StructuredObjectToString(pp[i].GetValue(o, nil), n + 1) + ',');
          
          t := t.BaseType;
        end; 
      if sb.Length > 1 then 
        sb.Length := sb.Length - 1;
      sb.Append(')');
      Result := sb.ToString;
    end;
  end;
end;
...

по моему это не то что мне надо, что-то совсем не то
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
01.04.2019, 23:01
1. Вы всё ещё можете прочитать последнюю строчку предыдущего сообщения.
2. Вам ничего не мешает комбинировать F7 и F8. Если надо зайти в подпрограмму - F7, а если перейти на следующую строчку - F8.

И с точками останова это всё тоже можно смешивать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.04.2019, 23:01

Нельзя преобразовать тип 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 строке, но понятия не имею, как ее можно исправить. Скорее всего, тут...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru