variant_13
.docxТакже объявлены переменные abiturientAmount - счетчик количества абитуриентов и YesOrNot - выбор пользователя (продолжить или прервать ввод).
Далее расположен цикл do while. Он выполняется до тех пор, пока пользователю необходимо вводить данные. Затем вызываем функцию, которая выделяет память под структуру
Priem = AddStruct(Priem, AbiturientAmount);
Опустимся к ее определению. Тут видно, что данная функция будет возвращать указатель на структуру Abiturient. Она принимает два параметра – указатель на структуру и количество структур. Когда она вызывается в первый раз – в нее будет передан объявленный в main указатель Priem и переменная AbiturientAmount, которая равна нулю. В функции выполнится блок if – выделится память для одной структуры. Потом функция вернет адрес (указатель) на этот участок памяти, и он будет записан в Priem.
Затем вызываем функцию, которая позволит внести данные в структуру.
setData(Priem, AbiturientAmount);
После внесения данных, переменная AbiturientAmount увеличивается на единицу. Пользователю предлагаем сделать выбор – продолжить ввод или завершить работу.
Если продолжаем – снова вызывается функция AddStruct().
Надо помнить, что указатель Priem уже ссылается на участок памяти с записанными данными. Поэтому не получится просто перевыделить память. Сначала необходимо позаботиться о сохранении данных. В блоке else создаем временный указатель. Под него выделяем память для amount + 1 структур (т.е. на одну структуру больше, чем приняла функция). Далее копируем данные из принятого объекта. Последний объект массива структур tempObj останется незаполненным. Когда данные скопированы, освобождаем память Obj и записываем в этот указатель новый адрес. Теперь он будет указывать на память, в которой есть сохраненные данные и дополнительный выделенный участок памяти для заполнения новыми данными.
И снова вызывается функция setData(), которая позволит внести данные в новый выделенный участок памяти – в последний элемент массива структур.
Когда пользователь решит больше не вводить данные – он нажимает ноль. После этого сработает функция showData() и на экране отобразится таблица с данными со всех структур динамического массива. В самом конце программы не забываем освободить память, которую занимает динамический массив структур.
Задание 12*. Составить схему алгоритма и программу на языке C++, позволяющую решить предложенную в Вашем варианте задачу с использованием рекурсии.
Напишите программу, которая выводит введенное натуральное число в обратной последовательности
Листинг П.10.
#include<iostream>
#include<windows.h>
#include<conio.h>
using namespace std;
void rev_print(int n)
{ if (n > 0)
{ cout << n - (n / 10) * 10;
n /= 10;
rev_print(n);
}
else
{ cout << '\n';
return;
}
}
int main()
{ int a;
setlocale(LC_ALL, "rus");
cout << "Введите натуральное число: " ;
cin >> a;
cout << "Число в обратной последовательности: ";
rev_print(a);
_getch();
return 0;
}
Результат работы программы:
1 Будем считать, что заданная точность достигнута, если абсолютное значение члена ряда an станет меньше, т.е. .