Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Задание на лабораторную работу.




1. Написать подпрограмму в соответствии со своим вариантом индивидуального задания. Реализовать вызов функции из главной программы и вывод результатов вычисления на экран. Отладить и протестировать программу. В процессе отладки пользоваться средствами пошаговой трассировки кода и окнами просмотра текущих значений переменных (Watch и Locals).

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

3. Продемонстрировать в работе использование оператора return, использование прототипа фукции и перегрузку функций.

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

Варианты индивидуальных заданий

1. Определите функцию double f(double x, double y), которая вычисляет и возвращает длину гипотенузы прямоугольного треугольника, две другие стороны x и y которого известны.

2. Напишите функцию double f(double x1, double y1, double x2, double y2), которая вычисляет расстояние между двумя точками (xl, yl) и (x2, y2).

3. Напишите функцию f(double& a, double& b, double c, double q), которая возвращает катеты прямоугольного треугольника, гипотенуза которого равна с, а острый угол q (градусов).

4. Напишите функцию f(double* a, double* b, double c, double q), которая возвращает катеты прямоугольного треугольника, гипотенуза которого равна с, а острый угол q (градусов).

5. Напишите функцию swap(int* a, int* b, int* c), которая изменяет значения параметров по правилу a®b®c®a.

6. Напишите функцию swap(int& a, int& b, int& c), которая изменяет значения параметров по правилу a®b®c®a.

7. Напишите функцию int f(int& a, int& b, int x, int y), которая присваивает объекту a значение, равное x*y, а объекту b значение x/y. Если значение y было равно нулю, функция должна возвратить 0, иначе 1.

8. Напишите функцию int f(int x, int y), которая возвращает 0, если значения x и y оба равны нулю, 12/x, если y равен 0, 12/y, если x равен 0, иначе 144/(x*y).

9. Напишите функцию int f(int x, int y), которая возвращает x-y, если x больше y, иначе возвращает y-x.

10. Напишите функцию double f(double x, double y), которая возвращает x/y, если x больше y, иначе возвращает y/x. Предполагается, что значения параметров больше нуля.

11. Напишите функцию double f(double x, double y, double z), которая возвращает m*n/k, где k есть меньшее из чисел x, y, z, а m и n есть среднее и большее из этих чисел. Предполагается, что значения параметров больше нуля.

12. Напишите функцию double f(double x, double y, double z), которая возвращает наибольшее из значений модулей попарных разностей: |x-y|, |y-z|, |z-x|.

13. Напишите функцию bool f(int x, int y, int z), которая возвращает true, если x2 + y2 = z2, иначе возвращает false.

14. Напишите функцию bool f(int x, int y), которая возвращает true, если x делится нацело на y, или наоборот, y делится нацело на x, иначе возвращает false. Предполагается, что значения параметров больше нуля.

15. Положительные числа x, y, z могут быть сторонами треугольника, если большее из них меньше суммы двух других. Напишите функцию bool f(int x, int y, int z), которая возвращает true, если числа x, y, z могут быть сторонами треугольника, иначе возвращает false.

16. Напишите функцию int f(int h, int m, int s), которая принимает три целых аргумента (часы h, минуты m и секунды s) и возвращает количество секунд, прошедших с начала дня.

17. Напишите функцию int f(int m, int d), которая принимает два целых аргумента (месяц m и день d) и возвращает количество дней, прошедших с начала года. Считаем, что год не високосный.

18. Напишите функцию int fact(int m), которая вычисляет и возвращает факториал положительного числа m, т.е. произведение всех натуральных чисел, меньших или равных m.

19. Напишите функцию f(int& m4, int& m3, int& m2, int& m1, int& m0, int N), которая возвращает все цифры пятизначного натурального числа N.

20. Напишите функцию f(int& h, int& m, int& s, int sec), которая принимает количество секунд, прошедших с начала дня, и возвращает три целых переменных (часы, минуты и секунды).

21. Напишите функцию int f(int x), которая получает целое значение (не больше пяти знаков) и возвращает число с обратным порядком цифр. Например, принимается число 7631, возвращается число 1367.

22. Наибольший общий делитель (НОД) двух целых чисел – это наибольшее целое, на которое без остатка делится на каждое из двух чисел. Напишите функцию int NOD (int m, int n), которая возвращает НОД двух целых чисел m и n.

23. Наименьшее общее кратное (НОК) двух целых чисел – это наименьшее целое, которое без остатка делится на каждое из двух чисел. Напишите функцию int NOK(int m, int n), которая возвращает НОК двух целых чисел m и n.

