Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Основы программирования на языке Pascal(Основы работы со ссылочным типом в языке программирования Pascal)

Содержание:

Введение

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

Статические также как и динамические переменные вызывают по их адресу. Без адресов нереально получение доступа к необходимым ячейкам памяти, но, если применять статические переменные, то можно конкретно адреса не указывать, а обращаться к переменным по именам. Компилятор располагает все переменные в памяти и производит подстановку подходящих адресов в код команды.

Управления памятью относится к широкому классу объектов. Разработчики ПО сами должны резервировать места под переменные, определять значение указателя, очищать память – удалять динамическую переменную. При использовании динамических переменных кое-где в программе необходимы указатели на них. Компиляторы предугадывают места под указатели, об инициализациях указателей должны хлопотать разработчики ПО.

Актуальность темы заключается приемущественно в том, что в современном мире написания многофункциональных программ без использования динамических структур данных практически нереально. Кроме того, нужно умение оперирования с такой структурой, применяя правильные подходы к голосованию способов решений назначенных задач. Поэтому исследование этого вопроса находится нужным, как в теории так и на практике.

Объектом работы выступают ссылочные типы языка программирования Pascal.

Предмет работы – создание ссылочных типов в ящыке программирования Pascal.

Цель исследования – найти значимость использования ссылочных типов в языке программирования Pascal при разработке программ.

В согласовании с поставленной целью были определены последующие задачи работы: найти и провести изучение нужной литературы по теме исследования; выделить теоретические базы использования ссылочных типов; на практических заданиях разглядеть механизмы работы со ссылочным типом; сделать заключения по совершенной работе.

Базу для написания работы составили работы таковых создателей, как Фаронов В.В., Шпак Ю.А., Меженный О.А., Немнюгин С.А., внесших большой вклад в исследовании этой темы.

Глава 1. Основы работы со ссылочным типом в языке программирования Pascal.

Типы данных Pascal.

Паскаль (англ. Pascal) — один из более узнаваемых языков программирования, употребляется для обучения программированию в старших классах и на первых курсах высших учебных заведений, является базой для ряда остальных языков.

Pascal – язык с серьезной типизацией переменных. Это означает, что мы непременно должны тип каждой , и не можем переменной 1-го значение другого (если лишь не равнозначны).

В примера возьмем программы, вычисляющей круга по радиусу:

S := r*r*3.14;

Если укажем, что у S целочисленный тип, будет работать правильно, в связи с , что результатом r*r*3.14 будет дробь, и целочисленной переменной значение мы можем.

Очередной . Программа складывает 2-ух переменных:

a:=5; b:=4; c := a+b;

мы укажем, a, b и c являются числами, полностью разумно , что после программы значение c равно 9-ти. что будет, a и b являются не , а ординарными знаками, а c – ?

a:=‘5’; b:=‘4’; c := a+b;

В данном случае не можем математически два (ну правда, же не математически сложить буквы), и знаки подставятся друг к , другими словами c будет равно ‘54’.

считая этого, пуска программы каждой переменной в выделяется некое байт, которое от типа переменной. И значения, может принять , ограничены этим байт. Например, с типом данных выделяется 1 байт , и она может значения от 0 255, всего 256, что числом вариантов, можно закодировать байтом. Если мы укажем переменной тип , но присвоим значение, например, 1000, работать не .

Переменная целочисленного может принимать какое целое из спектра этого типа. того, является типом.

Таблица 1- целочисленного типа

Тип

Длина (байт)

Диапазон

byte

1

0..255

shortint

1

-128..127

integer

2

-32768..32767

word

2

0..65536

longint

4

-2147483648..2147483647

К типу относят числа и числа с запятой. Тем менее, мы присвоить вещественному целое значение.

2- Вещественные типы

Тип

Длина (байт)

Диапазон

single

4

1.5*10-45 - 3.4*1038

real

6

2.9*10-39 - 1.7*1038

double

8

5*10-324 - 1.7*10308

extended

10

3.4*10-4932 - 1.1*104932

3- Символьный тип

Тип

Длина (байт)

Диапазон

char

1

Любой символ кодировки ASCII

типа char присвоить любую , цифру, или другой символ кодировки. Также порядковым типом.

char - это один символ,  строка - это символов. Строкой быть, к примеру, , состоящее из букв. Также относят к структурным .

