Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Касаткин С., Раткевич И., Травова Н. - Лаборато...doc
Скачиваний:
3
Добавлен:
22.11.2019
Размер:
1.01 Mб
Скачать
  1. Программа считывает матрицу из файла, выводит ee на экран, сортирует элементы в каждом столбце и отсортированную матрицу записывает в файл.

Этот пример иллюстрирует использование матрицы, размеры которой опре­де­ля­ют­ся в процессе выполнения программы. Размеры матрицы считываются из файла, хотя это необязательно. Размеры матрицы можно определить, подсчитав количество чисел в первой строке и количество строк (если каждая строка матрицы записана как одна строка файла).

#include<iostream>

#include<iomanip>

#include<math.h>

#include<conio.h>

#include<String.h>

#include<ctype.h>

#include <stdlib.h>

#include<windows.h>

#include <fstream> // Этот файл обеспечивает работу с файлами

using namespace std; // !!! Используем стандартное пространство имён

// функция перестановки значений двух величин

void swap(float& a, float& b)

{

float tmp;

tmp=a; a=b; b=tmp;

}

int main()

{

if(SetConsoleCP(1251)==0)

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

// Объявляем файлы:

ifstream inf("test.txt");

ofstream outf("sort.txt");

int m,n; // Количество строк и столбцов

register int i,j;

// счетчики (пример использования регистровых переменных)

inf >> m >> n;

/* считываем из файла размеры матрицы, которые должны быть записаны в начале файла */

float *vek, **mat;

/* Указатель на матрицу как на линейный массив и указатель на массив ука­за­телей для обращения к элементам массива как к элементам матрицы. Элементы мас­сива объявлены как числа, которые могут иметь дробную часть */

vek=new float[m*n]; // выделяем место под элементы матрицы

mat=new float*[m];

// выделяем место под массив указателей на строки матрицы

for (i=0; i<m; i++) // заполняем массив указателями

mat[i]= &vek[i*n]; // деление на строки матрицы

printf("Исходная матрица:\r\n");

// чтение элементов из файла

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

{

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

{

inf>>mat[i][j];

// считываем элемент как слово и записываем в матрицу

if (inf.eof())

// если достигнут конец файла, а матрица еще не заполнена

{

printf("Не хватает данных\r\n");

_getch();

exit(0);

}

printf("%10.2f",mat[i][j]); // вывод элемента на экран

}

printf("\r\n"); // перевод курсора в начало следующей строки

}

// Сортировка по столбцам методом пузырька:

for (j=0; j<n; j++) // проходим по столбцам

for (int p=1; p<m; p++) // отсчитываем проходы по столбцу

for (i=0; i<m-p; i++)

// сравниваем соседние элементы в столбце

if (mat[i][j]>mat[i+1][j])

swap (mat[i][j],mat[i+1][j]);

// и, если нужно, переставляем их

// Запись в файл и вывод на экран полученной матрицы:

cout << "Отсортированная по столбцам: \n";

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

{

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

{

// запись элемента в файл:

outf <<setiosflags(ios::showpoint)<< setprecision(2)<<setw(10)<<mat[i][j];

// вывод на экран:

cout <<setiosflags(ios::showpoint) << setprecision(2)<< setw(10)<<mat[i][j];

// каждый элемент записывается с двумя цифрами после точки в поле из 8 позиций

}

outf<<endl;

// в конце строки матрицы выводим признак конца строки

cout << endl;

}

outf.close();

delete []mat;

delete []vek;

_getch();

return 0;

}

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.