- •Лабораторная работа № 1
- •Далее создадим файл:
- •Задания1
- •Лабораторная работа № 2
- •Консольный ввод-вывод
- •Чтение и запись символов
- •Чтение и запись строк
- •Форматированный консольный ввод-вывод
- •Форматированный вывод
- •Форматированный ввод
- •7. Варианты задания
- •Лабораторная работа № 3
- •5.2 Оператор if
- •Лабораторная работа № 4
- •Содержание отчета
- •Постановка задачи.
- •Общие сведения
- •Лабораторная работа № 5
- •Оператор for
- •Вариации цикла for
- •Бесконечный цикл
- •Циклы for без тела
- •Задание 2. Циклический вычислительный процесс конечные суммы и произведения
- •Лабораторная работа № 6
- •Оператор цикла while
- •Оператор do … while
- •Оператор break
- •Оператор continue
- •Лабораторная работа № 7
- •5.1 Одномерный массив
- •Создание указателя на массив
- •5.3 Индексация с помощью указателей
- •Сортировка
- •Методические указания.
- •Лабораторная работа № 8
- •Двухмерные массивы
- •Лабораторная работа № 9
- •Лабораторная работа № 11
- •Задача 2. Параметры функции
- •Лабораторная работа № 12
- •Варианты заданий
- •Лабораторная работа № 13
- •Некоторые операции над матрицами
- •Методические указания
- •Варианты заданий
- •Лабораторная работа № 14
- •Решение уравнения методом деления отрезка пополам (бисекций)
- •Методические указания
- •Лабораторная работа № 15
- •Вычисление определенного интеграла
- •6.2.1 Метод средних прямоугольников
- •6.2.1 Метод трапеций
- •Методические указания
- •Варианты заданий
- •Лабораторная работа № 10
- •Структуры (struct)
- •Лабораторная работа № 16
- •Директива #include
- •7. Методические указания
- •8. Варианты заданий.
- •Лабораторная работа № 17
- •Указатель на файл
- •Открытие файла
- •Перенаправление потока
- •Чтение из потока и запись в поток
- •Закрытие потока
- •Использование функций feof() и ferror()
- •Варианты заданий
- •Лабораторная работа № 18
- •Функции обработки символов
- •Функции обработки строк
- •Варианты заданий
- •Лабораторная работа № 19
- •Структуры
- •6.1.1 Доступ к элементам структуры
- •6.1.2 Присваивание структур
- •Массивы структур
- •Передача структур в функции
- •Передача членов структур в функции
- •Передача всей структуры в функцию
- •Указатели на структуры
- •Объявление указателя на структуру
- •Использование указателей на структуру
- •Массивы и структуры в структурах
- •Функции fread () и fwrite ()
- •Варианты заданий
- •Лабораторная работа № 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;
return 0;
}
//функция вывода на экран массива
void display (float *a, int k)
{
int j;
for (j = 0; j < k; j++)
cout<< a[j]<<'\t';
cout<<endl;
}
//функция поиска минимального элемента массива
float minim (float *a, int k)
{
int i;
float min=a[0];
for(i=0;i<k;i++)
{
if(a[i]<min)
min=a[i];
}
return min;
}
Т.к. массив передается с использованием указателей, это обозначает, что массив передается по адресу, т.е при изменении элементов массива в функции, изменяются значения элементов в вызывающей функции.
Поэтому в предыдущей задаче ввод элементов массива можно оформить также в отдельной функции, например
//функция ввода элементов массива
void input (float *a, int k)
{
int j;
for (j = 0; j < k; j++)
cin>> a[j];
}
Методические указания
Ввод и вывод массива, а также три пункта задания оформить в виде функций, глобальные переменные не использовать. Размерности массивов вводить в основной функции. Первый массив описать статически (размерность задать константой), второй динамически
Все результаты данных функций выводятся в основной функции.