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

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

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

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

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

Да, спасибо!

0%

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

0%

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

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

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

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


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

Тип Реферат
Предмет Информатика и программирование
Просмотров
1274
Размер файла
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
156804
рейтинг
icon
6076
работ сдано
icon
2739
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
66 019 оценок star star star star star
среднее 4.9 из 5
Московский Университет имени С.Ю. Витте
Спасибо огромное исполнителю, работа выполнена очень быстро, без замечаний , оценка 90 бал...
star star star star star
Вгуэс
Работа была выполнена за два дня до срока, очень грамотная работа с учетом необходимых кр...
star star star star star
Московский Государственный Университет им.Ломоносова
Работа хорошая, несмотря на сложную тему. Осталась довольна. Оперативно, качественно.
star star star star star

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

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

вариант №9

Другое, Материаловедение

Срок сдачи к 3 мая

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

Написать реферат

Реферат, Финансово-экономический мониторинг

Срок сдачи к 24 апр.

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

Помощь на экзамене

Онлайн-помощь, Сопротивление материалов

Срок сдачи к 23 апр.

8 минут назад

практические

Контрольная, Биология

Срок сдачи к 25 апр.

8 минут назад

Биография Куприна А. И

Доклад, История

Срок сдачи к 24 апр.

8 минут назад

Курсовая работа на тему «Динамика функций современного государства»

Курсовая, Теория государства и права

Срок сдачи к 10 мая

8 минут назад

Выполнить лабораторную работу

Лабораторная, Современные электроприводы промышленных механизмов

Срок сдачи к 29 апр.

10 минут назад

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

Контрольная, Строительная механика

Срок сдачи к 27 апр.

12 минут назад

Сделать сценарий отчетного концерта танцевальных студий " В ритме...

Другое, Сценарии паздников, педагогика

Срок сдачи к 30 апр.

12 минут назад

Конкурентное право решить 7 задач

Решение задач, Конкурентное право

Срок сдачи к 30 апр.

12 минут назад

Убрать ИИ и повысить оригинальность

Услуги корректора, Педагогика

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

12 минут назад

выбрать правильный ответ

Другое, Материаловедение

Срок сдачи к 3 мая

12 минут назад

Сделать 2 Лабораторные

Лабораторная, основы электротехники

Срок сдачи к 24 апр.

12 минут назад

Информационные технологии в профессиональной деятельности

Решение задач, Информационные технологии в профессиональной деятельности

Срок сдачи к 27 апр.

12 минут назад

Проект выполнить

Реферат, Психология

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

12 минут назад

Раскрыть каждый пункт плана

Контрольная, МДК 05.01

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

12 минут назад

Информационные технологии в профессиональной деятельности

Решение задач, Информационные технологии в профессиональной деятельности

Срок сдачи к 27 апр.

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

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

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

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

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

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

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

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