Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2018, 16:39   #1
Irinat1111
Новичок
Джуниор
 
Регистрация: 14.07.2018
Сообщений: 2
По умолчанию Прошу помощи разобраться с примером кода, который приведен ниже. Закомментируйте пожалуйста строки кода, объяснив их значения.

Прошу помощи разобраться с примером кода, который приведен ниже.
Закомментируйте пожалуйста строки кода, объяснив их значения.

Каждый студент имеет следующие параметры:
1. Номер по списку
2. ФИО
3. Возраст
4. Рост
5. Вес
6. Набор из пяти оценок за экзамены и средний балл
7. Количество друзей
8. Сумма на банковском счете
9. Знак Зодиака
10. Дата рождения

А. Выбрать характеристику с заданным номером в качестве ключа и построить бинарное дерево из 12 элементов. Предусмотреть подпрограммы для поиска элемента по заданному значению ключа, вставку и удаление элемента.

Код:
Uses Crt;

Type TInf=Record
        Num: Integer;
        FIO: String;
        Age: Integer;
        Stature,Weight: Integer;
        O1,O2,O3,O4,O5,OAverage: Integer;
        Friend: Integer;
        Gold: Integer;
        Zodiac: String;
        Birth: String;
     end;
     TTree=^Tree;
     Tree=Record
        Inf:TInf;
        Left,Right: TTree;
     end;

{-------------------------------------------------------------------------}

Procedure Tab(n: Integer); Begin GoToXY(n,WhereY); End; {Процедура установки курсора
                                                         в позицию n текущей строки}
{-------------------------------------------------------------------------}
Procedure ShowHeader;{Отображение заголовка к данным}
Begin
   Write('№  ФИО            Возраст   Рост Вес   Друзья   Деньги   Зодиак   Родился');
   WriteLn;                        {Переводим строку, подготавливаемся к выводу данных...}
End;
Procedure Show(I: TInf);{Отображение данных записи}
Begin
   Write(I.Num);  {Аналогично выводу заголовков только выводим данные из записи T}
   Tab(5);Write(I.FIO);
   Tab(20);Write(I.Age);
   Tab(30);Write(I.Stature);
   Tab(35);Write(I.Weight);
   Tab(40);Write(I.Friend);
   Tab(50);Write(I.Gold);
   Tab(60);Write(I.Zodiac);
   Tab(70);Write(I.Birth);
   WriteLn; {Перевод строки}
End;

Procedure Input(Var I: TInf);
Begin
   Write(' 1. номер по списку    : ');ReadLn(I.Num);
   Write(' 2. ФИО                : ');ReadLn(I.FIO);
   Write(' 3. Возраст            : ');ReadLn(I.Age);
   Write(' 4. Рост               : ');ReadLn(I.Stature);
   Write(' 5. Вес                : ');ReadLn(I.Weight);
   Write(' 6. 1-й экзамен оценка : ');ReadLn(I.O1);
   Write('    2-й экзамен оценка : ');ReadLn(I.O2);
   Write('    3-й экзамен оценка : ');ReadLn(I.O3);
   Write('    4-й экзамен оценка : ');ReadLn(I.O4);
   Write('    5-й экзамен оценка : ');ReadLn(I.O5);
   Write('           Средний бал : ');ReadLn(I.OAverage);
   Write(' 7. Количество друзей      : ');ReadLn(I.Friend);
   Write(' 8. Сумма на банковском счете : ');ReadLn(I.Gold);
   Write(' 9. Знак Зодиака              : ');ReadLn(I.Zodiac);
   Write('10. Дата рождения             : ');ReadLn(I.Birth);
End;

{-------------------------------------------------------------------------}

Function SignKey(A,B: TInf): Boolean;
Begin SignKey:=False;
   If A.Num<B.Num then SignKey:=True;
End;
Function FindKey(A,B: TInf): Boolean;
Begin FindKey:=False;
   If A.Num=B.Num then FindKey:=True;
End;

Function NewSheet(X:TInf): TTree; {размещение в куче нового элемента}
Var T: TTree;
Begin New (T); T^.Inf:=X; T^.Right:=Nil; T^.Left:=Nil; NewSheet:=T; End;

Procedure AddSheet(Var R: TTree; N: TInf);
   If R<>Nil then begin
      If SignKey(R^.Inf,N) then begin
         If R^.Left=Nil then R^.Left:=NewSheet(N) else AddSheet(R^.Left,N);
      end else begin
         If R^.Right=Nil then R^.Right:=NewSheet(N) else AddSheet(R^.Right,N);
      end;
   end else begin 
      R:=NewSheet(N);
   end;
End;

Procedure AddTree(Var R: TTree; N: TTree);{размещение нового в структуре}
Begin
   If R<>Nil then begin
      If N<>Nil then begin
         If SignKey(R^.Inf,N^.Inf) then begin
            If R^.Left=Nil then R^.Left:=N else AddTree(R^.Left,N);
         end else begin
            If R^.Right=Nil then R^.Right:=N else AddTree(R^.Right,N);
         end;
      end;
   end else begin {дерево не создано, пытаемся создать его}
      R:=N;
   end;
End;

Function Find(R: TTree; F: TInf): TTree;
Var t: Ttree;
Begin t:=Nil;
   If R<>Nil then begin 
      If FindKey(R^.Inf,F) then begin 
         t:=R; {Если нашли нужный элемент, запоминаем его значение}
      end else begin {если не нашли}
         t:=Find(R^.Left,F); {пытаемся найти в других ветвях дерева (сначала слева)}
         If t=Nil then t:=Find(R^.Right,F); {Потом справа, если слева ничего не нашли}
      end;
   end;
   Find:=t; {Результат функции - значение временной переменной t}
End;

Procedure ShowTree(R: TTree); {Вывод дерева на экран}
Begin
   If R<>Nil then begin 
      Show(R^.Inf);     
      If R^.Left <> nil then ShowTree(R^.Left); 
      If R^.Right <> nil then ShowTree(R^.Right);
   end;
End;

Function DeleteNode(R: TTree;W: TTree):TTree;
Var t: TTree;
Begin t:=Nil;
   If R<>Nil then begin {Если ветвь существует}
      If W<> Nil then begin
         If R^.Left = W then begin
            R^.Left:=W^.Left;
            t:=W^.Right;
            Dispose(W);
         end else begin
            t:=DeleteNode(R^.Left,W);
         end;
         If t=Nil Then 
            If R^.Right = W then begin
               R^.Right:=W^.Left;
               t:=W^.Right;
               Dispose(W);
            end else begin
               t:=DeleteNode(R^.Right,W);
            end;
      end;
   end;
   DeleteNode:=t;
End;

Procedure DeleteTree(Var R: TTree;W: TTree);
Begin
   If R=W then begin
      R:=W^.Left;
      AddTree(R,W^.Right);
      Dispose(W);
   end else AddTree(R,DeleteNode(R,W));
End;

Procedure Done(R: TTree); 
begin
   If R<> nil then begin
      If R^.Left <> nil then Done(R^.Left);
      If R^.Right <> nil then Done (R^.Right);
      Dispose(R);
   End;
End;

Procedure Print(T: TTree; g: integer); {Печать дерева. G-глубина (по лекции)}
Const k=6;
Begin
   If T=nil then Writeln ('Дерево пустое') else begin
      g:=g+1;
      If T^.Right <> nil then
         Print (T^.Right, g)
      else begin
         {Tab(4*(g+1));Writeln('RNil');}
      end;
      Tab(k*g); Writeln (T^.Inf.Num,' ', T^.Inf.FIO);
      If T^.Left <> nil then
         Print (T^.Left,g)
      else begin
         {Tab(4*(g+1));Writeln('LNil');}
      end;
      g:=g-1;
   End;
End;

{-------------------------------------------------------------------------}
Пожалуйста, оформляйте Ваш код согласно правилам.

Последний раз редактировалось Вадим Мошев; 14.07.2018 в 16:46.
Irinat1111 вне форума Ответить с цитированием
Старый 14.07.2018, 22:55   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,529
По умолчанию

Ну что тут комментировать... Школярское писательство.
Код:
Function SignKey(A,B: TInf): Boolean;
Begin SignKey:=False;
   If A.Num<B.Num then SignKey:=True;
End;
Обычно это звучит так:
Код:
Function SignKey(A,B: TInf): Boolean;
   SignKey :=  A.Num < B.Num 
End;
Дальше смотреть стало неинтересно. И вообще, что это за помощь студентам: откопал где-то чужой кривой код, смотрит на него непонимающе и "Объясните мне".
http://programmersforum.ru/showthread.php?t=320990
Клон - или брат-близнец ?

Последний раз редактировалось digitalis; 14.07.2018 в 22:59.
digitalis вне форума Ответить с цитированием
Старый 15.07.2018, 08:20   #3
Irinat1111
Новичок
Джуниор
 
Регистрация: 14.07.2018
Сообщений: 2
По умолчанию

Когда учишься самостоятельно, многое кажется не понятным. Спасибо за ответ.
Irinat1111 вне форума Ответить с цитированием
Старый 15.07.2018, 09:30   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,529
По умолчанию

Может быть что-то непонятное, но чтобы всё... Так, может, и не надо ? Процесс учебы я представляю так (кажется, в прошлом веке это было так) :
- прочитал материал
- попробовал сам написать что-то на изученном материале
- почитал образцы, сравнил
- скорректировал свое представление, переписал
- если компилятор все же выплевывает сварганенную хрень, горестно вопрошаем форум: "вот в этом месте по теории вроде так должно быть, я так и сделал, а меня компилятор ругает" - и так до полного прояснения.
Полезно нарисовать схему разбираемого кода (раньше это называлось "блок-схема"). Польза двойная:
1. отрабатывается навык графического представления алгоритма;
2. в графическом виде все связи становятся нагляднее и доступнее для понимания.
Но конечно, если "оно мне 1000 лет не надобно, но нам задали" - тогда амбец.
Вот представьте: я выкладываю текст на китайском языке и требую прошу: объясните мне каждый иероглиф. Скорее всего, мне форумчане ответят: тебе, пожалуй, лучше изучать язык племени ахунэо, там всего 200 слов.
Так я думаю.

Последний раз редактировалось digitalis; 15.07.2018 в 09:38.
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста. Задание такое: написать макросы для перевода числа в строку, для вывода строки на терминал, для остановки программы. Код приведен ниже. Укажите пожалуйста что Нести Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 01.11.2016 09:26
Прошу помощи в проверке моего перевода небольшого фрагмента кода от Си к делфи! SkAndrew Общие вопросы Delphi 11 16.08.2009 16:37
Прошу помощи в разборе куска кода драйвера RIL под ARM Lebets_VI Win Api 0 14.08.2009 13:58
Прошу помощи в конвертации на Делфи кода от С++. SkAndrew Общие вопросы Delphi 11 07.08.2009 12:14
Помогите пожалуйста разобраться в куске кода ourlifeforus Общие вопросы C/C++ 1 02.06.2009 19:37