- •Лабораторная работа № 4 Массивы
- •Примеры программ использующие массивы.
- •Программа заполняет массив a(50) случайными целыми числами из диапазона [-20, 30] и упорядочивает его по возрастанию. Исходный и упорядоченный массивы выводятся на экран дисплея.
- •Программа, которая по заданным корням многочлена степени n восстанавливает все коэффициенты многочлена.
- •Программа считывает линейный массив из файла, выводит его на экран, и подсчитывает количество элементов массива, находит min и max элементы и их индексы.
- •Программа заполняет массив a[5][5] случайными целыми числами из диапазона [-3, 3] и находит произведение элементов, стоящих на побочной диагонали.
- •Программа считывает матрицу из файла, выводит ee на экран, сортирует элементы в каждом столбце и отсортированную матрицу записывает в файл.
- •Программа, сортирующая файл по длине строки методом быстрой сортировки.
- •Задания для самостоятельного выполнения
Программа считывает линейный массив из файла, выводит его на экран, и подсчитывает количество элементов массива, находит min и max элементы и их индексы.
При работе с линейным массивом, записанным в файл, необязательно переписывать его в оперативную память (однако следует помнить, что обращение процессора к оперативной памяти происходит быстрее)
#include<iostream>
#include<locale> //!!! Отвечает за работу с локализацией ОС
#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;
/* если с файлом работают как главная программа, так и функции, лучше объявить его как глобальную переменную */
ifstream file("test.txt");
// Объявляем функцию, которая будет выдавать индексы:
void ShowIndex( int , float );
int main()
{
if(SetConsoleCP(1251)==0)
{
cerr<<"Fialed to set codepage!"<<endl;
}
if(SetConsoleOutputCP(1251)==0)
{
cerr<<"Failed to set OUTPUT page!"<<endl;
}
if(!file)
{
cerr<<"Файл test.txt несуществует\n";
return 0;
}
float n, min, max; // число, считываемое из файла, минимум и максимум
int k=0; // количество чисел в файле
while (1) // как бы бесконечный цикл
{
file>>n;
if (file.eof()) break;
// если достигнут конец файла, выходим из цикла
if (!k) // если считано первое число (k=0)
{
min = n;
max = n;
}
else // если число – не первое
{
if (n<min) min=n;
// если встретилось число меньше, заменяем значение min
if (n>max) max=n;
// если встретилось число больше, заменяем значение max
}
cout<<n<<' '; k++;
/* выводим считанное число на экран и увеличиваем счетчик прочитанных чисел */
}
cout << endl; // завершаем вывод переводом курсора
cout<<"Количество чисел в файле: " <<k<<endl;
cout<<"Минимальный элемент: " << min<<endl;
cout<<"Номер(а) минимального элемента: ";
ShowIndex(k, min);
// вызываем функцию и передаем ей количество элементов и значение min
cout<<"Максимальный элемент: " << max <<endl;
cout<<"Номер(а) максимального элемента: " ;
ShowIndex(k, max);
// вызываем функцию и передаем ей количество элементов и значение max
_getch();
return 0;
}
/* Функция, которая считывает k чисел из файла, находит номера элементов, значение которых совпадает с m, и выводит на экран найденные индексы */
void ShowIndex( int k,float m)
{
file.clear();
file.seekg(0L,ios::beg); // переходимвначалофайла
float n; // число, считываемое из файла
for (int i=0; i<k; i++) // отсчитываем k чисел
{
file>>n;
if (n == m) cout<< i <<' ';
// если число равно m, выводим номер этого числа на экран
}
cout<<endl;
}
Программа заполняет массив a[5][5] случайными целыми числами из диапазона [-3, 3] и находит произведение элементов, стоящих на побочной диагонали.
Номера элементов, стоящих на главной диагонали, совпадают; номера элементов, стоящих на побочной диагонали удовлетворяют условию: i + j = n+1, где n –размер матрицы.
#include<iostream>
#include<locale> //!!! Отвечает за работу с локализацией ОС
#include<iomanip>
#include<math.h>
#include<conio.h>
#include<String.h>
#include<ctype.h>
#include<stdlib.h>
#include<windows.h>
using namespace std;
int main()
{
if(SetConsoleCP(1251)==0)
{
cerr<<"Fialed to set codepage!"<<endl;
}
if(SetConsoleOutputCP(1251)==0)
{
cerr<<"Failed to set OUTPUT page!"<<endl;
}
//Динамически создаём 2- мерный массив
int n=5,**a= new int*[n];
cout<<"Исходный массив:\n";
int RANGE_MIN = -3; // Минимальный элемент
int RANGE_MAX = 7;// Максимальный элемент
// для прохода по всем ячейкам матрицы обычно используют двойной цикл
for (int i = 0; i < 5; i++) // проходим по строкам матрицы
{
a[i]=new int [n];
// в каждой строке проходим по столбцам:
for (int j = 0; j < 5; j++) // счетчики должны быть разными!
{
a[i][j]=(int)(((double) rand() / (double) RAND_MAX) * RANGE_MAX + RANGE_MIN);
cout<< setw(5)<<a[i][j];
}
cout<<endl;
/* после вывода строки матрицы переводим курсор в начало следующей строки на экране */
}
cout <<endl;
// вычисляем произведение:
long p = 1;
for (int i = 0; i < 5; i++)
p *= a[i][5-i-1]; // номерстолбцавычисляемчерезномерстроки
// обратите внимание на то, что для прохода по диагонали требуется один цикл
cout << "\nПроизведение элементов, стоящих на побочной диагонали = "<< p <<endl;
_getch();
return 0;
}