Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Kwadrat półmagiczny

Ostatnio zmodyfikowano 2017-11-19 21:12
Autor Wiadomość
Wiesław
Temat założony przez niniejszego użytkownika
Kwadrat półmagiczny
» 2017-11-19 20:28:59
Witam,
zrobiłem program sprawdzający, czy dana tablica jest kwadratem półmagicznym (przekątne nie muszą równać się sumie magicznej).
Wszystko działa, oprócz sytuacji, gdy wpiszę liczbę większą niż jednocyfrowa. Nie rozumiem, dlaczego wyświetla się wtedy 0 (gdyby była zła suma wyświetlało by się -1). Proszę o pomoc.
Oto kod:
C/C++
#include<iostream>
using namespace std;
int main()
{ int n;
    cin >> n;
    int tab[ n ][ n ];
    int tabl[ n ][ n ];
    for( int h = 0; h < n; h++ )
    { for( int u = 0; u < n; u++ )
             tabl[ h ][ u ] = 0;
       
    }
    for( int x = 0; x < n; x++ )
    { for( int y = 0; y < n; y++ )
        { cin >> tab[ x ][ y ];
            for( int e = 0; e < n; e++ )
            { for( int f = 0; f < n; f++ )
                { if( tabl[ e ][ f ] == tab[ x ][ y ] )
                    { cout << "-1";
                        return 0;
                    }
                } }
            tabl[ x ][ y ] = tab[ x ][ y ];
            if( tab[ x ][ y ] = 0 )
            { cout << "-1";
                return 0;
            }
        } }
    int w = 0;
    for( int t = 0; t < n; t++ )
    { w = 0;
        for( int v = 0; v < n; v++ )
        w += tab[ t ][ v ]; }
   
    int suma = 0;
    for( int a = 0; a < n; a++ )
    { suma = 0;
        for( int b = 0; b < n; b++ )
             suma += tab[ a ][ b ];
       
        if( suma != w )
        { cout << "-1";
            return 0;
        }
    }
    for( int q = 0; q < n; q++ )
    { suma = 0;
        for( int z = 0; z < n; z++ )
             suma += tab[ z ][ q ];
       
        if( suma != w )
        { cout << "-1";
            return 0;
        }
    }
    cout << suma;
    return 0;
}
Pozdrawiam
P-166987
Luq
» 2017-11-19 20:38:13
C/C++
if( tab[ x ][ y ] = 0 )
Niewłaściwy operator.

C/C++
int tab[ n ][ n ];
int tabl[ n ][ n ];
To nie jest poprawne tworzenie tablic w C++.
P-166988
Wiesław
Temat założony przez niniejszego użytkownika
» 2017-11-19 20:55:11
Rzeczywiście, zapomniałem się z tym opratorem.
W jakim sensie jest to jednak zły sposób na robienie tablic?
Tak mnie nauczono i tak zawsze mi działały...
P-166990
nanoant20
» 2017-11-19 21:12:40
poczytaj o tablicach dynamicznych

C/C++
int * tab = new int[ n ];

i nie zapomnij o zwalnieniu pamieci, usunięciu tablicy poleceniem delete.

Ewentualnie zapisz tą zmienną "n" na sztywno
#define n 3
lub
int n = 3; i usuń cin >> n;
P-166991
« 1 »
  Strona 1 z 1