Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
YaP_laby.pdf
Скачиваний:
159
Добавлен:
31.05.2015
Размер:
915.49 Кб
Скачать

ЛАБОРАТОРНАЯ РАБОТА № 11 ФУНКЦИИ

Цель работы – овладеть навыками программирования задач с использованием функций пользователя различных видов.

Задания

1.Изучить:

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

2.Разработать алгоритм решения в соответствии с заданием.

3.Составить программу решения задачи.

4.Подготовить тестовый вариант программы и исходных данных.

5.

Контрольныевопросы

1.Указать, при каких условиях целесообразно использовать функции, какие выгоды они предоставляют пользователю.

2.Запишите общий формат объявления функции.

3.Указать, в чем отличие различных видов функций пользователя.

4.Указать способ обращения к функциям пользователя.

5.Указать способы передачи параметров в функцию.

6.Указать способы передачи одномерного массива в функцию.

7.Указать способы передачи двумерного массива в функцию.

8.Как можно передавать динамический двумерный массив в функцию.

9.Классификация параметров относительно функций.

10.Перечислить, как согласуются формальные и фактические параметры.

11.Пояснить, как и куда осуществляется выход из подпрограммы.

12.Может ли функция с типом void возвращать значение.

13.Может ли функция быть частью выражения.

14.Сохраняет ли значение локальная переменная значение между вызовами функции, в которой она объявлена.

15.Может ли функция возвращать массив.

Вариантызадания

Составить программы, используя функции.

Задания лабораторных работ 4 и 5 оформить в виде набора функций.

Языки программирования. Метод. указания по лаб. работам

-58-

ЛАБОРАТОРНАЯ РАБОТА № 11 ФУНКЦИИ

Примеррешениявариантаработы

Дан одномерный массив x[n], где n – размер массива. Оформить ввод элементов массива из файла, сортировку и вывод массива на экран монитора в виде функции.

Анализ задачи.

1.Начальные данные:

а) константа n, которая определяет размер массива; б)одномерный массив размерности n;

в) файловая переменная;

г) переменная i для управляющего параметра цикла.

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

void main(void)

{

const n = 4 ;

int i, j, imi, a[n]; int r;

FILE *f; clrscr();

// Ввод одномерного массива из файла f = fopen("t.dat","r");

for

( i = 0; i <= n-1; i++ ) // Перебор индексов массива.

fscanf( f, "%d", &a[i] ); // Ввод элемента массива из файла.

 

// Вывод массива на терминал

cout << “\t\tМассив из файла до сортировки:\n”;

for

( i = 0; i <= n-1; i++ )

 

printf("%d ", a[i]);

//

Сортировка элементов массива

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

for ( j = i+1; j < n; j++) if ( a[imi] > a[j]) imi = j; r = a[i];

a[i] = a[imi]; a[imi] = r; }

cout << “\n\n\t\tМассив после сортировки:\n”; for ( i = 0; i <= n-1; i++ )

printf("%d ", a[i]);

Языки программирования. Метод. указания по лаб. работам

-59-

ЛАБОРАТОРНАЯ РАБОТА № 11 ФУНКЦИИ

Пример решения варианта работы

getch(); }

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

а) этот фрагмент оформить как блок операторов с заголовком; б) затем решить вопрос, какие переменные включить в заголовок.

в) определить какие переменные будут являться локальными в блоке; г) этот блок операторов с заголовком разместить после вызывающей

программы.

д) в вызывающей программе фрагмент кодов, оформленный в виде функции, заменяем обращением к этой функции).

Используя этот несложный алгоритм, оформим в виде функции фрагмент программы, сортирующий массив.

3. Оформляем этот фрагмент в виде блока операторов с заголовком:

void sort_m ()

{

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

for ( j = i+1; j < n; j++) if ( a[imi] > a[j]) imi = j; r = a[i];

a[i] = a[imi]; a[imi] = r; }

}

4. Массив и размер массива надо передавать в функцию из вызывающей программы, поэтому данные переменные включаем в заголовок функции

void sort_m (int *a, int n)

{

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

for ( j = i+1; j < n; j++) if ( a[imi] > a[j]) imi = j; r = a[i];

a[i] = a[imi]; a[imi] = r; }

}

6. Переменные фрагмента i, j, imi, r, которые ни как не связаны с параметрами вызывающей программы, объявляем локальными для новой функции.

Языки программирования. Метод. указания по лаб. работам

-60-

ЛАБОРАТОРНАЯ РАБОТА № 11 ФУНКЦИИ

Пример решения варианта работы

void sort_m (int *a, int n)

{

int i, j, imi, r;

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

for ( j = i+1; j < n; j++) if ( a[imi] > a[j]) imi = j; r = a[i];

a[i] = a[imi]; a[imi] = r; }

}

Функция для сортировки элементов массива сформирована. Осталось:

эту функцию разместить в конце вызывающей программы; фрагмент кодов, оформленный в виде функции, заменить обращением

кэтой функции.

Витоге (применяя данный подход к первому и второму фрагменту) программа с тремя функциями: ввода, вывода и сортировки данных будет составлена.

void vv_mas(int *a, FILE *f, int n); void viv_mas(int *a, int n);

void sort_mas (int *a, int n); void main(void)

{

const n = 4 ;

int i, j, imi, a[n]; int r;

FILE *f; clrscr();

// Ввод одномерного массива из файла.

f = fopen("t.dat","r");

 

vv_mas(a,f,n);

// Обращение к функции ввода массива из файла.

cout << “\t\tМассив из файла до сортировки:\n”;

viv_mas(a,n);

// Обращение к функции вывода массива.

sort_mas(a,n);

// Обращение к функции сортировки массива.

cout << “\n\n\t\tМассив после сортировки:\n”;

viv_mas(a,n);

// Обращение к функции вывода массива.

getch(); }

 

// Функция ввода элементов массива из файла.

Языки программирования. Метод. указания по лаб. работам

-61-

ЛАБОРАТОРНАЯ РАБОТА № 11 ФУНКЦИИ

Пример решения варианта работы

void vv_mas(int *a, FILE *f, int n) {int i;

for ( i = 0; i <= n-1; i++ ) // Перебор индексов массива. fscanf( f, "%d", &a[i] ); // Ввод элемента массива из файла.

}

// Функция вывода элементов массива из файла. void viv_mas(int *a, int n)

{int i;

for ( i = 0; i <= n-1; i++ ) printf("%d ", a[i]);

}

// Функция для сортировки элементов массива. void sort_mas (int *a, int n)

{

int i, j, imi, r;

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

for ( j = i+1; j < n; j++) if ( a[imi] > a[j]) imi = j; r = a[i];

a[i] = a[imi]; a[imi] = r; }

}

Замечание 1. Если функции расположены после вызывающей программы, то заголовки функций должны быть через точку с запятой перечислены перед именем вызывающей программы.

Замечание 2. Имена формальных параметров функции – произвольные и не обязательно (как в нашем примере) должны совпадать с именами переменных головной программы.

Языки программирования. Метод. указания по лаб. работам

-62-

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]