Содержание
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Цель лабораторной работы
Получить практические навыки разработки программ на языке С++ с использованием указателей и адресов, управление динамической памятью.
Задача №1. Указатели и адреса
Варианты заданий
№ | Условие |
1 | Ввести значение $2$-х целых переменных $a$ и $b$. Направить два указателя на эти переменные. С помощью указателя увеличить значение переменной $a$ в $2$ раза. Затем поменять местами значения переменных $a$ и $b$ через их указатели. |
2 | Ввести значение $2$-х целых переменных $a$ и $b$. Направить два указателя на эти переменные. С помощью указателя увеличить значение переменной $a$ в $2$ раза, если $a > b$, иначе $b$ уменьшить в $2$ раза. |
3 | Ввести значение $2$-х вещественных переменных $a$ и $b$. Направить два указателя на эти переменные. С помощью указателя увеличить значение переменной $a$ в $3$ раза. Затем поменять местами значения переменных $a$ и $b$ через их указатели. |
4 | Ввести значение $2$-х вещественных переменных $a$ и $b$. Направить два указателя на эти переменные. Если $a > b$, то с помощью указателя увеличить значение переменной $a$ на $3$ и $b$ уменьшить в $3$ раза, в противном случае $a$ уменьшить в $2$ раза и $b$ увеличить на $3$. |
5 | Ввести значение $2$-х символьных переменных $a$ и $b$. Направить два указателя на эти переменные. С помощью указателя изменить значение переменной $a$. Затем поменять местами значения переменных $a$ и $b$ через их указатели. |
6 | Ввести значение $2$-х целых переменных $a$ и $b$. Направить два указателя на эти переменные. Большее из них с помощью указателя увеличить в $5$ раз и меньшее уменьшить на $5$. |
7 | Ввести значение $3$-х целых переменных $a$, $b$ и $c$. Направить указатели на эти переменные. С помощью указателя увеличить значение переменной $a$ в $2$ раза. Затем поменять местами значение переменных $c$ и $b$ через их указатели. |
8 | Ввести значение $3$-х вещественных переменных $a$, $b$ и $c$. Направить указатели на эти переменные. С помощью указателя увеличить значение переменной $с$ в $3$ раза. Затем поменять местами значения переменных $a$ и $c$ через указатели. |
9 | Ввести значение $2$-х вещественных переменных $a$ и $b$. Направить два указателя на эти переменные. Большее из них с помощью указателя увеличить на $7$ и меньшее уменьшить на $3$. |
10 | Ввести значение $2$-х символьных переменных $a$ и $b$. Направить два указателя на эти переменные. Затем поменять местами значения переменных $a$ и $b$ через их указатели. |
11 | Ввести значение $2$-х целых переменных $a$ и $b$. Направить два указателя на эти переменные. Затем поменять местами значения переменных $a$ и $b$ через их указатели. |
12 | Ввести значение $2$-х вещественных переменных $a$ и $b$. Направить два указателя на эти переменные. Затем поменять местами значения переменных $a$ и $b$ через их указатели. |
13 | Ввести значение $2$-х целых переменных $a$ и $b$. Направить два указателя на эти переменные. С помощью указателя увеличить значение переменной $a$ в $2$ раза, а $b$ уменьшить в $2$ раза. |
14 | Ввести значение $2$-х вещественных переменных $a$ и $b$. Направить два указателя на эти переменные. С помощью указателя увеличить значение переменной $a$ в $3$ раза, а $b$ уменьшить в $3$ раза. |
15 | Ввести значение $2$-х вещественных переменных $a$ и $b$. Направить два указателя на эти переменные. С помощью указателя увеличить значение переменной $a$ в $3$ раза, а $b$ уменьшить в $3$ раза. |
Образец выполнения (вариант №13)
Условие задачи
Ввести значение $2$-х целых переменных $a$ и $b$. Направить два указателя на эти переменные. С помощью указателя увеличить значение переменной $a$ в $2$ раза, а $b$ уменьшить в $2$ раза.
Реализация задачи на языке С++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #include <iostream> // для ввода-вывода (cin-cout) // подключаем возможности стандартного пространства using namespace std; // главная функция программы (точка входа) void main(void) { // руссификация диалогов setlocale(LC_ALL, "Russian"); // объявляем 2 целочисленные переменные int a, b; // вводим значение переменных с клавиатуры cout << "Введите 2 целых числа через пробел: "; cin >> a >> b; // выводим на экран входные значения переменных a и b cout << endl << "Входные значения" << endl; cout << "\t - значение переменной a: " << a << endl; cout << "\t - значение переменной b: " << b << endl; // направляем два указателя на эти переменные int *pa = &a; int *pb = &b; // с помощью направленных указателей *pa *= 2; // увеличиваем значение а в 2 раза *pb /= 2; // уменьшаем значение b в 2 раза // выводим на экран измененные значения переменных a и b cout << endl << "Выходные значения" << endl; cout << "\t - значение переменной a: " << a << endl; cout << "\t - значение переменной b: " << b << endl; cout << endl << "Для завершения работы программы нажмите ENTER..."; fflush(stdin); cin.get(); // задержка программы, чтобы у пользователя была возможность просмотреть результат } |
Результаты работы программы
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Задача №2. Указатели и динамическая память с помощью оператора new()
Варианты заданий
№ | Условие |
1 | Описать $2$ указателя на целый тип. Выделить для них динамическую память. Ввести значения в выделенную память с клавиатуры. Уменьшить в $2$ раза $1$-ую переменную. |
2 | Описать $2$ указателя на вещественный тип. Выделить для них динамическую память. Ввести значения в выделенную память с клавиатуры. Увеличить в $2$ раза $1$-ую переменную. |
3 | Описать $3$ указателя на символьный тип. Выделить для них динамическую память. Ввести значения в выделенную память с клавиатуры. |
4 | Описать $2$ указателя на логический тип. Выделить для них динамическую память. Присвоить значения true и false в выделенную память. |
5 | Описать $2$ указателя на целый тип. Выделить для них динамическую память. Присвоить произвольные значения в выделенные ячейки в операторе присвоения. |
6 | Описать $3$ указателя на вещественный тип. Выделить для них динамическую память. Присвоить произвольные значения в выделенные ячейки в операторе присвоения. Уменьшить в $2$ раза $1$-ую переменную. |
7 | Описать $1$ указатель на символьный тип. Выделить для него динамическую память. Присвоить произвольное значение в выделенную ячейку в операторе присвоения. |
8 | Описать $2$ указателя на целый тип. Выделить для них динамическую память. Ввести значения в выделенную память с клавиатуры. Поменять местами их значения. |
9 | Описать $2$ указателя на вещественный тип. Выделить для них динамическую память. Ввести значения в выделенную память с клавиатуры. Поменять местами их значения. |
10 | Описать $3$ указателя на символьный тип. Выделить для них динамическую память. Ввести значения в выделенную память с клавиатуры. Поменять местами значения первых $2$-х переменных. |
11 | Описать $2$ указателя на логический тип. Выделить для них динамическую память. Присвоить значения true и false в выделенную память. Поменять местами их значения. |
12 | Описать $2$ указателя на целый тип. Выделить для них динамическую память. Присвоить произвольные значения в выделенные ячейки памяти в операторе присвоения. Поменять местами их значения. |
13 | Описать $3$ указателя на вещественный тип. Выделить для них динамическую память. Присвоить произвольные значения в выделенные ячейки в операторе присвоения. Поменять местами значения первых 2-х переменных. |
14 | Описать $1$ указатель на символьный тип. Выделить для него динамическую память. Присвоить произвольное значение в выделенную ячейку в операторе присвоения. |
15 | Описать $1$ указатель на целый тип. Выделить для него динамическую память. Ввести значения в выделенную память с клавиатуры. Затем увеличить ее на $2$. |
Образец выполнения (вариант №5)
Условие задачи
Описать $2$ указателя на целый тип. Выделить для них динамическую память. Присвоить произвольные значения в выделенные ячейки в операторе присвоения.
Реализация задачи на языке С++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <iostream> // для ввода-вывода (cin-cout) // подключаем возможности стандартного пространства using namespace std; // главная функция программы (точка входа) void main(void) { // руссификация диалогов setlocale(LC_ALL, "Russian"); // объявляем 2 указателя на целый тип int *a, *b; // выделяем для них динамическую память a = new int; b = new int; // присваиваем произвольные значения в выделенные ячейки в операторе присвоения *a = 70; *b = -25; // выводим на экран значения ячеек памяти, на которые указывают a и b cout << endl << "Значения выделенных ячеек" << endl; cout << "\t - указатель *a ссылается на значение: " << *a << endl; cout << "\t - указатель *b ссылается на значение: " << *b << endl; // удаляем память из-под динамических переменных delete a; delete b; cout << endl << "Для завершения работы программы нажмите ENTER..."; fflush(stdin); cin.get(); // задержка программы, чтобы у пользователя была возможность просмотреть результат } |
Результаты работы программы
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Задача №3. Динамические массивы
Варианты заданий
№ | Условие |
1 | Создать динамические массивы, используя указатели. Задан одномерный массив $a(n)$. Найти количество, все номера и произведение элементов массива меньших $1$. |
2 | Создать динамические массивы, используя указатели. Дано 2 массива $x(n)$ и $y(m)$. Сколько раз встречается второй элемент первого массива $x(n)$ во втором массиве $y(m)$. |
3 | Создать динамические массивы, используя указатели. В каком из двух данных массивах $p(n)$, $q(n)$ больше отрицательных элементов? |
4 | Создать динамические массивы, используя указатели. Дан массив $p(n)$. Каждый положительный элемент в нем возвести в квадрат. Остальные элементы оставить прежними. |
5 | Создать динамические массивы, используя указатели. Задан одномерный массив $a(n)$. Найти номер последнего элемента меньше заданного числа betta, количество положительных элементов и сумму элементов больших $3$. |
6 | Создать динамические массивы, используя указатели. В каком из двух данных массивов $p(n)$, $q(n)$ больше положительных элементов? |
7 | Создать динамические массивы, используя указатели. Дано $2$ массива $x(n)$ и $y(m)$. Сколько раз встречается первый элемент первого массива $x(n)$ во втором массиве $y(m)$. |
8 | Создать динамические массивы, используя указатели. Дан массив $r(n)$. Каждый элемент равный $0$ в нем заменить на $1$. Остальные оставить прежними. |
9 | Создать динамические массивы, используя указатели. Задан одномерный массив $a(n)$. Найти номер последнего элемента равного $5$ и переставить его с первым элементом массива. Найти среднее арифметическое элементов массива больших заданного числа alfa. |
10 | Создать динамические массивы, используя указатели. Задан одномерный массив $a(n)$. Найти номер последнего положительного элемента и переставить его с первым элементом массива. Найти количество и сумму элементов отрицательных массива. |
11 | Создать динамические массивы, используя указатели. Дано $2$ массива $x(n)$ и $y(m)$. Сколько раз встречается последний элемент первого массива $x(n)$ во втором массиве $y(m)$. |
12 | Создать динамические массивы, используя указатели. В каком из двух данных массивов $p(n)$ и $q(n)$ больше нулевых элементов? |
13 | Создать динамические массивы, используя указатели. Задан одномерный массив $a(n)$. Найти все номера и среднее арифметическое отрицательных элементов массива. |
14 | Создать динамические массивы, используя указатели. Дано $2$ массива $x(n)$ и $y(m)$. Сколько раз встречается второй элемент второго массива $y(m)$ в первом массиве $x(n)$. |
15 | Создать динамические массивы, используя указатели. Дано $2$ массива $x(n)$ и $y(m)$. Сколько раз встречается первый элемент второго массива $y(m)$ в первом массиве $x(n)$. |
16 | Создать динамические массивы, используя указатели. В каком из двух данных массивов $p(n)$ и $q(n)$ больше элементов, равных $1$? |
Образец выполнения (вариант №8)
Условие задачи
Создать динамические массивы, используя указатели. Дан массив $r(n)$. Каждый элемент равный $0$ в нем заменить на $1$. Остальные оставить прежними.
Реализация задачи на языке С++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #include <iostream> // для ввода-вывода (cin-cout) // подключаем возможности стандартного пространства using namespace std; // главная функция программы (точка входа) void main(void) { const int MAX_SIZE = 20; // максимально допустимое количество элементов в массиве r int n; // активное количество элементов массива r int *r; // одномерный динамический целочисленный массив r(n) // русификация диалогов программы setlocale(LC_ALL, "Russian"); // запрашиваем от пользователя активное количество элементов массива r с проверкой на границы do { cout << "Введите количество элементов массива из отрезка [1 .. " << MAX_SIZE << "]: "; cin >> n; } while((n < 1) || (n > MAX_SIZE)); // выделяем память под динамический массив r, состоящий из n элементов целого типа r = new int[n]; // запрашиваем от пользователя ввод значений элементов массива с клавиатуры cout << endl << "Вам предстоит ввести с клавиатуры " << n << " элем. целого типа" << endl; for(int i = 0; i < n; i++) { cout << "\t - введите элемент r[" << (i + 1) << "]: "; cin >> r[i]; } // выводим значения элементов массива r на экран в строку cout << endl << "Элементы исходного массива:\n"; for(int i = 0; i < n; i++) cout << "\t" << r[i]; // начинается обработка: все элементы равные 0 заменяем на 1 for(int i = 0; i < n; i++) if(r[i] == 0) // если текущий элемент равен 0, то r[i] = 1; // заменяем его на 1 // выводим обработанный массив на экран cout << endl << "\nЭлементы обработанного массива:\n"; for(int i = 0; i < n; i++) cout << "\t" << r[i]; // удаляем динамическую память из-под элементов массива r delete []r; cout << endl << "\nДля завершения работы программы нажмите ENTER..."; fflush(stdin); cin.get(); // задержка программы, чтобы у пользователя была возможность просмотреть результат } |
Результаты работы программы
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Задача №4
Варианты заданий
№ | Условие |
1 | Создать динамические массивы, используя указатели. Дан массив $b(n)$. Переписать в массив $C(n)$ положительные элементы массива $b(n)$, умноженные на $5$ (со сжатием, без пустых элементов внутри). Затем упорядочить методом «выбора и перестановки» по возрастанию новый массив. |
2 | Создать динамические массивы, используя указатели. Дан массив $a(n)$. Переписать в массив $b(n)$ только положительные элементы массива $a$, умноженные на $3$ (со сжатием, без пустых элементов внутри). Затем упорядочить методом «выбора и перестановки» по возрастанию новый массив. |
3 | Создать динамические массивы, используя указатели. Дан массив $x(n)$. Переписать в массив $y(n)$ отрицательные элементы массива $x$, умноженные на $2$ (со сжатием, без пустых элементов внутри). Затем упорядочить методом «выбора и перестановки» по возрастанию новый массив. |
4 | Создать динамические массивы, используя указатели. Дан массив $b(n)$. Переписать в массив $C(n)$ отрицательные элементы массива $b(n)$, умноженные на $4$ (со сжатием, без пустых элементов внутри). Затем упорядочить методом «выбора и перестановки» по возрастанию новый массив. |
5 | Создать динамические массивы, используя указатели. Дан массив $b(n)$. Переписать в массив $C(n)$ положительные элементы массива $b(n)$, деленные на $5$ (со сжатием, без пустых элементов внутри). Затем упорядочить методом «выбора и перестановки» по возрастанию новый массив. |
6 | Создать динамические массивы, используя указатели. Дан массив $a(n)$. Переписать в массив $b(n)$ только положительные элементы массива $a$, деленные на $3$ (со сжатием, без пустых элементов внутри). Затем упорядочить методом «выбора и перестановки» по возрастанию новый массив. |
7 | Создать динамические массивы, используя указатели. Дан массив $x(n)$. Переписать в массив $y(n)$ отрицательные элементы массива $x$, деленные на $2$ (со сжатием, без пустых элементов внутри). Затем упорядочить методом «выбора и перестановки» по возрастанию новый массив. |
8 | Создать динамические массивы, используя указатели. Дан массив $b(n)$. Переписать в массив $C(n)$ отрицательные элементы массива $b(n)$ (со сжатием, без пустых элементов внутри). Затем упорядочить методом «выбора и перестановки» по возрастанию новый массив. |
9 | Создать динамические массивы, используя указатели. Дан массив $c(n)$. Переписать в массив $x(n)$ все ненулевые элементы массива, умноженные на $4$ (со сжатием, без пустых элементов внутри). Затем упорядочить методом «выбора и перестановки» по возрастанию новый массив. |
10 | Создать динамические массивы, используя указатели. Дан массив $c(n)$. Переписать в массив $x(n)$ все ненулевые элементы массива, возведенные в квадрат (со сжатием, без пустых элементов внутри). Затем упорядочить методом «выбора и перестановки» по возрастанию новый массив. |
11 | Создать динамические массивы, используя указатели. Дан массив $c(n)$. Переписать в массив $x(n)$ все ненулевые элементы массива (со сжатием, без пустых элементов внутри). Затем упорядочить методом «выбора и перестановки» по возрастанию новый массив. |
12 | Создать динамические массивы, используя указатели. Дан массив $c(n)$. Переписать в массив $x$ ненулевые элементы массива $c$, разделенные на $5$ (со сжатием, без пустых элементов внутри). Затем упорядочить методом «выбора и перестановки» по возрастанию новый массив. |
13 | Дан массив $b(n)$. Переписать в массив $C(n)$ корни квадратные из положительных элементов массива $b(n)$, деленные на $5$ (со сжатием, без пустых элементов внутри). Затем упорядочить методом «выбора и перестановки» по возрастанию новый массив. |
14 | Создать динамические массивы, используя указатели. Дан массив $b(n)$. Переписать в массив $C(n)$ корни квадратные из положительных элементов массива $b(n)$ (со сжатием, без пустых элементов внутри). Затем упорядочить методом «выбора и перестановки» по возрастанию новый массив. |
15 | Создать динамические массивы, используя указатели. Дан массив $x(n)$. Переписать в массив $y(n)$ элементы массива $x$, большие $3$ (со сжатием, без пустых элементов внутри). Затем упорядочить методом «выбора и перестановки» по возрастанию новый массив. |
Образец выполнения (вариант №15)
Условие задачи
Создать динамические массивы, используя указатели. Дан массив $x(n)$. Переписать в массив $y(n)$ элементы массива $x$, большие $3$ (со сжатием, без пустых элементов внутри). Затем упорядочить методом «выбора и перестановки» по возрастанию новый массив.
Реализация задачи на языке С++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | #include <iostream> // для ввода-вывода (cin-cout) // подключаем возможности стандартного пространства using namespace std; // главная функция программы (точка входа) void main(void) { const int MAX_SIZE = 20; // максимально допустимое количество элементов в массивах int n; // активное количество элементов массива x(n) int m; // активное количество элементов массива y(m) int *x; // одномерный динамический целочисленный массив x(n) int *y; // одномерный динамический целочисленный массив y(m) // русификация диалогов программы setlocale(LC_ALL, "Russian"); // запрашиваем от пользователя активное количество элементов массива x с проверкой на границы do { cout << "Введите количество элементов массива X(n) из отрезка [1 .. " << MAX_SIZE << "]: "; cin >> n; } while((n < 1) || (n > MAX_SIZE)); // выделяем память под динамический массив x, состоящий из n элементов целого типа x = new int[n]; // запрашиваем от пользователя ввод значений элементов массива x(n) с клавиатуры cout << endl << "Вам предстоит ввести с клавиатуры " << n << " элем. целого типа" << endl; for(int i = 0; i < n; i++) { cout << "\t - введите элемент X[" << (i + 1) << "]: "; cin >> x[i]; } // выводим значения элементов массива x на экран в строку cout << endl << "Элементы исходного массива X(n):\n"; for(int i = 0; i < n; i++) cout << "\t" << x[i]; // считаем количество элементов в массиве х, значение которых больше 3 m = 0; for(int i = 0; i < n; i++) if(x[i] > 3) // если текущий элемент массива больше 3, то m++; // увеличиваем счетчик чисел, больших 3, на +1 // выделяем память под динамический массив y(m) y = new int[m]; // начинается обработка: переписываем элементы из массива х, большие 3, в массив y int k = -1; // индекс элементов в массиве y для вставки элемента из массива х for(int i = 0; i < n; i++) if(x[i] > 3) // если текущий элемент массива х больше 3, то y[++k] = x[i]; // переносим его в массив y if(!m) cout << endl << endl << "В массиве y нет ни одного элемента! Сортировка физически невозможна." << endl; else { // выводим полученный массив y(m) на экран cout << endl << "\nЭлементы массива Y (до сортировки):\n"; for(int i = 0; i < m; i++) cout << "\t" << y[i]; // начинается сортировка массива y(m) методом выбора по возрастанию for(int i = 0; i < (m - 1); i++) { int index_min = i; for(int j = (i + 1); j < m; j++) if(y[j] < y[index_min]) index_min = j; if(i != index_min) { int swap = y[i]; y[i] = y[index_min]; y[index_min] = swap; } } // выводим отсортированный массив y(m) на экран cout << endl << "\nЭлементы массива Y (после сортировки):\n"; for(int i = 0; i < m; i++) cout << "\t" << y[i]; } // удаляем динамическую память из-под элементов массивов x, y delete []x; delete []y; cout << endl << "\nДля завершения работы программы нажмите ENTER..."; fflush(stdin); cin.get(); // задержка программы, чтобы у пользователя была возможность просмотреть результат } |
Результаты работы программы
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Добавить комментарий