Нужно было реализовать программу, с сортировкой структуры по разным параметрам быстрым и медленным алгоритмом сортировки. Я с этим всем справился, но есть одно но: вводить всю информацию с клавиатуры долго и не удобно, а пример с файлами я нашел либо очень простые, что мне не подходят, либо с-шным способом. А мне нужен именно с++ способ. Файл и скриншот прилагаюся. И да, сорян за украинский. Переводить некогда
//это должно было записано в файле. Но тут файл прикрепить нельзя((
#include "pch.h"
#include <iostream>
#include <windows.h>
#include <fstream>
#include <string>
using namespace std;
#define T 10
struct Passageer
{
int biletnum;
char pas_name[20];
int bag_things;
double bag_mas;
struct
{
unsigned int day, month, year;
}
date;
};
void sort_shaker(Passageer**q, int n)
{
int flag = 1;
int leftMark = 1;
int rightMark = n - 1;
while (leftMark <= rightMark && flag > 0)
{
flag = 0;
for (int i = rightMark; i >= leftMark; i--)
if (q[i - 1]->bag_mas > q[i]->bag_mas) {
int buff;
buff = q[i]->bag_mas;
q[i]->bag_mas = q[i - 1]->bag_mas;
q[i - 1]->bag_mas = buff;
flag = 1;
}leftMark++;
for (int i = leftMark; i <= rightMark; i++)
if (q[i - 1]->bag_mas > q[i]->bag_mas) {
int buff;
buff = q[i]->bag_mas;
q[i]->bag_mas = q[i - 1]->bag_mas;
q[i - 1]->bag_mas = buff;
flag = 1;
}rightMark--;
}
for (int i = 0; i < T; i++)
{
cout << "Номер квитка: " << q[i]->biletnum << " Прізвище: " << q[i]->pas_name << " Кількість речей в багажі: " <<
q[i]->bag_things << " Вага багажу: " << q[i]->bag_mas << " Дата прибуття: " << q[i]->date.day << "/" << q[i]->date.month << "/" << q[i]->date.year << endl;
}
}
void sort_bubble(Passageer**q, int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (q[j]->biletnum > q[j + 1]->biletnum) {
Passageer *temp = q[j];
q[j] = q[j + 1];
q[j + 1] = temp;
}
}
}
for (int i = 0; i < T; i++) {
cout << "Номер квитка: " << q[i]->biletnum << " Прізвище: " << q[i]->pas_name << " Кількість речей в багажі: " <<
q[i]->bag_things << " Вага багажу: " << q[i]->bag_mas << " Дата прибуття: " << q[i]->date.day << "/" << q[i]->date.month << "/" << q[i]->date.year << endl;
}
}
void sort_date(Passageer*pas) {
Passageer sort1[T];
for (int i = 0; i < T - 1; i++)
{
for (int g = i + 1; g < T; g++)
{
if (pas[i].date.year * (20 * 50) + pas[i].date.month * 20 + pas[i].date.day > pas[g].date.year *
(20 * 50) + pas[g].date.month * 20 + pas[g].date.day)
{
sort1[1] = pas[i];
pas[i] = pas[g];
pas[g] = sort1[1];
}
}
}
for (int i = 0; i < T; i++)
{
cout << "Номер квитка: " << pas[i].biletnum << " Прізвище: " << pas[i].pas_name << " Кількість речей в багажі: " << pas[i].bag_things << " Вага багажу: " << pas[i].bag_mas <<
" Дата прибуття: " << pas[i].date.day << "/" << pas[i].date.month << "/" << pas[i].date.year << endl;
}
}
int main() {
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
string path = "list.txt";
ifstream fin;
fin.open(path);
if (!fin.is_open()) {
cout << "Не вдалось знайти або відкрити файл!";
}
fin.close();
Passageer *pas = new Passageer[T];
for (int i = 0; i < T; i++) {
cout << "Заповніть дані пасажира " << i + 1 << endl;
cout << "Номер квитка: " << endl;
cin >> pas[i].biletnum;
cout << "День: ";
cin >> pas[i].date.day;
cout << "Місяць: ";
cin >> pas[i].date.month;
cout << "Рік: ";
cin >> pas[i].date.year;
cout << "Прізвище: " << endl;
cin >> pas[i].pas_name;
cout << "Кількість речей в багажі: " << endl;
cin >> pas[i].bag_things;
cout << "Вага багажу: " << endl;
cin >> pas[i].bag_mas;
}
Passageer **pas_q = new Passageer*[T];
for (int i = 0; i < T; i++) {
pas_q[i] = &pas[i];
}
cout << "Відсортувати список за: " << endl << "1. Номером квитка" << endl << "2. Вагою багажу" << endl <<
"3. Датою прибуття" << endl << "0. Не сортувати" << endl;
int select;
cin >> select;
switch (select)
{
case 1:
sort_bubble(pas_q, T);
break;
case 2:
sort_shaker(pas_q, T);
break;
case 3:
sort_date(pas);
case 0:
for (int i = 0; i < T; i++)
{
cout << "Номер квитка: " << pas[i].biletnum << " Прізвище: " << pas[i].pas_name << " Кількість речей в багажі: " << pas[i].bag_things << " Вага багажу: " << pas[i].bag_mas <<
" Дата прибуття: " << pas[i].date.day << "/" << pas[i].date.month << "/" << pas[i].date.year << endl;
}
default:
break;
}
return 0;
}
Вот относительно простой способ:
Passageer *readFile(string path)
{
ifstream fin(path);
int length = -1;
char ch;
while (!fin.eof())
{
fin.get(ch);
if (ch == '\n') length++;
}
fin.close();
if (length == -1)
return NULL;
fin.open(path);
Passageer *passageers = new Passageer[length];
for (int i = 0; i < length; i++)
{
fin >> passageers[i].biletnum >> passageers[i].date.day >> passageers[i].date.month >> passageers[i].date.year >> passageers[i].pas_name >> passageers[i].bad_things >> passageers[i].bag_mas;
}
fin.close();
return passageers;
}
В параметр передаем имя файла. Сначала открываем файл и считываем сколько там строк: в случае если их там нет, то возвращаем null, если определенно количество, то выделяем память в массиве. И потом через цикл записываем этот массив данными из файла. Пример обращения к этому методу:
Passageer *pas = readFile("passageers.txt");
Виртуальный выделенный сервер (VDS) становится отличным выбором
Сделана в принципе вся программа но я не могу сделать ввод слов из клавиатуры
Задача состоит в том, чтобы написать простой редактор объектов, с возможностью создавать, удалять объекты и редактировать свойства объектов...
} Выводит целое число, а надо вещественноеЗаранее спасибо
Дело в том что, мне нужно сохранить данные в файле, таким образом, чтобы оно не перезаписывалось опять, а прибавлялось к имеющему переменному...