Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные по программированию.doc
Скачиваний:
37
Добавлен:
29.02.2016
Размер:
1.78 Mб
Скачать

Задача 2. Параметры функции

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

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

  • по значению

  • по адресу.

Передача по значению

Синтаксис при вызове имя_ф(имя_фактичекого_параметра);

при определении и объявлении тип имя_ф(тип имя_формального_параметра);

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

Передача по адресу

Используется 2 синтаксиса

1. с помощью ссылки.

при вызове имя_ф(имя факт. парам);

при определении и объявлении тип имя_ф(тип &имя форм параметра);

2. с помощью указателя

при вызове имя_ф(&имя факт. парам);

при определении и объявлении тип имя_ф(тип *имя форм параметра);

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

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

#include <iostream.h>

void f(int , int* . int& ):

int main(){

int i = 1. j = 2, k= 3;

cout <<"i j k\n":

cout << i <<' '<< j <<' '<< k <<'\n'; //1 2 3

f(i, &j, k);

cout << i <<' '<< j <<' '<< k <<'\n'; //1 3 4

return 0;}

void f(int i. int* j. int& k){

i++; (*j)++; k++;}

Вычислить и вывести на экран в виде таблицы значение функции, заданной с помощью ряда Тейлора, на интервале от Хнач до Хкон с шагом dX с точностью . Каждая строка таблицы должна содержать значение аргумента, значение функции и количество просуммированных членов ряда.

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

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

1.

2

3

4

5

6

7

8

9

10

Пример нахождения рекуррентной формулы

Необходимо найти такой множитель, что зная предыдущее значение можно найти последующее,

т.е an=T*an-1

Т.к.

то

Действительно, из формулы видим a0=1

Находим а1(n=1):

Находим а2(n=2):

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

Тема: «Обработка массивов с использованием указателей. Передача одномерных массивов в функции. Шаблоны функций»

  1. Цель работы

    1. Получение навыков в написании программ с использованием указателей.

    2. Изучение динамических массивов.

    3. Изучение механизма передачи массива в функцию и передачи параметров по ссылке.

    4. Изучение способов использования шаблонов функций.

  2. Техническое обеспечение

    1. Персональная ЭВМ IBM PC/286 и более поздних моделей.

    2. Клавиатура.

    3. Дисплей.

    4. Печатающее устройство.

  3. Программное обеспечение

    1. Операционная система Windows

    2. Система программирования Visual C++ версия 6.0 или Borland C++ версия 3.1 и более поздние версии.

  4. Постановка задачи

Дано несколько массивов чисел (типы массивов различны). Длины массивов вводятся пользователем. Требуется для каждого массива выполнить заданные действия.

  1. Содержание отчета

5.1. Тема и цель работы.

5.2. Схема алгоритма решения задачи.

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

5.4. Результаты выполнения программы.

  1. Общие сведения

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

#include <iostream.h>

#include <time.h>

#include <stdlib.h>

void display (float *, int );

float minim (float *, int );

int main (void)

{

float t[10];

int i;

srand(time(NULL));

for (i = 0; i < 10; i++)

t[i] = 20.*rand()/RAND_MAX-10;

display (t,10);

cout<<"min="<<minim(t,10)<<endl;

return0;

}

//функция вывода на экран массива

void display (float *a, int k)

{

int j;

for (j = 0; j < k; j++)

cout<< a[j]<<'\t';

cout<<endl;

}

//функция поиска минимального элемента массива

floatminim(float*a,intk)

{

int i;

float min=a[0];

for(i=0;i<k;i++)

{

if(a[i]<min)

min=a[i];

}

return min;

}

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

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

//функция ввода элементов массива

voidinput(float*a,intk)

{

int j;

for (j = 0; j < k; j++)

cin>>a[j];

}

Методические указания

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

Все результаты данных функций выводятся в основной функции.

  1. Варианты заданий

Вариант 1

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) номер минимального по модулю элемента массива;

2) сумму модулей элементов массива, расположенных после первого отрицательного элемента.

3) Сжать массив, удалив из него все элементы, величина которых находится в интервале [a,b]. Освободившиеся в конце массива элементы заполнить нулями.

