3.3.1. Описание процедур и функций языка

void *malloc(size_t size) – данная функция используется для выделения памяти из кучи в байтах. Для таких информационных структур, таких как деревья и списки выделение памяти происходит таким же способом

void free(void *block) – данная функция очищает память, которая была выделена такими функциями как calloc, malloc или realloc.

3.3.2. Описание созданных функций для работы с динамической памятью, графами

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

void klava() – данная функция является универсальной, так как изначально она создает первый элемент (первую вершину графа), после чего пользователю предлагается дополнить граф новыми элементами (вершинами). Функция использует стандартную функцию для выделения памяти языка С: malloc.

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


ВЫВОДЫ

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

Задание, выданное на летнюю практику, поставило определенные задачи:

1) Научится создавать связные структуры данных, используя указатели;

2) научится создавать и манипулировать динамическими структурами данных, такими как связные списки, очереди и стеки;

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

Решение выданного задания было реализовано с помощью языка программирования С.

С обладает множеством преимуществ. Он является современным языком программирования, включающим в себя управляющие структуры, наличие которых в языке считается желательным с точки зрения теории и практики программирования. Этот язык построен так, что позволяет естественным образом применять планирование сверху – вниз, структурный подход к программированию, модульное проектирование программ. В результате на С получаются более надежные и “прозрачные программы”.

Вот почему именно язык С был выбран автором для реализации данной задачи.

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


Приложение А

ЛИСТИНГ ПРОГРАММЫ

Задание №1:

#include<stdio. h>

#include<conio. h>

#include<alloc. h>

#include<string. h>

#include<stdlib. h>

// ------------<Структура>---------

typedef struct sp

{

char inf [100] ;

struct sp *next;

} sp;

sp *g,*head,*teil;

// -----------</Структура>---------

void titl()

{

clrscr();

gotoxy(20,1);

printf("МИHИСТЕРСТВО ОБРАЗОВАHИЯ И HАУКИ УКРАИHЫ");

gotoxy(12,2);

printf("Донецкий государственный институт искусственного интеллекта");

gotoxy(27,8);

printf("Здание на летнюю практику #1");

gotoxy(35,9);

printf("по дисциплине: ");

gotoxy(17,10);

printf("\"Основы программирования и алгоритмические языки. \"");

gotoxy(50,15);

printf("Выполнил: ");

gotoxy(50,16);

printf("студент группы ПО-05г");

gotoxy(50,17);

printf("Пивоваров Артем Генадиевич");

gotoxy(50, 19);

printf("Проверил: ");

gotoxy(50, 20);

printf("асс. Мамбетова Лилия Сергеевна");

gotoxy(2,25);

printf("Для продолжения нажмите любую клавишу... ");

getch();

clrscr();

gotoxy(15,10);

printf("ЗАДАHИЕ: ");

gotoxy(10,12);

printf(" Описать функцию, которая в списке меняет местами");

gotoxy(10,13);

printf("первый и предпоследний элементы. ");

gotoxy(2,25);

printf("Для продолжения нажмите любую клавишу... ");

getch();

}

void program()

{

int kol=1;

char key;

clrscr();

printf("Введите элементы стрруктуры: \n");

head=(sp*) malloc(sizeof(sp));

g=head;

printf("Введите%i-элемент: ",kol);

scanf("%s",&g->inf);

g->next=0;

teil->next=0;

teil=head;

// --------Ввод остальных эл-тов структуры--------------

kol++;

printf("Введите%i-элемент: ",kol);

g=(sp*) malloc(sizeof(sp));

scanf("%s",&g->inf);

g->next=0;

teil->next=g;

teil=teil->next;

do

{

if (key! =27)

{

kol++;

printf("Введите%i-элемент: ",kol);

g=(sp*) malloc(sizeof(sp));

scanf("%s",&g->inf);

g->next=0;

teil->next=g;

teil=teil->next;

}

printf("Для прекращения ввода нажмите ESC; Для продолжения любую клавишу\n");

key=getch();

}

while (key! =27);

printf("Вы ввели такие элементы: \n");

g=head;

kol=0;

while (g! =0)

{

kol++;

printf("Эллемент%i=%s\n",kol,g->inf);

g=g->next;

}

getch();

}

void zamena()

{

char *tmp;

g=head;

while (g->next! =NULL)

{

if (g->next->next==NULL)

{

strcpy(tmp,g->inf);

strcpy(g->inf,head->inf);

strcpy(head->inf,tmp);

}

g=g->next;

}

// --------------Вывод результата----------------

g=head;

int kol=1;

printf("\nРезультат: ");

while (g! =NULL)

{

printf("\n%i-й элемент равен:%s",kol,g->inf);

kol++;

g=g->next;

}

getch();

}

