Всего на сайте:
183 тыс. 477 статей

Главная | Информатика

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

Лабораторная Работа № 31-32

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

 

Цель: Овладение навыками алгоритмизации и программирования задач с использованием подпрограмм пользователя. Овладение навыками написания подпрограмм и обращения к ним, выбор параметров подпрограмм.

 

Теоретические сведения:

 

Приступая к решению задач на предложенную тему, следует вспомнить, что:

· Функцией называется выделенная последовательность инструкций, предназначенных для решения определенной задачи. Вы можете написать свои функции и затем использовать их так же, как функции из библиотек языка С или С++.

· Собственные функции помещаются после закрывающей фигурной скобки main(). Каждая функция имеет структуру, аналогичную структуре функции main().

· Функцию можно вызвать из любого места программы, в том числе, из другой функции. Инструкция return(0); в теле функции всегда передает управление инструкции, следующей за вызывом функции.

· Если компилятор С следует стандарту ANSI, вы должны указать тип функции даже в том случае, если функция не возвращает никаких значений. При этом тип определяется как void. Эта информация говорит компилятору, что функция не будет возвращать вызывающей функции никакого значения. В С++ введение ключевого слова void является не обязательным, но желательным.

· Для передачи данных в функцию надо использовать только параметры.

Глобальные переменные, то есть переменные, объявленные вне функции, использовать не рекомендуется.

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

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

· При работе с компиляторами языка С++(и некоторыми С - компиляторами) желательно начинать программу с прототипов функций. Прототип – это строка определения функции, повторенная в начале программы перед main(). Прототип сообщает компилятору типы и количество аргументов тех функций, которые будут использованы в программе.

 

Пример:

Написать функцию, обеспечивающую решение квадратного уравнения. Параметрами функции должны быть коэффициенты и корни квадратного уравнения. Значение, возвращаемое функцией, должно передавать в вызывающую программу информацию о наличии у уравнения корней: 2 – два разных корня, 1 – корни одинаковые, 0 – уравнение не имеет решения. Кроме того, функция должна проверять корректность исходных данных. Если исходные данные не верные, то функция должна возвращать -1.

 

 

 

Тексты программы:

 

#include

#include

#include

 

// тело функции

int kvadur(float a, float b, float c, float *x1,float *x2) //коэф. уравнения, корни уравнения

// значение функции – количество корней

// или -1, если неверные исходные данные

{

float d; // дискриминант

if (a==0) return(-1);

 

d=b*b-4*a*c;

if(d<0)

return(0); // уравнение не имеет решения

 

*x1=(-b+sqrt(d))/(2*a);

*x2=(-b-sqrt(d))/(2*a);

 

if (*x1!=*x2) return(2);

else return(1);

}

 

// проверка работоспособности функции

void main()

{

float a,b,c; // коэффициенты уравнения

float x1,x2; // корни уравнения

int n; // количество корней

 

puts(“Введите коэффициенты”);

scanf(“%f%f%f”,&a,&b,&c);

switch (kvadur(a,b,c,&x1,&x2))

{

case -1: puts(“Ошибка исходных данных”);

break;

case 0: puts(“Уравнение не имеет решения”);

break;

case 1: printf(“Корни одинаковые: x=%3.2f”,x1);

break;

case 2: printf(“ x1=%3.2f x2=%3.2f”,x1,x2);

}

getch();

}

 

 

Методические рекомендации для выполнения лабораторной работы:

  • КАЖДЫЙ СТУДЕНТ ДОЛЖЕН РЕШИТЬ ДВЕ ЗАДАЧИ ИЗ ПРЕДЛОЖЕНОЙ ТАБЛИЦЫ (а. с массивами; б. задача общего вида)

 

Варианты заданий:

 

Вариант задания Условия задачи Примечания
  Подсчитать число точек, находящихся внутри круга радиусом r с центром в начале координат; координаты заданы массивами X(10), Y(10). Расстояние точки от начала координат вычислять в подпрограмме.
  Определить периметры треугольников, заданных координатами их вершин XA(5), XB(5), XC(5) YA(5), YB(5), YC(5). Длину стороны треугольников вычислять в подпрограмме.
  Вычислить z=(v1+v2+v3)/3, где v1, v2, v3 –объем шаров с радиусами r1, r2, r3 соответственно. Vi – вычислять в подпрограмме.
  Вычислить суммы положительных элементов массивов x(n), y(m), z(k). n<=5 m<=5 k<=5
  Вычислить среднее арифметическое положительных элементов для массивов a(n1),b(n2), c(n3). n1<=5 n2<=5 n3<=5
  Подсчитать количество элементов матриц x(5,5) и y(4,6), удовлетворяющих условию 0<=xij<=1 и 0<=yij<=1 
  Вычислить суммы положительных элементов каждой строки для матриц a(4,5) и b(5,6). 
  Вычислить суммы элементов главных диагоналей матриц a(n,n) и b(m,m). n<=5 m<=5
  Вычислить z=(s1+s2)/2, где s1 – сумма положительных элементов массива x(5); s2 – сумма отрицательных элементов массива y(6). Обе суммы вычислять в одной подпрограмме.
  Подсчитать число нулевых элементов для матриц a(4,5) и b(5,6). 
  Вычислить суммы элементов нижних треугольных матриц для матриц a(n,n) и b(m,m). n<=5 m<=5
  Определить число положительных элементов до первого отрицательного в массивах x(4), y(5), z(7). 
  Вычислить z=(xm1+xm2)/2, где xm1 и xm2 - наименьшие элементы массивов x1(12) и x2(15). 
  Переписать положительные элементы массива x(10) и y(14) в массив z подряд. Запись в массив z осуществлять в подпрограмме.
  Найти наименьшие элементы и номера строк и столбцов, в которых они расположены, для матриц a(4,5) и b(5,6). 
  

 

 

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

  1. В чем заключаются различия между библиотечными функциями языка С и функциями, которые вы пишите сами?
  2. Всегда ли вызов функции осуществляется из функции main()?
  3. Чем отличаются формальные и фактические параметры?
  4. Что происходит, когда заканчивается выполнение функции?
  5. Как объявляются глобальные и локальные переменные? Каково правило видимости этих переменных?
  6. Объясните разницу между автоматическими и внешними переменными?
  7. Как передать значение функции?
  8. Как получить значение от функции?

 

Содержание отчета:

  1. Схемы алгоритмов.
  2. Тексты составленных программ.
  3. Протоколы к составленным программам.
  4. Вывод о проделанной работе.

 

 

 

Предыдущая статья:Сосудодвигательный центр. Регуляция тонуса сосудов. Следующая статья:Несоблюдение стандарта преследуется по закону
page speed (0.0848 sec, direct)