Массив, случайные числа, min элемент

Уровень сложности:

Составить программу, которая будет генерировать случайные числа в интервале [a;b] и заполнять ими двумерный массив размером 10 на 10. В массиве необходимо найти номер строки с минимальным элементом. Поменять строки массива местами, строку с минимальным элементом и первую строку массива. Организовать удобный вывод на экран.

Кроме создания двумерных динамических массивов, вам понадобится генератор случайных чисел. Когда массив создан и заполнен, нужно организовать в нем поиск минимального элемента. Пример работы программы:

#include <iostream>
#include <iomanip>
//#include <ctime>
#include <cstdlib>
using namespace std;

int main()
{
    srand(time(NULL));
    double a, b; // границы отрезка [a,b]
    cout << "Введите число а: ";
    cin >> a;
    cout << "Введите число в: ";
    cin >> b;

    double matrix[10][10]; // матрица случайных чисел

    // инициализация двумерного массива случайными числами
    for (int counter_rows = 0; counter_rows < 10; counter_rows++)
        for (int counter_columns = 0; counter_columns < 10; counter_columns++)
            matrix[counter_rows][counter_columns] = (double(rand()) / RAND_MAX) * (b - a) + a; // генерация случайных вещестчвенных чисел равномерно распределённых на отрезке [a,b]

    cout << "\nСгенерированный массив вещественных чисел" << endl;
    // вывод сгенерированного массива
    for (int counter_rows = 0; counter_rows < 10; counter_rows++)
    {
        for (int counter_columns = 0; counter_columns < 10; counter_columns++)
            cout << setw(7) << fixed << setprecision(3) <<matrix[counter_rows][counter_columns];
        cout << endl;
    }

    double min = matrix[0][0]; // переменная, для хранения минимального значения
    int nom; // порядковый номер строки с минимальным элеиентом

    // поиск минимального элемента в массиве
    for (int counter_rows = 0; counter_rows < 10; counter_rows++)
    {
        for (int counter_columns = 0; counter_columns < 10; counter_columns++)
        {
            if (matrix[counter_rows][counter_columns] < min )
            {
                min = matrix[counter_rows][counter_columns]; // сохраняем значение минимального элемента
                nom = counter_rows; // запоминаем номер строки
            }
        }
    }

    cout << "\nНомер строки с минимальным элементом: " << (nom + 1) << endl;
    cout << "Минимальный элемент: " << min << endl;
    // перестановка строк
    if (nom != 0) // если минимальный элемент не содержится в первой строке
    {
        double temp[10]; // временный массив для хранения первой строки
        for (int counter_columns = 0; counter_columns < 10; counter_columns++)
                temp[counter_columns] = matrix[0][counter_columns]; // сохраняем значения первой строки во временный массив

        for (int counter_columns = 0; counter_columns < 10; counter_columns++)
                matrix[0][counter_columns] = matrix[nom][counter_columns]; // сохраняем значения строки с минимальным элементом в перой строке двумерного масссива

        for (int counter_columns = 0; counter_columns < 10; counter_columns++)
                matrix[nom][counter_columns] = temp[counter_columns]; // перемещаем значения из временного массива на место строки с мин элементом

        // вывод массива с перестановленными строками
        cout << "\nМассив с перестановленными строками" << endl;
        for (int counter_rows = 0; counter_rows < 10; counter_rows++)
        {
            for (int counter_columns = 0; counter_columns < 10; counter_columns++)
                cout << setw(7) << fixed << setprecision(3) << matrix[counter_rows][counter_columns];
            cout << endl;
        }

    } // конец if

    return 0;
}


Результат:

CppStudio.com

Введите число а: 3
Введите число в: 9

Сгенерированный массив вещественных чисел
4.331 3.406 5.992 7.247 4.044 7.214 5.284 8.227 8.799 3.479
3.458 6.928 8.264 7.817 3.798 7.376 8.919 3.802 7.556 6.523
5.332 6.940 5.754 8.261 3.766 5.582 4.351 3.658 6.841 3.788
3.602 8.172 4.194 6.593 6.419 5.238 4.808 8.703 4.466 4.606
3.182 4.924 8.534 8.445 3.741 3.332 6.821 3.660 4.134 5.377
7.183 6.466 3.318 3.937 5.726 4.084 6.519 7.078 4.742 4.360
7.865 5.344 3.531 3.060 8.937 6.950 5.298 4.745 6.653 6.764
6.352 6.835 8.688 5.886 6.280 3.429 6.218 4.101 4.089 7.351
6.479 8.273 4.817 6.797 3.210 7.543 7.880 6.729 5.621 3.623
8.089 4.486 5.967 8.620 4.546 5.904 6.570 6.844 7.649 4.223

Номер строки с минимальным элементом: 7
Минимальный элемент: 3.060

Массив с перестановленными строками
7.865 5.344 3.531 3.060 8.937 6.950 5.298 4.745 6.653 6.764
3.458 6.928 8.264 7.817 3.798 7.376 8.919 3.802 7.556 6.523
5.332 6.940 5.754 8.261 3.766 5.582 4.351 3.658 6.841 3.788
3.602 8.172 4.194 6.593 6.419 5.238 4.808 8.703 4.466 4.606
3.182 4.924 8.534 8.445 3.741 3.332 6.821 3.660 4.134 5.377
7.183 6.466 3.318 3.937 5.726 4.084 6.519 7.078 4.742 4.360
4.331 3.406 5.992 7.247 4.044 7.214 5.284 8.227 8.799 3.479
6.352 6.835 8.688 5.886 6.280 3.429 6.218 4.101 4.089 7.351
6.479 8.273 4.817 6.797 3.210 7.543 7.880 6.729 5.621 3.623
8.089 4.486 5.967 8.620 4.546 5.904 6.570 6.844 7.649 4.223

Следующие статьи помогут вам в решении данной задачи:
Автор: admin
Дата: 12.09.2012
Поделиться:

Комментарии

  1. Eduard_P

    Eduard_P

    Ну вот, как бы так

    #include <cstdlib>
    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    
    
    int main(int argc, char** argv) {
        int a, b;
        float matrix1[10][10];
        float matrix2[10][10];
        float min_rand;
        int i, j, min_i;
        cout << "Введите число а: ";
        cin >> a;
        cout << "Введите число b: ";
        cin >> b;
        a = a*1000;
        b = b*1000;
        b = b-a;
       /*Ширина поля элемента матрицы для правильного вывода на экран столбцов*/
        int rang = 0, buf=a+b;
                do{buf = buf/10;
                rang++;
                }
            while (buf>0);
        
        min_rand = float (a+b)/1000;//максимально возможное число массива
        cout<<"\nСгенерированный массив вещественных чисел\n";
        //Заполнение массива
        for (i=0; i<10; i++){
            for (j=0; j<10; j++){
             matrix1[i][j] = (float (a+rand()%b))/1000;
             if (matrix1[i][j]<min_rand){min_rand=matrix1[i][j]; min_i=i;}//определение мин.значения и строки этого значения
             cout << setw(rang+2) <<matrix1[i][j];//вывод массива на печать
            }
            cout <<"\n";
        }
        cout << "\nНомер строки с минимальным элементом: " << min_i+1 << "\n";            
        cout << "Минимальный элемент: " << min_rand << "\n\n";
        cout << "Массив с перестановленными строками\n";
        //перестановка строк местами
        float buffloat;
        for (j=0; j<10; j++){
            buffloat = matrix1[0][j];
            matrix1[0][j] = matrix1[min_i][j];
            matrix1[min_i][j] = buffloat;        
        }
        //вывод на экран измененной матрицы
        for (i=0; i<10; i++){
            for (j=0; j<10; j++){
            cout << setw(rang+2) <<matrix1[i][j];
            }
            cout <<"\n";    
            }
        return 0;
    }
    
    
  2. lnikaFax

    Работа в интернете

  3. colt

    #include "stdafx.h"
    #include "iostream"
    #include "windows.h"
    
    using namespace std;
    
    const byte dimension = 10;
    const short multiplier = 1000;
    const float eps = 1e-4;
    float floatArray[dimension][dimension];
    float floatString[dimension];
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
    	
    	
    	cout.setf(ios::fixed | ios::right);
    	cout.precision(3);
    	
    
    	while(true)
        { 
    		system("CLS");
    		short shortA;
    		short shortB;
    		cout<<"Введите число а: ";
    		cin>>shortA;
    		cout<<"Введите число b: ";
    		cin>>shortB;
    		if (shortA>=shortB) cout<<"Число \"b\" должно быть больше числа \"a\"\n";
    		else 
    		{
    			float floatMIN=static_cast<float>(shortB)+eps;
    			short byteMINString;
    			shortA*=multiplier;
    			shortB*=multiplier;
    			cout<<"\nСгенерированный массив вщественных чисел\n";
    			for (byte i=0;i<dimension;i++)
    			{
    				for (byte j=0;j<dimension;j++) 
    				{
    					floatArray[i][j]=(rand()%(shortB-shortA)+shortA)/static_cast<float>(multiplier);
    					cout.width(8);
    					cout<<floatArray[i][j]<<" ";
    					if (floatArray[i][j]<floatMIN) {
    						floatMIN=floatArray[i][j];
    						byteMINString=i;
    					}					
    				}
    				cout<<"\n";
    			}
    			cout<<"\nНомер строки с минимальным элементом: "<<byteMINString+1<<"\n";
    			cout<<"Минимальный элемент:"<<floatMIN<<"\n";
    			for (byte j=0;j<dimension;j++) 
    			{
    				floatString[j]=floatArray[0][j];
    				floatArray[0][j]=floatArray[byteMINString][j];
    				floatArray[byteMINString][j]=floatString[j];
    			}
    			cout<<"\nМассив с переставленными строками\n";
    			for (byte i=0;i<dimension;i++)
    			{
    				for (byte j=0;j<dimension;j++) 
    				{	
    					cout.width(8);
    					cout<<floatArray[i][j]<<" ";										
    				}
    				cout<<"\n";
    			}
    		}
    
    		system("PAUSE");
        }
        return 0;
    }

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.