• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Nie działa wypisywanie wyników

Object Storage Arubacloud
0 głosów
209 wizyt
pytanie zadane 28 września 2019 w C i C++ przez magda_19 Gaduła (3,080 p.)

Witam, robię zadania ze spoja, które powinno wpisywać "TAK" lub "NIE"  w zależności od uzyskanego wyniku. Jednak u mnie coś nie działa, ponieważ wypisuje cały czas "TAK" i jeszcze niedokładną liczbę razy.

#include <iostream>

using namespace std;

bool sprawdzenieRzedow (int sudoku[9][9])
{
    for (int numerWiersza = 0; numerWiersza < 9; numerWiersza++)
    {
        for (int numerKolumny = 0; numerKolumny < 9; numerKolumny++)
        {
            for (int pomocnicza = numerKolumny + 1; pomocnicza < 9; pomocnicza++)
            {
                if(sudoku[numerWiersza][numerKolumny] == sudoku[numerWiersza][pomocnicza])
                    return false;

            }

        }
    }

}

bool sprawdzenieKolumn(int sudoku[9][9])
{
    for(int numerWiersza = 0; numerWiersza < 9; numerWiersza++)
    {
        for (int numerKolumny = 0; numerKolumny < 9; numerKolumny++)
        {
            for (int pomocnicza = numerWiersza + 1; pomocnicza < 9; pomocnicza++)
            {
                if(sudoku[numerWiersza][numerKolumny] == sudoku[pomocnicza][numerKolumny])
                    return false;

            }
        }

    }

}


bool sprawdzenieMalychKwadratow (int sudoku[][9])
{
    int tymczasowa[9], k = 0;

    for(int numerWiersza = 0; numerWiersza < 9; numerWiersza += 3)  //przechodzimy po blokach 3x3
    {
        for (int numerKolumny = 0; numerKolumny < 9; numerKolumny += 3)
        {
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    tymczasowa[k++] = sudoku[numerWiersza + i][numerKolumny + j];

                    for (int l = 0; l < 9; l++)
                    {
                        for (int m = l + 1; m < 9; m++)
                        {
                            if(tymczasowa[l] == tymczasowa[m])
                                return false;
                        }
                    }

                }
            }
        }
    }


}

void wypiszWynik (int sudoku[][9], int iloscTestow)
{
    bool poprawneSudoku;
    
    for (int i = 0; i < iloscTestow; i++)
    {
        if(poprawneSudoku = true)
        {
            cout << "TAK" << endl;
        }
        else
        {
            cout << "NIE" << endl;
        }
    }
    
}


int main()
{
    int liczbaTestow;
    int sudoku[9][9];
    bool poprawneSudoku;

    cin >> liczbaTestow;

    while (liczbaTestow--)
    {
        for (int i = 0; i < 9; i++)
        {
            for (int j = 0; j < 9; j++)
            {
                cin >> sudoku[i][j];

                if(sudoku[i][j] > 9 || sudoku[i][j] < 0)
                {
                    poprawneSudoku = false;
                }
            }

            sprawdzenieRzedow (sudoku);
            sprawdzenieKolumn(sudoku);
            sprawdzenieMalychKwadratow(sudoku);
            wypiszWynik(sudoku, liczbaTestow);

            return 0;
        }
    }


}

 

komentarz 28 września 2019 przez niezalogowany
if(poprawneSudoku = true) ->if(poprawneSudoku == true) to na pewno jeden błąd. Chyba.
komentarz 29 września 2019 przez tkz Nałogowiec (42,000 p.)

To co napisał fisker. Plus. 

Jak chcesz porównać "poprawneSudoku"?

void wypiszWynik(int sudoku[][9], int iloscTestow)
{
    bool poprawneSudoku;

    for (int i = 0; i < iloscTestow; i++)
    {
        if (poprawneSudoku == true)
        {
            cout << "TAK" << endl;
        }
        else
        {
            cout << "NIE" << endl;
        }
    }
}

 

 

komentarz 29 września 2019 przez magda_19 Gaduła (3,080 p.)
Poprawiłam to, jednak nadal nie działa
komentarz 29 września 2019 przez niezalogowany
edycja 29 września 2019
a return w dobrym miejscu ?

2)  funkcja bool powinna chyba kiedyś zwrócić prawdę.

Wyskakuje błąd zamknięcia nawiasów, ale przeróbkach u mnie w kompilatorze w numerze w nieistniejącej linii. (to jednak coś z kompilatorem)
komentarz 29 września 2019 przez magda_19 Gaduła (3,080 p.)
Wydaje mi się, że tak, bo wynika to z warunku. Jeśli są takie same liczby to zwróci false.
komentarz 29 września 2019 przez niezalogowany
edycja 30 września 2019

tak ogólnie to ten kod na spoju nie przejdzie za dużo tych for.

