Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Отчет по лабораторной работе №1

.docx
Скачиваний:
77
Добавлен:
03.10.2022
Размер:
90.68 Кб
Скачать

Лабораторная работа №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; }