繁体   English   中英

C ++中的矩阵(打印中间行,打印中间列等)

[英]Matrix in C++ (print middle row, print middle col, etc)

我不断收到细分错误。 任何帮助,将不胜感激。 我是学生,所以请放轻松。 谢谢。

背景:我必须打印矩阵,所有元素的总和,显示上半部分,显示下半部分,打印中间行,打印中间列。 读取矩阵的尺寸,后跟N * M值。

#include <iostream>
#include <stdlib.h>

using namespace std;

void printMatrix(int** matrix, int n, int m)
{
     cout << "Printed matrix: " << endl;
    for(int i=0; i<n; i++)
    {
            for (int j=0; j<m; j++)
            {
                    cout << matrix[i][j] << "\t";
            }
            cout << endl;
    }
};

void getSum(int** matrix, int n, int m)
{
    int sum=0;
    for(int i=0; i<n; i++)
    {
            for(int j=0; j<m; j++)
            {
                    sum += matrix[i][j];
            }
    }
    cout << "The sum of all numbers is: " << sum << endl;
 };

void printUpper(int** matrix, int n, int m)
{
    if(n != m)
    {
            cout << "The matrix is not square.\n";
            return;
    }

    cout << "The upper half of the array: \n";
    for(int i=0; i<n; i++)
    {
            for(int j=0; j<m; j++)
            {
                    if(j<i)
                    {
                            cout << "\t";
                            continue;
                    }
                    cout << matrix[i][j] << "\t";
            }
            cout << endl;
    }
}

void printMiddleRow(int** matrix, int n, int m)
{
    if(n%2==0)
    {
            cout << "Error! The number of rows is even. Cannnot print the middle.\n";
            return;
    }
    cout << "The middle row: " << endl;
    int mid = n/2;
    for(int i=0; i<m; i++)
    {
            cout << matrix[mid][i] << "\t";
    }
    cout << endl;
};

void printMiddleCol(int** matrix, int n, int m)
{
    if(m%2==0)
    {
            cout << "Error! The number of columns is even. Cannot print the middle.\n";
            return;
    }

    cout << "The middle column: \n";
    int mid = m/2;

    for(int i=0; i<m; i++)
    {
            cout << matrix[i][mid] << "\t";
    }
    cout << endl;
};

int main(int argc, char* argv[])
{
    if(argc<0)//checks to make sure user inputs dimensions of array
            cout << "Error! More command line arguments are required.\n";

    int n = atoi(argv[1]);
    int m = atoi(argv[2]);

    int** matrix = new int*[n];
    for(int i=0; i<n; i++)
    {
            matrix[i] = new int[m];
    }

    int cur = 3;

    for(int i=0; i<n; i++)
    {
            for(int j=0; j<m; j++)
            {
                    matrix[i][j] = atoi(argv[cur]);
                    cur++;
            }
    }

    cout << "Please choose from the following options: \n";
    cout << "1. Print the matrix.\n";
    cout << "2. Sum all of the elements.\n";
    cout << "3. Show the upper half.\n";
    cout << "4. Show the middle row.\n";
    cout << "5. Show the middle column.\n";

    int choice;
    cout << "Enter selection: ";
    cin >> choice;

    switch(choice)
    {
            case(1):
                    printMatrix(matrix, n, m);
                    break;
            case(2):
                    getSum(matrix, n, m);
                    break;
            case(3):
                    printUpper(matrix, n, m);
                    break;
            case(4):
                    printMiddleRow(matrix, n, m);
                    break;
            case(5):
                    printMiddleCol(matrix, n, m);
                    break;
            default:
                    cout << "Invalid selection. Goodbye.\n";
    }
    return 0;
}

在printMiddleCol函数中,“ for循环”的范围为0到m,应为0到n。 请更正。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM