50164

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

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

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

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

Русский

2014-01-17

58.5 KB

7 чел.

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


 

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

34735. Историческая генеалогия: история развития, предмет и задачи, смежные дисциплины 13.87 KB
  Лихачева разработавшего научную методику исследования генеалогических источников и Л. Появляются исследования по истории отдельных дворянских родов работы Барсукова Васильчикова. многие отечественные генеалоги оказались за границей и там продолжили свои исследования. генеалогические исследования значительно сокращаются.
34736. Источники по генеалогии дворянства 16 - 17вв.: Государев родословец и Бархатная книга (история создания, структура, содержание) 13.23 KB
  : Государев родословец и Бархатная книга история создания структура содержание Государев родословец История создания: Составлен Разрядным приказом в 1555 1556 году. В XVII веке Государев родословец включён в Бархатную книгу. Структура: 1 часть государев родословец был составлен при Иване 4; 2 часть составлена на основе приказов. В Бархатную книгу включены: Государев родословец 1555 1556 состоящий преимущественно из родословных записей Рюриковичей и Гедиминовичей царский княжеские боярские роды а также материалы за вторую...
34738. Ревизские сказки как источник по генеалогии непривилегированных слоев населения 15.76 KB
  Это документы именной переписи податного населения Российской Империи XVIII середины XIX вв. Проведение реформы потребовало организации подушного учета населения. Ревизские сказки являлись поимёнными списками населения в которых указывались имя отчество и фамилия владельца двора его возраст имя и отчество членов семьи с указанием возраста отношение к главе семьи.
34739. Материалы всероссийской переписи населения 1897года как источник по генеалогии непривилегированных слоев населения 13.06 KB
  дают материалы Первой всероссийской переписи населения это прямой массовый статистический учет населения проводимый с целью определения его численности состава и размещения на определенный момент. Первый подробный проект переписи населения был представлен председателем Центрального статистического комитета П. Только почти через 20 лет этот проект был утвержден императором Николаем II согласно Положению о Первой всеобщей переписи населения Российской империи изданному в 1895 г.
34740. Церковные метрические книги как источник по генеалогии непривилегированных слоев населения 13.82 KB
  Метрические книги велись в России до революции в церковных приходах духовенством или особыми гражданскими чиновниками. Во второй части метрической книги также приводился порядковый номер и дата бракосочетания. Метрические книги велись в двух экземплярах: один направлялся на хранение в архив консистории учреждение с церковноадминистративными и судебными функциями которая подчинялась епархиальному архиерею второй оставался в церкви.
34741. Методика генеалогических исследований. Генеалогические таблицы и росписи 15.71 KB
  Поколенная роспись это нумерованное перечисление членов рода потомков родоначальника по мужской линии обоего пола по генеалогическому старшинству с выделением поколений и указанием при каждом члене рода номера его отца. Выделяются три наиболее употребительных: а все лица рода распределялись по коленам нумеровавшимся римскими цифрами перед представителем рода ставился порядковый номер арабскими цифрами а в конце строки ставился порядковый номер отца; как валовая нумерация б номер отца при сплошной нумерации переносится в начало...
34742. Историческая хронология. Предмет и задачи. Виды календарных систем. Основные понятия и термины 17.43 KB
  В этом календаре год состоял из 365 дней. по 30 дней каждый; в конце года добавлялось пять праздничных дней не входивших в состав месяцев. В течение каждых 19 лет считают 12 лет по 12 лунных месяцев по 29 30 дней и 7 лет по 13 лунных месяцев. лунносолнечный календарь является официальным в Израиле где начало года приходится на один из дней периода с 5 сентября по 5 октября.
34743. Древние календарные системы: Египет, Древняя Греция, Китай 18.83 KB
  Этот лунный календарь использовался на протяжении всей древнеегипетской истории как религиозный календарь фиксирующий время проведения праздников. Схематический гражданский календарь Новый календарь был построен по простой схеме. Поздний лунный календарь Хронологической единицей в нем как и в раннем лунном календаре служил лунный месяц начинавшийся в первый день невидимости Луны.