Главная страница

лабораторная работа по программированию. Лабораторная работа по программированию. Лабораторная работа по дисциплине Программирование и алгоритмизация Студента группы итз 30320с Коньков Е. И. Номер зачетной книжки 132010102


Скачать 5.05 Mb.
НазваниеЛабораторная работа по дисциплине Программирование и алгоритмизация Студента группы итз 30320с Коньков Е. И. Номер зачетной книжки 132010102
Анкорлабораторная работа по программированию
Дата03.06.2022
Размер5.05 Mb.
Формат файлаdocx
Имя файлаЛабораторная работа по программированию.docx
ТипЛабораторная работа
#566879

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

федеральное государственное бюджетное

образовательное учреждение высшего образования

«Курганский государственный университет»
Институт математики и информационных технологий

Кафедра «Автоматизации производственных процессов»

ЛАБОРАТОРНАЯ РАБОТА

по дисциплине: «Программирование и алгоритмизация»
Студента группы ИТЗ- 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.


написать администратору сайта