Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование4172 / Лекции / Лекция 25. Примеры решения экзаменационных задач..doc
Скачиваний:
48
Добавлен:
12.03.2015
Размер:
111.62 Кб
Скачать

Решение.

struct el /* Тип элемента списка */

{ float z1, z2; /* Информация */

struct el *sled; /* Ссылка на следующий элемент */

};

. . .

/* Подпрограмма. */

/* x = информация k-го элемента списка p; */

/* Значение: 0 - операция удалась */

/* 1 - в списке менее k элементов */

int inf_k_el (struct el *p, int k, float x[2])

{ struct el *i; /* Указатель текущего элемента */

for (i = p; k>1 && i!=NULL; k--)

i = i->sled; /* Переход к следующему элементу */

if (i!=NULL) /* p указывает на k-й элемент */

{ x[0] = i -> z1;

X[1] = i -> z2;

return 0; /* Успешное завершение */

}

else return 1; /* Неудача: в списке < k элементов */

}

/* Пример вызова подпрограммы */

struct el *p; /* указатель списка */

int k; /* № элемента списка */

float y[2];

. . .

if (inf_k_el(p,k,y)) printf("в списке < k элементов" );

В подпрограмме (функции) входные данные p, k и выходные данные x являются параметрами, а указатель текущего элемента i – локальной переменной. Значением функции является код завершения, показывающий, удалось ли ей выполнить «порученную» операцию. Код завершения можно было передавать в виде выходного параметра.

Пример 3. Описать в виде вектора таблицу, каждый элемент которой содержит следующие поля:

- номер автомобиля,

- марка автомобиля,

- фамилия и инициалы владельца,

- признак, прошел ли автомобиль в текущем году техосмотр.

Максимальное число элементов таблицы 1000.

Решение.

#define NMAX 1000 /* макс. число элементов таблицы */

#define DL_FIO 25 /* макс. длина фамилии */

#define DL_NM 15 /* макс. длина номера и марки */

/* тип элемента таблицы */

struct EL_TAB

{ char nom[DL_NM]; /* номер автомобиля */

char marka [DL_NM]; /* марка */

char fio[DL_FIO]; /* фамилия и инициалы */

int t; /* признак техосмотра */

};

struct EL_TAB avto[NMAX]; /* таблица */

int n; /* число элементов таблицы */

Пример 4. Стек содержит целые числа и хранится в виде вектора из 10 элементов. Описать стек на языке С. Показать, как будет изменяться содержимое вектора и указателя стека при последовательном выполнении следующих операций:

  1. включить в стек числа 10, 20,

  2. исключить из стека один элемент,

  3. включить в стек числа 30, 40, 50.

Вначале стек пустой.

Решение.

Описание на С:

int St [10]; /* вектор, содержащий стек */

int us=-1; /* указатели стека (индекс последнего элемента) */

Изменение состояния стека:

1) 2) 3)

us = 1 us = 0 us = 3

10

30

40

50


10

20

. . .

10

20

. . .

0 0 0

1 1 1

2

3

9 9

9

Пример 5. Дан орграф в виде матрицы инцидентности, числа вершин и числа дуг. Описать функцию вывода числа предшественников каждой вершины. Привести пример вызова этой функции.