Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Основы программирования

Тип Реферат
Предмет Информатика и программирование
Просмотров
1245
Размер файла
24 б
Поделиться

Ознакомительный фрагмент работы:

Основы программирования

Национальный технический университет Украины

«Киевский политехнический институт»

Факультет информатики и вычислительной техники

Кафедра вычислительной техники

Киев 2000

Динамическое распределение памяти. Списковые структуры. Технические характеристики предлагаемого модуля для работы с односвязным списком. Листинг модуля Dinamo. Листинг программы, при написании которой был использован модуль Dinamo.

В языке программирования Паскаль, как и в других языках, всегда много используются переменные. В Паскале все переменные, которые мы используем в программе, должны быть заранее описаны, то есть, должен быть указан их тип: целое число, строка и т.п. Но зачастую не возможно заранее знать, какого типа переменная нам будет нужна. Для этих целей и служат динамические переменные, или указатели. Для их создания следует перед идентификатором вставить специальный символ ^. Прежде чем в программе можно будет использовать динамические переменные, следует выделить память, куда будут накапливаться значения соответствующего типа. Только после этого указатель будет содержать корректный адрес памяти. Размещение динамических переменных производится в специальной области памяти Heap. Динамические переменные ничем не отличаются от обычных переменных. Над ними можно производить все действия, что и с обычными переменными. Для работы с динамическим распределением памяти очень удобно использовать связанные структуры данных, например односвязные списки.

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

Первый элемент Последний элемент


В схеме каждый элемент разбит на два логических поля: Curr – обозначает все содержательные данные, и Next – указатель на следующий элемент списка. У последнего элемента указатель установлен в Nil, что используется для инициализации не распределенных динамических переменных. Данный список называется односвязным, поскольку движение от элемента к элементу в нем происходит только в одном направлении. Односвязный список использован в модуле Dinamo как один из вариантов работы с динамическими структурами.

Как происходит работа с элементами односвязного списка, например, вставка нового элемента? Лучше всего это можно проиллюстрировать следующим рисунком на примере односвязного списка из трех элементов.


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

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

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

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

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

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

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

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

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

Данный модуль удобен в использовании, управление отдельными процедурами требует определенной предварительной типизации.

Листинг программы programdinamo11;

uses Crt, Graph;

type

pitem = ^adresses;

adresses = record

inf : string;

next : pitem;

prev : pitem;

end;

var

tcurr, tfirst, tlast, dont, temp : pitem;

r: char;

adre: string;

a : integer;

Procedure Novoe;

begin

if tfirst=Nil then

begin

new(tcurr);

writeln('Адрес');

readln(adre);

tcurr^.inf:=adre;

tcurr^.next:=nil;

tfirst:=tcurr;

end

else

begin

writeln ('adresses');

readln(adre);

new(tcurr^.next);

tcurr:=tcurr^.next;

tcurr^.inf:=adre;

end;

tcurr^.next:=nil;

dont:=tcurr;

end;

Procedure Prosm;

begin

tcurr:=tfirst;

while tcurr <> nil do

begin

writeln(tcurr^.inf);

repeat

r:=readkey;