tablice do funkcji ? to bym też sprawdził.

edit:: a przypadek kiedy nie zwróci false, returna nie musi być w void

edit:: może coś takiego będzie szybsze ale nie sądzę bo w spoju z reguły chodzi o jakiś kruczek

edit::czysta prokastynacja, nie trzeba STL.

#include <iostream>

const int eq=45;

int q (int* a) {
    return *a;
}

bool rows (int*ptr, int size) {
    int* local_ptr=ptr;
    int sum=0;

    for(int i=0; i<size; i++)
        sum+=q(local_ptr++);

    return eq==sum?1:0;
}

bool colums (int*ptr, int size) {
    int sum=0;

    for(int i=0; i<size; i++)
        sum+=q(ptr+i*size);
        
    return eq==sum?1:0;
}
//int rows (,,&);
//int colums (,,&);

using namespace std;

int main() {
    const int t=9;

    int tab[t][t]= {{2, 5, 1, 7, 6, 9, 3, 4, 8},
                    {9, 8, 6, 3, 4, 5, 2, 7, 1},
                    {3, 7, 4, 8, 2, 1, 6, 9, 5},
                    {4, 2, 9, 6, 3, 8, 5, 1, 7},
                    {8, 6, 3, 5, 1, 7, 9, 2, 4},
                    {5, 1, 7, 4, 9, 2, 8, 3, 6},
                    {7, 9, 5, 1, 8, 3, 4, 6, 2},
                    {1, 4, 2, 9, 5, 6, 7, 8, 3},
                    {6, 3, 8, 2, 7, 4, 1, 5, 9}
                   };
    bool prawda=1;

    for(int i=0; i<t&&prawda; i++)
        prawda=rows(tab[i],t);
 
    int * temp=tab[0];
    for(int i=0; i<t&&prawda; temp++, i++) {
        prawda=colums(temp,t);
    }


    cout << prawda << endl;
    return 0;
}

edit:: na kontenerach przechodzi przed chwilą sprawdziłem

edit:: proszę o wybaczenie. Ale nie mogłem się oprzeć

#include <iostream>

const int eq=45;

int q (int* a) {
    return *a;
}

bool rows (int*ptr, int size) {
    int* local_ptr=ptr;
    int sum=0;
    
    for(int i=0; i<size; i++) 
        sum+=q(local_ptr++);

    return eq==sum?1:0;
}

bool colums (int*ptr, int size) {
    int sum=0;
    
    for(int i=0; i<size; i++)
        sum+=q(local_ptr+i);
    
    return eq==sum?1:0;
}

using namespace std;

int main() {
    const int t=9;
    
    int tab[t][t]= {{2, 5, 1, 7, 6, 9, 3, 4, 8},
                    {9, 8, 6, 3, 4, 5, 2, 7, 1},
                    {3, 7, 4, 8, 2, 1, 6, 9, 5},
                    {4, 2, 9, 6, 3, 8, 5, 1, 7},
                    {8, 6, 3, 5, 1, 7, 9, 2, 4},
                    {5, 1, 7, 4, 9, 2, 8, 3, 6},
                    {7, 9, 5, 1, 8, 3, 4, 6, 2},
                    {1, 4, 2, 9, 5, 6, 7, 8, 3},
                    {6, 3, 8, 2, 7, 4, 1, 5, 9}
                   };
    bool prawda=1;

    for(int i=0; i<t&&prawda; i++)
        prawda=rows(tab[i],t);
        
    for(int i=0; i<t&&prawda; i++)
        prawda=colums(tab[i],t);

    cout << prawda << endl;
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 29 września 2019 przez niezalogowany

ale co by była odpowiedz

#include <iostream>

using namespace std;

bool sprawdzenieRzedow (int sudoku[9][9]) {
    for (int numerWiersza = 0; numerWiersza < 9; numerWiersza++) {
        for (int numerKolumny = 0; numerKolumny < 9; numerKolumny++) {
            for (int pomocnicza = numerKolumny + 1; pomocnicza < 9; pomocnicza++) {
                if(sudoku[numerWiersza][numerKolumny] == sudoku[numerWiersza][pomocnicza])
                    return false;
            }
        }
    }
    return 1;
}

bool sprawdzenieKolumn(int sudoku[9][9]) {
    for(int numerWiersza = 0; numerWiersza < 9; numerWiersza++) {
        for (int numerKolumny = 0; numerKolumny < 9; numerKolumny++) {
            for (int pomocnicza = numerWiersza + 1; pomocnicza < 9; pomocnicza++) {
                if(sudoku[numerWiersza][numerKolumny] == sudoku[pomocnicza][numerKolumny])
                    return false;
            }
        }
    }
    return 1;
}

bool sprawdzenieMalychKwadratow (int sudoku[][9]) {
    int tymczasowa[9], k = 0;

    for(int numerWiersza = 0; numerWiersza < 9; numerWiersza += 3) { //przechodzimy po blokach 3x3
        for (int numerKolumny = 0; numerKolumny < 9; numerKolumny += 3) {
            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 3; j++) {
                    tymczasowa[k++] = sudoku[numerWiersza + i][numerKolumny + j];
                    for (int l = 0; l < 9; l++) {
                        for (int m = l + 1; m < 9; m++) {
                            if(tymczasowa[l] == tymczasowa[m])
                                return false;
                        }
                    }
                }
            }
        }
    }
    return 1;
}

void wypiszWynik (int sudoku[][9], int iloscTestow) {
    bool poprawneSudoku;

    for (int i = 0; i < iloscTestow; i++) {
        if(poprawneSudoku == true) {
            cout << "TAK" << endl;
        } else {
            cout << "NIE" << endl;
        }
    }

}


int main() {
    int liczbaTestow;
    int sudoku[9][9]{};

    bool poprawneSudoku;
    cin >> liczbaTestow;

    while (liczbaTestow--) {
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                cin >> sudoku[i][j];

                if(sudoku[i][j] > 9 || sudoku[i][j] < 0) {
                    poprawneSudoku = false;
                }
            }

            sprawdzenieRzedow (sudoku);
            sprawdzenieKolumn(sudoku);
            sprawdzenieMalychKwadratow(sudoku);
            wypiszWynik(sudoku, liczbaTestow);

        }
    }
    return 0;
}

ale

5
2 5 1 7 6 9 3 4 8
NIE
NIE
NIE
NIE
9 8 6 3 4 5 2 7 1
NIE
NIE
NIE
NIE
3 7 4 8 2 1 6 9 5
NIE
NIE
NIE
NIE
4 2 9 6 3 8 5 1 7
NIE
NIE
NIE
NIE
8 6 3 5 1 7 9 2 4
NIE
NIE
NIE
NIE
5 1 7 4 9 2 8 3 6
NIE
NIE
NIE
NIE
7 9 5 1 8 3 4 6 2
NIE
NIE
NIE
NIE
1 4 2 9 5 6 7 8 3
NIE
NIE
NIE
NIE
6 3 8 2 7 4 1 5 9
NIE
NIE
NIE
NIE

100 5 1 7 6 9 3 4 8
NIE
NIE
NIE
9 8 6 3 4 5 2 7 1
NIE
NIE
NIE
3 7 4 8 2 1 6 9 5
NIE
NIE
NIE
4 2 9 6 3 8 5 1 7
NIE
NIE
NIE
8 6 3 5 1 7 9 2 4
NIE
NIE
NIE
5 1 7 4 9 2 8 3 6
NIE
NIE
NIE
7 9 5 1 8 3 4 6 2
NIE
NIE
NIE
1 4 2 9 5 6 7 8 3
NIE
NIE
NIE
6 3 8 2 7 4 1 5 9
NIE
NIE
NIE

4 2 9 6 3 8 5 1 7
NIE
NIE
8 6 3 5 1 7 9 2 4
NIE
NIE
5 1 7 4 9 2 8 3 6
NIE
NIE
7 9 5 1 8 3 4 6 2
NIE
NIE
1 4 2 9 5 6 7 8 3
NIE
NIE
6 3 8 2 7 4 1 5 9
NIE
NIE
2 5 1 7 6 9 3 4 8
NIE
NIE
9 8 6 3 4 5 2 7 1
NIE
NIE
3 7 4 8 2 1 6 9 5
NIE
NIE

2 5 1 7 6 9 3 4 8
NIE
9 8 6 3 4 5 2 7 1
NIE
3 7 4 8 2 1 6 9 5
NIE
4 2 9 6 3 8 5 1 7
NIE
8 6 3 5 1 7 9 2 4
NIE
5 1 7 4 9 2 8 3 6
NIE
7 9 5 1 8 3 4 6 2
NIE
1 4 2 9 5 6 7 8 3
NIE
6 3 8 2 7 4 1 9 5
NIE

2 5 1 7 6 9 3 4 8
9 8 6 3 4 5 2 7 1
3 7 4 8 2 1 6 9 5
4 2 9 6 3 8 5 1 7
8 6 3 5 1 7 9 2 4
5 1 7 4 9 2 8 3 6
7 9 5 1 8 3 4 6 2
1 4 2 9 8 6 7 5 3
6 3 8 2 7 4 1 5 9

Process returned 0 (0x0)   execution time : 9.303 s
Press any key to continue.

 

Podobne pytania

0 głosów
0 odpowiedzi 89 wizyt
pytanie zadane 10 września 2020 w C i C++ przez magda_19 Gaduła (3,080 p.)
0 głosów
2 odpowiedzi 353 wizyt
pytanie zadane 10 lutego 2016 w C i C++ przez Caishen Nowicjusz (210 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...