- •Оглавление
- •ВВЕДЕНИЕ
- •Задания
- •ЛАБОРАТОРНАЯ РАБОТА № 2 ВЫЧИСЛЕНИЕ ВЫРАЖЕНИЙ
- •Задания
- •ЛАБОРАТОРНАЯ РАБОТА № 3 ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ РАЗВЕТВЛЯЮЩЕЙСЯ СТРУКТУРЫ
- •Задания
- •ЛАБОРАТОРНАЯ РАБОТА № 4 ЦИКЛЫ
- •Задания
- •ЛАБОРАТОРНАЯ РАБОТА № 5 ОДНОМЕРНЫЕ МАССИВЫ
- •Задания
- •ЛАБОРАТОРНАЯ РАБОТА № 6 ОБРАБОТКА МАТРИЦ
- •Задания
- •ЛАБОРАТОРНАЯ РАБОТА № 7 ДИНАМИЧЕСКИЕ МАССИВЫ
- •ЛАБОРАТОРНАЯ РАБОТА № 8 ТЕКСТОВЫЕ ФАЙЛЫ
- •Задания
- •ЛАБОРАТОРНАЯ РАБОТА № 9 СТРУКТУРЫ
- •Задания
- •ЛАБОРАТОРНАЯ РАБОТА № 10 ДВОИЧНЫЕ ФАЙЛЫ
- •Задания
- •ЛАБОРАТОРНАЯ РАБОТА № 11 ФУНКЦИИ
- •Задания
- •ЛАБОРАТОРНАЯ РАБОТА № 12 РЕКУРСИВНЫЕ ФУНКЦИИ
- •Задания
- •ЛАБОРАТОРНАЯ РАБОТА № 13 ОДНОСВЯЗНЫЕ СПИСКИ
- •Задания
- •ЛАБОРАТОРНАЯ РАБОТА № 14 ДВУСВЯЗНЫЕ ЛИНЕЙНЫЕ СПИСКИ
- •Задания
- •ЛАБОРАТОРНАЯ РАБОТА № 15 АЛГОРИТМЫ НА ГРАФАХ
- •Задания
- •ЛАБОРАТОРНАЯ РАБОТА № 16 БИНАРНЫЕ ДЕРЕВЬЯ
- •Задания
- •Задание
- •ЛАБОРАТОРНАЯ РАБОТА № 18 РЕШЕНИЕ ВЫЧИСЛИТЕЛЬНЫХ ЗАДАЧ НА АССЕМБЛЕРЕ
- •ЛАБОРАТОРНАЯ РАБОТА № 19 ОБРАБОТКА ФАЙЛОВ
- •ЛАБОРАТОРНАЯ РАБОТА № 20 РАБОТА С ДИНАМИЧЕСКОЙ ПАМЯТЬЮ
- •ЛАБОРАТОРНАЯ РАБОТА № 21 РАБОТА С ПРЕРЫВАНИЯМИ
- •ЛАБОРАТОРНАЯ РАБОТА № 22 ПЕРЕМЕЩЕНИЕ ПРОГРАММ ПО ПАМЯТИ
- •ЛАБОРАТОРНАЯ РАБОТА № 23 МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ
- •ЛАБОРАТОРНАЯ РАБОТА № 24 КОНСОЛЬНОЕ WINDOWS-ПРИЛОЖЕНИЕ
- •ЛАБОРАТОРНАЯ РАБОТА № 25 ОКОННЫЕ WINDOWS-ПРИЛОЖЕНИЯ
- •ЛАБОРАТОРНАЯ РАБОТА № 26 ПРОГРАММИРОВАНИЕ СОПРОЦЕССОРА
- •Задания
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
- •Основной
- •Дополнительный
ЛАБОРАТОРНАЯ РАБОТА № 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- |