until r in [#32];

tcurr:=tcurr^.next;

end;

tcurr:=dont;

repeat

until keypressed;

end;

Procedure Poisk;

begin

a:=0;

writeln ('Chto iskat?');

readln(adre);

tcurr:=tfirst;

while tcurr <> nil do

begin

if tcurr^.inf<>adre then

tcurr:=tcurr^.next

else

begin

writeln (tcurr^.inf);

tcurr:=nil;

a:=1;

end;

end;

if a=0 then

begin

writeln ('Not found');

end;

tcurr:=dont;

repeat

until keypressed;

end;

Procedure Vstavka;

begin

a:=0;

writeln ('Posle chego vstavka?');

readln(adre);

if adre='-' then

begin

new(temp);

writeln ('Chto?');

writeln ('adresses');

readln(adre);

temp^.inf:=adre;

temp^.next:=tfirst;

tfirst:=temp;

end

else

begin

tcurr:=tfirst;

begin

while tcurr<>nil do

begin

if tcurr^.inf<>adre then tcurr:=tcurr^.next

else

if (tcurr^.next=nil) and (a=0) then

begin

Novoe;

a:=1;

tcurr:=nil;

end

else

if (tcurr<>nil) and (a=0) then

begin

new(temp);

writeln ('Chtooo?');

writeln ('adresses');

readln(adre);

temp^.inf:=adre;

temp^.next:=tcurr^.next;

tcurr^.next:=temp;

tcurr:=dont;

a:=1;

end;

end;

end;

end;

if a=0 then writeln ('Not found');

repeat

until keypressed;

tcurr:=dont;

end;

Procedure Deleting;

begin

writeln ('Chto deletet?');

readln(adre);

tcurr:=tfirst;

temp:=tfirst;

while tcurr <> nil do

begin

if tcurr^.inf<>adre then

begin

temp:=tcurr;

tcurr:=tcurr^.next;

end

else

begin

if tcurr=tfirst then

begin

tfirst:=temp^.next;

tcurr:=dont;

end

else

if tcurr^.next=nil then

begin

temp^.next:=tcurr^.next;

tcurr:=temp;

tcurr^.next:=nil;

dont:=tcurr;

end

else

begin

temp^.next:=tcurr^.next;

tcurr:=temp;

end;

end;

end;

tcurr:=dont;

writeln ('Alles');

repeat

until keypressed;

end;

begin {programmka}

tfirst:=nil;

repeat

{clrscr;}

writeln('(С)оздавать, (П)росмотр, (У)даление, По(и)ск, (B)ставка');

repeat

r:=readkey;

until r in ['c','g','b','d','e', #27];

case r of

'c' : Novoe;

'g' : Prosm;

'b' : Poisk;

'd' : Vstavka;

'e' : Deleting;

end;

until r=#27;

{dispose(tcurr);

dispose(temp);}

end.

Модуль DINAMO

unit Dinamo;

Interface

uses Crt;

type

pitem=^tlist;

tlist=record

inf:pointer;

next:pitem;

end;

taction=procedure(p:pointer);

t_test=function(p:pointer):boolean;

Function New_item(p:pointer):pitem;

Function Make_item(dont:pitem; p:pointer):pitem;

Procedure Prosm(first:pitem;act:taction);

Function Find(first:pitem; test:t_test; act:taction):pitem;

Procedure Deleting(first:pitem;test:t_test);

Function Deleting_f_end(first:pitem; test:t_test):pitem;

Function Insert_head(first:pitem;p:pointer):pitem;

Procedure Insert(first:pitem;test:t_test; p:pointer);

Implementation

Function New_item(p:pointer):pitem;

var tcurr :pitem;

begin

new(tcurr);

tcurr^.inf:=p;

tcurr^.next:=nil;

end;

Function Make_item(dont:pitem;p:pointer):pitem;

var tcurr:pitem;

begin

new(tcurr^.next);

tcurr:=dont;

tcurr:=tcurr^.next;

tcurr^.inf:=p;

tcurr^.next:=nil;

end;

Procedure Prosm(first:pitem; act:taction);

var tcurr: pitem;

begin

tcurr:=first;

while tcurr <> nil do

begin

act(tcurr^.inf);

tcurr:=tcurr^.next;

end;

end;

Function Find(first:pitem; test:t_test; act:taction):pitem;

var tcurr:pitem;

begin

tcurr:=first;

while tcurr <> nil do

begin

if test(tcurr^.inf)=false then

tcurr:=tcurr^.next

else

begin

if test(tcurr^.inf)=true then

begin

act(tcurr^.inf);

tcurr:=tcurr^.next;

end;

end;

end;

end;

Procedure Deleting(first:pitem; test:t_test);

var tcurr,temp:pitem;

begin

tcurr:=first;

temp:=first;

while tcurr <> nil do

begin

if test(tcurr^.inf)=false then

begin

temp:=tcurr;

tcurr:=tcurr^.next;

end

else

begin

if tcurr=first then

begin

first:=temp^.next;

end

else

begin

temp^.next:=tcurr^.next;

tcurr:=temp;

end;

end;

end;

end;

Function Deleting_f_end(first:pitem; test:t_test):pitem;

var tcurr,temp : pitem;

begin

tcurr:=first;

temp:=first;

while tcurr <> nil do

begin

if test(tcurr^.inf)=false then

begin

temp:=tcurr;

tcurr:=tcurr^.next;

end

else

if tcurr^.next=nil then

begin

temp^.next:=tcurr^.next;

tcurr:=temp;

tcurr^.next:=nil;

end;

end;

end;

Function Insert_head(first:pitem;p:pointer):pitem;

var tcurr, temp :pitem;

begin

new(temp);

temp^.inf:=p;

temp^.next:=first;

first:=temp;

end;

Procedure Insert(first:pitem;test:t_test; p:pointer);

var tcurr, temp : pitem;

begin

if test(tcurr^.inf)=true then

begin

new(temp);

temp^.inf:=p;

temp^.next:=tcurr^.next;

tcurr^.next:=temp;

end;

end;

begin

end.

Программа, использующая модуль DINAMO

program DODAVANNYA;

uses Dinamo, Crt;

type

pdata=^tdata;

tdata=record

a:string[20];

end;

var

r: char;

dont,first,ptemp: pitem;

b:string[20];

tmp :pdata;

Procedure Novoe;far;

begin

new(tmp);

writeln('Vvedite zifru');

read(b);

if first=nil then

begin

with tmp^ do a:=b;

dont:=new_item(tmp);

first:=new_item(tmp);

end

else

begin

with tmp^ do a:=b;

dont:=make_item(dont,tmp);

end;

end;

Procedure Print(p:pointer);far;

begin

with pdata(p)^ do

begin

writeln(a);

writeln('<>< <>< <><');

end;

repeat

r:=readkey;

until r in [#32]

end;

Function test(p:pointer):boolean;far;

var t : boolean;

begin

with pdata(p)^ do t:=a=b;

end;

Procedure ToBeFound;far;

begin

new(tmp);

writeln('What must I to find?');

read(b);

Find(first,test,Print);

repeat

until keypressed;

end;

Procedure Vstav;far;

begin

new(tmp);

writeln('Posle chego?');

read(b);

if b = 'h' then

begin

writeln('Chto?');

readln(b);

with tmp^ do a:=b;

first:=Insert_head(first,tmp);

end

else

begin

ptemp:=Find(first,test,Print);

if ptemp<>nil then

begin

writeln('Chto?');

readln(b);

with tmp^ do a:=b;

Insert(ptemp,test,tmp);{Type mismatch}

end;

if ptemp=nil then

begin

writeln('Chto?');

readln(b);

with tmp^ do a:=b;

dont:=new_item(tmp);

end;

end;

end;

begin {programmka}

first:=nil;

repeat

{clrscr;}

writeln('(С)оздавать, (П)росмотр, (У)даление, По(и)ск, (B)ставка');

repeat

r:=readkey;

until r in ['c', 'g','b','d','e', #27];

case r of

'c' : Novoe;

'g' : Prosm(first,Print);

'b' : ToBeFound;

'd' : Vstav;

{'e' : Delet; }

end;

until r=#27;

dispose(tmp);

end.


Нет нужной работы в каталоге?

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

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

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

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
156450
рейтинг
icon
6068
работ сдано
icon
2737
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
63 457 оценок star star star star star
среднее 4.9 из 5
Филиал государственного бюджетного образовательного учреждения высшего образования Московской област
Спасибо Елизавете за оперативность. Так как это было важно для нас! Замечаний особых не бы...
star star star star star
РУТ
Огромное спасибо за уважительное отношение к заказчикам, быстроту и качество работы
star star star star star
ТГПУ
спасибо за помощь, работа сделана в срок и без замечаний, в полном объеме!
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

решить 6 практических

Решение задач, Спортивные сооружения

Срок сдачи к 17 дек.

только что

Задание в microsoft project

Лабораторная, Программирование

Срок сдачи к 14 дек.

только что

Решить две задачи №13 и №23

Решение задач, Теоретические основы электротехники

Срок сдачи к 15 дек.

только что

Решить 4задачи

Решение задач, Прикладная механика

Срок сдачи к 31 дек.

только что

Выполнить 2 задачи

Контрольная, Конституционное право

Срок сдачи к 12 дек.

2 минуты назад

6 заданий

Контрольная, Ветеринарная вирусология и иммунология

Срок сдачи к 6 дек.

4 минуты назад

Требуется разобрать ст. 135 Налогового кодекса по составу напогового...

Решение задач, Налоговое право

Срок сдачи к 5 дек.

4 минуты назад

ТЭД, теории кислот и оснований

Решение задач, Химия

Срок сдачи к 5 дек.

5 минут назад

Решить задание в эксель

Решение задач, Эконометрика

Срок сдачи к 6 дек.

5 минут назад

Нужно проходить тесты на сайте

Тест дистанционно, Детская психология

Срок сдачи к 31 янв.

6 минут назад

Решить 7 лабораторных

Решение задач, визуализация данных в экономике

Срок сдачи к 6 дек.

7 минут назад

Вариационные ряды

Другое, Статистика

Срок сдачи к 9 дек.

8 минут назад

Школьный кабинет химии и его роль в химико-образовательном процессе

Курсовая, Методика преподавания химии

Срок сдачи к 26 дек.

8 минут назад

Вариант 9

Решение задач, Теоретическая механика

Срок сдачи к 7 дек.

8 минут назад

9 задач по тех меху ,к 16:20

Решение задач, Техническая механика

Срок сдачи к 5 дек.

9 минут назад
9 минут назад
10 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно