Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2014, 23:22   #1
Romalikons
Пользователь
 
Регистрация: 03.10.2013
Сообщений: 22
По умолчанию Матрицы

Условие задачи : матрицу заполнить случайными значениями , найти в ней строку с наименьшим числом в главной диагонали и исключить всю строку. Что осталось записать в другую матрицу и вывести на экран. Помогите пожалуйста с реализацией ( вот мои наработки :
Код:
#include <iostream.h>
int main()
{
cout << "Razmernost : " << endl;
int mas[10][10];
int n , m , i ,j;
cin >> n >> m;
for (i=0;i<10;i++)                      // заполняю матрицу
{
for (j=0;j<10;j++)
{
mas[i][j]=random(10);
}
}
 
int minimum = mas[0][0];                             // нахожу минимальное значение на главное диагонали
for (int c = 1; c < n; c++)
if (mas[c][c] < minimum) minimum = mas[c][c];
 
 
for (i=0; i<n; i++)     //вывожу матрицу
{
for (j=0; j<m; j++)
cout << mas[i][j] << " ";
cout << "\n";
}
 
system("pause");
 
        return 0;
}
т.е. осталось только убрать строку с минимальным значением , подскажите пожалуйста , буду благодарен )
Romalikons вне форума Ответить с цитированием
Старый 29.10.2014, 01:44   #2
studentus1985
Пользователь
 
Регистрация: 21.10.2014
Сообщений: 25
По умолчанию

Не понятно зачем вы используете переменные n и m если не используете динамический массив. Вы же работаете с стационарным массивом:
Код:
int mas[10][10];
. И второй вопрос: зачем вам нужно значение минимального диагонального элемента, вам же нужно только номер строки в котором он записан. Поэтому:
Код:
int index_min;
int minimum = mas[0][0];                             // нахожу минимальное значение на главное диагонали
for (int c = 1; c < n; c++)
if (mas[c][c] < minimum) {
minimum = mas[c][c];
index_min=c;
}
Если хотите сделать программу универсальной то рекомендую использовать динамический массив, в котором размеры можно задавать с помощью переменных n и m. Вот где то так:
Код:
int **mas=new int*[n];                 //sozdanie dinamicheskogo
for(int i=0; i<n; i++) mas[i]=new int[m]; //massiva
ну и матрицу без строки с минимальным диагональным элементом тоже записать в динамический массив но с размерами [n-1][m]:
Код:
int **new_mass=new int*[n-1];                 //sozdanie dinamicheskogo
for(int i=0; i<(n-1); i++) new_mass[i]=new int[m]; //massiva
int k=0;  
  for (int i=0; i<n; i++){
       if(i==index_min) i++; 
         for(int j=0; j<m; j++){
             new_mas[k][j]=mas[i][j];  
         }
       k++;
   }
Как то так)
studentus1985 вне форума Ответить с цитированием
Старый 29.10.2014, 10:13   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Одномерные и двумерные динамические массивы на C++ можно создать с помощью std::vector и отказаться от операторов new и delete

Следующий пример создаёт одномерный массив из десяти ячеек, и заполняет их нулями. В данном примере в ячейчах могут храниться только целые числа:

Код:
#include <vector>

int main()
{
    std::vector<int> arr( 10, 0 );

    return 0;
}

Для того чтобы хранить вещественные числа необходимо вместо int написать float, а константу заполнения записать явно, как float: 0.0f

Код:
#include <vector>

int main()
{
    std::vector<float> arr( 10, 0.0f );

    return 0;
}

Для того чтобы хранить вещественные числа двойной точности необходимо вместо int написать double, а константу заполнения записать явно, как double: 0.0

Код:
#include <vector>

int main()
{
    std::vector<double> arr( 10, 0.0 );

    return 0;
}

После того как мы создали массив мы можем его использовать для хранения чисел. В следующем примере мы присваиваем нескольким элементам массива значения и выводим один их элементов массива на экран:

