- •Лабораторная работа № 4 Массивы
- •Примеры программ использующие массивы.
- •Программа заполняет массив a(50) случайными целыми числами из диапазона [-20, 30] и упорядочивает его по возрастанию. Исходный и упорядоченный массивы выводятся на экран дисплея.
- •Программа, которая по заданным корням многочлена степени n восстанавливает все коэффициенты многочлена.
- •Программа считывает линейный массив из файла, выводит его на экран, и подсчитывает количество элементов массива, находит min и max элементы и их индексы.
- •Программа заполняет массив a[5][5] случайными целыми числами из диапазона [-3, 3] и находит произведение элементов, стоящих на побочной диагонали.
- •Программа считывает матрицу из файла, выводит ee на экран, сортирует элементы в каждом столбце и отсортированную матрицу записывает в файл.
- •Программа, сортирующая файл по длине строки методом быстрой сортировки.
- •Задания для самостоятельного выполнения
Программа считывает матрицу из файла, выводит 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");
intm,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;
}