Переписать положительные элементы матрицы

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

Переписать все положительные элементы матрицы С(6,8) в вектор А. используя метод простой сортировки, расположить их по возрастанию.

Результат работы программы показан ниже:

#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;

int main(int argc, char* argv[])
{
    srand(time(NULL)); // засеиваем генератор случайных чисел значением времени
    int matrixC[6][8]; // объявление матрицы С
    for (int line_counter = 0; line_counter < 6; line_counter++)
    {   
        for (int column_counter = 0; column_counter < 8; column_counter++)
        {
            matrixC[line_counter][column_counter] = rand() % 100 - rand() % 100; // заполняем двумерный массив случайными числами [-99;99] 
            cout << setw(3) <<matrixC[line_counter][column_counter] << "  ";
        }
        cout << endl;
    }
    cout << "======================================" << endl;
    int min = 100; // самое максимальное может быть 99, поэтому переменную min инициализируем значением 100
    int vectorA[48], // вектор положительных отсортированных чисел
        line_min, // номер строки, в которой найдено минимальное значение
        column_min, // номер столбца, в котором найдено минимальное значение
        counterA = 0; // счётчик элементов вектора положительных отсортированных чисел
    while (true) // цикл поиска и сортировки положительных чисел из двумерного массива
    {
    ////////////////////////поиск минимального числа//////////////////////////////////
    for (int line_counter = 0; line_counter < 6; line_counter++)
        for (int column_counter = 0; column_counter < 8; column_counter++)
            if ((matrixC[line_counter][column_counter] < min) && (matrixC[line_counter][column_counter] >= 0))
            {
                min = matrixC[line_counter][column_counter]; // минимальное в двумерном массиве
                line_min = line_counter; // номер строки
                column_min = column_counter; // номер столбца
            }
    //////////////////////////////////////////////////////////////////////////////////
    if (min != 100) // если ещё не все значения просмотрены 
    {
     vectorA[counterA] = min; // положить минимальное значение в вектор
     matrixC[line_min][column_min] = -1; // в двумерном массиве на место минимального элемента ставим -1
     counterA++; // увеличиваем счётчик элементов вектора положительных отсортированных чисел на 1 
     min = 100; // минимальное присваеваем 100
    } else break; // иначе выход из цикла while 

    }

    // печать элементов вектора
    for (int counter = 0; counter < counterA; counter++)
    {
        cout << vectorA[counter] << " ";
    }
    cout << endl;
    system("pause");
    return 0;
}

CppStudio.com
 -3   39   76  -24  -62  -56    8  -90  
-83   54   41  -77  -10   -5  -48   52  
 24  -48  -82   34  -31   52   68   63  
-54  -97  -44    9   36    0   95  -12  
 91  -33   68   17   27    9  -20  -20  
-12   17  -44   41  -19   32  -10   -5  
======================================
0 8 9 9 17 17 24 27 32 34 36 39 41 41 52 52 54 63 68 68 76 91 95
Следующие статьи помогут вам в решении данной задачи:
Автор: admin
Дата: 11.09.2012
Поделиться:

Комментарии

  1. Cloud_Mind

    #include "stdafx.h"
    #include<iostream>
    #include<vector>
    #include<time.h>
    #include<algorithm>
    #include<iomanip>
    #include<clocale>
    using namespace std;
    
    void main()
    {
    	setlocale(LC_CTYPE, "rus");
    	srand(time(NULL));
    
    	vector<int>my_vector;
    	int a, b;
    	cout << "Введите кол-во строк матрицы: ";
    	cin >> a;
    	cout << "Введите кол-во столбцов матрицы: ";
    	cin >> b;
    
    	int **mas = new int*[a];
    	for (int i = 0; i < a; i++) {
    		mas[i] = new int[b];
    	}
    
    	for (int i = 0; i < a; i++) {
    		for (int j = 0; j < b; j++) {
    			mas[i][j] = rand() % 21 + (-10);
    			cout << setw(3) << mas[i][j] << " ";
    			if (mas[i][j] >= 0) {
    				my_vector.push_back(mas[i][j]);
    			}
    		}
    		cout << endl;
    	}
    	
    	for (int i = 0; i < my_vector.size() - 1; i++) {
    		for (int j = i + 1; j < my_vector.size(); j++) {
    			if (my_vector[i] > my_vector[j]) {
    				swap(my_vector[i], my_vector[j]);
    			}
    		}
    	}
    	
    	for (int i = 0; i < my_vector.size(); i++) {
    		cout << my_vector[i] << " ";
    	}
    
    	for (int i = 0; i < a; i++) {
    		delete[]mas[i];
    	}
    	
    	system("pause");
    }
  2. IrishSilvan

    //============================================================================
    // Name        : main.cpp
    // Author      : IrishSilvan
    // Version     : 1.0.0.0
    // Copyright   : IrishSilvan
    // Description : Sorting Matrix
    //============================================================================
    
    #include <cstdlib>
    #include <iostream>
    #include <vector>
    #include <iomanip>
    
    using namespace std;
    
    void sortMatrix(vector<int> *unsortMatrix);
    
    int main() {
        vector<vector<int> > matrix(6, vector<int>(8, 2));
        srand((unsigned int) time(NULL));
        for(int i = 0; i < 6; ++i) {
            for(int j = 0; j < 8; ++j) {
                int k = -10 + (rand() % 20);
                matrix[i][j] = k;
                cout << setw(4) << matrix[i][j];
            }
            cout << endl;
        }
    
        vector<int> newVector(0);
        for(int i = 0; i < 6; i++) {
            for(int j = 0; j < 8; j++) {
                if(matrix[i][j] > 0) {
                    newVector.push_back(matrix[i][j]);
                }
            }
        }
    
        for(int i = 0; i < newVector.size(); i++) {
            cout << " " << newVector[i];
        }
        sortMatrix(&newVector);
        cout << endl;
        for(int i = 0; i < newVector.size(); i++) {
            cout << " " << newVector[i];
        }
        cout << endl;
    	return 0;
    }
    
    void sortMatrix(vector<int> *unsortVector) {
        int minElement;
        int count = unsortVector->size();
        int pos = 0;
        vector<int> tempVector(0);
        while(count > 0){
                for (int i = 0; i < unsortVector->size(); i++) {
                    if (i == 0) {
                        minElement = unsortVector->at(i);
                        pos = 0;
                    } else if (minElement >= unsortVector->at(i)) {
                        minElement = unsortVector->at(i);
                        pos = i;
                    }
                    if(i == unsortVector->size() - 1) {
                        tempVector.push_back(minElement);
                        unsortVector->erase(unsortVector->begin() + pos);
                    }
                }
                count--;
        }
        tempVector.swap(*unsortVector);
    }
  3. Adam1983

    #include <conio.h>
    #include <iomanip>
    #include <iostream>
    #include <ctime>
    #include <vector>
    
    using namespace std;
    
    
    int main(int argc, char** argv)
    {
    
    setlocale (LC_ALL, "russian");
    
    srand(time(0));
    
    int arr[6][8];
    //заполняем массив случайными значениями и выводим на экран
    for (int i(0); i<6; i++)
    {
    	for(int j(0); j<8; j++)
    	{
    		arr[i][j]=rand()%20-5;
    		cout << setw(4) << arr[i][j];
    	}
    	cout << endl;
    }
    
    vector<int> A(48);
    int z(0);
    //копируем данные массива в вектор
    for (int i(0); i<6; i++)
    	for(int j(0); j<8; j++)
    	{
    		  A[z]= arr[i][j];
    		  z++;
    	}
    //вывод результата на экран
    cout << "\n\n========================ПОСЛЕ ПЕРЕВОДА МАТРИЦЫ В ВЕКТОР=========================\n\n";
    
    	for (int i(0); i<48; i++)
    		cout <<setw(4)<< A[i];
    
    
    	cout << "\n\n==================ПОСЛЕ СОРТИРОВКИ ПО ВОЗРАСТАНИЮ===============================\n\n";;
    //сортировка пузырьковым методом и вывод на экран
    for (int i(47); i>=0; i--)
    	for(int j(0); j<=i; j++)
    	{
    		if (A[i]<A[j])
    		swap (A[i],A[j]);
    	}
    
    	for (int i(0); i<48; i++)
    		cout <<setw(4)<< A[i];
    
    
    
    _getch();
      return 0;
    }
  4. petruska

    petruska

    мой вариант

    #include "stdafx.h" // here all libra
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	srand(time(NULL));
    	const int size1=6;
    	const int size2=8;
    	
    	// create dynamic array for save data and time
    	int **pArray=new int *[size1];
    	for (int i=0; i <size1; i++)
    		pArray[i]=new int[size2];
    
    	// random init array and show on cycle
    	cout << "Your random array: " <<endl;
    	for (int i=0; i < size1; i++)
    	{
    		for (int j=0; j < size2; j++)
    		{
    			pArray[i][j]=(rand() % 100) -50;
    			cout <<setw(4) << pArray[i][j];
    		}
    		cout <<endl;
    	}
    
    	vector <int> A(0); // creat vector
    
    	//if element >0 paste on array
    	for (int i=0; i < size1; i++)
    	{
    		for (int j=0; j < size2; j++)
    		{
    			if ( pArray[i][j] > 0 )
    				A.push_back(pArray[i][j]);
    		}
    	}
        cout << endl << "_________________________" <<"Sort array:" <<endl;
    
    	sort(A.begin(),A.end()); // sort vector
    
    	for (int i=0; i < A.size(); i++) //show vector
    		cout <<A[i]<<"  ";
    	cout <<endl;
    
    	// delete array
    	for(int i=0;i<size1;i++)
            delete []pArray[i];
    
    	return 0;
    }
  5. Мгер Цолакян

    #include <iostream>
    #include <iomanip>
    #include <time.h>
    using namespace std;
    int main()
    {
    	setlocale(LC_ALL, "rus");
    	srand(time(NULL));
    	const int n = 6, m = 8;
    	int mas[n][m];
    	int q = 0;
    	for (int i = 0; i < n; i++)
    	{
    		for (int j = 0; j < m; j++)
    		{
    			mas[i][j] = rand() % 100 - rand() % 100;
    		}
    	}
    	for (int i = 0; i < n; i++)
    	{
    		for (int j = 0; j < m; j++)
    		{
    			cout<<setw(3)<<mas[i][j]<<" ";
    		}
    		cout << endl;
    	}
    	for (int i = 0; i < n; i++)
    	{
    		for (int j = 0; j < m; j++)
    		{
    			if (mas[i][j]>0)
    			{				
    				q++;			
    			}
    		}	
    	}
    	int *positive = new int[q];
    	q = 0;
    	for (int i = 0; i < n; i++)
    	{
    		for (int j = 0; j < m; j++)
    		{
    			if (mas[i][j]>=0)
    			{
    				positive[q++] = mas[i][j];
    			}
    		}
    	}
    	for (int i = 0; i < q-1; i++)
    	{
    		for (int j = 0; j < q-1; j++)
    		{
    			if (positive[j]>positive[j + 1])
    			{
    				swap(positive[j], positive[j + 1]);
    			}
    		}
    		
    	}
    	cout << endl;
    	for (int i = 0; i < q; i++)
    	{
    		cout << setw(1) << positive[i] << " ";
    	}
    	delete[] positive;
    	system("pause > void");
    }
  6. Nedwid

    Вот мое решение с использованием <vector>

    // Going.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <iomanip>
    #include <Windows.h>
    #include <iterator>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    	
    void main()
    {
    	setlocale(LC_ALL, "rus"); // корректное отображение Кириллицы
    	SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
        SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
    	srand(time(NULL)); 
    	vector<int> A; 
    	int **ptrC=new int*[6];
    	//Формирование динамического массива
    	for (int i=0;i<6; i++)
    		ptrC[i]=new int[8];
    	//Заполнение динамического массива
    	for (int i=0;i<6; i++)
    	{
    		for (int j=0;j<8; j++)
    		{
    			ptrC[i][j]=rand()%100-rand()%100;
    			cout<<ptrC[i][j]<<" ";
    				if (ptrC[i][j]>0)
    				{	
    					A.push_back(ptrC[i][j]);
    				}
    		}
    		cout<<endl; 
    	}
    	copy(A.begin(), A.end(), ostream_iterator<int>(std::cout, " ")); //вывод содержимиого вектора
    	cout<<endl;
    	sort(A.begin(), A.end());//сортировка содержимиого вектора
    	copy(A.begin(), A.end(), ostream_iterator<int>(std::cout, " "));//вывод содержимиого вектора
    	cout<<endl;
    	system("pause");
    }

     

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

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