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

Тема в разделе "C/C++/C#", создана пользователем -, 11 дек 2010.

  1. Гость

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

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Опять же... Если бы вы не написали ничего про файл, я бы уже сейчас написал Вам решение, но само слово файл - уже намекает на какую то структуру (иными словами, пожалуйста прикрепите файл с исх. данными к сообщению), что бы правельно реализовать получение (а в последсвии и заполение данными из него массива).
    //----------------------------------------
    Ну а это уже все полностью понятно...
    Если запостите файл с данными, к завтрашнему утру получите готовый код.
     
  3. Гость

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

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Код (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();
    }
     

    Вложения:

    • filearr1.jpg
      filearr1.jpg
      Размер файла:
      58 КБ
      Просмотров:
      8
    • filearr2.jpg
      filearr2.jpg
      Размер файла:
      83,8 КБ
      Просмотров:
      7
    • 1.txt
      Размер файла:
      454 байт
      Просмотров:
      10
    • test2.txt
      Размер файла:
      219 байт
      Просмотров:
      7
    • a1.txt
      Размер файла:
      114 байт
      Просмотров:
      9
Загрузка...
Похожие Темы - задача Обработка двумерного
  1. Янчик
    Ответов:
    0
    Просмотров:
    479
  2. TrishaRay
    Ответов:
    1
    Просмотров:
    781
  3. elzim
    Ответов:
    0
    Просмотров:
    929
  4. ShaoKahn
    Ответов:
    0
    Просмотров:
    1.117
  5. eremin-sanek
    Ответов:
    3
    Просмотров:
    1.105

Поделиться этой страницей