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


 

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

33233. Шунт 13.32 KB
  Устройство и принципы работы датчиков движения и присутствия Датчики движения и присутствия автоматически включают выключают освещение в помещении в зависимости от интенсивности естественного потока света и или присутствия людей. Датчики движения более просты по конструкции и реагируют только на активные движения например идущего человека.
33234. Электрическая цепь, Устройство трансформатора 13.12 KB
  Электрической цепью называется совокупность устройств и объектов образующих путь для электрического тока электромагнитные процессы в которых могут быть описаны с помощью понятий об электрическом токе ЭДС электродвижущая сила и электрическом напряжении. trnsformo преобразовывать это статическое электромагнитное устройство имеющее две или более индуктивно связанных обмоток на какомлибо магнитопроводе и предназначенное для преобразования посредством электромагнитной индукции одной или нескольких систем напряжений переменного тока в...
33235. Зако́н О́ма 13.08 KB
  закон Ома для полной цепи: сила тока в полной цепи равна электродвижущей силе источника деленной на сумму сопротивлений однородного и неоднородного участков цепи.
33236. Последовательное и параллельное соединения в электротехнике 13.47 KB
  Режим при котором вторичная обмотка трансформатора разомкнута а на зажимы первичной обмотки подано переменное напряжение называется холостым ходом трансформатора. Если к первичной обмотке подвести напряжение U1 по ней потечет ток который обозначим I0. Магнитный поток Ф возбуждаемый первичной обмоткой индуктирует во вторичной обмотке э. Тот же самый магнитный поток индуктирует в первичной обмотке э.
33237. Первый закон Кирхгофа 13.56 KB
  2Сердечник статора набирается из стальных пластин толщиной 035 или 05 мм. В продольные пазы статора укладывают проводники его обмотки которые соответствующим образом соединяют между собой образуя трехфазную систему. Для подключения обмоток статора к трехфазной сети они могут быть соединены звездой или треугольником что дает возможность включать двигатель в сеть с двумя различными линейными напряжениями. Для более низких напряжений указанных на щитке обмотки статора соединяются в треугольник для более высоких в звезду.
33238. Работа электрического тока 13.09 KB
  Мощность электрического тока показывает работу тока совершенную в единицу времени и равна отношению совершенной работы ко времени в течение которого эта работа была совершена.
33239. Второй закон Кирхгофа 13.06 KB
  В любом замкнутом контуре электрической цепи алгебраическая сумма ЭДС равна алгебраической сумме падений напряжений на всех его участках
33240. Магни́тное по́ле 13.55 KB
  Принцип работы асинхронного электродвигателя основан на взаимодействии вращающегося магнитного поля возникающего при прохождении трехфазного переменного тока по обмоткам обмоткам статора с током индуктированным полем статора в обмотках ротора в результате чего возникают механические усилия заставляющие ротор вращаться в сторону вращения магнитного поля при условии что частота вращения ротора n меньше частоты вращения поля n1 .
33241. Электромагнит 13.3 KB
  Обычно электромагнит состоит из обмотки и ферромагнитного сердечника который приобретает свойства магнита при прохождении по обмотке ток Регулирование скорости асинхронного двигателя Наиболее распространены следующие способы регулирования скорости асинхронного двигателя: изменение дополнительного сопротивления цепи ротора изменение напряжения подводимого к обмотке статора двигателя изменение частоты питающего напряжения а также переключение числа пар полюсов. Регулирование частоты вращения асинхронного двигателя путем введения...