Практическое занятие № 8

ТЕМА: Создание программ с использованием функций

ЦЕЛЬ РАБОТЫ: получить практические навыки по написанию пользовательских функций и их применению в главной программе на С++

 

Ход работы

1. Составить программу для нахождения значения функции:

Для вычисления оформите в виде функции выражение:

 

2. Пусть имеется три массива. Сформировать массивы и вывести их на экран. Определить в каком массиве наибольшая сумма элементов, найти сумму максимальных элементов массива и произведение минимальных элементов. Написать функции для работы с массивом:

- формирование массива на отрезке;

- вывод массива на экран;

- нахождение суммы элементов массива

- нахождение минимального элемента

- нахождение максимального элемента

 

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

 

 

Выполнение работы

1. Для решения первой задачи программа может иметь вид:

 

//подключаем заголовочные файлы

#include <iostream.h>

#include <math.h>

 

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

//с двумя аргументами (n,m)

float f1(float n, float m);

 

//начало главной программы

int main()

{

system("chcp 1251>nul");

//описываем вспомогательные переменные

float x,y;

//очищаем экран

clrscr();

//вводим значение исходных данных для расчета (х)

cout<<"Введите значение переменной x: ";

cin>>x;

//вычисляем значение выражения с использованием

//функции пользователя f1

y=f1(pow(x,3),2*x)+f1(4*pow(x,2),-sin(x));

//задаем точность вывода результата

cout.precision(2);

//выводим на экран полученный результат

cout<<"Функция равна: "<<y;

//делаем паузу для просмотра

system("pause");

return 0;

}

 

//реализация функции пользователя

float f1(float n, float m)

{

//выходим из функции и передаем

//в главную программу найденное значение

return (n+m)/2;

}

 

2. Для решения второй задачи программа может иметь вид:

 

//подключаем заголовочные файлы

#include <iostream.h>

#include <stdlib.h>

 

//прототип функции ввода массива

void vvodmas (float m[], int n);

//прототип функции вывода массива

void vivodmas (float m[], int n);

//прототип функции нахождения

//суммы элементов в массиве

float summas (float m[], int n);

//прототип функции нахождения

//максимального в массиве

float maxmas (float m[], int n);

//прототип функции нахождения

//минимального в массиве

float minmas (float m[], int n);

 

//главная программа

int main()

{

system("chcp 1251>nul");

//описываем три массива

float mas1[20],mas2[20], mas3[20];

//описываем переменные для хранения

//сумм по трем массивам

float s1,s2,s3;

//описываем переменные для хранения

//количества элементов по трем массивам

int kol1,kol2,kol3;

 

//формируем первый массив

//вводим количество элементов в массиве

cout<<"Введите количество элементов 1 массива: ";

cin>>kol1;

//вызываем функцию ввода массива

vvodmas(mas1,kol1);

//выводим полученный массив на экран

cout<<"1 массив имеет вид:\n";

vivodmas(mas1,kol1);

 

//формируем второй массив

//вводим количество элементов в массиве

cout<<"Введите количество элементов 2 массива: ";

cin>>kol2;

//вызываем функцию ввода массива

vvodmas(mas2,kol2);

cout<<"2 массив имеет вид:\n";

//выводим полученный массив на экран

vivodmas(mas2,kol2);

 

//формируем третий массив

//вводим количество элементов в массиве

cout<<"Введите количество элементов 3 массива: ";

cin>>kol3;

//вызываем функцию ввода массива

vvodmas(mas3,kol3);

cout<<"3 массив имеет вид:\n";

//выводим полученный массив на экран

vivodmas(mas3,kol3);

 

//в переменные s1,s2,s3 записываем суммы элементов массива

s1=summas(mas1,kol1);

cout<<"\nСумма элементов 1 массива: "<<s1<<"\n";

s2=summas(mas2,kol2);

cout<<"Сумма элементов 2 массива: "<<s2<<"\n";

s3=summas(mas3,kol3);

cout<<"Сумма элементов 3 массива: "<<s3<<"\n";

 

//определяем, в каком массиве найденная сумма максимальная

if (s1>=s2 && s1>=s3)

cout<<"\nМаксимальная сумма в 1 массиве\n";

else if (s2>=s1 && s2>=s3)

cout<<"Максимальная сумма во 2 массиве\n";

else

cout<<"Максимальная сумма в 3 массиве\n";

 

//выводим на экран максимальное значение в каждом массиве

cout<<"\nМаксимальный элемент в 1 массиве: "<<maxmas(mas1,kol1)<<"\n";

cout<<"Максимальный элемент в 2 массиве: "<<maxmas(mas2,kol2)<<"\n";

cout<<"Максимальный элемент в 3 массиве: "<<maxmas(mas3,kol3)<<"\n";

//выводим сумму максимальных значений по трем массивам

cout<<"Сумма="<<maxmas(mas1,kol1)+maxmas(mas2,kol2)+maxmas(mas3,kol3)<<"\n";

 

 

//выводим на экран минимальные значения в каждом массиве

cout<<"\nМинимальный элемент в 1 массиве: "<<minmas(mas1,kol1)<<"\n";

cout<<"Минимальный элемент в 2 массиве: "<<minmas(mas2,kol2)<<"\n";

cout<<"Минимальный элемент в 3 массиве: "<<minmas(mas3,kol3)<<"\n";

//выводим произведение минимальных значений по трем массивам

cout<<"Произведение="<<minmas(mas1,kol1)*minmas(mas2,kol2)*minmas(mas3,kol3);

 

//делаем паузу для просмотра

system("pause");

return 0;

}

 

//реализация функции ввода массива

void vvodmas (float m[], int n)

{

system("chcp 1251>nul");

//описываем переменные для ввода концов отрезка

float a,b;

int i;

//вводим концы отрезка

cout<<"Для формирования массива укажите концы отрезка: ";

cin>>a>>b;

//в цикле заполняем массив случайными числами

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

m[i]=(b-a)*rand()/32767+a;

//выходим из функции в главную программу

return;

}

 

//реализация функции вывода массива

void vivodmas (float m[], int n)

{

int i;

//задаем точность вывода

cout.precision(3);

//в цикле выводим массив в одну строку через пробел

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

cout<<m[i]<<" ";

//по окончании вывода переводим курсор на новую строку

cout<<"\n";

//выходим из функции в главную программу

return;

}

 

//реализация функции нахождения суммы элементов

float summas(float m[], int n)

{

//вначале сумма обнуляется

float sum=0;

int i;

//в цикле считаем сумму элементов

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

sum+=m[i];

//выходим из функции и передаем

//в главную программу найденную сумму

return sum;

}

 

//реализация нахождения максимального значения

float maxmas(float m[], int n)

{

//сначала максимальный элемент первый

float max=m[0];

int i;

//в цикле ищем максимальный элемент массива

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

if (max<m[i])

max=m[i];

//выходим из функции и передаем

//в главную программу найденный максимум

return max;

}

 

//реализация нахождения минимального значения

float minmas(float m[], int n)

{

//сначала минимальный элемент первый

float min=m[0];

int i;

//в цикле ищем минимальный элемент массива

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

if (min>m[i])

min=m[i];

//выходим из функции и передаем

//в главную программу найденный минимум

return min;

}

 

Дополнительно:

1. Найти площади трех прямоугольных треугольников. Определить, какая из площадей наибольшая. (Использовать функцию нахождения площади и максимального из трех чисел)

2. Составить программу для нахождения значения функции: .

Для вычисления оформите в виде функции выражение:

 

3. Заменить в строке все цифры на *.

4. Заданы координаты точки (x, y). Определить в какой четверти находится эта точка

5. Описать функцию, возвращающую N-ю цифру целого числа K. Если количество цифр в числе K меньше N, то функция возвращает −1.

6. Вычислить двойной факториал N!!.

Для справок:

N!! = 1·3·5·…·N, если N — нечетное;

N!! = 2·4·6·…·N, если N — четное.

7. Дан одномерный массив. Определить, каких элементов больше четных или нечетных. Какой процент от общего количества элементов составляют положительные числа.

8. Дан двумерный массив. Вывести элементы k-й строки. Определить сумму положительных элементов в массиве.