лабораторная работа по программированию. Лабораторная работа по программированию. Лабораторная работа по дисциплине Программирование и алгоритмизация Студента группы итз 30320с Коньков Е. И. Номер зачетной книжки 132010102
Скачать 5.05 Mb.
|
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ федеральное государственное бюджетное образовательное учреждение высшего образования «Курганский государственный университет» Институт математики и информационных технологий Кафедра «Автоматизации производственных процессов» ЛАБОРАТОРНАЯ РАБОТА по дисциплине: «Программирование и алгоритмизация» Студента группы ИТЗ- 30320с Коньков Е.И. Номер зачетной книжки: 132010102 Преподаватель: Камкин И.П. г .Курган 2022 г. Задание №1 Составить алгоритм и написать программу вычисления силы тока в цепи состоящей из 4-х резисторов, соединенных параллельно. Сопротивления резисторов и напряжение источника питания известны и задаются пользователем. Сопротивление каждого резистора вводится отдельно. Блок-схема: Код программы #include int main() { setlocale(LC_ALL, "Russian"); float U, I = 0, R=0; std::cout << "Введите напряжение: "; std::cin >> U; for (int i = 1; i <= 4; i++) { std::cout << "Введите сопротивление R" << i << ": "; std::cin >> R; I += U / R; } std::cout << "Расчетная сила тока: " << I << std::endl; } Задание №2 Составить алгоритм и написать текст программы для вычисления температуры по задаваемому пользователем сопротивлению термометра сопротивления. Для Rt/R0 < 1 (t < 0 °С) приближенная функция для, позволяющая проводить расчет температуры по сопротивлению, следующая: Для Rt/R0 ≥ 1 (t ≥ 0°C) функция следующая: где t - температура, °С; Rt - сопротивление при температуре t, Ом; R0 - номинальное сопротивление при температуре 0 °С, Ом. R0 = 100 Ом Значения постоянных для ТС следующие: А = 3,9083•10-3, В = -5,775·10-7 , D1 = 255,819, D2 = 9,14550, D3 = -2,92363, D4 = 1,79090. Блок-схема Код программы #include int main() { setlocale(LC_ALL, "Russian"); double A = 3.9083 * pow(10, -3); double B = -5.775 * pow(10, -7); double R0 = 100, Rt=0,t=0,clc=0; std::cout << "Введите сопротивление термометра R: "; std::cin >> Rt; clc = Rt / R0; double D1 = 255.819,D2=9.14550,D3=-2.92363,D4=1.79090; if (clc < 1) t = D1 * pow(clc - 1, 1) + D2 * pow(clc - 1, 2) + D3 * pow(clc - 1, 3) + D4 * pow(clc - 1, 4); else t = (sqrt(pow(A, 2) - 4 * B * (1 - clc)) - A / 2 * B); printf("Искомая температура: %10.2f \n",t); } Задание №3 Составить алгоритм и написать текст программы вычисления необходимой мощности блока питания P, Вт для 4-х потребителей, соединенных параллельно. Для каждого потребителя потребляемый ток Iпот, А задается пользователем. Коэффициент запаса k выбирается следующим образом: если суммарный ток потребителей меньше, либо равен 1 А k = 1.05; если суммарный ток потребителей больше 1 А, но меньше 5 А k = 1.1; если суммарный ток больше, либо равен 5 А, но меньше 10 А k = 1.15; если суммарный ток больше, либо равен 10 А k=1.2. P = U * Iсумм * k, где U – напряжение питания, В, Iсумм – суммарный ток потребителей, А. Блок-схема Код программы #include int main() { setlocale(LC_ALL, ""); double A[4],Asum=0,U,k; std::cout << "Введите значения напряжения: \n"; std::cin >> U; for (int i = 0;i < 4; i++) { std::cout << "Введите значения силы тока: \n"; std::cin >> A[i]; Asum+=A[i]; } if (Asum <= 1) k = 1.05; else if (Asum > 1 && Asum < 5) k = 1.1; else if (Asum >= 5 && Asum < 10) k = 1.15; else if (Asum >= 10) k = 1.2; printf("Искомое значение мощности: %10.2f",(U*Asum*k)); } Задание №4 Составить алгоритм и написать текст программы для вычисления температуры по известному значению термоЭДС термопары. Т = C0 + C1*E + C2*E2 + C3 * E3, где Т – температура, 0С; Е – термоЭДС, мВ; С0 – С3 – коэффициенты. Причем, если Е от -0,226 до +1,923 мВ, то C0= 0; C1 = 188,9; C2 = - 93,8; C3 = 130,7. Если E от 1,923 до 11,361 мВ, от C0= 13,3; C1 = 147,3; C2 = - 18,4; C3 = 4,03. Если Е от 11, 362 до 19, 739 мВ, то C0= - 82,0; C1 = 155,4; C2 = - 8,34; C3 = 0,43. Для остальных значений Е функция преобразования не определена. Блок-схема Код программы #include int main() { setlocale(LC_ALL, "Russian"); double T, C[4], E; std::cout << "Введите термоЭДС термопары в мВ: \n"; std::cin >> E; if (E >= -0.226 && E <= 19.739) { if (E >= -0.226 && E <= 1.923) { C[0] = 0; C[1] = 188.9; C[2] = -93.8; C[3] = 130.7; } else if (E > 1.923 && E <= 11.361) { C[0] = 13.3; C[1] = 147.3; C[2] = -18.4; C[3] = 4.03; } else if (E >= 11.362 && E <= 19.739) { C[0] = -82; C[1] = 155.4; C[2] = -8.34; C[3] = 0.43; } } else std::cout << "Для этого значения E функция не может быть определена!" << std::endl; printf("Температура: %10.2f \n",(C[0]+C[1]*E+C[2]*pow(E,2) + C[3] * pow(E, 3))); } Задание №5 Составить алгоритм и написать текст программы для вычисления ряда значений сопротивления медного проводника длиной l = 50 м, в зависимости от поперечного сечения S, мм^2. Начальное значение поперечного сечения S0 = 0.25 мм^2, конечное значение S = 1.5 мм^2, шаг изменения hs = 0.25 мм^2. R = l*p / S, где R — сопротивление проводника, Ом; l — длина проводника, м; р = 0.0175 Ом×мм²/м — удельное сопротивление меди; S — поперечное сечение проводника, мм^2.. Блок-схема Код программы #include int main() { setlocale(LC_ALL, "Russian"); int l = 50; float S,hs=0.25,p=0.01750; for (S = 0.25; S <= 1.5; S += hs) printf("Значение сопротивления для поперечного сечения %2.2f : %10.2f \n", S, l * p / S); } Задание №6 Составить алгоритм и написать текст программы для вычисления ряда критических (максимальных) скоростей свободного падения в зависимости от массы и роста парашютиста. Начальная масса m0 = 50 кг, конечная масса m = 90 кг, шаг изменения массы hm = 5 кг. Начальный рост парашютиста — l0 = 1.45 м, конечный рост l = 2.05 м, шаг изменения роста hl = 0.1 м. , где Vкр — критическая скорость, м/с; G — сила притяжения парашютиста к земле, кгс; принять G = m, где m — масса парашютиста, кг; Cx = 0.195 — коэффициент сопротивления тела парашютиста падению; р = 0.125 кг*с^2/ м^4 — плотность воздуха; l — рост парашютиста в метрах. Блок-схема Код программы #include int main() { setlocale(LC_ALL, "Russian"); int m0 = 50, mf = 90, hm = 5; float hl = 0.1,Cx=0.195,p=0.125; for (float l = 1.45; l <= 2.05; l += 0.1) for (m0 = 50; m0 <= mf; m0 += hm) printf("Критическая скорость для парашютистом ростом %2.2f и весом %2d : %10.3f \n", l, m0,sqrt((2*m0)/(Cx*p*pow(l,2)))); } Задание №7 Составить алгоритм и написать текст программы для вычисления значения термоЭДС термопары при котором температура T будет больше 200 0С. Т = 188,9*E – 93,8*E^2 + 130,7 * E^3 - 227 * E^4 + 351 * E^5 - 389 * E^6 + 282 * E^7 - 126 * E^8 + 31,3 * E^9 – 3,32 * E^10, где Т – температура, 0С; Е – термоЭДС, мВ. Шаг изменения ТермоЭДС принять равным he = 0.00536 мВ. Начальное значение ТермоЭДС E0 = 0 мВ. Блок-схема Код программы #include int main() { setlocale(LC_ALL, "Russian"); double he = 0.00536, T=0,E=0; while (T < 200) { T = 188.9 * pow(E, 1) - 93.8 * pow(E, 2) + 130.7 * pow(E, 3) - 227 * pow(E, 4) + 351 * pow(E, 5) - 389 * pow(E, 16) + 282 * pow(E, 7) - 126 * pow(E, 8) + 31.3 * pow(E, 9) - 3.32 * pow(E, 10); printf("Температура для термоЭДС %2.5f = %10.5f \n", E, T); E += he; } } Задание 8 Составить алгоритм и написать текст программы для вычисления ряда значений площади контакта шлифовального круга с заготовкой F, мм^2 в зависимости от значении радиуса износа шлифовального круга R, долей от Rmax и высоты шлифовального круга T, мм. Начальное значение радиуса износа R0 = 0, конечное значение R = 1, шаг изменения hr = 0.25. Начальное значение высоты круга T0 = 40 мм, конечное значение Т = 80 мм, шаг изменения ht = 5 мм. Где F - площадь контакта шлифовального круга с заготовкой, F0 = 50 мм^2 — начальная площадь контакта; T- высота круга, мм; R — радиус износа, долей от Rmax; S = 10 мм/об — поперечная (осевая) подача Блок-схема Код программы #include int main() { setlocale(LC_ALL, "Russian"); int F0 = 50,S=10,F=0; double T, R,hr=0.25,Rmax=1; for (R = 0; R <= Rmax; R += hr) for (T = 40; T <= 80; T += 5) printf("Площадь контакта при высоте T=%2f и радиусом износа R=%3.2f (Доля от Rmax(1)=%3.2f) : %10.2f \n",T,R,R/Rmax,F0*(1+(0.12*T*pow(R/Rmax,0.41))/S)); } Задание №9 Составить алгоритм и написать программу, реализующую следующее поведение: в зависимости от значения 5 бита введенного целого числа на экран выводится текст: «Бит 5 =1» если бит 5 =1, иначе выводится «Бит 5 = 0» Блок-схема Код программы #include int main() { setlocale(LC_ALL, "Russian"); std::cout << "Введите целое число: \n"; int N,bit5= pow(2, 5); std::cin >> N; if ((N >> 5) & 1 == 1) std::cout << "Бит 5=1 \n"; else std::cout << "Бит 5=0 \n"; } Задание №10 Пользователь вводит последовательно 3 значения, каждое из которых может быть либо 0, либо 1 Сформировать и вывести на экран число, по следующим правилам. Значение 0-го бита числа определяется 1-м введенным значением, значение 7-го бита 2-м значением, значение 3-го бита, 3-м значением. Остальные биты числа установить равными 0 Блок-схема Код программы #include int main() { setlocale(LC_ALL, "Russian"); int N[3], seekNum = 0; for (int i = 0; i < 3; i++) { std::cout << "Введите "< std::cin >> N[i]; } seekNum = N[0] << 0; seekNum = seekNum+(N[1] << 7); seekNum = seekNum + (N[2] << 3); std::cout << "Сформированное число: "< } Задание №11 Пользователь вводит число. Вывести на экран символы, по следующим правилам. Если 0-бит введенного числа равен 1 – выводится ‘А’, если 1-ый равен 1 – выводится ‘Б’ и так далее. Символ ‘Ъ’ не выводится. Например, для числа 5 (0000 0101b), должно быть выведено: А, В. Указание: использовать определение переменной с ключевым словом unsigned, массив символов и операцию побитового сдвига вправо. Блок-схема Код программы #include int main() { setlocale(LC_ALL, "Russian"); unsigned int N,n0=0; int i = 0,k=0; char str[100]; std::cout << "Введите N: "; std::cin >> N; while (n0 <= N) { n0 = pow(2, i); if ((N >> i) & 1 == 1) { str[k] = char(192+i); k++; } i++; } for(i=0;i std::cout << str[i]; std::cout << std::endl; } Задание №12 Пользователь вводит число, описывающее цвет в модели ARGB с глубиной цвета 1 байт. Т.е. на каждую составляющую отводится по 8 бит. Причем, биты числа с 0 - го по 7-ой - составляющая красного цвета - R; биты числа с 8 - го по 15-ый - составляющая зеленого цвета - G; биты числа с 16 - го по 23-й - составляющая синего цвета - B; биты с 24-го по 31-й - составляющая прозрачности - А. Вывести на экран значения составляющих цвета по отдельности. Например, для числа 255255255 (00001111 00110110 11100010 1 1010111b) должно быть выведено: R = 215, G=226, B=54, A=15 Блок-схема Код программы #include using namespace std; int main() { setlocale(LC_ALL, "Russian"); std::cout << "Введите число:\n"; long int N,n0=0; cin >> N; int i = 0,R=0,G=0,B=0,A=0; while (n0 <= N) { n0 = pow(2, i); // cout << ((N >> i) & 1u); if (i >= 0 && i <= 7) R=R+(((N >> i) & 1u) << i); else if (i>=8&&i<=15) G = G + (((N >>i) & 1u) << i%8); else if (i >= 16 && i <=23) B = B + (((N >> i) & 1u) << i%8); else if (i >= 24 && i <= 31) A = A + (((N >> i) & 1u) << i%8); i++; } //cout << endl; cout <<"R=" << R << endl << "G=" << G << endl << "B=" << B << endl << "A=" << A << endl; } Задание №13 Составить алгоритм и написать текст программы, реализующей следующее поведение. Пользователь вводит размер массива и границы изменения случайных чисел для заполнения. В массив заносятся значения типа double. Заполнить массив случайными числами с плавающей запятой, затем найти среднее арифметическое элементов массива, максимальное значение и минимальное значение, которые он хранит. Массив и значения вычисленных параметров вывести на экран. Блок-схема Код программы #include #include int main() { setlocale(LC_ALL, "Russian"); std::cout << "Введите размерность массива:\n"; int n; std::cin >> n; std::cout << "Введите нижнюю границу массива:\n"; double Nmin; std::cin >> Nmin; std::cout << "Введите верхнюю границу массива:\n"; double Nmax; std::cin >> Nmax; double* arr = new double[n]; double Avg, Min = Nmax+1, Max = Nmin-1,Sum=0,rn; std::srand(time(0)); std::cout << "Массив значений: " << std::endl; for (int i = 0; i < n; i++) { rn = (double)rand() / RAND_MAX; arr[i] = Nmin + (Nmax - Nmin) * rn; Sum += arr[i]; if (arr[i] < Min) Min = arr[i]; if (arr[i] > Max) Max = arr[i]; printf("%10.5f", arr[i]); } printf("\n Максимальное значение: %10.5f", Max); printf("\n Минимальное значение: %10.5f", Min); printf("\n Среднее арифметическое значение: %10.5f \n", Sum/n); } Задание 14 Составить алгоритм и написать текст программы, вычисления скалярного произведения 2-х векторов, хранящих целые числа. Вектора заполняются случайными числами. Размеры векторов задает пользователь. Вывести полученные векторы и результат вычисления на экран. Проверить свою программу используя встроенные функции MathCAD или других систем автоматизации математических расчетов. Блок-схема Код программы #include int main() { setlocale(LC_ALL, "Russian"); std::cout << "Введите размер первого вектора: \n"; int lengthA; std::cin >> lengthA; std::cout << "Введите размер второго вектора: \n"; int lengthB; std::cin >> lengthB; srand(time(0)); int* vektorA = new int[lengthA]; int* vektorB = new int[lengthB]; std::cout << "Вектор А: \n"; for (int i = 0; i < lengthA; i++) { vektorA[i] =-50+100* rand()/RAND_MAX; printf("%4d", vektorA[i]); } std::cout << std::endl; std::cout << "Вектор B: \n"; for (int i = 0; i < lengthB; i++) { vektorB[i] = -50 + 100 * rand() / RAND_MAX; printf("%4d", vektorB[i]); } std::cout << std::endl; long int Sum = 0; for (int i = 0; i < std::min(lengthA, lengthB); i++) Sum += vektorA[i] * vektorB[i]; printf("Скалярное произведение векторов А и В = %d \n", Sum); } Задание 15!!! Составить алгоритм и написать текст программы вычисления определителя квадратной матрицы. Размеры матрицы задает пользователь. Матрица заполняется случайными числами. Вывести на экран матрицу и результат вычисления. Блок-схема Код программы #include int main() { setlocale(LC_ALL, "Russian"); std::cout << "Введите размер матрицы: \n"; int lengthA; std::cin >> lengthA; srand(time(0)); int** matrixA = new int*[lengthA]; std::cout << "Исходная матрица А: \n"; long double** gaussMatrix = new long double* [lengthA]; for (int i = 0; i < lengthA; i++) { matrixA[i] = new int[lengthA]; gaussMatrix[i] = new long double[lengthA]; for (int j = 0; j < lengthA; j++) { matrixA[i][j] = -50 + 100 * rand() / RAND_MAX; gaussMatrix[i][j] = matrixA[i][j]; printf("%4d", matrixA[i][j]); } std::cout << std::endl; } long double tmp; std::cout << std::endl; for (int k = 0; k for (int i = k + 1; i < lengthA; i++) { tmp = -gaussMatrix[i][k] / gaussMatrix[k][k]; for (int j = 0; j < lengthA; j++) { gaussMatrix[i][j] += gaussMatrix[k][j] * tmp; } } } long double Sum=1; for (int i = 0; i < lengthA; i++) { Sum *= gaussMatrix[i][i]; } printf("Определитель матрицы = %10.0f \n", Sum); } Задание №16 Составить алгоритм и написать текст программы, разбора участка текста. Пользователь вводит текст вида: «Иванов Иван Иванович родился 22 марта 1983 года» одним предложением. Причем, ФИО и дата рождения могут быть любыми, порядок ввода всегда одинаков. Выделить в отдельные переменные типа string (массивы типа char) Фамилию, Имя, Отчество. В отдельные переменные типа int день рождения, месяц рождения, год рождения. Вычислить возраст (полных лет) на дату запуска программы. Вывести значения всех вычисленных переменных на экран, каждая с новой строки. Указание: найдите или реализуйте функции перевода из текста в число. Функции для работы с датой и временем можно найти в описании заголовочного файла Блок-схема Код программы #include #include #include #include #pragma warning(disable : 4996) int main() { //setlocale(LC_ALL, ""); SetConsoleCP(1251); SetConsoleOutputCP(1251); std::cout << "Введите строку:\n"; std::string str,lessWord,month_name; int diffY; getline(std::cin,str); std::cout << "Исходная строка: " << str << std::endl; std::string surname,name,fathername,birthdate; int birth_day, birth_month, birth_year; surname = str.substr(0,str.find(" ")); str = str.substr(str.find(" ")+1); name = str.substr(0, str.find(" ")); str = str.substr(str.find(" ")+1); fathername = str.substr(0, str.find(" ")); str = str.substr(str.find(" ") + 1); str = str.substr(str.find(" ") + 1); birthdate = str; std::cout <<"Фамилия: " < << "Имя: " << name << std::endl << "Отчество: " << fathername << std::endl << "Дата рождения: " << birthdate << std::endl; birth_day = stoi(birthdate.substr(0, birthdate.find(" "))); birthdate = birthdate.substr(birthdate.find(" ")+1); month_name = birthdate.substr(0, birthdate.find(" ")); birthdate = birthdate.substr(birthdate.find(" ")+1); birth_year= stoi(birthdate.substr(0, birthdate.find(" "))); if (month_name == "января") birth_month = 1; else if (month_name == "февраля") birth_month = 2; else if (month_name == "марта") birth_month = 3; else if (month_name == "апреля") birth_month = 4; else if (month_name == "мая") birth_month = 5; else if (month_name == "июня") birth_month = 6; else if (month_name == "июля") birth_month = 7; else if (month_name == "августа") birth_month = 8; else if (month_name == "сентября") birth_month = 9; else if (month_name == "октября") birth_month = 10; else if (month_name == "ноября") birth_month = 11; else if (month_name == "декабря") birth_month = 12; struct tm bd; bd.tm_year = birth_year-1900; bd.tm_mon = birth_month-1; bd.tm_mday = birth_day; bd.tm_hour = 0; bd.tm_min = 0; bd.tm_sec = 0; time_t now = time(0); tm* ltm = localtime(&now); if (ltm->tm_mon < bd.tm_mon&<m->tm_mday diffY = bd.tm_year - ltm->tm_year; else if (ltm->tm_mon < bd.tm_mon && ltm->tm_mday >= bd.tm_mday) diffY = bd.tm_year - ltm->tm_year+1; else diffY = bd.tm_year - ltm->tm_year + 1; std::cout << "Число: " << birth_day << std::endl << "Месяц: " << birth_month << std::endl << "Год: " << birth_year << std::endl << "Полных лет: " < } Задание 17 Составить алгоритм и написать текст программы, реализующей следующее поведение. Заполнить массив, случайными числами типа double. Размер массива ЧЕТНОЕ число n>= 50 В отдельном модуле написать функции для вывода массива на экран и в файл в столбик (каждое с новой строки). Использовать перегрузку функций (имя функций должно быть одинаковым, а параметры разными). Блок-схема Код программы Functions.cpp: #include #include #include inline void myprintArray(double* myArrNew, int cntElements, std::string fileName) { std::ofstream fout; fout.open(fileName); for (int j = 0; j < cntElements; j++) fout << myArrNew[j] << std::endl; } inline void myprintArray(double* myArrNew, int cntElements) { for (int j = 0; j < cntElements; j++) printf("%10.4f", myArrNew[j]); } Основной блок: #include #include #include #include "functions.cpp" using namespace std; int main() { setlocale(LC_ALL, "Russian"); std::cout << "Введите число элементов массива>50:\n"; int N; std::cin >> N; srand(time(0)); if (N < 50 || N % 2 != 0) std::cout << "Число элементов должно быть больше 50 и четным!"; else { double* myArr = new double[N]; double rnd; std::string fn="data.txt"; for (int i = 0; i < N; i++) { rnd = (double) rand() / RAND_MAX; myArr[i] = -50 + 100 * rnd; } myprintArray(myArr,N); myprintArray(myArr, N,"data.txt"); } } Задание 18 Составить алгоритм и написать текст программы, реализующей следующее поведение. В отдельном модуле описать структуру (создать свой составной тип данных) точки на плоскости. В главном модуле создать динамический массив вашего типа данных. Размер массива должен соответствовать размеру файла. В другом модуле описать функции чтения данных из файла, подготовленных в задаче 5_1. Причем числа с четными номерами отвечают за координату Х, а с нечетными за координату Y точки. Например для точки с порядковым номер 3 координата Х — это 4-ое числоа, а координата Y — 5-ое число в файле. Вывести полученный массив точек в на экран в следующем виде: 1: X=13.6 Y=14.0 2: X=10.8 Y=11.1 Блок-схема Код программы Function.cpp: #include #pragma once struct MyPoint { double x; double y; }; FileWork:cpp #include #include #include #include "Function.cpp" using namespace std; class ReadFile { public: int counter; MyPoint* fileData; ReadFile(std::string fileName) { std::ifstream fin(fileName); counter = 0; string s; for (fin >> s; !fin.eof(); fin >> s) counter++; fin.close(); counter = counter / 2; fileData = new MyPoint[counter]; ifstream fin2(fileName); int i = 0, k = 0; double X, Y; for (fin2 >> s; !fin2.eof(); fin2 >> s) { if (i % 2 == 0) X = stod(s); else { Y = stod(s); fileData[k].x=X; fileData[k].y = Y; k++; } i++; } fin2.close(); } }; Основной блок: #include #include "Function.cpp" #include "FileWork.cpp" using namespace std; int main() { MyPoint* arr; ReadFile r1 = ReadFile("data.txt"); arr = r1.fileData; for (int i = 0; i < r1.counter; i++) printf("%3d X=%5.5f Y=%5.5f \n", i+1, arr[i].x, arr[i].y); } Задание 19 Составить алгоритм и написать текст программы, реализующей следующее поведение. В отдельном модуле описать структуру (создать свой составной тип данных) записи в телефонном справочнике. Необходимы поля(тип данных): Фамилия(string или char*), Имя (string или char*) , Отчество (string или char*), Дата рождения (tm — смотри описание сtime), Телефон (на ваше усмотрение), e-mail (string или char). Пользователю предоставляется на выбор 2 действия 1 — создать новую запись в справочнике. 2 — просмотреть все существующие в справочнике записи. Справочник хранится в отдельном файле. При добавление новой записи существующие в файле записи остаются неизменными. Функции для работы с файлами вынести в отдельный модуль. Можно и нужно использовать свои наработки из задачи 04_4. Подробнее про работу с датой можно посмотреть по ссылке https://unetway.com/tutorial/c-data-i-vrema Блок-схема Код программы PhoneBook.cpp: #include #include #pragma once struct PhoneBookRecord { std::string surname; std::string name; std::string fathername; tm bdate ; std::string phone; std::string email; }; FunctionsPhoneBook.cpp: #include #include #include #include "PhoneBook.cpp" #pragma warning(disable : 4996) using namespace std; inline void CreateNewRecord(string filename,PhoneBookRecord p1) { ofstream f1; f1.open(filename, ios::app); f1 << p1.surname << " " << p1.name << " " << p1.fathername << " " << p1.bdate.tm_mday<<"."< f1.close(); } inline void readPhoneBook(string filename) { ifstream f1(filename); string str; while (f1) { getline(f1, str); cout << str< } cout << endl; } Основной блок: #include #include #include "PhoneBook.cpp" #include "FunctionsPhoneBook.cpp" #include using namespace std; int main() { setlocale(LC_ALL, ""); SetConsoleCP(1251); SetConsoleOutputCP(1251); std::cout << "Введите тип операции: \n1-добавить новую запись в справочник\n2-прочитать справочник\n"; int opType; cin >> opType; string str; if (opType == 1) { PhoneBookRecord p_new; cout << "Введите фамилию:\n"; cin >> p_new.surname; cout << "Введите имя:\n"; cin >> p_new.name; cout << "Введите отчество:\n"; cin >> p_new.fathername; cout << "Введите дату рождения в формате дд.мм.yyyy:\n"; cin >> str; char* cstr = new char[str.length() + 1]; strcpy(cstr, str.c_str()); p_new.bdate=tm(); int mn_num; sscanf(cstr,"%d.%d.%d", &p_new.bdate.tm_mday, &mn_num, &p_new.bdate.tm_year); mn_num--; p_new.bdate.tm_mon = mn_num; //cout << p_new.bdate.tm_mday; cout << "Введите телефон:\n"; cin >> p_new.phone; cout << "Введите email:\n"; cin >> p_new.email; CreateNewRecord("myBook.txt", p_new); } else if (opType == 2) { readPhoneBook("myBook.txt"); } } Вывод: Выполняя данные лабораторные работы, я ознакомился с языком программирования С++ и практически использовать его в программе Visual Studio. |