void cleen()

{

g=head;

while (g! =NULL)

{

free(g);

g=g->next;

}

}

void main()

{

titl();

program();

zamena();

cleen();

}

Задание №2:

// --------------------------------Библиотеки--------------------------------

#include <stdio. h>

#include <conio. h>

#include <alloc. h>

#include <string. h>

#include <stdlib. h>

// --------------------------------------------------------------------------

// ===============

char *fname [12] ;

FILE *in,*out;

int n, i,j;

int v [10] ;

char s [6],s1 [6] ;

// ===============

// ***********************************

typedef struct graf

{

int v1,v2;

struct graf *next;

} Graf;

Graf *g,*head;

// ***********************************

// --------------------------------Реквизиты---------------------------------

// --------------------------------------------------------------------------

void tit()

{

clrscr();

gotoxy(20,1);

printf("МИHИСТЕРСТВО ОБРАЗОВАHИЯ И HАУКИ УКРАИHЫ");

gotoxy(12,2);

printf("Донецкий государственный институт искусственного интеллекта");

gotoxy(27,8);

printf("Здание на летнюю практику #2");

gotoxy(35,9);

printf("по дисциплине: ");

gotoxy(17,10);

printf("\"Основы программирования и алгоритмические языки. \"");

gotoxy(50,15);

printf("Выполнил: ");

gotoxy(50,16);

printf("студент группы ПО-05г");

gotoxy(50,17);

printf("Пивоваров Артем Генадиевич");

gotoxy(50, 19);

printf("Проверил: ");

gotoxy(50, 20);

printf("асс. Мамбетова Лилия Сергеевна");

gotoxy(2,25);

printf("Для продолжения нажмите любую клавишу... ");

getch();

return;

}

// --------------------------------------------------------------------------

// --------------------------------Задание-----------------------------------

// --------------------------------------------------------------------------

void work_window()

{

clrscr();

gotoxy(35,1);

printf("ЗАДАHИЕ: ");

gotoxy(12,2);

printf(" Определить количество");

gotoxy(12,3);

printf(" изолированных вершин нориентированного графа,");

gotoxy(12,4);

printf("вывести их список. Сделать выбраную вершину неизолированной! \n");

return;

}

// --------------------------------------------------------------------------

// --------------------------------------------------------------------------

// ----------------------Ввод данных с клавиатуры---------------------------

void klava()

{

do

{

printf("\nВведите количество вершин: ");

scanf("%s",&s);

n=atoi(s);

itoa(n,s1,10);

if((n<2) ||(n>5))

printf("Ошибка! Выход из диапазона: '2<n<=5'\n");

}

while((n<2) ||(n>5) ||strcmp(s,s1));

// --------------------------------------------------------------------------

for (i=0; i<n; i++)

v [i] =0;

// --------------------------------------------------------------------------

// --------------------Ввод первого элемента списка--------------------------

// --------------------------------------------------------------------------

printf("Введите ребра графа: \n");

head=(Graf *) malloc(sizeof(Graf));

// ======================================================

do

{

printf("v1=");

scanf("%s",&s);

head->v1=atoi(s);

itoa(head->v1,s1,10);

if (((head->v1) <1) ||((head->v1) >n))

printf("Ошибка! Выход из диапазона: '1<v1<=n'\n");

}

while(((head->v1) <1) ||((head->v1) >n) ||strcmp(s,s1));

// ======================================================

do

{

printf("v2=");

scanf("%s",&s);

head->v2=atoi(s);

itoa(head->v2,s1,10);

if (((head->v2) <1) ||((head->v2) >n))

printf("Ошибка! Выход из диапазона: '1<v2<=n'\n");

}

while(((head->v2) <1) ||((head->v2) >n) ||strcmp(s,s1));

// ======================================================

head->next=NULL;

// --------------------------------------------------------------------------

// -------------------Ввод остальных элементов списка------------------------

// --------------------------------------------------------------------------

char ch=1;

while(ch! =27)

{

printf("Хотите продолжить ввод вершин? \n");

ch=getch();

if (ch! =27)

{

g=(Graf *) malloc(sizeof(Graf));

// ======================================================

do

{

printf("v1=");

scanf("%s",&s);

g->v1=atoi(s);

itoa(g->v1,s1,10);

if (((g->v1) <1) ||((g->v1) >n))

printf("Ошибка! Выход из диапазона: '1<v1<=n'\n");

}

while(((g->v1) <1) ||((g->v1) >n) ||strcmp(s,s1));

// ======================================================

do

{

printf("v2=");

scanf("%s",&s);

g->v2=atoi(s);

itoa(g->v2,s1,10);

if (((g->v2) <1) ||((g->v2) >n))

printf("Ошибка! Выход из диапазона: '1<v2<=n'\n");

}

while(((g->v2) <1) ||((g->v2) >n) ||strcmp(s,s1));

// ======================================================

g->next=head;

head=g;

}

}

}

