Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Простейшие




Цель работы : Изучение функций с простой структурой в языке С++.

Задание: Составить алгоритм и написать программу на языке С++ решения задачи согласно своего варианта.

Длительность:2 часа.

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

Ключевым элементом данной модели для решения конкретной задачи в С++ выступает функция. Функцию можно представить как подпрограмму или некую процедуру, несущую законченную смысловую нагрузку.

Параметры и аргументы функций

Каждая функция, которую предполагается использовать в программе, должна быть в ней объявлена. Обычно объявления функций размещают в заголовочных файлах, которые затем подключаются к исходному тексту программы с помощью директивы #include. Объявление функции описывает ее прототип (иногда говорят, сигнатура). Прототип функции объявляется следующим образом:

 

возвр_тип FuncName (список объявляемых параметров);

 

здесь возвр_тип – возвращаемый тип данных. Если возвращаемый тип данных не указан, то по умолчанию компилятор считает, что возвращаемый функцией тип есть int. Список объявляемых параметров задает тип и имя каждого параметра функции, разделенные запятыми. Допускается опускать имя параметра. Список объявляемых параметров функции может пустым. Приведем примеры прототипов функций:

 

int swap (int, int);

double max (double par1, double par2);

void func();

 

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

Определение функции состоит из ее заголовка и собственно тела, заключенного в фигурные скобки и несущего смысловую нагрузку. Если функция возвращает значение, отличное от типа void, в теле функции обязательно должен присутствовать оператор return с параметром того же типа, что и возвращаемое значение. В случае, если возвращаемое значение не будет использоваться в дальнейшем в программе (void), оператор return следует без параметра или вообще может быть опущен, тогда возврат из функции осуществляется по достижении закрывающейся скобки.

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

Вызов функции представляет собой указание идентификатора функции (ее имени), за которым в круглых скобках следует список аргументов, разделенных запятыми:

 

Имя_функции ( аргумент_1,

аргумент_2

…,

аргумент_N);

 

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

Функция может вызывать другие функции (одну или несколько), а те, в свою очередь, производить вызов третьих и т.д. Кроме того функция может вызывать сама себя. Это явление в программировании называется рекурсией. Подробнее рекурсия будет рассмотрена ниже.

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

Программа начинает выполняться с функции main () до вызова функции FUNC1(x, y). С этого момента управление программой передается в функцию FUNC1(x, y), причем в качестве значения переменной Radius данная функция использует величину переменной х, а в качестве переменной Symbol передается значение у (рис. 4.2 иллюстрирует передачу параметров в далее до оператора return выполняется тело функции FUNC1(х, у), после чего управление возвращается в тело функции main(), а именно, следующему за вызовом FUNC1 (х, y) оператору. После этого продолжается выполнение функции до вызова функции FUNC2(а, b, с). При вызове функции переменная а передает значение логической переменной Сount,переменная b - целочисленной переменной Count, а переменная с - короткому целому Key.

Функция main()часто не имеет аргументов, однако, если требуется при вызове программы передать ей какие-нибудь параметры, синтаксис функции main() меняется:

 

int main (argc, argv)

 

Здесь первый аргумент, argc, указывает количество передаваемых параметров, а второй, argv,является указателем на массив символьных строк, содержащих эти аргументы. Массивы и указатели будут рассмотрены позже.

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

 

// Объявление функций:

int MyFunction (int Number, float Point);

char InputSymbol ();

void SetBit (short Num);

void EmptySample(int, char);

 

// Вызов функций:

Result = MyFunction (varbl, 3.14);

Symb = InputSymbol();

SetBit (3);

EmptySample(2, smb1);

 

// Определение функций:

int MyFunction (int Number, float Point)

{

int my_x;

return my_x; // my_x – типа int

};

 

char InputSymbol ()

{

char symbol;

cin >> symbol;

 

return symbol;

};

 

void SetBit (short number)

{

GlobalBit = GlobalBit | number;

};

 

void EmptySample(int x, char ch);

{

};

 

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

В заголовочном файле header.h разместим прототип функции MySquare():

 

// header.h

long MySquare(int);

 

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

 

#include " header.h"

int main ()

{

int Variable = 5;

cunt << MySquare(Variable);

 

return 0;

}

long MySquare(int x);

{

return x * x;

}

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

 

// Прототип функции:

long MySquare(int);

int main ()

{

int Variable = 5;

cunt << MySquare(Variable);

 

return 0;

}

long MySquare(int x);

{

return x * x;

}

 

Результат работы программы не изменится - на печать будет выведено число 25.

Аргументы по умолчанию

С++ допускает при вызове функций опускать некоторые ее параметры. Достигается это указанием в прототипе функции значений аргументов по умолчанию. Например, функция, прототип которой приведен ниже, может при вызове иметь различный вид в зависимости от ситуации.

 

// Прототип функции:

void ShowInt (int i,

bool Flat = true,

char symbol = '\n');

 

// Вызовы функции ShowInt:

ShowInt (1, false, 'a');

ShowInt (2, false);

ShowInt (3);

 

В первом случае все три аргумента заданы явно, поэтому работа функции осуществляется в обычном режиме. Во втором вызове в функцию передается два параметра из трех, причем вместо последнего аргумента подставляется значение по умолчанию, а именно символ ' \n'. Третий вариант обращения к функции сообщает только один целочисленный параметр, а в качестве остальных аргументов используются значения по умолчанию: логическая переменная со значением true и символьная переменная со значением ' \n'.

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

Рассмотрим пример, в котором осуществляется вывод знакового числа двойной точности с указанием количества значащих символов. Другими словами, определим функцию, принимающую в качестве одного из параметров число выводимых знаков. Для решения поставленной задачи можно воспользоваться функцией возведения числа в степень pow () и функцией взятия модуля от длинного числа с плавающей точкой fabsl (), прототипы которых содержатся в заголовочном файле math.h:

 

#include <iostream.h>

#include <math.h>

 

void Out (double Numb, double Sig=1,

bool Flg=true);

 

int main ()

{

double Mpi = -3.141592654;

 

Out (Mpi, 4, false);

Out (Mpi, 2);

Out (Mpi);

 

return 0;

}

 

void Out (double numb, double sig, bool flg)

{

if (!flg)

numb = fabsl (numb);

numb =(int) (numb * pow (10, sig));

numb = numb / pow(10, sig);

cout << numb << '\n';

}

 

В теле программы производится вызов одной и той же функции Out () с различным числом параметров для вывода значения переменной двойной точности Mpi. В результате работы программы на печать будут выведены следующие значения:

 

3,1415

-3,14

-3,1

 

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

 

Задания по вариантам к лабораторной работе №4:

1. Составить подпрограмму вычисления приближенного значения корня с погрешностью по итерационной формуле:

где .

Используя подпрограмму, вычислить:

.

2. Составить подпрограмму определения максимального элемента в одномерном массиве X=(x1, x2, …, xn). Используя её, найти точки, в которых следующие функции

Y1=2x2-5x+6;

Y2=(x3-1)*cos(x).

Принимают минимальные значения в интервале [0..2]. Вычисления производить с шагом 0,1.

3. Составить подпрограмму определения минимального элемента в одномерном массиве X=(x1, x2, …, xn). Используя её, найти максимум функции z=-x2-y2-4x+6y-8 в следующих сечениях:

при x=-1, 2<=y<=4, hy=0,2

при y=3, -2<=x<=0, hx=0,2

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

4. Составить подпрограмму для определения между точками А и В в n-мерном пространстве по формуле

,

где ai и bi – координаты точек (i=1, 2, …, n). Найти минимальное из расстояний между точками X, Y, Z, где X=(3, -8, 1, 2), Y=(1, 4, -5, 6), Z=(0, 2, -4, 8).

5. Составить подпрограмму вычисления среднего арифметического элементов вектора X=(x1, x2, …, xn). Используя её, преобразовать матрицу А (5х5), таким образом, чтобы на месте диагональных элементов в 3й и 5й строке находились средние арифметические значения элементов этих строк.

6. Составить подпрограмму, определяющую расстояние между kй и lй строками матрицы А (5х5) по формуле

и, используя её, найти расстояния между строками (1, 4), (2, 3), (1, 3) в матрице В(4х) и строками (1, 3) в матрице С(3х3).

7. Составить подпрограмму вычисления числа сочетаний из n элементов по m по формуле

Используя ее вывести на печать целочисленную матрицу А = [аij] размером 5x5, элементы которой определяются следующим образом:

8. Составить подпрограммы вычисления факториала n! = 1 * 2 * ... n и целой степени действительного числа а. Используя их, найти максимальное по модулю слагаемое в разложении

9. Составить подпрограмму вычисления нормы матрицы А=[аij], I, j=1…n , по формуле:

Используя ее, вывести на печать диагональные элементы той из матриц А и В размерностью 4х4, у которой норма минимальна. Элементы матриц задать произвольно.

 

10. Составить подпрограмму вычисления величины у = shX с погрешностью е путем разложения в ряд

sh х = х + х3/3! + х5/5! + ... + х2n+1/(2n+1)! + ...

и, используя ее, вывести на печать таблицу значений функции

где ai = (1, 4.2, 0.3, 5), bi = (7, 3.4, 0.02, -1.4), Е = 0.001.

11. Составить подпрограмму, определяющую количество элементов матрицы А размерностью n*m, принадлежащих заданному интервалу [с, d], т.е. удовлетворяющих условиям с <=аij <= d. Используя ее, определить частоту попадания элемента матрицы

в интервалы [1, 2], [2, 3], [3, 6].

12. Составить подпрограмму определения числа одинаковых целых чисел k в серии длиной больше L в одномерном массиве X = (х1, х2, ..., хn). Используя ее, найти серию s максимальной длины в массиве Х = [1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1].

13. Говорят, что матрица имеет седловую точку аkl, если аkl является минимальным в к-той строке и максимальным в l-м столбце. Составить подпрограмму определения седловой точки заданной матрицы А. Используя се, поменять местами седловые точки матриц B и С.

14. Составить подпрограммы определения суммы

и произведения

элементов матрицы А размером n*m. Используя ее, вычислить

где А-матрица размерностью 3x3, В-матрица размерностью 4x5. Элементы матриц выбрать произвольно.

15. Составить подпрограмму, определяющую, есть ли в заданном., тексте баланс открывающихся и закрывающихся скобок. Используя ее, определить правильно ли записана формула:

(5*(х + 3)) -1)/ (Сох(х)))-2

16. Составить подпрограмму, которая позволяет определить, на какой позиции 1-й раз встречается в тексте заданный символ. Используя ее, определить позиции, на которых в тексте 'По ту сторону добра и зла' встречаются символы ‘Т’, ‘О’, ‘У’. (Признаком того, что заданный символ не найден вывести отрицательное значение позиции).

17. Составить подпрограмму преобразования строки цифр в десятичное число. Используя ее, вычислить

z=a/b+c*Cos(a)

где а = '8187', Ь = '2234', с = '3555'. (Использовать стандартную функцию ORD).

18. Составить подпрограмму преобразования целого двоичного числа, заданного последовательностью цифр 0, 1 в десятичное. Используя ее, вывести на печать десятичные значения следующих двоичных чисел: 111000111, 10101011, 1100010101.

 

19. Составить подпрограмму, определяющую периметр треугольника, вершины которого заданы своими координатами (х1, у1), (х2, у2), (х3, уЗ). Используя ее, выбрать три разные точки заданной множества точек (4, 3), (-1, 2), (8, 4), (2, 5), (6, 2), составляющие треугольник наибольшего периметра.

20. Составить подпрограмму вычисления площади треугольника по формуле , где р = (х+у+г)/2; х, у, z - длины сторон треугольника. Используя ее, найти треугольник наибольшей площади среди треугольников со сторонами (а, b, с), (b, с, d), (а, с, d).

 

Требования к отчёту по лабораторной работе:

1. оформить отчет по соответствующим требованиям (титульный лист)

2. сформулировать цель работы

3. задание;

4. схема алгоритм программы;

5. текст программы;

6. выводы по результатам выполнения лабораторной работы;

7. список используемой литературы (обязательно из электронной библиотеки).

 


Поделиться:

Дата добавления: 2015-02-09; просмотров: 187; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты