Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
нстана ОАИП.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.54 Mб
Скачать

Результат работы программы

Задание 5

Ввести матрицу размером NxM. Память для массива выделить динамически. Выполнить в соответствии с номером варианта индивидуальное задание и вывести на экран исходные данные и полученный результат. Предусмотреть в программе использование функции пользователя.

Определить сумму отрицательных элементов, расположенных выше побочной диагонали матрицы.

Код программы

#include <iostream>

#include <iomanip>

#include <math.h>

using namespace std;

void fill_array(int **array, int*, int*);   

void print_array(int **array, int*, int*);

void print_diagonal(int **array, int*, int*);

int main ()

{

 int n, m ;

 cout << "Vvedite N:" << endl;

 cin >> n;

 cout << "Vvedite M:" << endl;

 cin >> m;

 int **array = new int*[n]; //Выделение n блоков памяти целого типа

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

 {

    array[i] = new int[m];

 }

 fill_array(array, &n, &m);

 print_array(array, &n, &m);

 print_diagonal(array, &n, &m);

 return 1;

}

void fill_array(int **array, int *n, int *m) //?

{

 cout << "\nVvedite massiv A:" << endl; // Ввод элементов двумерного массива

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

 {

   for (int j = 0; j < *m; j++)

   {

     cout << "Vvedite element[" << i << "][" << j << "]: ";  //Ввод элемента

     cin >> array[i][j];

   }

 }

}

void print_diagonal(int **array, int *n, int *m){ //поиск отрицательных элементов, расположенных выше побочной диагонали матрицы

 double xStep =(double) *n /(double) *m;

 int sum negativeElements = 0;

 cout << endl << "Diagonal: " << endl;

 double xDiagonal = *m - 1 ;

 for (int i = 0; i<  *n; i++)    // Просмотр элементов массива

 {

   for (int j=0; j < *m; j++)  // Просмотр элементов массива

   {

     cout << setw (9);

     if(j <= ceil( xDiagonal))  // Сравнение элементов массива

     {

       cout << " ";

     }

     else               //иначе  

     {

       if(array[i][j] > 0)

       {

         cout << array[i][j];

         negativeElements++;

       }

     }

   }

   

   xDiagonal -= xStep;

   cout << endl;

 }

 cout << endl;

 std::cout << "Summa negativnyh elemento: " << negativeElements << std::endl;

}

void print_array(int **array, int *n, int *m) //функция печати массива

{

 cout << endl << "Massiv: " << endl; // Вывод элементов двумерного массива

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

 {

   for (int j=0; j < *m; j++)

   {

     cout << setw (9) << array[i][j];

   }

   cout << endl;

 }

 cout << endl;

}

Результат работы программы

Задание 6

Код программы

#include <iostream>

#include <fstream>

#include <iomanip>

#include <curses.h>

using namespace std;

typedef basic_string<char> string; //Определение типа данных

typedef struct

{

 Int number; //номер

 int destination; // пункт назначения

 int time of departure; // время отправления

int of afarrival ; // время прибытия

} TGood;

int Menu();  //создание меню

void new_table(); //Создание новой таблицы

void open_file(); //открытие файла

void add_entry(); //добавить запись

void add_entry(TGood); //добавление записи в список

void view_entries(); //вид записи

void view_filtered_entries(); //отфильтрованные записи

void save_file(); //сохранить файл

void save_filtered_file(); //сохранить отфильтрованные файла

void clean_screen(); //очистить экран

TGood * goods;

int goodsCount;

int main ()

{

 new_table(); // Создание чистой таблицы сразу после запуска программы

 while (true)

 {

   switch (Menu())

   {

     case 1: new_table(); break;

     case 2: open_file(); break;

     case 3: add_entry(); break;

     case 4: view_entries(); break;

     case 5: view_filtered_entries(); break;

     case 6: save_file(); break;

     case 7: save_filtered_file(); break;

     case 8: return 0;

     default: puts("Сделайте выбор!");

   }

   cout << endl << endl <<  "Press any key to continue...." << endl;

   system("read -n1 -p ' ' key");

   clean_screen(); //очистить экран

 }

}

int Menu() // Меню

{

 cout << "Меню:" << endl;

 cout << "1. Новая таблица" << endl;

 cout << "2. Открыть файл" << endl;

 cout << "3. Добавить запись об информации" << endl;

 cout << "4. Отобразить все записи об информации" << endl;

 cout << "5. Отобразить записи об информации о рейсах прибывающих раньше заданного времени" << endl;

 cout << "6. Сохранить файл" << endl;

 cout << "7. Сохранить в файл записи об информации о рейсах прибывающих раньше заданного времени " << endl;

 cout << "8. Выход" << endl;

 int i;

 cin >> i;  // Ввод выбранного пункта меню

 return i;

}

