Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПрактикумС_Шафеева.doc
Скачиваний:
33
Добавлен:
30.03.2015
Размер:
1.12 Mб
Скачать

Модульное программирование

Пример. Найти соотношение между максимальными элементами для массивов А и В.

Выделим вычисление наибольшего элемента в подпрограмму, которую вынесем в отдельный модуль.

#include <stdio.h>

#include <conio.h>

#include "r_pos.h" // подключение модуля из текущего каталога

int i;

void main()

{

int a[8], b[8];

int s;

clrscr();

printf("Введите массив A из 8 чисел типа int \n");

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

scanf("%d", &a[i]);

printf("Введите массивB из 8 чисел типа int\n");

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

scanf("%d",&b[i]);

printf("Сообщение=");

printf(" max(A)/max(B) = %6.3f \n", (float)max(a)/max(b));

getch();

}

// Интерфейсная часть модуля r_pos

typedef int * mass;

int max(mass d);

extern int i;

// Исполняемая часть модуля

int max(mass d)

{

int mx;

mx = d[0];

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

if (mx<d[i]) mx = d[i];

printf("%d:", mx);

return mx;

}

Задание (программы 13_1 и 13_2)

Для задач 8_3 и 9_2 разработать программы, скрыв подпрограммы в отдельном файле (модуле), использовать ссылки на переменные, объявленные в другом модуле.

Лабораторная работа 14

Динамические структуры данных. Списки

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

Элемент односвязной динамической структуры данных состоит из двух полей: информационного и указательного и описывается типом «структура».

Очередь – частный случай линейного односвязного списка, для которого разрешены два действия: добавление элемента строго в конец списка, а извлечение (удаление) – строго из начала (головы) очереди.

Стек – частный случай линейного односвязного списка, для которого разрешено добавлять или удалять элемент только с одного конца списка, который называется вершиной стека.

Пример. Задать списком строку, заканчивающуюся точкой. Подсчитать число цифр в ней.

#include <conio.h>

#include <stdio.h>

typedef struct zv

{

char info;

struct zv * next;

} Zv;

void main()

{

Zv * P;

Zv * t;

char sym;

int k;

clrscr();

printf("Vvedite stroku i tochku ");

P=NULL;

do /* заполнение стека */

{

sym=getche();

t=malloc(sizeof(Zv));

t->next=P; P=t;

t->info=sym;

}

while(sym!='.');

k = 0; t = P;

while ( t!=0 )

{

if ( t->info >= '0' && t-> info <= '9' ) k = k+1;

t = t->next;

}

printf("\n");

printf("Цифр в строке - %d",k);

getch();

}

Задание 1 (программа 14_1)

1. Используя динамическую структуру «список», подсчитать количество русских строчных букв в строке.

2. Используя динамическую структуру «список», проверить, является ли он упорядоченным набором чисел.

3. Используя динамическую структуру «список», подсчитать количество цифр в заданном наборе символов.

4. В деке задать слово. Определить, является ли оно словом-перевертышем.

5. Сформировать динамический список из элементов целого типа. Удалить из него отрицательные элементы. Распечатать исходный и результирующий списки.

6. Найти сумму четных элементов списка, состоящего не менее чем из двух элементов.

7. Используя динамическую структуру «список», подсчитать сумму чисел в нем.

8. В динамическом списке из каждой группы подряд идущих одинаковых элементов оставить один.

9. Используя динамическую структуру «список», подсчитать количество четных чисел в заданном наборе символов.

10. Используя динамическую структуру «список», подсчитать сумму отрицательных чисел в списке.

11. Сформировать очередь из элементов целого типа. Четные элементы возвести в квадрат. Распечатать исходную и результирующую очереди.

12. Используя динамическую структуру «список», подсчитать количество положительных и отрицательных чисел в списке.

13. Задать два динамических списка. Проверить их на равенство.

14. Используя динамическую структуру «список» для хранения символов, напечатать только русские буквы из текста.

15. Используя динамическую структуру, «список» для хранения символов, определить, является ли заданная фраза палиндромом.

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

17. Используя динамическую структуру «очередь», перевести введенную последовательность чисел в слово, состоящее из кодов ASCII.

18. Удалить из списка все отрицательные элементы.

19. Используя динамическую структуру «список», сохранить ряд чисел. Удалить повторяющиеся элементы.

20. Построить динамический список из элементов целого типа с помощью датчика случайных чисел. Найти значение среднего элемента списка.

21. Используя динамическую структуру «список», сохранить ряд чисел. Удалить элемент с заданным номером.

22. Сформировать динамическую структуру «очередь», элементами которой являются цифры. Извлекая элементы из очереди, напечатать их двоичные эквиваленты.

23. Сформировать список динамических элементов, упорядоченный по возрастанию. Включить в список новый элемент, сохранив свойство упорядоченности.

24. Используя динамическую структуру «стек», распечатать элементы в обратном порядке.

25. Используя динамическую структуру «очередь», зашифровать содержимое текста: каждый символ заменить его кодом+1.

26. Используя динамическую структуру «стек», зашифровать содержимое текстового файла.

27. Используя динамическую структуру «список», сохранить ряд чисел. Удалить элементы с заданным ключевым полем.

Задание 2 (программа 14_2)

Реализовать задачу с использованием другой динамической структуры или придумать свою задачу, написать и отладить для нее программу.

Лабораторная работа 15