Лабораторные работы МИРЭА 2014 (1017113), страница 4
Текст из файла (страница 4)
Передача параметров по значению
В момент обращения к функции в памяти создаются временные переменные с именами, указанными в списке параметров. В временные переменные копируются значения фактических параметров.
Передача параметров по ссылке
При передаче параметров по ссылке передается не значение соответствующей переменной, а ее адрес. Для указания на данный способ передачи после имени параметра ставится символ «& ».
Передача параметров по указателю
В отличие от передачи по ссылке адрес переменной передается в функцию не с использованием операции разадресации (&), а операцией косвенной адресации (*). Иначе говоря, передается указатель.
Перегрузка функций и указатель на функцию
В С++ допустимо использование нескольких функций с одинаковым именем, но различным числом или типами параметров. Такое свойство называется перегрузкой функций. Перегруженные функции различаются компилятором по типам и числу параметров.
Так как имя функции является указателем на начало функции в оперативной памяти, то можно объявлять указатели на функции для последующего их
использования в программе.
При объявлении указатель должен возвращать тот же тип и иметь такие же аргументы, как и функция, на которую он будет указывать. Например, указатель на функцию
double y(double x, int n);
будет иметь вид:
double (*fun)(double, int);
Пример выполнения работы
Задача. Создать функцию sign для определения знака числа
#include<iostream>
#include<windows>
using namespace std;
int sign(double x){
if(x>0) return 1;
if(x<0) return -1;
if(x==0) return 0;
}
main(){
double x;
char rule='y';
system("chcp 1251");
do{
cout<<endl<<"x=";
cin>>x;
if(sign(x)==1) cout<<"x>0";
if(sign(x)==-1) cout<<"x<0";
if(sign(x)==0) cout<<"x=0";
cout<<endl<< "Еще раз?";
cin>>rule;
}while(rule=='Y'||rule=='y');
}
Задания для самостоятельной работы
Вариант 1
-
Дано натуральное число п. Выведите на экран число, которое получится после записи цифр числа п в обратном порядке. Для получения нового числа составьте функцию.
-
Напишите программу, в которой использовалась бы функция Volume, вычисляющая объем цилиндра. Параметрами функции должны быть радиус и высота цилиндра.
Вариант 2
Вычисление факториала оформить в виде функции.
2. Напишите программу, в которой использовалась бы функция Procent, возвращающая процент от заданного числа. В качестве аргументов функции передаются число и значение процента, который нужно вычислить.
Вариант 3
-
Напишите программу перевода двоичных цифр в эквивалентное целое десятичное число. Сам перевод числа оформите в виде функции.
-
Напишите программу, в которой использовалась бы функция Dohod, вычисляющая доход по вкладу. Исходными данными для функции являются: величина вклада, процентная ставка (годовых) и срок вклада (количество дней).
Вариант 4
-
Напишите программу перевода шестнадцатеричных цифр в эквивалентное целое десятичное число. Перевод числа оформите в виде функции.
-
Напишите программу, в которой будет использоваться функция Sogl. Эта функция должна возвращать 1, если символ, полученный функцией в качестве аргумента, является согласной буквой английского алфавита, и 0 в противном случае.
Вариант 5
-
Напишите программу для подсчета количества цифр в числе (не обязательно целом). Подсчет цифр оформите в виде функции.
-
Напишите программу, в которой использовалась бы функция преобразования Preobr букв английского алфавита: из прописной буквы — в строчную и наоборот.
Вариант 6
-
Напишите программу для нахождения наибольшего числа из двух чисел. Программу оформите в виде функции
-
Напишите программу, в которой использовалась бы функция Output, выводящая на экран строку, состоящую из одинаковых символов. Длина строки и символ являются параметрами функции.
Вариант 7
1. Напишите программу для решения выражения:
Вычисление факториала оформите в виде функции.
-
Напишите программу, в которой производилось бы вычисление объема и площади поверхности параллелепипеда с помощью соответствующих функций Volume и Square.
Вариант 8
1. Напишите программу, которая по заданному натуральному числу определяет количество цифр в нем и их сумму. Определение количества цифр в числе и их сумму оформите в виде функции.
2. Напишите программу, в которой использовалась бы функция Days, выводящая на экран количество дней между двумя датами. В качестве параметров функции должны передаваться две даты.
Вариант 9
1. Напишите программу, определяющую наибольший общий делитель (НОД) двух заданных натуральных чисел. Нахождение НОД оформите в виде функции, используя алгоритм Евклида, известный из школьной программы.
2. Напишите программу, в которой использовалась бы функция Chislo, обеспечивающая ввод с клавиатуры символа без его отображения на экране. При нажатии клавиши Enter соответствующий символ должен появляться на экране только в том случае, если этот символ — цифра от 1 до 9.
Вариант 10
1. Напишите программу, которая по заданному натуральному числу определяет его первую и последнюю цифры. Определение и вывод цифр оформите в виде функции.
2. Напишите программу с использованием функции Perim. В эту функцию из программы передаются координаты вершин треугольника А(х1, у1), В(х2, у2), С(х3, у3), а она возвращает периметр треугольника. Если такой треугольник не существует, то выдается соответствующее сообщение.
Вариант 11
1. Даны натуральные числа n и m. Напишите программу, вычисляющую результат операции сложения двух чисел, образованных k младшими цифрами числа n, и k старшими цифрами числа m.
2. Напишите программу с использованием функции Vistrel, которая, получая из программы координаты точки (х, у), определяла бы, попадает ли точка в заданную на следующем рисунке область.
Результат должен выводиться в виде текстового сообщения.
Вариант 12
-
Напишите программу для вычисления значения
для n от 12 до 24 с шагом 4. Вычисление факториала оформите в виде функции.
-
Напишите программу, которая выводила бы на экран в виде таблицы значения функции F на интервале от Хнач до Хкон с шагом dX и где использовалась бы функция Vichisl, которая вычисляла бы выражение:
Значения х, а, b, с передаются из программы в функцию.
Вариант 13
1. Даны натуральные числа n, m и k. Напишите программу, вычисляющую результат сложения двух чисел, образованных к младшими цифрами числа n, и k младшими цифрами числа m.
2. Напишите программу, в которой использовалась бы функция Glasn. Эта функция должна возвращать 1, если символ, полученный функцией в качестве аргумента, является гласной буквой английского алфавита, и 0 в противном случае.
Вариант 14
1. Напишите программу, вычисляющую количество простых чисел в заданном интервале. Программу оформите в виде функции.
2. Напишите программу, в которой использовалась бы функция Number. Эта функция должна определить сколько раз целое число m делится на целое n без остатка.
Лабораторная работа №4
МАССИВЫ И УКАЗАТЕЛИ
Цель работы: приобретение навыков работы с массивами
Длительность выполнения работы: 2 часа.
Объявление указателя
Для всех переменных выделяются участки памяти размером, соответствующим типу переменной. Программист имеет возможность работать непосредственно с адресами, для чего определен соответствующий тип данных – указатель. Указатель имеет следующий формат:
тип *имя указателя
Например:
int *a; double *b, *d; char *c;
Знак «звездочка» относится к имени указателя. Значение указателя соответствует первому байту участка памяти, на который он ссылается. На один и тот же участок памяти может ссылаться любое число указателей.
В языке С++ существует три вида указателей:
1. Указатель на объект известного типа. Содержит адрес объекта определенного типа.
2. Указатель типа void. Применяется, если тип объекта заранее не определен.
3. Указатель на функцию.
Операции с указателями
С указателями можно провести две унитарные операции:
-
& (взять адрес). Указатель получает адрес переменной. Данная операция применима к переменным, под которые выделен соответствующий участок памяти. Например,
int x=1, *pint;
pint=&x; //теперь в pint записан адрес переменной x
-
* (операция разъименовывания). Предназначена для доступа к величине, расположенной по данному адресу.
Например,
int x=1, *pint;
pint=&x; //теперь в pint записан адрес переменной x
/*содержимому по данному адресу присвоим новое значение равное 2 */
*pint=2;
cout<< "x= " <<x;
Над указателями можно выполнять арифметические операции сложения, инкремента, вычитания, декремента и операции сравнения. При выполнении арифметических операций с указателями автоматически учитывается размер данных (т.е. объем памяти), на которые он указывает.
Указатели, как правило, используются при работе с динамической памятью (heap, или «куча»).
В языке C++ для выделения и освобождения памяти определены операции new и delete соответственно. Используют две формы операций:
1. Тип *указатель = new тип (значение) – выделение участка памяти в соответствии с указанным типом и занесение туда указанного значения. delete указатель – освобождение выделенной памяти.
2. Тип *указатель = new тип[n] – выделение участка памяти размером n блоков указанного типа. delete [ ] указатель – освобождение выделенной памяти.
Создание динамического массива
Имя любого массива рассматривается компилятором как указатель на нулевой элемент массива.
#include <iostream>
# include<windows.h>
using namespace std;
int main(){
int n;
SetConsoleOutputCP(1251);
cout<< "Размер массива= ";
cin>>n;