24. Говорят, что целое число является совершенным числом, если его сомножители, включая 1 (но не само число) в сумме дают это число. Например, 6 – совершенное число, так как 6=1+2+3. Напишите функцию bool f(int n), которая определяет, является ли ее параметр n совершенным числом. Используйте эту функцию в программе, которая определяет и печатает все совершенные числа в диапазоне от 1 до 1000.

25. Простое число делится нацело только на 1 и на само себя. Напишите функцию bool f(int n), которая возвращает true, если n – простое число и false в противном случае. Составьте таблицу и подсчитайте количество простых чисел от 2 до 1000.

26. Напишите функцию int f(int M, int N), которая вычисляет и возвращает сумму всех нечетных целых чисел в пределах от M до N включительно. Используйте оператор for.

27. Напишите функцию int f(int N, int n), которая вычисляет и возвращает наименьшее из чисел, больших или равных N, которое делится нацело на n. Используйте оператор while.

 

Массивы

Программисты, рассматривают фотографию девушки:
- Она у тебя первая?
- Не, нулевая.

Элементы массива в языке С всегда нумируются не с единицы, а с нуля. Тип данных масси в – это набор данных одного и того же типа, собранных под одним именем. Элемент массива определяется именем массива и порядковым номером (индексом). Основная форма объявления массива следующая:

тип имя_массива[размер1]; // одномерный массив == вектор тип имя_массива[размер1][размер2]; // двумерный массив == матрица тип имя_массива[размер1][размер2]...[размер N]; // N-мерный массив

Здесь «тип» - это базовый тип элементов массива, «размер» - количество элементов одномерного массива. Двумерный массив – это массив одномерных массивов и т.д. Пример:

сhar id[8]; // 8 байт для 8-элементного массива символов float price[3]; // вектор из 3х вещественных чисел int m[4][3] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}}; // матрица целых чисел

Доступ к элементам массива выполняется при помощи операции квадратные скобки [ ]. В языке С нумерация элементов всегда начинается с нуля. То есть первый элемет массива – это всегда элемент с нулевым номером. Например, массив int a[100] содержит следующие элементы: a[0], a[1], a[2],..., a[99]. Легко подсчитать, сколько байт памти потребуется под одномерный массив, зная, что размер базового типа может быть получен при помощи функции sizeof(тип):

Количество байт = <размер базового типа> * <количество элементов в массиве> Количество байт = sizeof(тип) * <размер>

В языке С под массив всегда выделяется непрерывное место в оперативной памяти. Выход массива за cвои (опеределенные описанием) пределы компилятором не проверяется. Это следует помнить. То есть, например, если массив имеет 100 элементов и описан как a[100], то обращение к элементу a[200] компилятор языка С не считает ошибкой. Выход за пределы памяти, отведенной под массив – контроль диапазона – полностью отдается программисту.

Элементы массива хранятся в памяти последовательно. Если первый элемент массива int m[4][3] (sizeof(int)=4 байта) хранится по адресу 0018FF50, то второй будет храниться по адресу 0018FF54, третий – по адресу 0018FF58 и т.д. (Рис. 16) Двумерный массив располагается в памяти построчно. Элементы массива m[4][3] хранятся в следующем порядке: m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], …, m[3][2].

Рис. 16. Размещение в памяти элементов массива

5.1. Указатели и массивы в C++

В языке Си понятие массива очень тесно связано с понятием указателя (Рис. 17). Доступ к членам массива можно получать как через имя массива и индекс, так и через указатель на элемент массива и индекс. Имя массива само является указателем на первый элемент массива.

Рис. 17. Имя массива – это адрес, начиная с которого хранится массив

Выражение типа arr[i] интерпретируется компилятором так, что означает адрес[смещение]. Это метод доступа к значению, размещенному в элементе с номером смещения от указанного адреса. В примере ниже *(3+arr) и *(arr+3) будут интерпретированы как arr[3].

int arr[5]; //следующие записи эквивалентны, // все они присваивают 4-му элементу массива arr значение 2: arr[3] = 2; *(arr+3) = 2; *(3+arr) = 2;

Имя массива – это адрес, начиная с которого хранится массив, и этот адрес нельзя изменить, он не является именуемым выражением. Поэтому невозможно присвоить один массив другому одним оператором присваивания. Массивы должны копироваться поэлементно:

int prev[20], current[20]; // prev = current; // Неправильно – копируется только адрес, а не элементы int i = 0; // Правильно: while (i<20) { prev[i] = current [i]; i+= 1; }
Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...