Таблица 4- Строковый

Тип

Длина (байт)

Диапазон

string

256

255 символов кодировки ASCII

Переменная логического может принимать два значения: или false ( или ложь). порядковым типом.

5- Логический тип

Тип

Длина (байт)

Диапазон

boolean

1

true, false

тип указывает, переменная может значения от значения, до . К примеру, мы , что переменная принимать значения от 5 до 25. можем объявить тип так: a: 5..25;

Организация работы с ссылочного типа.

– это особенные данных. В переменной типов хранится иной переменной, содержит полезные программ данные. показаться, что указателя приведет к издержке памяти и к программ, также факту усложнит и процесс программирования. второстепенные издержки хранение указателей и при работе окупаются всецело. с указателем определена лишь в Паскаль, и в почти всех программирования. В языке С++ используются практически всех программах [8].

В роль указателя меньше, но, же, которые разработчики ПО усваивать базисный работы с ними того, чтоб осознать внутренние обработок и выполнения компьютерных программ.

переменных – это первого байта памяти, которые них отводятся. этого структурного (массива и записи) адресом является первых байтов частей. В Turbo имеется возможность доступа к хоть байтам оперативки ее адресам помощи определенного в system массива , MemW и MemL, информации либо ее сходу ячейки памяти (1, 2 4 байта). Это опасное действие, они исключаются в 32- системе программирования [9].

В индексов в данном используются адреса, в виде, который в DOS: сегменты: относительно начал . Данный типичный записей адресов с тем, что в системах DOS размер памяти на сегменты, которых менее 64 . Для получений адресов из сектор: смещение добавляет к секторам шестнадцатеричные нули ( 4 нуля в двоичной ), а позже складывает со смещениями. методом быть адресовано 1 Мбайт .

Еще есть из методов к оперативки – применять слово absolute время описания . В таком случае будут размещаться по тем в оперативки, которые после absolute. служебное слово настолько же , как и обращаться к при помощи массива. Однако, можно применять и поболее неопасный , позволять совмещение в 2-ух переменных с именованием. В языке имеется особая для получения на переменные ( процедуры) – она как @. Есть эквивалентная ей addr [11]. К примеру, @x addr(х) – адрес х.

Есть и обратная , чтоб получать переменных по адресам, обозначаемых ^. К примеру, р^ – переменная с р.

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

В имеется два вида указателя: и нетипизированный. Типизированные – это указатели переменные определенных , к примеру, целый, либо тип . Нетипизированные указатели – адреса первых областей памяти, в могут располагаться дынные вне от их .

Описание этих указателей делается -различному:

var a1: ^; {указатель на целого типа}

a2: ^; {указатель на }

a3 pointer; {нетипизированный }

Подчеркнём, что pointer совместимый с каким иным указателя.

Все располагаются в секторах либо в стеках ( они объявлены в ) и занимают там 4 б. Это дополнительные « траты» памяти. потому обыденную изредка делают и динамическим образом, эту возможность большой совокупности .

Чем больший имеет динамическая , тем наименьшую имеют накладные . К примеру, для в динамической памяти огромного размера 4 байта, которые на указатели, .

Типизированные указатели (ссылаются) на определенных типов. их объявления знак ^, который перед надлежащими данных. К примеру:

massiv = array[1..100] integer;

Var a1 : ^;

a2 : ^massiv;

В данном a1 является ссылкой () на целое , a2 – ссылкой на из 100 целых . Сейчас для к данным по адресу необходимо : a1^, a2^. Другими словами, a1 – адрес, а a1^ – то, по данному размещается.

Для участков динамически памяти (кучи) с расположения там данных употребляют функцию New (a), a – указатель.

После таковых команд выделены блоки нужных размеров ( расположения тех , на которые указатель a), а сам a приобретает значение этого выделенного памяти. К примеру, выполнения команд:

(a1);

New (a2);

будут два непрерывных в куче, 1-ый 2 б (т.к. целые числа 2 б в оперативки), 2-ой – 400 (100 * 4 б для каждых 100 целых чисел).

выполнения данных указатели a1 и a2 получают значения. Потому адресу, на они указывают, расположить конкретное соответственного типа. К ,

a1^ := 52;

a2^[1] := 8;

Если во выполнения процедуры в куче не непрерывных участков подходящего размера, программа окончит с сообщением «Out Memory». Для размеров доступных в динамически распределяемой (куче) необходимо функцию MaxAvail, возвращает размер непрерывного участка в на этот времени.

При динамической памяти процедура Dispose (a), a – указатель. К примеру:

(a1);

Dispose (a2);

После этой команды , которая до была связана с , ворачивается назад в (и быть может применена уже иных сведений). значение указателей меняется, т.е. в нем и остается адрес «несуществующего» (переданного в кучу) блока . Поэтому обращения к после реализации Dispose время времени приводит к .

В языке Паскаль константа Nil – указатель. Значение можно присвоить какому указателю, к :

a2 := nil;

Все реализация этого до вызовов Dispose (a2) приведет к , что указатель a2 сумеет ссылаться на один участков динамической , но сами в памяти остаются, т.е. участок не возвращенным в кучу. плохо по причине, что выполнении серий команд большая динамической памяти занятой, но будет применена.

указатель не с любым определенным данных. При описании употребляют тип Pointer. К : Var a : pointer;

указатель употребляется динамическом размещении , структура и тип могут изменяться в выполнения программ.

выделений памяти обычную функцию (a, size), где a указателем, переменной Pointer, size – выделяемых участков , выражением типа (целочисленным типом). одном обращении к GetMem можно менее 65521 б памяти ( значение типа ) [6].

При освобождении и возврате ее в употребляют обычную FreeMem (a, size), a является указателем, типа Pointer, – размером освобождаемого в памяти, выражением Word.

Константа быть может и при работе с указателем.

Вначале, учете чрезвычайно размеров оперативки, тип употреблялся того, чтоб в программе опять один и тот участок оперативки. В технике это не значительным. , беря во особенность архитектуры типа IBM, применяется для в программах большых данных (превосходящих 64 ), необходимо применять структуры данных.

2. Создание ссылочных в языке программирования

2.1. Основные действия с Паскаля

Из программирования известно, определение типа определяет:

  • ограничение допустимых значений;
  • представление в ЭВМ;
  • допустимых операций данными этого .

Выше в работе определение массива и тип данных – . Над базовыми данных, числовыми символьными, могут определенные операции. также и над выполняются операции, подразумевают операции элементами массива. действие, которое выполнять над целиком, причем при условии, массивы однотипны, – присваивание. Если в объявлены две одного типа, ,

Var

m , n : array [1..21] real ; ,

то переменной n присвоить переменной m ( n := m). При каждому элементу n будет присвоено значение из m. Все остальные над массивами производятся поэлементно.

2.2. массива Паскаля

того чтобы начальные значения () элементов массива, последовательно изменять индекса, начиная с и до последнего, и соответствующий элемент. реализации этих удобно использовать цикл или с фиксированным числом . В этом случае цикла будет переменная, которая индексом массива. элементов могут введены с клавиатуры определены с помощью присваивания.

На форме 13 приведен фрагмента программы массива на Паскаль.(Рис.1)

1- Экранная форма 1 элементов массива в

Очень часто практике массивы случайными числами. прием существенно время заполнения вручную. Автоматическое массивы выполняется с функции random ( N ). экранной форме 14 пример фрагмента заполнения массива числами. (Рис.2)

2- Экранная форма 2 массива случайными

Таким образом, вышесказанного можно вывод о том, элементы массива быть инициализированы способами: вводом с , случайными числами, присваивания. Какому них отдать , зависит от задачи и от разработчика

Глава 3. создания ссылочных в языке программирования

  1. Преобразование и построение .

Массив – это объектов, состоящая фиксированного упорядоченного элементов, имеющих и тот же .

Массивы могут одномерными и многомерными (-, трехмерными и т. д.). Примером массивов может список фамилий класса, многомерных - умножения, классный , аттестат зрелости.

, образующие массив, таким образом, каждому элементу номер (индекс), его местоположение в последовательности. Доступ к элементу осуществляется индексирования.

Для массива используется array of ( из) и имеет : array [тип ] of <тип>

индекса – любой номер, определяющий изменения значений .

Описание массива следующим образом:

< типа> = array [ индекса] of < данных>;

mas= [1..m] of integer; { из m целых }

digit = array [0 .. 9] char; {массив символов, имеющих номера от 0 9}

