2. Задание № 1
Разработать консольное приложение, котороя:
-считывает из входного файла (in.txt) последовательность целых чисел;
-преобразует считанную последовательность в массив целых значений;
-сортирует по возрастанию полученный массив пузырьковым методом;
-записывает полученную отсортированную последовательность в выходной файл (out.txt).
3. Пример программы на C++ для задания № 2
Задание. Осуществить ввод и вывод данных в файл, состоящий из структур, содержащих следующие поля:
– ФИО студента;
– курс;
– группа;
– оценка по математике;
– оценка по программированию;
– оценка по физике.
Вывести на экран файл структур в виде таблицы следующего вида:
ФИО |
Курс |
Группа |
Матем. |
Прог. |
Физ. |
Ср. балл |
|
|
|
|
|
|
|
Средний балл рассчитать по всем трем оценкам.
Для удобства пользователя организовать вывод на экран меню, где он может выбрать одно из трех действий:
– ввод данных;
– вывод данных;
– выход из программы.
Текст программы
#include <fstream>
#include <string>
#include <iomanip>
#include <Windows.h>
#include <iostream>
using namespace std;
//Описание структуры со сведениями о студенте
struct stud {
char fio[30];
int kurs;
char gruppa[10];
int math, prog, fiz;
};
//Функции, используемые в программе
void menu(); // Функция вывода на экран меню
int vvod(); // Функкция ввода данных в файл
int vivod(); // Функция вывода данных из файла
// на экран
void hline(); // Функция прорисовки горизонтальной
// линии
//Основная программа
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int num = 0; //Переменная для хранения номера
//пункта меню,
// выбранного пользователем
//Цикл обработки действий пользователя
while (num != 3)
{
menu();
cin >> num;
switch (num) {
case 1: vvod(); break;
case 2: vivod(); break;
case 3: break;
default: cout << "неверный вариант выбора" << endl;
}
}
return 0;
}
//Функция вывода на экран меню
void menu()
{
cout << "\n МЕНЮ\n";
cout << "1. Ввод данных" << endl;
cout << "2. Вывод данных" << endl;
cout << "3. Выход" << endl;
cout << "Введите номер пункта меню для дальнейшей работы" << endl;
}
//Функкция ввода данных в файл
int vvod()
{
stud st; //Структура, использующаяся как буфер
// при записи в файл
//Попытка открытия файла для записи (добавления)
// данных в файл
ofstream f("stud.dat", ios::app|ios::binary);
if (!f)
ofstream f("stud.dat", ios::out|ios::binary);
if (!f)
{
cout << "Ошибка открытия файла" << endl;
return 1;
}
int n;
cout << "Введите количество добавляемых записей = ";
cin >> n;
//Ввод данных для записи в файл
for (int i = 0; i < n; i++)
{
cout << "Введите ФИО студента" << endl;
while (cin.get()!='\n');
cin.getline(st.fio,30);
cout << "Введите курс" << endl;
cin >> st.kurs;
cout << "Введите группу" << endl;
while (cin.get() != '\n');
cin.getline(st.gruppa,10);
cout << "Введите оценку по математике" << endl;
cin >> st.math;
cout << "Введите оценку по программированию" << endl;
cin >> st.prog;
cout << "Введите оценку по физике" << endl;
cin >> st.fiz;
f.write((char*)&st, sizeof(st));
}
//Завершение работы с файлом
f.close();
return 0;
}
//Функция вывода данных из файла на экран
int vivod()
{
stud st; //Структура, использующаяся как буфер при записи в файл
//Открытие файла для чтения
ifstream f("stud.dat", ios::in | ios::binary);
if (!f)
{
cout << "Ошибка открытия файла" << endl;
return 1;
}
//Вывод шапки таблицы
cout << " Студенты" << endl;
hline();
cout << "| ФИО | Курс | Группа | Матем. | Прог. | Физ. | Ср.балл |" << endl;
hline();
float sr_ball; //Переменная для расчета среднего балла
//Вывод данных из файла в таблицу
while (!f.eof())
{
f.read((char*)&st, sizeof(st)); //Считывание записи из файла
if (!f.eof())
{
sr_ball = (st.fiz + st.math + st.prog) / 3.0;
cout << "| " << setw(20) << st.fio;
cout << " | " << setw(4) << st.kurs;
cout << " | " << setw(8) << st.gruppa;
cout << " | " << setw(6) << st.math;
cout << " | " << setw(5) << st.prog;
cout << " | " << setw(4) << st.fiz;
cout << " | " << setiosflags(ios::fixed) <<
setprecision(2) << setw(8) << sr_ball << " |" << endl;
}
}
//Отчеркивание нижней границы таблицы
hline();
//Завершение работы с файлом
f.close();
return 0;
}
void hline()
{
const int m = 77; //Ширина таблицы в символах
for (int j = 0; j < m; j++)
cout << "-";
cout << endl;
}