Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
учебное пособие ОАиП.doc
Скачиваний:
13
Добавлен:
25.04.2019
Размер:
2.63 Mб
Скачать

Примеры программ

Пример . Написать программу выполняющую раскраску графа

#include<stdio.h>

#include<stdlib.h>

void input(int **graf,int n)

{ int i,j;

while(1)

{ printf("\nvvodite pary smegnyh vershin :");

scanf("%d%d",&i,&j);

if(!i || !j) break;

if(i>n || j>n)

{

puts("error");

continue;

}

*(*(graf+i-1)+j-1)=1;

*(*(graf+j-1)+i-1)=1;

}

}

void print(int **graf,int *color,int n)

{ int i,j;

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

printf("\nverhina : %d cvet : %d",i+1,*(color+i));

printf("\n");

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

{

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

printf("%2d",*(*(graf+i)+j));

printf("\n");

}

}

void raskr(int **graf,int *color,int n)

{ int i,ii,j,k,p;

int *vr,*cv;

vr=(int*) calloc(n,sizeof(int));

cv=(int*) calloc(n,sizeof(int));

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

{ k=0;

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

if(*(*(graf+i)+j)) k++;

*(vr+i)=k;

}

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

{

ii=0;

while(ii<n && *(color+ii)!=0) ii++;

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

if(*(color+i)==0 && *(vr+i) > *(vr+ii))

ii=i;

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

*(cv+i)=0;

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

if(*(*(graf+ii)+j)==1 && *(color+j)!=0)

*(cv+*(color+j)-1)=1;

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

if(*(cv+i)==0)

{ *(color+ii)=i+1;

break;

}

}

free(cv);

free(vr);

}

int main()

{ int **graf,*color; // матрица смежности графа и массив цветов

int n; // размерность графа

scanf("%d",&n); // ввод размерности графа

color=(int*) calloc(n,sizeof(int)); // выделение памяти

graf=(int**) calloc(n,sizeof(int*));

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

*(graf+i)=(int*)calloc(n,sizeof(int));

input(graf,n); // ввод исходного графа

raskr(graf,color,n); // раскраска вершин графа

print(graf,color,n); // вывод результата окраски графа

free(color);

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

free(*(graf+i));

free(graf);

return 0;

}

Литература

1. Керниган Б., Ритчи Д. Язык программирования С. –М.: Финансы и статистика, 1992

2. Керниган Б., Ритчи Д. Язык программирования С. Спб.: Невский диалект, 2004.

4. Романовская Л.М., Русс Т.В., Свитковский С.Г. Программирование в среде С(С++) для ПЭВМ. М.: Финансы и статистика, 1992.

5. Герберт Шилд. Программирование на Borland C++. –Мн.: ООО "Попурри" 1998г. – 800с.

6. Подбельский, В.В., Фомин, С.С. Программирование на языке Си. – М.: Финансы и статистика, 2000.

7. Вирт Н. Алгоритмы и структуры данных. – СПб.: Невский Диалект, 2001.

8. Демидович, Е.М. Основы алгоритмизации и программирования. Язык Си. – БХВ-Петербург, 2006 г.

9. Б. С. Хусаинов. Структуры и алгоритмы обработки данных. Примеры на языке Си – М.: Финансы и статистика, 2004 г.

10. С. Кочан Программирование на языке С. – М: Издательский дом «Вильямс», 2007 г.

Содержание

Введение 3

Блок-схема алгоритма 3

Общие требования к блок-схеме алгоритма 3

Линейные и разветвляющиеся процессы 5

Циклические процессы 8

Итерационные процессы 12

Основные понятия языка С(С++) 14

Комментарии 16

Типы данных 16

Данные целого типа 17

Данные вещественного типа 18

Модификатор const 18

Переменные перечисляемого типа 19

Константы 20

Структура программы на языке С(С++) 22

Операции и выражения 22

Операция присваивания 25

Арифметические операции 25

Операции поразрядной арифметики 27

Логические операции 28

Операции отношения 28

Инкрементные и декрементные операции 29

Операция sizeof 29

Порядок выполнения операций 30

Приоритет операций 30

Преобразование типов 31

Операция приведения 32

Операция запятая 32

Ввод и вывод информации 33

Директивы препроцессора 37

Директива #include 38

Директива #define 38

Операторы языка С(С++) 39

Понятие пустого и составного операторов 40

Условные операторы 40

Операторы организации цикла 44

Оператор цикла for 44

Оператор цикла while 46

Оператор цикла do … while 46

Вложенные циклы 47

Операторы перехода (break, continue, return, goto) 47

Примеры программ 48

Массивы 52

Одномерные массивы 52

Примеры программ 53

Многомерные массивы (матрицы) 57

Примеры программ 59

Указатели 62

Понятие указателя 62

Описание указателей 63

Операции с указателями 64

Связь между указателями и массивами 64

Массивы указателей 65

Многоуровневые указатели 65

Примеры программ 67

Символьные строки 76

Ввод/вывод строк. 77

Функции работы со строками. 79

Примеры программ 80

Функции 86

Прототип функции. 87

Определение функции. 87

Параметры функции 89

Параметры по умолчанию 91

Передача массива в функцию 91

inline функции 92

Класс памяти 93

Автоматические переменные 93

Статические переменные 93

Регистровые переменные 93

Блочная структура 94

Примеры программ 95

Указатели на функции 102

Примеры программ 104

Рекурсия 105

Примеры программ 106

Аргументы в командной строке 110

Функции с переменным числом параметров 111

Примеры программ 115

Сортировка 117

Пузырьковая сортировка. 117

Шейкер сортировка 118

Сортировка вставкой 119

Сортировка выбором 120

Метод Шелла 120

Метод Хора 121

Структуры 123

Доступ к элементам структуры 124

Инициализация структур 125

Указатели на структуры. 127

Структуры и функции 128

Примеры программ 130

Поля бит 133

Объединения 134

Переменные с изменяемой структурой 135

Примеры программ 137

Организация списков и их обработка 138

Операции со списками при связном хранении 139

Стек 140

Построение обратной польской записи 144

Односвязный линейный список, очередь 146

Двусвязный линейный список 150

Циклический список, кольцо 155

Двусвязный циклический список 155

Примеры программ 159

Деревья 160

Потоки и файлы 167

Файлы 167

Основные сведения о файловой системе 168

Организация посимвольного ввода и вывода 170

Определение конца файла feof() 171

Организация ввода и вывода строк 171

Удаление файлов 172

Дозапись потока 172

Позиционирование в файле 172

Текстовые и двоичные файлы 173

Функции fread() и fwrite() 173

Примеры программ 175

Хеширование 189

Схемы хеширования 190

Метод открытой адресации с линейным опробыванием 191

Метод цепочек 191

Графы 193

Машинное представление графов 193

Примеры программ 196

Литература 198

Св. план , поз.

Учебное издание

Луцик Юрий Александрович

МЕТОДИЧЕСКОЕ ПОСОБИЕ

по курсу

ОСНОВЫ АЛГОРИТМИЗАЦИИ И

ПРОГРАММИРОВАНИЯ

для студентов специальности

” Вычислительные машины системы и сети”

Редактор

Корректор

____________________________________________________________________

Подписано в печать . . . Формат 60х84 1/16.

Бумага Печать офсетная Усл. печ. л.

Уч.-изд. л. Тираж экз. Заказ

____________________________________________________________________

Белорусский государственный университет информатики и радиоэлектроники

Отпечатано в БГУИР. Лицензия ЛП № 156.22027, Минск, П Бровки, 6