Код:
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> arr( 10, 0);

    arr[0] = 34;
    arr[1] = 5;

    std::cout << arr[0] << std::endl;

    return 0;
}

Мы можем добавить элемент в массив, тогда увеличится его размер

Код:
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> arr( 10, 0);

    arr[0] = 34;
    arr[1] = 5;

    std::cout << "size = " << arr.size() << std::endl; // output: size = 10

    arr.push_back( 87 );
    std::cout << arr[10] << std::endl; // output: 87

    std::cout << "size = " << arr.size() << std::endl; // output: size = 11

    return 0;
}

Для того чтобы создать двумерный массив с помощью std::vector необходимо вместо int написать std::vector. Следующая запись означает, что мы создали массив из пяти элементов, каждый из которых - это массив целых чисел:

Код:
#include <vector>

int main()
{
    std::vector< std::vector<int> > arr( 5 );

    return 0;
}

Но пока каждый из этих под-массивов нулевой длины. Исправим это:

Код:
#include <vector>

int main()
{
    const int nrows = 5;
    const int ncols = 3;

    std::vector< std::vector<int> > arr( nrows );

    for( size_t row = 0; row < nrows; ++row ) {
        arr[row].resize( ncols );
    }

    return 0;
}
Теперь у нас есть двумерный массив у которого 5 строк и 3 столбца


Присвоим какой-либо ячейке значение и выведем значение этой ячейки на экран:

Код:
#include <iostream>
#include <vector>

int main()
{
    const int nrows = 5;
    const int ncols = 3;

    std::vector< std::vector<int> > arr( nrows );

    for( size_t row = 0; row < nrows; ++row ) {
        arr[row].resize( ncols );
    }

    arr[4][0] = 87;

    std::cout << arr[4][0] << std::endl;

    return 0;
}

Передача в функцию

Одномерные и двумерные массивы передаются в функцию ссылкой. Чтобы передавать адрес объекта, а не копировать целиком. Если не планируется менять значения элементов массива, то добавляется const

Код:
#include <iostream>
#include <vector>

void show1DArray( const std::vector<int> &arr1D )
{
    std::cout << arr1D[0] << std::endl;
}

void show2DArray( const std::vector< std::vector<int> > &arr2D )
{
    std::cout << arr2D[1][1] << std::endl;
}

int main()
{
    // 1D array
    std::vector<int> arr1D( 10, 0);

    arr1D[0] = 34;

    show1DArray( arr1D );

    const int nrows = 5;
    const int ncols = 3;

    // 2D array
    std::vector< std::vector<int> > arr2D( nrows );

    for( size_t row = 0; row < nrows; ++row ) {
        arr2D[row].resize( ncols );
    }

    arr2D[1][1] = 5;

    show2DArray( arr2D );

    return 0;
}

Если требуется передать одномерный массив в функцию, которая принимает указатель на буфер, то для этого есть метод .data()

Код:
#include <iostream>
#include <vector>

void show1DArray( int *p )
{
    std::cout << p[0] << std::endl;
}

int main()
{
    // 1D array
    std::vector<int> arr1D( 10, 0);

    arr1D[0] = 34;

    show1DArray( arr1D.data() );

    return 0;
}
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ и Pascal. Матрицы. Дана матрица размером n х m. Инвертировать каждую строку матрицы. Summerlight Помощь студентам 0 24.12.2013 00:19
Перекодировать консолевкий код под оконное приложение в Билдер 6. Решаю матрицы Матрицы g.e.s Общие вопросы C/C++ 0 18.11.2012 20:21
Первый элемент - размерность матрицы, остальные образуют строки этой матрицы Anastasiya_Pot Помощь студентам 2 10.04.2012 09:46
Ф-ия, определяющая сумму строк матрицы, если на главной диагонали матрицы имеется отрицательный эл-т. Volk_xD Помощь студентам 6 05.01.2011 13:39
На главную диагональ матрицы поместить наибольшие элементы этой матрицы mivel Помощь студентам 2 23.12.2009 21:19