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

Laba_7

.docx
Скачиваний:
1
Добавлен:
07.01.2022
Размер:
142.18 Кб
Скачать

ФГБОУ ВО

Уфимский государственный авиационный технический университет

Кафедра ТК

ОТЧЕТ

по лабораторной работе № 6

по дисциплине «Программирование»

Вариант № 18

Выполнил: студент гр. ИВТ-114

Балыбердин Н. А.

Проверил: доцент каф. ТК

Федорова Н. И.

Уфа 2017

Тема работы: Сортировка массивов структур. Форматированный вывод.

Цель работы: Навыки работы со структурами, структурными данными и массивами структур в С++

Задачи работы:

  • написание программы на языке С++ с использованием структурных данных и массивов структур.

  • тестирование работоспособности программы для различных исходных данных.

Вариант № 18

Задание: На основе лабораторной №6 сделать: Вывод результата в бинарный файл, Вывод исх.массива в бинарный файл и Ввод бинарного файла.

Схема алгоритма работы программы:

t=3;

sort(a,k,t)

t=2;

sort(a,k,t)

t=1;

sort(a,k,t)

vesna(a,k)

Vivodfail

(a, k ,kk)

Vivnaikr

(a, k, kk)

sort(a,k,t)

Вывод x[0].dr.d

Вывод x[0].dr.m

Вывод x[0].dr.y

Текст программы:

#include <iostream>

#include <string>

#include <conio.h>

#include <windows.h>

#include <iomanip>

#include <fstream>

using namespace std;

const int L = 31, M = 11;

struct date

{

int d, m, y;

};

struct student

{

char name[L];

char group[M];

date dr;

};

void inputMasStudFile(student *&x, int &n)

{

char inic[5], filename[L];

ifstream fin;

cout << "Введите имя входного файла: ";

cin >> filename;

fin.open(filename);

if (fin.fail())

{

cout << "\n_______________________________________________\nОшибка\n Файл " << filename << " не может быть открыт\nНажмите любую клавишу, чтобы выйти в меню\n_______________________________________________\n";

_getch();

return;

}

n = 0;

while (fin.peek() != EOF)

{

string s;

getline(fin, s);

n++;

}

fin.close();

x = new student[n];

fin.open(filename);

fin.seekg(0, ios_base::beg);

for (int i = 0; i<n; i++)

{

fin >> x[i].name >> inic >> x[i].group >> x[i].dr.d >> x[i].dr.m >> x[i].dr.y;

strcat_s(x[i].name, " ");

strcat_s(x[i].name, inic);

}

fin.close();

cout << "\nМассив из файла успешно считан\n";

system("pause");

}

void outputMasStud(student *x, int n)

{

int i;

cout << " __________________________________________________________________\n | № | Фамилия и инициалы | Группа | Дата рождения |\n |____|______________________________|____________|_______________|" << endl;

for (i = 0; i < n; i++)

{

cout << " | " << setfill('0') << right << setw(2) << i + 1 << setfill(' ') << left << " | " << setw(29) << x[i].name << "|" << setw(12) << x[i].group << "| " << setfill('0') << right << setw(2) << x[i].dr.d << "." << setw(2) << x[i].dr.m << "." << left << setw(8) << setfill(' ') << x[i].dr.y << "|" << endl;

}

cout << " -----------------------------------------------------------------\n";

system("pause");

}

void find(student *x, int n, student *&y, int &m)

{

int i;

m = 0;

for (i = 0; i < n; i++)

{

if (x[i].dr.m >= 3 && x[i].dr.m <= 5) m++;

}

y = new student[m];

m = 0;

for (i = 0; i < n; i++)

{

if (x[i].dr.m >= 3 && x[i].dr.m <= 5)

{

y[m] = x[i];

m++;

}

}

cout << "Студенты найдены\n";

system("pause");

}

void findmol(student *x, int n, student *&y, int &m)

{int fl, i;

student t;

do {

fl = 0;

n--;

for (i = 0; i < n; i++)

if (x[i].dr.y < x[i + 1].dr.y)

{

t = x[i];

x[i] = x[i + 1];

x[i + 1] = t;

fl = 1;

}

} while (fl == 1);

m=1;

y = new student[m];

y[0]=x[0];

cout << "Студент найден\n";

system("pause");

}

void outputMasStudFile(student *x, int n)

{

char file[L];

int i;

ofstream fout;

cout << "\nВведите имя выходного файла для Массива студентов: ";

cin >> file;

fout.open(file);

if (fout.fail())

{

cout << "\n_______________________________________________\nОшибка\n Файл " << file << " не может быть открыт\nНажмите любую клавишу, чтобы выйти из программы\n_______________________________________________\n";

_getch();

return;

}

fout << " __________________________________________________________________\n | № | Фамилия и инициалы | Группа | Дата рождения |\n |____|______________________________|____________|_______________|" << endl;

for (i = 0; i < n; i++)

{

fout << " | " << setfill('0') << right << setw(2) << i + 1 << setfill(' ') << left << " | " << setw(29) << x[i].name << "|" << setw(12) << x[i].group << "| " << setfill('0') << right << setw(2) << x[i].dr.d << "." << setw(2) << x[i].dr.m << "." << left << setw(8) << setfill(' ') << x[i].dr.y << "|" << endl;

}

fout << " -----------------------------------------------------------------\n";

fout.close();

cout << "Массив успешно записан в файл\n";

system("pause");

}