matrix = array [] of string; { 256 строк, пронумерованных с 0 255}

Количество элементов размером массива. элементов определяет массива. Размер и массива указываются его описании, размер может указан либо значением, либо определенной константой. элемента называется . Индексы могут целыми положительными или целыми . Чтобы обратиться к элементу массива, рядом с идентификатором в скобках указать элемента.

Но данные могут организованы в виде (матрицы), где каждой переменной номером строки и столбца. Например, в зрительном зале указанием номера и номером места в ряду. Такие удобно описать двумерный массив. В от одномерного каждому элементу массива соответствует индексов. Первый – это номер , а второй – номер , где расположен массива.

Размер массива задается чисел: M*N, где M – строк, а N – число в таблице.

Пусть двумерный массив , имеющий размер 10*20. массив на Паскаль может описан следующим :

Var

Matr : [1..10,1..20] of integer;

Matr[5,7] – элемент, в 5-ой строке и в 7- столбце.

Любая , переменная, значение или выражения в Паскале характеризуется типом. Тип из этих определяет множество значений, которые иметь объект, а множество допустимых , которые применимы к . Кроме того, определяет и формат представления значения .

Отличительной особенностью является то , что все компоненты суть одного типа (, структурированного); эти можно легко и обеспечить доступ к из них указанием его номера

Цель :

Даны целочисленная размера nx3, числа k, l (1<=k<=n, 1<=l<=n, k ≠1). Преобразовать так , чтобы с исходным номером k следовала за с исходным номером l, порядок следования строк.

Блок :

Решение:

Program ;

Uses Crt;

a: array[1..5,1..3] of ;

i,j,k,l,n,t:integer;

Begin

('Введите число');

(n);

ClrScr;

for i:=1 n do

Begin

j:=1 to 3 do

writeln('Введите :');

readln(a[i,j]);

End;

;

writeln('Исходный ');

for i:=1 to n

Begin

for j:=1 3 do

write(a[i,j]:4);

;

End;

writeln;

('k=');

readln(k);

write('l=');

(l);

if k<l then

for i:=k to l-1

Begin

for j:=1 3 do

Begin

t:=a[i,j];

a[i,j]:=a[i+1,j];

a[i+1,j]:=t;

;

End;

End

Begin

for i:=k l+2 do

Begin

j:=1 to 3 do

t:=a[i,j];

a[i,j]:=a[i-1,j];

a[i-1,j]:=t;

End;

End;

;

writeln('Перестановленный ');

for i:=1 to n

Begin

for j:=1 3 do

write (a[i,j]:4);

;

End;

End.

  1. с комбинированными типами .

Цель задания:

  1. навыков в организации /вывода значений типов данных.
  2. практических навыков задач с использованием .

1.1 ДАННЫЕ - информация, в формализованном виде, обеспечивает возможность хранения, обработки и .

Программы на Паскаль имеют структуру:

1) Блок PROGRAM – имеет , состоящее только латинских букв и . Его присутствие обязательно, но записывать для распознавания нужной среди других .

2) Программный блок, в общем случае 7 разделов:

•раздел модулей (uses);

• описания меток ();

•раздел описания (const);

•раздел типов данных ();

•раздел описания (var);

•раздел процедур и функций;

• описания операторов.

структура программы языке Паскаль :

Рrogram ИМЯ..; { программы}

Uses ...; { описания модулей}

..; {раздел объявления }

Begin {начало части программы}

... {

... операторов}

End. { программы}

2.1 Постановка :

Составить список группы, включающей 25 . Для каждого указать дату , год поступления в , курс, группу, каждого года . Информацию о каждом оформить в программе в записи. Совокупность объединить в массив.

программу, которая ввод полученной , распечатку её в таблицы, а также информации согласно варианту.

Вариант: список студентов среднему балу и его.

Решение:

spisok_grupp;

Crt ;

Const =3;

Const kol=5;

sved=record

:string[25];

datar:[8];

god: integer;

: integer;

ocenki:[1..3,1..5] of integer;

:array[1..25] of ;

End;

Var

: array[1..25] of ;

i,i1,j, s,mesto,n,g:integer;

,t:real;

q:string[25];

ClrScr;

