Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТТП (методичка).doc
Скачиваний:
5
Добавлен:
10.11.2018
Размер:
2.24 Mб
Скачать
    1. Лабораторная работа №8

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

Порядок выполнения работы:

  • изучить принципы работы с функциями в языке Си (глава 12);

  • определить общую формулу для вычисления выражений и необходимые аргументы для подпрограммы;

  • разработать блок-схемы алгоритмов для основной программы и подпрограммы;

  • составить текст программы на языке Cи;

  • проверить правильность выполнения разработанной программы;

  • составить отчет.

Часто некоторую последовательность действий требуется повторить в нескольких местах программы с разными значениями. Чтобы уменьшить объем программы и время на ее набор можно использовать структуру, присущую всем языкам программирования, — подпрограмму. Но свойство подпрограмм сокращать текст не является основополагающим. Они являются одним из фундаментальных инструментов, оказывающих влияние на стиль, качество и надежность разработки программных систем. Подпрограммы выступают как средство декомпозиции программы на логически связанные, но замкнутые компоненты, что позволяет вести ее разработку целому коллективу программистов. Так как декомпозиция существенно повышает читаемость программы, то подпрограммы, как автономные модули, используют даже тогда, когда они вызываются однократно.

В подпрограммах могут вычисляться несколько значений, например, преобразование матрицы, тогда это будут подпрограммы-процедуры. Если же в подпрограмме вычисляется единственное значение, причем простого типа, то используются подпрограммы-функции. При описании функции должен быть определен тип функции, то есть возвращаемый параметр является не аргументом, а значением самой функции. При реализации функции должно быть возвращено ее значение при помощи оператора return, иначе оно будет неопределенным. Из основной программы обращение к подпрограмме-функции производится так же, как и к стандартным функциям, то есть указанием в выражении имени и в скобках аргументов.

Задание. В лабораторной работе необходимо определить общую формулу для вычисления заданных выражений и реализовать их вычисление с использованием одной подпрограммы-функции (см. таблицу 13). В качестве исходных данных использовать массивы:

Пример. Вычислить , , .

Запишем общую формулу для вычисления этих выражений:

,

где f — функция, arr — массив, size — размер массива, power — степень для возведения элементов массива.

Используем эти обозначения в качестве формальных параметров для нашей функции. В качестве же фактических параметров будут выступать: , , . Первый параметр — это массив вещественных чисел, но так как количество элементов в массивах отличается, то при описании этого параметра в функции размер указываться не будет: float arr[], а будет передаваться в качестве второго параметра целочисленного типа: int size. Значение третьего параметра для заданных выражений принимает целочисленные значения, поэтому для параметра power можно использовать тип int: int power.

Обратите внимание, что в задании изменение индекса i определено от 1 до N, как принято в математике. В языке Си нумерация элементов массива осуществляется с 0, поэтому в программе для вычисления суммы используется цикл по i от 0 до size–1. Чтобы вычисленное значение суммы соответствовало заданию, необходимо при умножении к i добавлять 1: s += (i+1) * ....

Вычисленное в функции значение суммы s возвращается в качестве ее результата при помощи оператора return.

Листинг 22 — Лабораторная работа №8

/* lab8.c – лабораторная работа №8. */

#include <stdio.h>

#include <conio.h>

#include <math.h>

/* определение собственной функции */

float f(float arr[], int size, int power)

{

/* описание и инициализация локальных переменных */

int i; // для индекса массива

float s = 0.0; // для вычисления суммы

/* вывод значений параметров функции */

printf(“f(arr=[“);

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

printf(“%6.2f”, arr[i]);

printf(“], size=%d, power=%d)\n”, size, power);

/* вычисление суммы */

for (i = 0; i < size; i++) {

s += (i+1) * pow(arr[i], power);

printf(“i=%d, s=%f\n”, i, s);

}

printf(“Возвращаемое значение: s=%f\n\n”, s);

return s; /* возврат значения функции */

}

void main()

{

/* описание и инициализация массивов и переменных */

float A[5] = {0.12, -0.8, 0.2, 0.38, 0.11};

float D[4] = {0.25, 0.21, 0.12, 0.39};

float E[3] = {2.2, 3.1, 1.8};

float X, Y, Z;

clrscr();

/* вызов функции с разными фактическими параметрами */

X = f(A, 5, 3);

Y = f(D, 4, 1);

Z = f(E, 3, -1);

/* вывод результатов */

printf(“Значение X = %f\n”, X);

printf(“Значение Y = %f\n”, Y);

printf(“Значение Z = %f\n”, Z);

}

Рисунок 56 — Результат выполнения lab8.c

Таблица 13 — Варианты заданий к лабораторной работе №8

№ вар.

Значение X

Значение Y

Значение Z

1

2

3

4

5

6

7

8

9

10