void sortA1(student *&x, int n)

{

int fl, i;

student t;

do {

fl = 0;

n--;

for (i = 0; i < n; i++)

if (x[i].dr.y < x[i + 1].dr.y)

{

t = x[i];

x[i] = x[i + 1];

x[i + 1] = t;

fl = 1;

}

} while (fl == 1);

cout << "Массив отсортирован\n";

system("pause");

}

int datcmp(date v, date u)

{

if (v.y > u.y) return 1;

if (v.y < u.y) return -1;

if (v.m > u.m) return 1;

if (v.m < u.m) return -1;

if (v.d > u.d) return 1;

if (v.d < u.d) return -1;

else return 0;

}

int namecmp(student u, student v)

{

if (strcmp(u.name, v.name) > 0) return 1;

if (strcmp(u.name, v.name) < 0) return 0;

return 0;

}

void sortA2(student *&x, int n)

{

student t;

int fl;

do

{

fl = 0;

n--;

for (int i = 0; i<n; i++)

if (namecmp(x[i], x[i + 1]) == 1)

{

t = x[i];

x[i] = x[i + 1];

x[i + 1] = t;

fl = 1;

}

} while (fl == 1);

cout << "Массив отсортирован\n";

system("pause");

}

void sortB1(student *x, int n)

{

int fl, i;

student t;

do {

fl = 0;

n--;

for (i = 0; i < n; i++)

if (datcmp(x[i].dr, x[i + 1].dr) > 0)

{

t = x[i];

x[i] = x[i + 1];

x[i + 1] = t;

fl = 1;

}

} while (fl == 1);

cout << "Массив отсортирован\n";

system("pause");

}

void outputRezBinFile(student *&x, int m)

{

//setlocale(LC_ALL, "Russian");

char file[L];

ofstream fout;

cout << "имя выходного бинарного файла - "; cin >> file;

fout.open(file, ios::binary);

if (fout.fail())

{

cout << "файл не открылся";

return;

}

fout.write((char*)x, m * sizeof(student));

fout.close();

cout << "Результат записан в бин.файл\n";

system("pause");

}

void inputRezBinFile(student *&x, int &n)

{

//setlocale(LC_ALL, "Russian");

char file[L]; int i;

ifstream fin;

cout << "имя бинарного файла - "; cin >> file;

fin.open(file, ios::binary);

if (fin.fail())

{

cout << "файл не открывается";

return;

}

fin.seekg(0, ios::end);

n = fin.tellg() / sizeof(student);

x = new student[n];

fin.seekg(0, ios::beg);

fin.read((char*)x, n * sizeof(student));

fin.close();

cout << "Бинарный файл введен\n";

system("pause");

}

int main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

student *x = 0, *y = 0, *rezbin1 = 0;

int n, m, j, m1, n1;

while (1)

{

system("cls");

setlocale(LC_ALL, "Russian");

cout << "Сортировки\n";

cout << "\nМеню\n";

cout << "1. Ввод из файла исходного массива\n";

cout << "2. Вывод на экран исходного массива\n";

cout << "3. Поиск студентов родившихся весной\n";

cout << "4. Вывод результата на экран\n";

cout << "5. Вывод результата в файл\n";

cout << "6. Поиск самого молодого студента\n";

cout << "7. Вывод результата на экран\n";

cout << "8. Вывод результата в файл\n";

cout << "9. Вывод исходного массива в файл\n";

cout << "10. Сортировка исх.массива по дню рождения в порядке возростания\n";

cout << "11. Сортировка исх.массива по фамилии и инициалам студента в алфавитном порядке\n";

cout << "12. Сортировка результата по дате рождения в порядке убывания возраста\n";

cout << "13. Вывод результата в бинарный файл\n";

cout << "14. Вывод исх.массива в бинарный файл\n";

cout << "15. Ввод бинарного файла\n";

cout << "16. Выход из программы\n\n";

cout << "Выбор (1-16): "; cin >> j;

switch (j)

{

case 1: inputMasStudFile(x, n); break;

case 2: outputMasStud(x, n); break;

case 3: find(x, n, y, m); break;

case 4: cout << "Студенты, родившиеся весной:\n"; outputMasStud(y, m); break;

case 5: outputMasStudFile(y, m); break;

case 6: findmol(x, n, y, m); break;

case 7: cout << "Самый молодой студент:\n"; outputMasStud(y, m); break;

case 8: outputMasStudFile(y, m); break;

case 9: outputMasStudFile(x, n); break;

case 10: sortA1(x, n); break;

case 11: sortA2(x, n); break;

case 12: sortB1(y, m); break;

case 13: outputRezBinFile(x, n); break;

case 14: outputRezBinFile(y, m); break;

case 15: inputRezBinFile(rezbin1, m1); outputMasStud(rezbin1, m1); break;

case 16: cout << "Конец работы\n"; system("pause");if (x != NULL) delete[]x;if (y != NULL) delete[]y;if (rezbin1 != NULL) delete[]rezbin1; return 0;

default: cout << "Ошибка: неверный пункт меню\n"; system("pause"); break;

}

}

}

Тестовый пример:

Входные данные: file1

Выходные данные: file

Вывод: В ходе выполнения работы получены навыки работы со структурами, структурными данными и массивами структур в С++.

Соседние файлы в предмете Программирование