// -------------------------------------------------------------------------

// -------------------------------------------------------------------------

// -------------------------------------------------------------------------

int raschet()

{

printf("Ребра графа: \n");

g=head;

i=0;

while(g! =NULL)

{

i++;

printf("РЕБРО%d: v1=%d v2=%d\n", i,g->v1,g->v2);

g=g->next;

}

// --------------------------------------------------------------------------

// --------------Просмотр графа и поиск изолированых вершин------------------

// --------------------------------------------------------------------------

g=head;

while(g! =NULL)

{

v [g->v1-1] ++;

v [g->v2-1] ++;

g=g->next;

}

int f=0;

for(i=1; i<=n; i++)

printf("v [%d] =%d\n", i,v [i-1]);

printf("Изолированные вершины: ");

for(i=1; i<=n; i++)

if (v [i-1] ==0)

printf("%d ", i);

else

if (v [i-1] ! =0)

f=f+1;

// ********************************************

if (f==n)

{

printf("\nИзолированных вершин HЕТ! ");

// ----------------------------Сохранение в файл------------------------------

i=0;

if ((out=fopen("1. txt", "w")) == NULL)

{

printf("Ошибка открытия входного файла! \n");

return 1;

}

g=head;

while(g! =NULL)

{

i++;

fprintf(out,"Изолированных вершин HЕТ! ");

fprintf(out,"РЕБРО%d: v1=%d v2=%d\n", i,g->v1,g->v2);

g=g->next;

}

fclose(out);

// --------------------------------------------------------------------------

getch();

exit(1);

}

else

// --------------------------------------------------------------------------

// -----------------Добавление вершины в голову списка-----------------------

// --------------------------------------------------------------------------

printf("\nКакую вершину вы хотите сделать не изолированной? \n");

// ======================================================

do

{

printf("Укажите вершину: ");

scanf("%s",&s);

i=atoi(s);

itoa(i,s1,10);

if ((i>n) ||(i<1) ||(v [i-1] ! =0))

printf("Ошибка! \n");

}

while((v [i-1] ! =0) ||strcmp(s,s1) ||(i>n) ||(i<1));

// ======================================================

g=(Graf *) malloc(sizeof(Graf));

g->v1=i;

g->v2=head->v1;

g->next=head;

head=g;

printf("Ребра графа после добавления одного ребра: \n");

g=head;

i=0;

while(g! =NULL)

{

i++;

printf("РЕБРО%d: v1=%d v2=%d\n", i,g->v1,g->v2);

g=g->next;

}

// ********************************************

// ----------------------------Сохранение в файл------------------------------

i=0;

if ((out=fopen("1. txt", "w")) == NULL)

{

printf("Ошибка открытия входного файла! \n");

return 1;

}

g=head;

while(g! =NULL)

{

i++;

fprintf(out," РЕБРО%d: v1=%d v2=%d\n", i,g->v1,g->v2);

g=g->next;

}

fclose(out);

}

// --------------------------------------------------------------------------

// --------------------------------------------------------------------------

// --------------------------------------------------------------------------

void main()

{

clrscr();

// ==============

tit();

work_window();

klava();

raschet();

// ==============

getch();

}


Информация о работе «Разработка программ с использованием динамической памяти»
Раздел: Информатика, программирование
Количество знаков с пробелами: 27762
Количество таблиц: 2
Количество изображений: 2

Похожие работы

Скачать
13852
0
0

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

Скачать
30532
0
7

... тетриса можно использовать простое изображение квадрата. Для его изображения необходимо знать лишь координаты верхнего левого угла, а также значение ширины квадрата. При разработки программы для игры Тетрис был использовал объектно-ориентированный язык программирования Visual C#. Математическая часть программы была создана с помощью двумерной матрицы. Графическое отображение было реализовано с ...

Скачать
235892
25
6

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

Скачать
135709
1
0

... ) ФАКУЛЬТЕТ ЭЛЕКТРОНИКИ И ПРИБОРОСТРОЕНИЯ КАФЕДРА КЭС группа Э-92 ДАТА ЗАЩИТЫ  апреля 1997 г. Отзыв на дипломную работу студента гр.Э-92 Сорокина Ю.В. “Разработка программы контроллера автоматически связываемых объектов для управления конструкторской документацией в среде Windows 95/NT”. Широкое использование вычислительной техники в народном хозяйстве требует увеличения производства и ...

0 комментариев


Наверх