После ввода всех данных программа выводит одно число, непонятно откуда взявшееся, но для одних и тех же данных одинаковое, и одно вообще каждый раз новое, при этом намного больше чем вообще может быть. Задание состоит вот в чём: "Дано квадратную матрицу размером 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 вообще не работает, выводит огромные числа
Задачу решил, действительно, были проблемы в условиях циклов, в чётном надо было связать 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;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Вот код работает более-менее правильно только не сокращаются дробиКак это пофиксить?
Объясните, что это за мура? Вроде как указатель на функцию, знак равенства сбивает с толку, не видел такой записи