Отчёт12 (Готовые ЛР и ДЗ (ИУ5))
Описание файла
Файл "Отчёт12" внутри архива находится в следующих папках: Готовые ЛР и ДЗ (ИУ5), отчёты, работа 12. Документ из архива "Готовые ЛР и ДЗ (ИУ5)", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "информатика" в общих файлах.
Онлайн просмотр документа "Отчёт12"
Текст из документа "Отчёт12"
Московский государственный технический
университет им. Н.Э. Баумана.
Факультет «Информатика и управление»
Кафедра ИУ5. Курс «Основы информатики»
Отчет по лабораторной работе №12
«Обработка и печать числовой матрицы»
Выполнил: | Проверил: | |
студент группы ИУ5-14 | преподаватель каф. ИУ5 | |
Шевченко Роман | Папшев И.С. | |
Подпись и дата: | Подпись и дата: |
г. Москва, 2008 г.
Постановка задачи
Цели работы:
- создание двухмерных динамических массивов;
- обработка матриц;
- демонстрация технологии структурного программирования на примере программы сортировки строк матрицы;
- использование файлов для хранения исходных данных;
- форматированный вывод матриц на экран.
Задание.
Создать квадратную матрицу A размером N*N (где n вводится с клавиатуры), имеющую элементы A i,j = 1 / (j!)I . В зависимости от размера матрицы обеспечить удобное для пользователя отображение матрицы на экране.
Разработка алгоритма
В задаче желательно создать динамический массив. Для начала надо вычислить массив сумм. После этого сортируя массив сумм мы сортируем исходный массив. Для удобства пользователя при выводе, в том случае если массив не помещается по ширине поля вывода, следует переносить вниз оставшуюся не выведенную часть массива.
Описание входных, выходных и вспомогательных данных:
Входные данные:
int n – кол-во элементов в строе(столбце);
Входные данные:
double **arr – квадратная матрица A;
Вспомагательные данные:
long double *parr – массив сумм;
double f - факториал;
int imin – индекс мin элемента в массиве сумм;
Текст программы.
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
double factorial(int x);
void vivod(double **arr, int n);
int main()
{
setlocale(0, "russian");
cout <<"Введите кол-во элементов ";
cout.unsetf(ios::scientific | ios::fixed);
int n;
long double *parr;
double **arr, f;
cin >>n;
//--------------------------------------Создание массива---------------------------------------------------
try{
arr= new double *[n];
}catch(bad_alloc xa){
cout <<"Ошибка.\n";
system("Pause");
return 1;
}
for(int i= 0; i < n; i++){
try{
arr[i]= new double [n];
}catch(bad_alloc xa){
cout <<"Ошибка.\n";
system("Pause");
return 1;
}
for(int j= 0; j < n; j++){
f= factorial(j);
arr[i][j]= 1/pow(f,i);
}
}
//----------------------------------Контрольный вывод массива----------------------------------------------
vivod(arr, n);
//----------------------------------------Массив сумм------------------------------------------------------
try{
parr= new long double [n];
}catch(bad_alloc xa){
cout <<"Ошибка.\n";
system("Pause");
return 1;
}
for(int i= 0; i < n; i++){
parr[i]= 0;
for(int j= 0; j < n; j++){
parr[i]+= arr[i][j];
}
}
//----------------------------------------Cортировка-------------------------------------------------------
long double obmen;
int imin;
for(int j= 0;j < n;j++){
imin= j;
for(int i= j+1;i < n;i++){
if(parr[i] < parr[imin]) imin= i;
}
if(parr[j] != parr[imin]){
obmen= parr[j];
parr[j]= parr[imin];
parr[imin]= obmen;
for(int k=0;k < n;k++){
obmen= arr[j][k];
arr[j][k]= arr[imin][k];
arr[imin][k]= obmen;
}
}
}
//------------------------------------------Вывод массива-------------------------------------------------
cout <<"\n\n\nОтсортированный массив\n";
vivod(arr, n);
//-------------------------------------------The End------------------------------------------------------
system("Pause");
for(int i= 0;i < n; i++){
delete [] arr[i];
}
delete [] arr;
delete [] parr;
return 0;
}
double factorial(int x){
long int f= 1;
for(int k= 1; k < (x+1); k++) f*= k;
return (long double)f;
}
void vivod(double **arr, int n){
int k, t= 0;
do{
k= t;
t+= 9;
cout <<setw(3) <<"№ ";
for(int j= k; (j < t)&&(j < n); j++) cout <<setw(8) <<(j+1);
cout <<"\n-------------------------------------------------------------------------------\n";
for(int i= 0; i < n; i++){
cout <<setw(3) << i+1 <<" ";
for(int j= k; (j < t)&&(j < n); j++){
cout <<setprecision(1) <<setw(8) <<arr[i][j];
}
cout <<"\n";
}
cout <<"\n\n";
}while(t < n);
}
Анализ результатов