задача - Обработка двумерного массива

  • Автор темы Guest
  • Дата начала
G

Guest

#1
ПОМОГИТЕ РЕШИТЬ ЗАДАЧУ - Написать программу на языке С++. В программе предусмотреть диалог,
откуда будут вводится элементы исходной матрицы – с клавиатуры или из
текстового файла. Результаты выводить на экран и в результирующий
текстовый файл. Матрицу выводить до и после преобразований.
ЗАДАНИЕ:
В матрице Р(n,m) найти строку с максимальной суммой элементов и
поэлементно поменять ее с первой строкой.
 

DarkKnight

Well-known member
01.08.2010
653
0
#2
- Написать программу на языке С++. В программе предусмотреть диалог,
откуда будут вводится элементы исходной матрицы – с клавиатуры или из
текстового файла.
Опять же... Если бы вы не написали ничего про файл, я бы уже сейчас написал Вам решение, но само слово файл - уже намекает на какую то структуру (иными словами, пожалуйста прикрепите файл с исх. данными к сообщению), что бы правельно реализовать получение (а в последсвии и заполение данными из него массива).
//----------------------------------------
Матрицу выводить до и после преобразований.
ЗАДАНИЕ:
В матрице Р(n,m) найти строку с максимальной суммой элементов и
поэлементно поменять ее с первой строкой.
Ну а это уже все полностью понятно...
Если запостите файл с данными, к завтрашнему утру получите готовый код.
 
G

Guest

#3
наврное матрицу вводить до преобразования..
 

DarkKnight

Well-known member
01.08.2010
653
0
#4
ПОМОГИТЕ РЕШИТЬ ЗАДАЧУ - Написать программу на языке С++. В программе предусмотреть диалог,
откуда будут вводится элементы исходной матрицы – с клавиатуры или из
текстового файла. Результаты выводить на экран и в результирующий
текстовый файл. Матрицу выводить до и после преобразований.
ЗАДАНИЕ:
В матрице Р(n,m) найти строку с максимальной суммой элементов и
поэлементно поменять ее с первой строкой.
C++:
/*
Написать программу на языке С++. В программе предусмотреть диалог,
откуда будут вводится элементы исходной матрицы – с клавиатуры или из
текстового файла. Результаты выводить на экран и в результирующий
текстовый файл. Матрицу выводить до и после преобразований.
ЗАДАНИЕ:
В матрице Р(n,m) найти строку с максимальной суммой элементов и
поэлементно поменять ее с первой строкой.
*/
/*
codeby.net
Autor: DarkKnight125 (Denis Goncharov)
*/
#include <iostream>
#include <iomanip>
#include <fstream>
#include <time.h>

using namespace std;

void main(void)
{
setlocale (LC_ALL,".1251"); //Установим локаль в 1251-кодовую станицу
char filename_in[128]={0}; //Имя входного файла
char filename_out[128]={0}; //Имя выходного файла
ofstream file_out; //Дескриптор выходного файла
ifstream file_in; //Дескриптор входного файла
int **Arr; //Наша матрица
int n,m; //Размерность матрицы

//Диолог с пользователем
int InitSelection = 0;
cout << "Выберите вариант загрузки данных : " << endl;
cout << "\t<0>: Загрузка из файла" << endl;
cout << "\t<1>: Сгенерировать генератором случ. величины" << endl;
cout << "Выберите: ";
cin >> InitSelection; //Выбор пользователя
cin.ignore(); //Уберем из потока ввода символ возрата корретки
cout << endl;

switch (InitSelection)
{
case 0: //Если выбор загрузка из файла
cout << "Введите имя файла (входного) : ";
cin.getline(filename_in, 127); //Получим имя файла (127-символов максимум)
file_in.open(filename_in,ios::beg); //Откроем файл
if (!file_in) //Если файла не существует выведим сообщение о ошибке и выйдем из программы
{
cout << "Ошибка: файл <" << filename_in << "> - не найден" << endl;
return;
}
//Если файл есть то
file_in >> n >> m; //Прочтем размерность массива
Arr = new int*[n]; //Выделим память под строки матрицы
for (int i =0; i< n; i++)
{
Arr[i] = new int[m];
for (int j = 0; j<m && !file_in.eof(); j++)
file_in>>Arr[i][j];
}
file_in.close();
break;
case 1: //Если матрица генерируется случ. величинами
srand(time(NULL)); //Инициализация генератора случ. величины
cout << "Введите размерность матрицы через пробел (n m) : ";
cin >> n >> m;
cin.ignore(); //Уберем из потока ввода символ возрата корретки
Arr = new int*[n]; //Выделим память под строки матрицы
//Заполним матрицу случ. величинами
for (int i = 0; i<n; i++)
{
Arr[i] = new int[m]; //Выделим память под столбцы
for (int j = 0; j<m; j++)
Arr[i][j] = rand()%1000 * (rand()%2?-1:1); //Генерация случ. значение [-999,999]
}
cout<< "Генерация значений завершена" <<endl;
break;
default:
cout << "Ошибка: Не верно введен параметр ввода данных" << endl;
return;

}

int IndexMaxStr = -1; //Индекс строки с макс. суммой элементов
int MaxSum = numeric_limits<int>::min(); 
cout << endl << "Матрица размерностью "<< n<< "x"<< m<< endl;
//Выведим матрицу на экран и найдем сразу строку с макс суммой элементов
for (int i =0; i<n; i++)
{
int SumTemp = 0;
for (int j = 0; j<m; j++)
{
cout<<setw(5)<<Arr[i][j]; //Вывод элемента на экран
//Находим сумму текущей строки
SumTemp += Arr[i][j];
}
//Проверим сумму на максимальную
if (SumTemp > MaxSum)
{
IndexMaxStr = i;
MaxSum = SumTemp;
}
cout << endl;
}
//Теперь меняем эту строку с первной
for (int i = 0; i<m; i++)
{
int Temp = Arr[IndexMaxStr][i];
Arr[IndexMaxStr][i] = Arr[0][i];
Arr[0][i] = Temp;
}
//Получим имя выходного файла
cout << "Введите имя файла (Выходного) : ";
cin.getline(filename_out, 127); //Получим имя файла (127-символов максимум)
file_out.open(filename_out,ios::beg); //Откроем файл
if (!file_out) //Если файла не существует выведим сообщение о ошибке и выйдем из программы
{
cout << "Ошибка: файл <" << filename_out << "> - не возможно создать" << endl;
return;
}
//Запишим в файл размерность матрицы
file_out<<n<<" "<<m;
//Теперь выведим еще раз массив после замены, и запишим его в файл
cout << endl << "...После замены строк..."<< endl;
for (int i =0; i<n; i++)
{
for (int j = 0; j<m; j++)
{
cout<<setw(5)<<Arr[i][j]; //Вывод элемента на экран
file_out<<" "<<Arr[i][j]; //Запишим в файл
}
cout << endl;
}
//Почистим за собой память
for (int i = 0; i<n; i++)
delete[] Arr[i];
delete[] Arr;
file_out.close();
}
 

Вложения