50164

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

Лабораторная работа

Информатика, кибернетика и программирование

Вы можете написать свои функции и затем использовать их так же как функции из библиотек языка С или С. Собственные функции помещаются после закрывающей фигурной скобки min. Каждая функция имеет структуру аналогичную структуре функции min. Функцию можно вызвать из любого места программы в том числе из другой функции.

Русский

2014-01-17

58.5 KB

6 чел.

Лабораторная Работа № 13

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

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

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

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

  •  Функцией называется выделенная последовательность инструкций, предназначенных для решения определенной задачи. Вы можете написать свои функции и затем использовать их так же, как функции из библиотек языка С или С++.
  •  Собственные функции помещаются после закрывающей фигурной скобки main(). Каждая функция имеет структуру, аналогичную структуре функции main().
  •  Функцию можно вызвать из любого места программы, в том числе, из другой функции. Инструкция return(0);  в теле функции всегда передает управление инструкции, следующей за вызывом функции.
  •  Если компилятор С следует стандарту ANSI, вы должны указать тип функции даже в том случае, если функция не возвращает никаких значений. При этом тип определяется как void. Эта информация говорит компилятору, что функция не будет возвращать вызывающей функции никакого значения. В С++ введение ключевого слова void  является не обязательным, но желательным.
  •  Для передачи данных в функцию надо использовать только параметры. Глобальные переменные, то есть переменные, объявленные вне функции, использовать не рекомендуется.
  •  Тип каждого фактического параметра (константы или переменной) в инструкции вызова функции должен совпадать с типом соответствующего формального параметра, указанного в объявлении функции.
  •  Если параметр функции используется для возврата результата, то в объявлении функции этот параметр должен быть ссылкой, а в инструкции вызова функции в качестве фактического параметра должен быть указан адрес переменной.
  •  При работе с компиляторами языка С++(и некоторыми С - компиляторами) желательно начинать программу с прототипов функций. Прототип – это строка определения функции, повторенная в начале программы перед main(). Прототип сообщает компилятору типы и количество аргументов тех функций, которые будут использованы в программе.

Пример: 

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

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

#includ<stdio.h>

#includ<conio.h>

#includ<math.h>

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

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();

}

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

Выполнить задание согласно варианту:

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

Условия задачи

Примечания

1

Подсчитать число точек, находящихся внутри круга радиусом r с центром в начале координат; координаты заданы массивами X(10), Y(10).

Расстояние точки от начала координат вычислять в подпрограмме.

2

Определить периметры треугольников, заданных координатами их вершин XA(5), XB(5), XC(5)

                                            YA(5), YB(5), YC(5).

Длину стороны треугольников вычислять в подпрограмме.

3

Вычислить z=(v1+v2+v3)/3,  где v1, v2, v3 –объем шаров с радиусами r1, r2, r3 соответственно.

Vi – вычислять в подпрограмме.

4

Вычислить суммы положительных элементов массивов x(n), y(m), z(k).

n<=5

m<=5

k<=5

5

Вычислить среднее арифметическое положительных элементов для массивов a(n1),b(n2), c(n3).

n1<=5

n2<=5

n3<=5

6

Подсчитать количество элементов матриц x(5,5) и y(4,6), удовлетворяющих условию 0<=xij<=1 и 0<=yij<=1

7

Вычислить суммы положительных элементов каждой строки для матриц a(4,5) и b(5,6).

8

Вычислить суммы элементов главных диагоналей матриц a(n,n)  и b(m,m).

n<=5

m<=5

9

Вычислить z=(s1+s2)/2,  где s1 – сумма положительных элементов массива x(5); s2 – сумма отрицательных элементов массива y(6).

Обе суммы вычислять в одной подпрограмме.

10

Подсчитать число нулевых элементов для матриц a(4,5) и b(5,6).

11

Вычислить суммы элементов нижних треугольных матриц для матриц a(n,n)  и b(m,m).

n<=5

m<=5

12

Определить число положительных элементов до первого отрицательного в массивах x(4), y(5), z(7).

13

Вычислить z=(xm1+xm2)/2, где xm1 и xm2  - наименьшие элементы массивов x1(12) и  x2(15).

14

Переписать положительные элементы массива x(10) и y(14) в массив z подряд.

Запись в массив z осуществлять в подпрограмме.

15

Найти наименьшие элементы и номера строк и столбцов, в которых они расположены, для матриц a(4,5) и b(5,6).

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

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

    

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

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


 

А также другие работы, которые могут Вас заинтересовать

