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.  Вывод о проделанной работе.


 

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

57609. Передумови та початок національно-визвольної війни українського народу в середині XVII ст 288 KB
  Мета: з’ясувати передумови причини та характер війни; розкрити роль Богдана Хмельницького в підготовці та початку національновизвольної війни; розвивати вміння учнів аналізувати історичні джерела працювати над вивченням історичних подій за алгоритмом працювати самостійно з довідковою літературою...
57610. Війна радянської Росії з УНР і проголошення незалежності Української Народної Республіки 40 KB
  Очикувані результати: після уроку учні аналізуватимуть події кінця 1917 – початку 1918 рр.; дізнаються про плани більшовиків щодо долі України; за допомогою історичної карти зможуть відтворити хід першої ра дянсько–української війни...
57611. Історія як навчальний предмет і наука 569 KB
  Мета: створити початкове уявлення про історію як навчальний предмет і науку; зацікавити новим навчальним предметом; ознайомити школярів з видатними вченимиісторіками України...
57612. Україна в роки правління гетьмана Івана Виговського 76 KB
  Хмельницького визначити основні засади внутрішньої і зовнішньої політики гетьмана Івана Виговського; розвивати в учнів уміння працювати з картою аналізувати текстові та візуальні історичні джерела і на основі їх робити певні висновки...
57613. Велика Вітчизняна війна (1941-1945 рр.) – складова Другої світової війни 54.5 KB
  Мета: познайомити учнів з подіями Великої Вітчизняної війни політикою загарбників на окупованих українських територіях діяльністю руху Опору на території України; вдосконалювати навички роботи з картою...
57614. ВЕРБАЛІЗАЦІЯ СТРАХУ В СУЧАСНІЙ АНГЛІЙСЬКІЙ МОВІ 322.5 KB
  Мовні засоби вираження емоції страху, а також об’єкти, які викликають у людини цю емоцію. Новизна та вибір предмета дослідження обумовлюються відсутністю детального аналізу мовних засобів, які використовуються автором у художньому тексті для вираження мовлення персонажів, які перебувають у стані страху.
57615. КИРИЛЛО – МЕФОДИЕВСКОЕ БРАТСТВО 80.5 KB
  Цели урока: ознакомить учащихся с деятельностью первой украинской политической нелегальной организацией - Кирилло-Мефодиевским братством; провести исследование программных документов и общественно-политической деятельности Кирилло-Мефодиевского братства...
57616. Галицко-Волынское княжество во времена Даниила Галицкого 85.5 KB
  ЦЕЛЬ: сформировать представление о Галицко-Волынском княжестве как наследнике традиций Киевской Руси показать роль Даниила Галицкого в процессе создания государства охарактеризовать основы внутренний и внешней политики...
57617. Державотворчі процеси у 1994-2009 р 138.5 KB
  Мета: розкрити зміст перетворень в 1994-2009 р., сформувати політичну позицію щодо оцінки президентства Л.Д.Кучми, В.А.Ющенка, діяльності Верховної Ради, Кабінету Міністрів; перемогу демократичних сил,радикальні зміни у суспільстві; виховувати в дусі патріотизму, толерантності.