void new_table(){      // Создание новой таблицы

 clean_screen();

 cout << "Создание новой таблицы..." << endl;

 goods = new  TGood[0];

 goodsCount = 0;

 std::cout << "Новая таблица создана. Добавьте записи в новую таблицу" << std::endl;

}

void add_entry(){   // добавление записи

 clean_screen();

 cout << "Добавление записи" << endl;

 TGood good ;

 std::cout << "Введите название рейса" << std::endl;

 std::cin >> good.name;

 std::cout << "Введите количество пунктов назначения" << std::endl;

 std::cin >> good.count;

 std::cout << "Введите время прибытия" << std::endl;

 std::cin >> good.price;

 add_entry(good);

 std::cout << "Запись успешно добавлена" << std::endl;

}

void add_entry(TGood new_entry){  // добавления записи в список всех ( новая запись)

 goodsCount++;

 TGood * new_goods = new TGood [goodsCount];

 for(int i = 0; i < goodsCount - 1; i++)

 {

   new_goods[i] = goods[i];

 }

 new_goods[goodsCount - 1] = new_entry;

 goods = new_goods;

}

void view_entries() // просмотр записей

{

 clean_screen();

 cout << "Все записи в таблице рейсов"<< endl;

 cout << "Всего записей в таблице: " << goodsCount <<  endl;

 cout <<  setw(5) << "| " << "рейсы"  <<  setw(10)<<"| "<<  "Количество пунктов назначения" << setw(10)<< "| " <<   "прибытие" << endl;

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

 {

   cout << "#" << i+1 << " | " << goods[i].name << setw(30)<<"| " << goods[i].count<< setw(30)<< "| "<<   goods[i].price << endl;

 }

}

void view_filtered_entries(){  //вывод отфильтрованных записей

 clean_screen();

 cout << "Записи в таблице с прибытием раньше заданного времени";

 

 int expensive_goods = 0;

 cout <<  setw(5) << "| " << "рейсы"  <<  setw(10)<<"| "<<  "Количество пунктов назначения" << setw(10)<< "| " <<   "прибытие" << endl;

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

 {

   if(goods[i].price > 1000000 )

   {

     expensive_goods++;

     cout << "#" << expensive_goods << " | " << goods[i].name << setw(30)<<"| " << goods[i].count<< setw(30)<< "| "<<   goods[i].price << endl;

   }

 }

 cout << endl << "Всего " << expensive_goods << " из " << goodsCount <<  " прибывших раньше времени" << endl;

}

void open_file(){  //Чтение записей из файла

 clean_screen();

 cout << "Чтение записей из файла" << endl << endl;

 string inputFilename;

 std::cout << "Введите имя файла: " ;

 std::cin >> inputFilename;

 ifstream inFile;

 inFile.open(inputFilename, ios::in);

 if (inFile)

 {

   new_table();

   while(!inFile.eof()){

     TGood item;

     inFile >> item.name >> item.count >> item.price;

     

     if(item.name != "")

     {

       add_entry(item);

     }

   }

   inFile.close();

 }

 std::cout << "Файл успешно прочитан. Загружено записей:  "<< goodsCount << std::endl;

}

void save_file(){ // сохранение файла

 clean_screen();

 cout << "Сохранение всех записей в файл" << endl << endl;

 string outputFilename;

 std::cout << "Введите имя файла: " ;

 std::cin >> outputFilename;

 ofstream outFile;

 outFile.open(outputFilename, ios::out);

 if (outFile)

 {

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

   {

     outFile <<  goods[i].name <<" " << goods[i].count<<  " "<<   goods[i].price << endl;

   }

   outFile.close();

 }

 std::cout << "Файл успешно сохранен. Имя файла:  "<< outputFilename << std::endl;

}

void save_filtered_file(){   // сохранение отфильтрованных данных в файл

 clean_screen();

 cout << "Сохранение записей с рейсами прибавшими раньше заданнго времени" << endl << endl;

 string outputFilename;

 std::cout << "Введите имя файла: " ;

 std::cin >> outputFilename;

 ofstream outFile;

 outFile.open(outputFilename, ios::out);

 if (outFile)

 {

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

   {

     if(goods[i].price > 1000000){

       outFile <<  goods[i].name <<" " << goods[i].count<<  " "<<   goods[i].price << endl;

     }

   }

   outFile.close();

 }

 std::cout << "Файл успешно сохранен. Имя файла:  "<< outputFilename << std::endl;

}

void clean_screen()

{

 cout << string( 100, '\n' );

}

Результат работы программы

Содержимое сохраненного файла

ne_vse.out

Сахар 20 1000001

Соль 30 2000000

vse_tovary.out

Мука 10 900000

Сахар 20 1000001

Соль 30 2000000

Крупа 40 500000