- •Лабораторная работа № 1
- •5.1 Линейная программа
- •Далее создадим файл:
- •Задания1
- •Лабораторная работа № 2
- •7. Варианты задания
- •Лабораторная работа № 3
- •5.2 Оператор if
- •Лабораторная работа № 4
- •Лабораторная работа № 5
- •Задание 2. Циклический вычислительный процесс конечные суммы и произведения
- •Лабораторная работа № 6
- •Лабораторная работа № 7
- •5.1 Одномерный массив
- •5.3 Индексация с помощью указателей
- •Лабораторная работа № 8
- •Лабораторная работа № 9
- •Лабораторная работа № 11
- •Задача 2. Параметры функции
- •Лабораторная работа № 12
- •Лабораторная работа № 13
- •5. Содержание отчета
- •Лабораторная работа № 14
- •5. Содержание отчета
- •Решение уравнения методом деления отрезка пополам (бисекций)
- •Лабораторная работа № 15
- •6.2.1 Метод средних прямоугольников
- •6.2.1 Метод трапеций
- •Лабораторная работа № 10
- •Лабораторная работа № 16
- •5. Содержание отчета
- •Директива #include
- •7. Методические указания
- •8. Варианты заданий.
- •Лабораторная работа № 17
- •Лабораторная работа № 18
- •Лабораторная работа № 19
- •5. Содержание отчета
- •6.1.1 Доступ к элементам структуры
- •6.1.2 Присваивание структур
- •Лабораторная работа № 20
- •Например, формула
- •Задание на программирование
Задача 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
Тема: «Обработка массивов с использованием указателей. Передача одномерных массивов в функции. Шаблоны функций»
Цель работы
Получение навыков в написании программ с использованием указателей.
Изучение динамических массивов.
Изучение механизма передачи массива в функцию и передачи параметров по ссылке.
Изучение способов использования шаблонов функций.
Техническое обеспечение
Персональная ЭВМ IBM PC/286 и более поздних моделей.
Клавиатура.
Дисплей.
Печатающее устройство.
Программное обеспечение
Операционная система Windows
Система программирования Visual C++ версия 6.0 или Borland C++ версия 3.1 и более поздние версии.
Постановка задачи
Дано несколько массивов чисел (типы массивов различны). Длины массивов вводятся пользователем. Требуется для каждого массива выполнить заданные действия.
Содержание отчета
5.1. Тема и цель работы.
5.2. Схема алгоритма решения задачи.
5.3. Текст программы.
5.4. Результаты выполнения программы.
Общие сведения
Когда массив используется в качестве аргумента функции, передается только адрес массива, а не копия всего массива. При вызове функции с именем массива в функцию передается указатель на первый элемент массива. Параметр должен иметь тип, совместимый с указателем. Т. к передается адрес на начало массива, то информация о размерности теряется, и ее необходимо передавать отдельным параметром.
#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
Ввести и обработать два одномерных массива, содержащие соответственно 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) Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в четных позициях, а во второй половине — элементы, стоявшие в нечетных позициях.