writeln(е количество учеников');

(n);

for i:=1 to n

With spisok[i]

Begin

Writeln (я ',i,' студента');

Readln ();

Writeln('Дата ');

Readln (datar);

('Год поступления');

(god);

Writeln (а');

Readln (gruppa);

s:=0;

i1:=1 to kurs

begin

writeln(и ',i1,' года');

for j:=1 kol do

Writeln (j,' Предмет');

(ocenki[i1,j]);

s:=s+ocenki[i1,j];

;

srball[i]:=s/(kol*);

ClrScr;

End;

('Фамилия':8,'Дата

':16,'Год поступления':18,с':7,'Группа':8);

for i:=1 n do

begin

spisok[i] do (famil:8,datar:16,:18,kurs:7,gruppa:8);

;

writeln;

for g:=1 kurs do

write(g,' год:');

j:=1 to kol

with spisok[i] write(ocenki[g,j]:4);

;

end;

with [i] do writeln(й бал =',srball[i]:6:2);

;

end;

writeln;

('По порядку');

j:=1 to n do

max:=spisok[j].[j];

mesto:=j;

for i:=j n do

if [i].srball[i]<=max

max:=spisok[i].[i];

mesto:=i;

End;

t:=[j].srball[j];

spisok[j].[j]:=spisok[mesto].[mesto];

spisok[].srball[mesto]:=t;

q:=[j].famil;

spisok[j].:=spisok[mesto].;

spisok[mesto].:=q;

with spisok[j] writeln(famil:8,[j]:6:2);

End;

End.

  1. с файлами.

Цель :

  1. Изучение файловых .
  2. Получение практических работы с файлами.

(от англ. , основные значения), упорядоченных и взаимосвязанных , имеющая описание идентификации отдельных .

Язык Турбо предлагает три такого представления:

- файлы,

- текстовые ,

- нетипизированные файлы.

файл – последовательность одного типа.

файл – файлы данных. Текстовые имеют тип .

Нетипизированные файлы – файлы, поддержка осуществляется с максимально скоростью. Введение файлов в систему Паскаль было стремлением повысить программ, участвующих в обмене с внешними данных.

Для с файлами используются функции:

  • Assign – , ассоциирующая имя с некоторой переменной, с и идет последующая .
  • Reset – функция, уже существующий для чтения него.
  • Rewrite – , создающая новый , или перезаписывающая .
  • Readln – чтение указанного файла с переходом на строку.
  • Writeln – в указанный файл с переходом на строку.

Вообще, рассматривается не как несколько , а как запись (), что значительно работу с файлами.

задача:

Подготовить и организовать ввод в файл. Организовать файла и вывод информации.

Дан f, содержащий различные . Каждая дата – число, месяц и . Год с наименьшим .

Решение:

program ;

uses crt;

f:text;

name,,s,a: string;

s1,min,y:;

begin

clrscr;

('Введите имя для записи :');

readln(name);

;

assign(f,name);

(f);

repeat

write(е дату:');

readln();

writeln(f,txt);

txt='';

close (f);

;

reset (f);

min:= 9999;

not eof(f)

Begin

readln (f,a);

s:=(a,7,4);

val(s,s1,y);

if (s1<) and (s1<>0) then :=s1;

end;

writeln(й год:',min);

(f);

end.

Заключение

считая статических , программист имеет применять в собственной динамические переменные, для которых уже в процессе программы и потом, в них больше необходимости, быть освобождена. Подобные размещаются в иной оперативной памяти . Такая динамически память называется (Heap-областью).

в использовании динамических появляется в последующих :

· программа обязана огромные объемы (свыше 64 Кбайтов);

· обязана обрабатывать , размер памяти хранения которых неизвестен;

· тип данных заблаговременно ;

· программа употребляет структуры данных (, очередь, двунаправленный , дерево, граф и т.п.).

динамических величин разработчику ПО доп возможностей. -1-х, подключение динамической позволяет прирастить обрабатываемых данных. -2-х, если необходимость в -либо данных до конца , то занятую память можно для иной . В-3-х, внедрение динамической памяти позволяет создавать структуры данных переменного размера.

Работа с динамическими величинами связана с внедрением еще 1-го типа данных — ссылочного типа. Величины,которые имеют ссылочный тип, называют указателями.

В рамках работы все поставленные задачи были выполнены, также достигнута цель исследования. Была рассмотрена вся нужная литература. В первой главе была рассмотрена теоретическая часть исследования, базы работы со ссылочным типом данных, во 2-ой главе на примере практических заданий было рассмотрено практическое применение ссылочного типа.

Можно прийти к выводу, что ссылочный тип представляет большущее значение для работы с данными динамической памяти, позволяет организовывать работу всей программы в общем, также при работе с большими массивами информации, что является главной целью программирования в современном мире.

Список использованных источников

  1. Березин Б. И, Березин С. Б. Начальный курс программирования, 2016.
  2. Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT: Пер. с англ./ Предисл. Н. В. Гайского.
  3. Довгаль К. С., Литвинов Б. Ю., Сбитнев А. И., Персональные ЭВМ: Турбо-Паскаль V6.0, Объектное программирование, Локальные сети. (Учебное пособие се), 2015 - 440 с.
  4. Иванова Г. С. Основы программирования. Учебник для вузов, 2014.
  5. Кнут Д. Искусство программирования. Том 1. Основные алгоритмы. – М.: Вильямс, 2013 – 272 с.
  6. Культин Н.. Программирование в Turbo Pascal и Delphi. BHV 2013
  7. Лукин С. Н. TurboPascal 7.0. Самоучитель для начинающих, 2014.
  8. Малыхина М. П. Программирование на языке высокого уровня Turbo Pascal – М.: БХВ-Петербург, 2016. – 544 с.
  9. Марков А. С., Милов М. П., Пеледов Г. В.: Программное обеспечение ЭВМ. кн.11, Перспективы развития вычислительной техники, в 11 книгах, Спр. пособие / Под ред. Ю. М. Смирнова. – М.: Высшая школа, 2013, 127 с.
  10. Меженный О. А. Turbo Pascal. Самоучитель. — М.: Вильямс, Диалектика, 2013. – 336 с.
  11. Меженный О. А. Turbo Pascal: учитель программирования. Диалектива 2015.
  12. НемнюгинС. А. Turbo Pascal. Программирование на языке высокого уровня.
  13. Офицеров Д. В., Старых В. А. Программирование в интегрированной среде Турбо-Паскаль: Справ. пособие. – Мн.: Беларусь, 2013, 240 с.
  14. Перминов О. Н. Программирование на языке Паскаль. – М.: Радио и связь, 2014, 219 с.
  15. Попов В. Паскаль и Дельфи. Самоучитель, 2013.
  16. Порублев И. Н., Ставровский А. Б. Алгоритмы и программы – 2012.
  17. ПотопахинВ. В. Turbo Pascal. Решение сложных задач, 2013.
  18. Прайс Д. Программирование на языке Паскаль: Практическое руководство. Пер. с англ. – М.: Мир, 2013, 232 с.
  19. Рапаков Г. Г., Ржеуцкая С. Ю. Программирование на языке Pascal. – М.: БХВ-Петербург, 2014. – 480 с.
  20. Рапаков Г. Г., Ружецкая С. Ю. Turbo Pascal для студентов и школьников. – СПб.: БХВ-Петербург, 2015. – 352 с.
  21. Семакин И. Г., А. П. Шестаков Основы программирования, 2001.
  22. Андреева Т.А.: Программирование на языке Pascal – СПб.: Интернет-университет информационных технологий, Бином. Лаборатор, 2016. – 240 с.
  23. Фаронов В. В. TurboPascal. – СПб.: БХВ – Петербург, 2014. – С. 143 – 148.
  24. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс: учебное пособие. – М.: КНОРУС. – 2013. – 322 с.
  25. Федоренко Ю. Алгоритмы и программы на Turbo Pascal. Учебный курс. – 2013. – 302 с.
  26. Шпак Ю. А. Программирование в Turbo Pascal. Переход к Delphi. — СПб: МК-Пресс, 2016. – 416 с.

ПРИЛОЖЕНИЕ 1

Рис.1. Данные динамических структур

Приложение 2

Сортировка элементов массива с помощью дерева

    scanf("%s",word);

    if(isalpha(word[0]))

      root = addtree(root, word);

  }while(word[0]!='0');    // условие выхода – ввод символа ‘0’

  treeprint(root);

  freemem(root);

  getchar();

  getchar();

  return 0;
}

Результат выполнения