- •Лабораторные работы. Сборник задач.
- •Оглавление
- •Часть 1. Лаборатоные работы
- •Работа со структурами и объединениями …………………………………….91
- •3 Задача
- •4 Задача
- •5 Задача
- •6 Задача
- •Дополнительное условие:использование цикла с предусловием.
- •1 Задача
- •2 Задача
- •Дополнительное условие: программа написана без использования функции.
- •Дополнительное условие: программа написана с использованием функций.
- •3 Задача
- •Дополнительное условие: программа написана без использования функции.
- •Дополнительное условие: программа написана с использованием функции.
- •4 Задача
- •Дополнительное условие: программа написана без использования функции
- •Дополнительное условие: программа написана с использованием функции.
- •Самостоятельная работа
- •Лабораторная работа №3
- •Самостоятельная работа
- •1 Задача
- •2 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •Лабораторная работа №6
- •1 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •4 Задача
- •Синтаксический анализатор
- •Самостоятельная работа
- •1 Задача
- •2 Задача
- •3 Задача
- •Работа с каталогами
- •Самостоятельная работа
- •1 Задача
- •2 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •2 Задача
- •1 Задача Реализовать очередь, состоящую из целых чисел
- •Комментарий:
- •2 Задача
- •1 Задача
- •Идеально-сбалансированные деревья
- •1 Задача
- •2 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •2 Задача
- •3 Задача
- •1 Задача
- •1 Задача
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности.
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности
- •Работа с несколькими массивами
- •Преобразование массива
- •Изменение элементов массива
- •2 Уровень сложности Формирование массива и вывод его элементов
- •Анализ элементов массива
- •Преобразование массива
- •Изменение элементов массива
- •Удаление и вставка элементов
- •Серии целых чисел
- •3 Уровень сложности Множества точек на плоскости
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
- •Not простое_логическое
- •(Простое_логическое знак_операции простое_логическое)
- •Построить синтаксический анализатор для понятия предложение.
- •1 Уровень сложности
- •2 Уровень сложности
- •1 Уровень сложности
- •Примеры:
- •Двусвязные списки
- •1 Уровень сложности
- •2 Уровень сложности
- •3 Уровень сложности
1 Задача
Создание графа в виде матрицы смежности. Инициализация матрицы смежности.
// заголовочный файл
GRAPH.h
#include<stdlib.h>
typedef struct {int v; int w;} Edge;
Edge EDGE(int, int);
typedef struct graph *Graph;
Graph GRAPHinit(int V);
void GRAPHinsertE(Graph G, Edge e);
void GRAPHremoveE(Graph G, Edge e);
int GRAPHedges(Edge a[], Graph G);
Graph GRAPHinit(Graph);
void GRAPHdestroi(Graph);
// заголовочный файл
//Graph.cpp
#include<stdlib.h>
#include"GRAPH.h"
struct graph
{
int V; int E; int **adj;
};
Graph GRAPHinit(int V)
{
int v;
Graph G = malloc(sizeof *G);
G->V = V;
G->E =0;
G->adj = MATRIXint(V, V, 0);
returnG;
}
// функция вставки
void GRAPHinsertE(Graph G, Edge e);
{
int v = e.v, w = e.w;
if (G->adj[v][w]==0) G->E++;
G->adj[v] = 1;
G->adj[w] = 1;
}
void GRAPHremoveE(Graph G, Edge e)
{
int v=e.v, w=e.w;
if (G->adj[v][w] ==1) G->E--;
G->adj[v][w] = 0;
G->adj[w][v] = 0;
}
// помещение в выходной массив одного из двух представлений каждого числа
int GRAPHedges(Edge a[], Graph G);
{
int v,w,E = 0;
link t;
for(v = 0; v < G->V; v++)
for(w = v+1; w < G->V; w++)
if(G->adj[v][w] ==1)
a[E++] = EDGE(v, w);
return E;
}
// размещение в памяти и инициализация матрицы смежности
int **MATRIXint (int r, int c, int val)
{
int i,j;
int **t = malloc(r * sizeof(int *));
for(i=0;i<r;i++)
t[i] = malloc(c * sizeof(int));
for(i=0; i<r; i++)
for(j=0; j<c; j++)
t[i][j] = val;
return t;
}
2 Задача
Создание графа в виде списка смежных вершин.
// заголовочный файл
GRAPH.h
#include<stdlib.h>
typedef struct {int v; int w;} Edge;
Edge EDGE(int, int);
typedef struct graph *Graph;
Graph GRAPHinit(int V);
void GRAPHinsertE(Graph G, Edge e);
void GRAPHremoveE(Graph G, Edge e);
int GRAPHedges(Edge a[], Graph G);
Graph GRAPHinit(Graph);
void GRAPHdestroi(Graph);
// заголовочный файл
Graph.cpp
#include<stdlib.h>
#include"GRAPH.h"
typedef struct node *link;
struct node
{
int v;
link next;
};
struct graph
{
int V;
int E;
link *adj;
};
link NEW(int v, link next)
{
link x = malloc(sizeof *x);
x->v = v;
x->next = next;
return x;
}
Graph GRAPHinit(int V)
{
int v;
Graph G = malloc(sizeof *G);
G->V = V;
G->E =0;
G->adj = malloc(V*sizeof(link));
for(v =0; v<V; v++)
G->adj[v] = NULL;
returnG;
}
// функция вставки
void GRAPHinsertE(Graph G, Edge e);
{
int v = e.v;
int w = e.w;
G->adj[v] = NEW(w, G->adj[v]);
G->adj[w] = NEW(v, G->adj[w]);
G->E++;
}
// помещение в выходной массив одного из двух представлений каждого ребра
int GRAPHedges(Edge a[], Graph G);
{
int v;
int E = 0;
link t;
for(v = 0; v < G->V; v++)
for(t = G->adj[v]; t!=NULL; t = t->next)
if(v < t->v) a[E++] = EDGE(v, t->v);
returnE;
}
}
Лабораторная работа №24
Графы.
Цель: закрепление на практике работы алгоритмов работы с графом. Граф задается в виде матрицы смежности.
Методические рекомендации: лабораторная работа рассчитана на 4 часа и состоит из анализа трех разобранных заданий и решения самостоятельной работы.
Для работы с графами предусмотрено 3 лабораторные работы и одно обязательное зачетное задание.
Необходимый уровень знаний:
работа с указателями;
работа со структурами;
механизм рекурсии.