Задача: Обработка двумерного массива, нахождение макс. элемента и его

Тема в разделе "C/C++/C#", создана пользователем Miller85, 30 ноя 2010.

Статус темы:
Закрыта.
  1. Miller85

    Miller85 Гость

    Не могу запрограмировать... Помогите плиз...

    Исходная матрица (4*5)
    2 0 3 -4 5
    1 -2 7 -3 0
    0 4 -5 -6 -2
    6 9 5 2 -1

    Вот мой код
    Код (C++):
    #include<iostream.h>
    #include<iomanip.h>
    #include<conio.h>
    #include<stdlib.h>

    void main(void)
    {
    int x[4][5],n,m,i,j,k,q,s,mi,mj;
    char ch;
    unsigned int b;
    clrscr();
    cout<<"VVedite rasmeri ishodnoi matrici"<<endl
    <<"kolichestvo strok(<=4):";
    cin>>n;
    cout<<"kolichestvo stolbcov(<=5):";
    cin>>m;
    cout<<"Vvedite 1, esli matrica vvoditsya vruchnuy,"<<endl
    <<"ili luboy drugoi simvol, esli ona formiruetsya"<<endl
    <<"datchikom cluchaynih chisel:";
    cin>>ch;
    if(ch=='1'){
    cout<<"Vvedite ishodnuy matricu iz celih chisel"<<endl;
    for(i=0;i<n;i++)
    for(j=0;j<m;j++)
    {cout<<"x["<<i<<"]["<<j<<"]=";
    cin>>x[i][j];}
    }
    else{
    cout<<"Vvedite celoe pologitelnoe chislo"<<endl
    <<"dlya inicializacii datchika"<<endl
    <<"sluchaynix chisel:";
    cin>>b;
    srand(b);
    for(i=0;i<n;i++)
    for(j=0;j<m;j++)x[i][j]=(rand()-16383)%10;
    }
    cout<<endl<<endl<<endl<<setw(30)<<"Ishodnaya matrica:"<<endl;
    for(i=0;i<n;i++)
    {for(j=0;j<m;j++)cout<<setw(6)<<x[i][j];
    cout<<endl;
    }
    k=0;q=0;mi=0;mj=0;
    for(j=0;j<m;j++){
    mj=0;
    for(i=0;i<n;i++)
    if(x[i][j]>x[mi][mj]){mi=i;mj=j;}

    }
    if(mi==0)cout<<"maximalnih elementov v matrice net"<<endl;
    else{
    cout<<endl<<"kolichestvo maximalnih pologitelinih elementov v matrice - "<<mi
    << " v "
    <<q<< "-m stolbce"<<endl;
    cout<<endl<<setw(30)<<"poluchen massiv:"<<endl;
    for(i=0;i<n;i++)cout<<setw(6)<<x[i][q];
    cout<<endl;
    }
    cout<<endl<<"konec programmi.";
    getch();
    }
     
  2. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Напишите задание пожалуйста ;-)
    И что именно у вас не получается....
     
  3. Miller85

    Miller85 Гость

    Сформировать массив из столбца, содержащего максимальный элемент матрицы... Не могу понять как сделать
     
  4. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Вот:)) Теперь все понятно ;-)) Щас гляну твой код :)
     
  5. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Ну вот... Там заколовочные файлы расскомментируешь, мои добавленные удалишь (кроме time.h), using namespace std - удалишь
    Код (C++):
    //#include<iostream.h>
    #include <iostream>
    //#include<iomanip.h>
    #include <iomanip>
    #include<conio.h>
    #include<stdlib.h>
    #include <time.h>

    using namespace std;

    void main(void)
    {
    //И так, посмотрим
    int x[4][5],n,m,i,j,k,q,s,mi,mj;
    char ch;
    unsigned int b;
    //clrscr();
    cout<<"VVedite rasmeri ishodnoi matrici"<< endl
    <<"kolichestvo strok(<=4):";
    cin>>n; //Вводим n
    cout<<"kolichestvo stolbcov(<=5):";
    cin>>m; //Вводим m
    cout<<"Vvedite 1, esli matrica vvoditsya vruchnuy,"<<endl
    <<"ili luboy drugoi simvol, esli ona formiruetsya"<<endl
    <<"datchikom cluchaynih chisel:";
    cin>>ch; //Интересное меню [+], только давай чуть-чуть его переделаем
    bool RandTrue = false;
    srand(time(NULL));
    if(ch !='1')
    {
    RandTrue = true;
    }
    cout<<"Vvedite ishodnuy matricu iz celih chisel"<<endl;
    for(i=0;i<n;i++)
    for(j=0;j<m;j++)
    {
    cout<<"x["<<i<<"]["<<j<<"] = ";
    if (!RandTrue)
    cin>>x[i][j];
    else
    {
    x[i][j]=rand()%100;
    cout << x[i][j]<< endl;
    }
    }
    /*
    }
    else
    {
    cout<<"Vvedite celoe pologitelnoe chislo"<<endl
    <<"dlya inicializacii datchika"<<endl
    <<"sluchaynix chisel:";
    cin>>b;
    srand(b);
    for(i=0;i<n;i++)
    for(j=0;j<m;j++)x[i][j]=(rand()-16383)%10;
    }
    */


    //Ну тут вывел на экран исходную
    //Кстати максимальный элемент как раз в этих циклах и поищим
    int MaxValue = -9999999; //Максимальное значение, сделаем его ничтожно маленьким для начала
    int MaxStolb = -1; //Индекс столбца с макс. элементом
    cout<<endl<<endl<<endl<<setw(30)<<"Ishodnaya matrica:"<<endl;
    for(i=0;i<n;i++)
    {
    for(j=0;j<m;j++)
    {
    cout<<setw(6)<<x[i][j];
    //Будем искать
    if (x[i][j]> MaxValue) //Если текущий элемент > МахValue
    {
    MaxValue = x[i][j]; //То заменим значение на значение этого элемента
    MaxStolb = j; //И запишим текущий столбец
    }
    }
    cout<<endl;
    }

    /*k=0;
    q=0;
    mi=0;
    mj=0;
    for(j=0;j<m;j++)
    {
    mj=0;
    for(i=0;i<n;i++)
    if(x[i][j]>x[mi][mj])
    {
    mi=i;
    mj=j;
    }
    }
    */


    //if(mi==0)cout<<"maximalnih elementov v matrice net"<<endl; //Так не бывает;-))) Если тебе конечно макс. положительный не надо найти
    //else
    //{
    //Кол-во нас тоже не интерисует;-))) Он же у нас один единственный максимальный;-)) Ну или первый такой
    //cout<<endl<<"kolichestvo maximalnih pologitelinih elementov v matrice - "<<mi
    //      << " v "
    //      <<q<< "-m stolbce"<<endl;
    cout<<endl<<setw(30)<<"poluchen massiv:"<<endl;
    //Ну а для верности запишим его в массив нам же нужно сформировать его (по-заданию)
    int y[4]; //Это наш выходной массив
    for(i=0;i<n;i++)
    {
    cout<<setw(6)<<x[i][MaxStolb];
    y[i] = x[i][MaxStolb];
    }
    cout<< endl;
    //}
    cout<< endl<< "konec programmi.";
    getch();
    }
     
  6. Miller85

    Miller85 Гость

    Спасибо! Вроде бы всё понятно... Только не до конца понял про датчик случайных чисел... Если не сложно распиши пожалуйста

    Код (C++):
    cin>>ch; //Интересное меню [+], только давай чуть-чуть его переделаем
    bool RandTrue = false;
    srand(time(NULL));
    if(ch !='1')
    {
    RandTrue = true;
    }
    cout<<"Vvedite ishodnuy matricu iz celih chisel"<<endl;
    for(i=0;i<n;i++)
    for(j=0;j<m;j++)
    {
    cout<<"x["<<i<<"]["<<j<<"] = ";
    if (!RandTrue)
    cin>>x[i][j];
    else
    {
    x[i][j]=rand()%100;
    cout << x[i][j]<< endl;
    }
    }
     
  7. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Код (C++):
    cin>>ch; //Интересное меню [+], только давай чуть-чуть его переделаем
    bool RandTrue = false; //Заведем флаг, по-умолчанию его сразу в FALSE выставим
    srand(time(NULL)); //Инициализация генерат. случ. величины (исходя от текущего времени компа)- наилучший вариант для генератора
    if(ch !='1') //Если ввели не '1'
    {
    RandTrue = true; //То выставим флаг - в TRUE (типо нужно будет сгенерить значения)
    }
    cout<<"Vvedite ishodnuy matricu iz celih chisel"<<endl;
    for(i=0;i<n;i++)
    for(j=0;j<m;j++)
    {
    cout<<"x["<<i<<"]["<<j<<"] = "; //Выводишь на экран текст по индексу текущему
    if (!RandTrue) //А тут флаг проверяешь если FALSE
    cin>>x[i][j]; // То вводить с клавы
    else //А вот если true
    {
    x[i][j]=rand()%100; //То сразу генерируем случ. число от 0 до 99 оно получится у нас так как берем остаток от 100
    cout << x[i][j]<< endl; //И выводим на экран его (как будто бы и вводили с клавы);-) Интерфейс тоесть не изменяем никак
    }
    }
     
  8. Miller85

    Miller85 Гость

    Понял... Спасибо!
     
Загрузка...
Похожие Темы - Задача Обработка двумерного
  1. Янчик
    Ответов:
    0
    Просмотров:
    489
  2. TrishaRay
    Ответов:
    1
    Просмотров:
    783
  3. elzim
    Ответов:
    0
    Просмотров:
    932
  4. ShaoKahn
    Ответов:
    0
    Просмотров:
    1.128
  5. eremin-sanek
    Ответов:
    3
    Просмотров:
    1.107
Статус темы:
Закрыта.

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