Неправильный результат работы кода

105
04 августа 2021, 03:10

После ввода всех данных программа выводит одно число, непонятно откуда взявшееся, но для одних и тех же данных одинаковое, и одно вообще каждый раз новое, при этом намного больше чем вообще может быть. Задание состоит вот в чём: "Дано квадратную матрицу размером NxN, найти сумму элементов и максимальный элемент в заштрихованной области (квадрат поделённый на четыре части диагоналями, и один из треугольников заштрихован)"

В идеале задачу надо решить используя указатели, но я пока с ними не разобрался. Вот мой код

#include <iostream>
#include <cstdlib>
#include <cctype>
using namespace std;

int main(){
    char chek [256];
    int sum = 0;
    int n, max = 0,i,j;
    cout << "Ââåäèòå N" << endl;
    cin >> chek;
    n = atoi(chek);
    int matrica [n][n];
    cout << "Ââåäèòå ýëåìåíòû ìàòðèöû" << endl;
    for (int i = 0; i < n; i++){
        for (int j = 0; j < n; j++){
            cin >> matrica [i][j];
        }
    }
    switch(n%2){
        case 0: 
            for( i = 0; i < (n/2); i++){
                for( j = 0; j <= i; j++){
                    sum+=(matrica[i][j]);
                    if(matrica[i][j] > max){
                        max = (matrica[i][j]);
                    }
                }
            }
            for( i = (n/2); i < n; i++){
                for( j = n-i-1; j >= 0; j--){
                    sum+=matrica[i][j];
                    if(matrica[i][j] > max){
                        max = matrica[i][j];
                    }
                }
            }
            cout << "Ñóììà âñåõ ýëåìåíòîâ ìàññèâà â âûäåëåííîé â çàäà÷å ÷àñòè = " << sum << endl;
            cout << "Ìàêñèìàëüíûé ýëåìåíò ìàññèâà â âûäåëåííîé â çàäà÷å ÷àñòè = " << max << endl;
            break;
        case 1:
            for( i = 0; i <= n/2; i++){
                for( j = 0; j <= i; j++){
                    sum+=matrica[i][j];
                    if(matrica[i][j] > max){
                        max = matrica[i][j];
                    }
                }
            }
            for( i = n/2; i <= n; i++){
                for( j = n/2; j >= 0; j--){
                    sum+=matrica[i][j];
                    if(matrica[i][j] > max){
                        max = matrica[i][j];
                    }
                }
            }
            cout << "Ñóììà âñåõ ýëåìåíòîâ ìàññèâà â âûäåëåííîé â çàäà÷å ÷àñòè = " << sum << endl;
            cout << "Ìàêñèìàëüíûé ýëåìåíò ìàññèâà â âûäåëåííîé â çàäà÷å ÷àñòè = " << max << endl;
            break;
    }
}

Как сумму программа выводит число вообще непонятно откуда взявшееся, а как максимальное, вообще числа на 5 порядков больше чем я вводил

UPD. После того как я при инициализации сделал присваивание переменной для максимального числа значения 0, максимум стал правильно работать, но с суммой элементов это не помогло

UPD2. Если сделать массив из одного элемента равного единице, сумма выводится 2, а при попытке все нужные элементы на вводе задавать 1, а ненужные 0, сумма вместо, например 6, выходит 8 Вообще не понимаю в чём проблема

UPD3. Исправил сравнения, но для нечётных N вообще не работает, выводит огромные числа

Answer 1

Задачу решил, действительно, были проблемы в условиях циклов, в чётном надо было связать j с i, а в нечётном массиве было очень много ошибок в условиях

Вот итоговый код

#include <iostream>
#include <cstdlib>
#include <cctype>
using namespace std;

int main(){
    char chek [256];
    int sum = 0;
    int n, max = 0,i,j;
    cout << "Ââåäèòå N" << endl;
    cin >> chek;
    n = atoi(chek);
    int matrica [n][n];
    cout << "Ââåäèòå ýëåìåíòû ìàòðèöû" << endl;
    for (int i = 0; i < n; i++){
        for (int j = 0; j < n; j++){
            cin >> matrica [i][j];
        }
    }
    switch(n%2){
        case 0: 
            for( i = 0; i < (n/2); i++){
                for( j = 0; j <= i; j++){
                    sum+=(matrica[i][j]);
                    if(matrica[i][j] > max){
                        max = (matrica[i][j]);
                    }
                }
            }
            for( i = (n/2); i < n; i++){
                for( j = n-i-1; j >= 0; j--){
                    sum+=matrica[i][j];
                    if(matrica[i][j] > max){
                        max = matrica[i][j];
                    }
                }
            }
            cout << "Ñóììà âñåõ ýëåìåíòîâ ìàññèâà â âûäåëåííîé â çàäà÷å ÷àñòè = " << sum << endl;
            cout << "Ìàêñèìàëüíûé ýëåìåíò ìàññèâà â âûäåëåííîé â çàäà÷å ÷àñòè = " << max << endl;
            break;
        case 1:
            for( i = 0; i <= (n-1)/2; i++){
              for( j = 0; j <= i; j++){
                sum+=matrica[i][j];
                if(matrica[i][j] > max){
                  max = matrica[i][j];
                }
             }
        }
      for( i = (n-1)/2 + 1; i <= n-1; i++){
         for( j = n - i - 1; j >= 0; j--){
            sum+=matrica[i][j];
                if(matrica[i][j] > max){
                        max = matrica[i][j];
                    }
                }
           }
            cout << "Ñóììà âñåõ ýëåìåíòîâ ìàññèâà â âûäåëåííîé â çàäà÷å ÷àñòè = " << sum << endl;
            cout << "Ìàêñèìàëüíûé ýëåìåíò ìàññèâà â âûäåëåííîé â çàäà÷å ÷àñòè = " << max << endl;
            break;
    }
}
READ ALSO
Не сокращаются дроби

Не сокращаются дроби

Вот код работает более-менее правильно только не сокращаются дробиКак это пофиксить?

253
Не могу разобраться с записью указателя на функцию С++

Не могу разобраться с записью указателя на функцию С++

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

194
left operand must be l-value

left operand must be l-value

Я хочу неизвестному типу указателя присвоить void *, те

336