Вариант 2

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) номер максимального по модулю элемента массива;

2) сумму элементов массива, расположенных после первого положительного

элемента.

3) Преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть которых лежит в интервале [a,b], а потом — все остальные.

Вариант 3

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) количество элементов массива, лежащих в диапазоне от А до В;

2) сумму элементов массива, расположенных после максимального элемента.

3) Упорядочить элементы массива по убыванию модулей элементов.

Вариант 4

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) количество элементов массива, равных 0;

2) сумму элементов массива, расположенных после минимального элемента.

3) Упорядочить элементы массива по возрастанию модулей элементов.

Вариант 5

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) количество элементов массива, больших С;

2) произведение элементов массива, расположенных после максимального по

модулю элемента.

3) Преобразовать массив таким образом, чтобы сначала располагались все отрицательные элементы, а потом — все положительные (элементы, равные 0, считать положительными).

Вариант 6

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) количество отрицательных элементов массива;

2) сумму модулей элементов массива, расположенных после минимального по модулю элемента.

3) Заменить все отрицательные элементы массива их квадратами и упорядочить элементы массива по возрастанию.

Вариант 7

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) количество положительных элементов массива;

2) сумму элементов массива, расположенных после последнего элемента, равного нулю.

3) Преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть которых не превышает 1, а потом — все остальные.

Вариант 8

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) количество элементов массива, меньших С;

2) сумму целых частей элементов массива, расположенных после последнего отрицательного элемента.

3) Преобразовать массив таким образом, чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%, а потом — все остальные.

Вариант 9

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) произведение отрицательных элементов массива;

2) сумму положительных элементов массива, расположенных до максимального элемента.

3) Изменить порядок следования элементов в массиве на обратный.

Вариант 10

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) произведение положительных элементов массива;

2) сумму элементов массива, расположенных до минимального элемента.

3) Упорядочить по возрастанию отдельно элементы, стоящие на четных местах, и элементы, стоящие на нечетных местах.

Вариант 11

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) сумму отрицательных элементов массива;

2) произведение элементов массива, расположенных между максимальным и минимальным элементами.

3) Упорядочить элементы массива по возрастанию.

Вариант 12

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) сумму положительных элементов массива;

2) произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами.

3) Упорядочить элементы массива по убыванию.

Вариант 13

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) произведение элементов массива с четными номерами;

2) сумму элементов массива, расположенных между первым и последним нулевыми элементами.

3) Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом — все отрицательные (элементы, равные 0, считать положительными).

Вариант 14

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) сумму элементов массива с нечетными номерами;

2) сумму элементов массива, расположенных между первым и последним отрицательными элементами.

3) Сжать массив, удалив из него все элементы, модуль которых не превышает 1. Освободившиеся в конце массива элементы заполнить нулями.

Вариант 15

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) максимальный элемент массива;

2) сумму элементов массива, расположенных до последнего положительного элемента.

3) Сжать массив, удалив из него все элементы, модуль которых находится в интервале [a,b]. Освободившиеся в конце массива элементы заполнить нулями.

Вариант 16

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) минимальный элемент массива;

2) сумму элементов массива, расположенных между первым и последним положительными элементами.

3) Преобразовать массив таким образом, чтобы сначала располагались все элементы, равные нулю, а потом — все остальные.

Вариант 17

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) номер максимального элемента массива;

2) произведение элементов массива, расположенных между первым и вторым нулевыми элементами.

3) Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половине — элементы, стоявшие в четных позициях.

Вариант 18

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) номер минимального элемента массива;

2) сумму элементов массива, расположенных между первым и вторым отрицательными элементами.

3) Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 5, а потом — все остальные.

Вариант 19

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) максимальный по модулю элемент массива;

2) сумму элементов массива, расположенных между первым и вторым положительными элементами.

3) Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.

Вариант 20

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:

1) минимальный по модулю элемент массива;

2) сумму модулей элементов массива, расположенных после первого элемента, равного нулю.

3) Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в четных позициях, а во второй половине — элементы, стоявшие в нечетных позициях.