Отчет по лабораторной работе №1
.docx
Лабораторная работа №1
«Обработка данных в виде массива структур средствами языка С++»
Цель лабораторной работы:
Научиться конструировать пользовательские типы данных — структуры, создавать массивы структур в динамической памяти, осуществлять ввод и вывод из файла.
Задание:
Написать программу, представляющую собой простейшую систему для управления данными. Исходные данные для программы хранятся в текстовом файле в виде строк. Для создания файла с исходными данными следует использовать простейший текстовый редактор или редактор инструментальной среды разработки.
Количество строк, требования к содержимому строки, способ обработки определяются вариантом задания. В соответствии со своим вариантом следует сконструировать структуру и на ее основе создать массив в динамической памяти.
Действия, выполняемые программой:
1. Чтение данных из файла в динамический массив.
2. Просмотр данных, хранящихся в массиве.
3. Корректировка данных заданной строки.
4. Вычисления.
5. Сохранение данных в новом файле (имя файла вводится с клавиатуры).
Алгоритм работы программы должен предусматривать однократное чтение данных с проверкой, многократное редактирование, просмотр записей, вычисления. Работа программы завершается после сохранения данных в новом файле.
7 Вариант:
Количество строк: 4. Столбцы: Марка монитора, Максимальное разрешение, Цена. Вычислить среднюю цену.
Ход работы
Изначальные данные:
Ввод без редактирования изначальных данных:
Полученный результат:
Ввод данных с множественным редактированием:
Полученный результат:
Заключение
1. Структуры позволяют создавать типы данных, определяемые пользователем, что удобно при решении задач, связанных с хранением данных.
2. Динамическое выделение памяти под массив позволяет задать размер этого массива во время выполнения программы, а не во время компиляции, как того потребовало бы создание фиксированного массива, что позволяет избежать накопления ненужных данных.
3. Ввод данных с файла является более оперативным способом, чем ввод с клавиатуры.
Примечание
Исходный код:
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
struct Monitor
{ char marka[30];
char resolution[10];
float price; };
float SR (Monitor *pmonitor)
{ float v;
v=0;
int k=4;
int s=0;
for (int i=0;i<4;i++)
s=s+pmonitor[i].price;
float srprice=s/k;
cout << "Средняя цена монитора = " << srprice << endl;
return(v); }
void Prosmotr (Monitor *pmonitor)
{ cout << "Марка монитора/Максимальное разрешение/Цена" <<endl;
for (int i=0;i<4;i++)
{ cout << pmonitor[i].marka <<" "<< pmonitor[i].resolution <<" "<< pmonitor[i].price << endl; }
SR (pmonitor); }
void Change (Monitor *pmonitor)
{ int c,m;
cout << "Сколько строчек вы хотите изменить?" <<endl;
cin >> m;
for (int i=0;i<m;i++)
{ cout << "Какую строку Вы хотите изменить?" <<endl;
cin >> c;
cout << "Измените параметры:" << endl;
cin >> pmonitor[c-1].marka;
cin >> pmonitor[c-1].resolution;
cin >> pmonitor[c-1].price; }
Prosmotr(pmonitor); }
void Question (Monitor *pmonitor)
{ string t("t");
cout << "Хотите ли Вы изменить данные [t/f]?" << endl;
string o;
getline(cin, o);
while(o != "t" && o != "f")
{cin.ignore(20, '\n');
cout << "Введен неизвестный параметр. Попробуйте еще раз:" << endl;
cin >> o; }
if (o=="t") Change(pmonitor);
else Prosmotr(pmonitor); }
void NewFile (Monitor *pmonitor)
{ char name[20];
cout << "Введите название нового файла:" << endl;
cin >> name;
ofstream tin;
tin.open(name);
for (int i=0;i<4;i++)
{tin << pmonitor[i].marka << endl;
tin << pmonitor[i].resolution << endl;
tin << pmonitor[i].price << endl;
tin << " " << endl; }
tin.close(); }
int main()
{setlocale (LC_ALL, "rus");
Monitor* monitor = new Monitor[4];
ifstream fin;
fin.open("myfile.txt");
for (int i=0;i<4;i++)
{ fin >> monitor[i].marka;
fin >> monitor[i].resolution;
fin >> monitor[i].price; }
Prosmotr(monitor);
Question (monitor);
NewFile(monitor);
fin.close();
delete [] monitor;
monitor = NULL;
return 0; }