38019. Основы электрохимии 48.5 KB
  В пробирку налить 2 мл раствора йодида калия KJ добавить 2 – 3 капли раствора уксусной кислоты CH3COOH затем прилить 1 мл раствора перекиси водорода H2O2. В пробирку налить 2 мл раствора перманганата калия KMnO4 добавить 2 – 3 капли раствора серной кислоты H2SO4 затем прилить 1 мл раствора перекиси водорода H2O2. Собрать гальванический элемент из двух металлических электродов и растворов электролитов: зачистить наждачной бумагой две металлические пластинки промыть их дистиллированной водой просушить фильтровальной...
38020. ПРЕДСТАВЛЕНИЕ И РЕАЛИЗАЦИЯ АТД «СПИСОК» 355.5 KB
  Краткая теория Реализация списка посредством массивов. При реализации списка посредством массивов используют два способа.n] of record pole1: integer; pole2: Boolen; end; vr :Spisok; Обращение к элементам такого списка будет выглядеть так. Тип для второй реализации списка посредством массивов рис 1.
38021. ПРЕДСТАВЛЕНИЕ И РЕАЛИЗАЦИЯ АТД «СТЕК», «ОЧЕРЕДЬ», «ДВУСВЯЗНЫЙ СПИСОК» 606.5 KB
  Реализация «стека» посредством указателей. Обычно ячейка стека состоит из двух полей. Первое поле информационное, т.е. хранит сам элемент списка, отсюда название – element, а второе содержит указатель на следующую ячейку, поэтому имеет название next. Для формирования структуры АТД «стек» используется составной тип и описывается в разделе описания типов type.
38022. Лабораторная работа № 3 ПРЕДСТАВЛЕНИЕ И РЕАЛИЗАЦИЯ АТД ДЕРЕВО Цель работы: исследовать и изучить АТД. 1.59 MB
  n] of integer; vr :tree; Реализация деревьев с использованием списков сыновей. Списки сыновей составляются для каждого узла.1 можно составить соответствующие списки сыновей рис.5 Тип для реализации АТД дерево через списки сыновей рис.
38023. ПРЕДСТАВЛЕНИЕ И РЕАЛИЗАЦИЯ «БИНАРНОГО ДЕРЕВА» 197.5 KB
  нет копий одного и того же элемента. Дерево бинарного поиска – это так же бинарное дерево узлы которого помечены элементами множеств. Свойство данного дерева заключено в том что все элементы левого поддерева любого узла x меньше элемента узла x а элементы правого поддерева больше чем x. Первое поле element – это поле в котором храниться значение самого элемента множества.
38024. ИЗУЧЕНИЕ АТД «СЛОВАРЬ», «ФАЙЛ» И «НАГРУЖЕННОЕ ДЕРЕВО» 341 KB
  Временами так же возникает необходимость проверки присутствия элемента в этом множестве. Словарь можно реализовать тремя способами: 1посредством сортированных или не сортированных связанных списков; 2при помощи двоичных векторов если элементы данного множества целые числа; 3используя массив фиксированной длины с указателем на последнюю заполненную ячейку этого массива если размер множества не превышает заданную длину массива в противном случае используются связанные списки. Начальное значение сегмента всегда меньше значений элементов его...
38025. Карты изображений 1.45 MB
  подробное описание областей нанесенных на контурную карту: mp nme= Mp re shpe= rect coords= 226074 href= ссылка на Google.ru re shpe= rect coords= 61411276 href= ссылка на мой сайт mp Примечание: жирным выделено то что должно присутствовать обязательно обычным текстом переменные параметры. mp nme= Mp2 re shpe= circle coords= 842826 href= http: google.ru re shpe= poly coords= 65351417858109481107177546345 href= http: srez.
38026. Элементарные таблицы 60 KB
  Если значение ноль то рамка не требуется; cellpdding= cellspcing= добавляют свободное пространство между данными ячейки и ее границами и между ячейками таблицы соответственно. th т th контейнер ячейки Заголовок : заголовок столбца или строки. Значения: left заголовок прижать к левому краю ячейки center заголовок расположить по центру ячейки right заголовок прижать к правому краю ячейки; vlign= задает положение данных в ячейке Заголовок по вертикали. Значения: bottom заголовок прижать к нижнему краю ячейки middle заголовок...
38027. Продолжение разговора о ссылках 63.5 KB
  Способ первый с помощью атрибута nme имя закладки тэга : Заголовки стих первый стих второй стих третий в нашем примере мы сделали закладками использовав атрибут тэга nme: Заметьте href= stih3 символ решетки перед именем закладки на которую мы ссылаемся обязателен.