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

porownanie liczb

Object Storage Arubacloud
0 głosów
480 wizyt
pytanie zadane 17 kwietnia 2020 w C i C++ przez lujasjeden Użytkownik (860 p.)
Witam, od razy zaznaczam, że np. cyfra nr 1 nie koniecznie =1 tylko może przyjmować wartości od 1-9 (cyfra nr 1-9 to nazwy ktore przyjmuja wartosci 1-9) Czy ma ktoś jakiś sposób/pomysł żeby w sprytny sposób napisać, że cyfra numer 1 jest różna od cyfry nr 2, cyfry nr 3...cyfry nr 9 i tak samo dla wszystkich przypadków, że cyfra nr 2 jest różna od cyfry nr 3, cyfry nr 4, cyfry nr 5...cyfry nr 9, i analogicznie cyfra nr 3 jest rozna od cyfry nr 4, cyfry nr 5...cyfry nr 9  i tak aż do 9 w sumie no po prostu chodzi mi o to zeby kazde pole od 1-9 mialo inna wartosc. Oczywiscie moge napisac te 45 warunkow tylko ze problem jest takie ze bedzie 9 rzedow 9 kolumn no i 9 kwadratow 3x3 ktore bedzie trzeba okodowac w ten sam sposob (sudoku) no a to juz ogrom pracy ktore mozna skrocic jezeli sie da

Probowalem w ten sposob:

cyfra1!=cyfra2!=cyfra3!=cyfra4!=cyfra5!=cyfra6!=cyfra7!=cyfra8!=cyfra9

ale nie działa, może jest jakiś inny zapis tego co mam na mysli.

3 odpowiedzi

+1 głos
odpowiedź 18 kwietnia 2020 przez amelia.cpp Obywatel (1,860 p.)

Możesz spróbować coś takiego

   bool theSame = false;
 for (int i = 0; i < 9; i++){          
        for (int j = i+1; j < 9; j++){
            if (cyfra[i]==cyfra[j]){      
                theSame = true;
            }
        }
    }
    
    cout << theSame;
komentarz 18 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
kurde jakbys mogla to zerniknij na opdowiedz na dole, tam opisalem dokladniej jak u mnie dziala to co napisalem i chyba w ten sposob to nie zadziala bo wartosci beda zawsze inne jakby no zalezy od gracza
1
komentarz 18 kwietnia 2020 przez amelia.cpp Obywatel (1,860 p.)
Sprawdziłam ten sposób i u mnie działa. Sprawdź u siebie i daj znać
komentarz 18 kwietnia 2020 przez amelia.cpp Obywatel (1,860 p.)
    int cyfra[9]{
        6 , 1 , 2 , 9 , 5 , 4 , 0 , 3 , 8
    };
    
    
  bool theSame = false;
    for (int i = 0; i < 9; i++){          
       for (int j = i+1; j < 9; j++){
           if (cyfra[i]==cyfra[j]){      
               theSame = true;
           }
       }
   }
    
   cout << theSame;

Przykład liczb powyżej

komentarz 18 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
wow, chyba jeszcze za malo umiem i ten zapis jest dla mnie ciezki do zrozumienia, moglabys moze opisac co robi poszczegolna petla jakby jak to dziala krok po kroku, wtedy na pewno latwiej bym to zrozumial?
1
komentarz 18 kwietnia 2020 przez amelia.cpp Obywatel (1,860 p.)
edycja 18 kwietnia 2020 przez amelia.cpp
Więc tak:

1 2 3 4 5 6 7 8 9

Jeżeli sprawdzisz liczbę 1 dla wszystkich pozostałych liczb, nie musisz sprawdzać jej kilkakrotnie w kolejnych iteracjach, bo np. jeżeli 1 != 2, to 2 != 1
W takim razie za każdym razem pomijasz to co już sprawdziłeś.
Pętle działają na zasadzie:

Sprawdzamy czy liczba 1 się powtarza: (nie sprawdzamy czy 1 == 1)
2 3 4 5 6 7 8 9
Liczba 2
3 4 5 6 7 8 9
Liczba 3
4 5 6 7 8 9
itd.

Pierwsza pętla definiuje index liczby sprawdzanej, a pętla zagnieżdżona liczby do której ją porównujemy. Opis tego powyżej
komentarz 18 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
Ok, dziekuje bardzo za wyjasnienie i teraz mam pare pytan jeszcze:

1)Deklarując int cyfra1[9] to mam numeracje od 0-8 np jak chce przypisac wartosc 1 polu nr 1 to wpisuje cyfra[0]=1; tak?

2)Ok to zadziała dla 1 rzędu jakby no i dla kolejnych 8 w dol no zrobi sie tak samo np deklarujac int cyfra2[9] to rozumiem i tu pytanie czy bede musial zmieniac literki czy moge w innych petlach dalej uzywac "i" i "j"

3)Problem ze trzeba jeszcze zrobic sprawdzanie czy nie pojawia sie powtorzenie w kolumnach czyli kolejne 9 petli a tu juz chyba sie gubie bo sprawdzajac kolumny bedzie trzeba porownac jedna cyfre z danego rzedu w dol czyli np cyfra1[0] do cyfra2[0] do  cyfra3[0] ; cyfra1[1] do cyfra2[1] do cyfra3[1] no a potem jeszccze porownac cyfry z 9 kwadratow 3x3 czy sie nie powtarzaja, czy to sie bedzie dalo zapisac tak samo sensownie jak to co napisalas wyzej?
komentarz 18 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
Na wstepie odrazu mowie, ze nie wiem czy to tak dziala, u mnie w glowie to sie wydaje logiczne ale nie wiem czy takie zapisy sa w ogole prawidlowe.

myslalem o czyms w  stylu zeby dac int cyfra[81] no i napisac 9 petli ktore ty napisalas i one sprawdzalyby rzedy z tym ze by trzeba bylo pozmieniac indeksy w petlach czyli:

for(int i=9; i<18; i++)

{

for (int j=i+1; j<18; j++)

}

I tak do konca do ostatniego rzedu a dla kolumn pomyslalem nad czyms takim:

for (int i=0; i<72; i+=9)

{

 for (int j=i+9; j<72; j+=9)

}

no i analogicznie w bok ze nastpena to by byla for (int i =1; i<73; i+=9) i w niej for (int j=i+9; j<73; i+=9)

 

a dla kwadratow to nie wiem nie wpadlem na to jeszcze moze ty wiesz jakby to sie dalo zrobic.

No i tak jak mowilem nie wiem czy to sa poprawne zapisy mam nadzieje ze tak a jak nie to prosze o poprawki.
1
komentarz 19 kwietnia 2020 przez amelia.cpp Obywatel (1,860 p.)

@lujasjeden,

Odpowiedzi na pytania:

1) indexy są numerowane od 0, czyli pierwsza wartość w tablicy ma index 0, druga index 1 itd., więc jeżeli chcesz jako pierwszą wartość ustawić 1, wygląda to właśnie tak (cyfra[0] = 1)

2) jeżeli deklarujesz zmienne w pętli, tak jak ja tj.
for(int i  = 0; i < 9; i++)
to zmienna istnieje tylko w przestrzeni pętli (można powiedzieć że pomiędzy nawiasami klamrowymi). Możesz więc użyć i oraz j w innych pętla poniżej.

Jeżeli chodzi o twój pomysł z cyfra[81] to nie jest on najgorszy.
 

	int cyfra[9][9]{
		5,3,4,6,7,8,9,1,2,
		6,7,2,1,9,5,3,4,8,
		1,9,8,3,4,2,5,6,7,
		8,5,9,7,6,1,4,2,3,
		4,2,6,8,5,3,7,9,1,
		7,1,3,9,2,4,8,5,6,
		9,6,1,5,3,7,2,8,4,
		2,8,7,4,1,9,6,3,5,
		3,4,5,2,8,6,1,7,9
	};

	bool theSame = false;
	for(int w = 0; w < 9; w++) { //wiersz
		for (int i = 0; i < 9; i++) { //cyfra sprawdzana
			for (int j = i + 1; j < 9; j++) { //cyfry przez które sprawdzamy
				if (cyfra[w][i] == cyfra[w][j]) {
					theSame = true;
				}
			}
		}
	}

	std::cout << theSame;

Ten kod sprawdza czy nie ma powtórzeń w wierszach. Możesz analogicznie zrobić dla kolumn, a kwadraty wyśle rano (pisze o 24). Jeżeli nie spotkałeś się jeszcze z tablicami dwuwymiarowymi polecam ucinek filmu: https://youtu.be/Rt1HnMdzINo?t=876

 

komentarz 19 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
Wow Ci dziekuje bardzo, tez jest juz pozno i nie mysle juz jak trzeba ale widze ze w kodzie ktory dodalas teraz sa dwa nawiasy kwadtatowe [w][i]==[w][i] a wtedy byl jeden [i]==[j] jaka tu jest roznica? Czekam za twoim pomyslem i jeszcze raz dziekuje jutro to bede analizowal.
1
komentarz 19 kwietnia 2020 przez amelia.cpp Obywatel (1,860 p.)

To dzięki tablicy dwuwymiarowej. 
W tablicy jednowymiarowej dane możemy zwizualizować, tak:
         1 2 3 4 
index:  0 1  2  3
Ta tablica ma jeden "wymiar".
Przypisujemy do niej wartości w ten sposób:
tablica[0] = 1;
tablica[1] = 2;

Tablica dwuwymiarowa to tak naprawdę tablica tablic
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
Tutaj mamy 4 tablice mające po 5 elementów, taką tablice tworzymy w ten sposób:
tablica[4][5];
można powiedzieć, że 4 to liczba wierszy, a 5 kolumn.
Więcej informacji możesz znaleźć tutaj:
http://cpp0x.pl/kursy/Kurs-C++/Tablice-zmiennych/298

W związku z powyższym jeżeli chcemy uzyskać dane z takiej tablicy musimy podać wiersz i kolumne - x i y
 

 if (cyfra[w][i] == cyfra[w][j]) {
                theSame = true;
 }
//sprawdzamy cyfry w tym samym wierszu więc w obu przypadkach w
//pierwszych nawiasach piszemy 'w'. Do liczby w kolumnie i //porównujemy kolejno liczbe w kolumnie j

 

komentarz 19 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
okej rozumiem, dziekuje, i czekam na pomysl jak zapisac sprawdzanie kwadratow 3x3 bo w sumie wiem jakby je porownac wszystkie po kolei ale masz moze jakis sposob zeby to zapisac w petlach
1
komentarz 19 kwietnia 2020 przez amelia.cpp Obywatel (1,860 p.)
Jak już sprawdzisz wiersze i kolumny całej tablicy, nie musisz już sprawdzać kwadratów; wiadomo, że są poprawnie
komentarz 19 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
bool theSame=false;
for (int k=0; k<9;k++){
     for (int i=0; i<9; i++){
          for (int j=i+1; j<9; j++){
                if (cyfra[k][i]==cyfra[k][j]{
                   theSame=true;
      }
    }
  }
}



//takie cos dla kolumn? nie wiem czy nie powinno byc                 // if(cyfra [i][k]==cyfra[j][k])

//bo w  sumie to co napisalem nie rozni sie niczym od sprawdzania dla wierszy poza literka
//a literka jest dowolna tzn no ty ją sobie wybierasz prosze o podpowiedz 

 

1
komentarz 19 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
haha rzeczywiscie

 

a co do kodu do kolumn to nie wiem czy nie powinno byc

 if(cyfra [i][k]==cyfra[j][k])
1
komentarz 19 kwietnia 2020 przez amelia.cpp Obywatel (1,860 p.)

Pamiętaj że kolumna jest w drugich nawiasach! 
Polecam sobie zapamiętać to w ten sposób:

cyfra[wiersz][kolumna]

 

	for (int k = 0; k < 9; k++) {
		for (int i = 0; i < 9; i++) {
			for (int j = i + 1; j < 9; j++) {
				if (cyfra[i][k] == cyfra[j][k])
					theSame = true;
			}
		}
	}

poprawiony kod powyżej, lecz byłeś bardzo blisko ;)

Jeżeli bardzo zależy Ci na kwadratach mogę wysłać ci kod za kilka minut bo jeszcze muszę do skomentować. Daj znać czy chcesz

komentarz 19 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
poproszę nawet tak dla samego siebie przeanalizuje zawsze kolejna wiedza
komentarz 19 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)

@amelia.cpp, I btw nie musze pisac ze bool theSame=false; na poczatku? I czy czasem nie brakuje jednej klamry w kodzie dla kolumn wyslanym przez ciebie?

komentarz 19 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
No i ostatnie co chcialbym sie upewnic to tak:

Załóżmy, że wpisałem już w kod te petle sprawdzajace czy liczby sie nie powtarzaja. Musze teraz napisac ifa ktory sprawdza czy wygralem w sudoku, czyli czy suma cyfr w kazdej z kolumn wierszy i kwadratach===45 && theSame==false; (?)
komentarz 19 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
no i sprawdzanie sumy cyfr czy ==45 tez moznaby bylo dac w petli cos takiego byloby dobrze?:

bool sumaW=false;

for (int i=0; i<9; i++) //wiersze

{

 if (cyfra[i][0]+cyfra[i][1]+cyfra[i][2]...+cyfra[i][8]==45)

}

sumaW=true;

-----------------------------------------------------

bool sumaK=false;

for (int i=0; i<9; i++)//kolumny

{

 if (cyfra [0][i]+cyfra[1][i]+cyfra[2][i]+...cyfra[8][i]==45)

}

bool sumaK=true;

----------------------------------------

no i jeszcze dla sumy w kwadratach ale wtedy juz if sprawdzajace czy wygralem gre bylyby nastepujace:

if (sumaW==true && sumaK==true && theSame==false) ( no tu jescze bedzie trzeba dodac sprawdzenie sumy kwadratow)

{

 Label1->Caption="Wygrales sudoku" (To z c++ buildera ale chodzi o cokolwiek typu cout<<"wygrales";

}

 

Pytanko czy to co napisalem ma sens?
1
komentarz 19 kwietnia 2020 przez amelia.cpp Obywatel (1,860 p.)

1) Musisz napisać theSame = false, ponieważ potem używasz tego w razie gdy wszytsko się zgadza. Nie brakuje klamry - jeżeli w if, czy w for masz tylko jedną instrukcję klamry są zbędne

2) Tak:

if(suma == 45 && theSame == false)

Chociaż jeżeli theSame = false to jest pewne że suma = 45 i vice versa

3) Do sprawdzanie użyj pętli, czyli np.
Kod dla sprawdzenia pierwszego wiersza (ja zrobiłam cout, ty możesz zrobić if):

	int suma = 0;
	for (int i = 0; i < 9; i++) 
			suma += cyfra[0][i];

	std::cout << suma;

Dla wszytskich:

    int suma = 0;
    bool wszystkieSumy = true;
    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < 9; j++) {
            suma += cyfra[i][j];
        }
        if (!suma == 45) {
            wszystkieSumy = false;
        }
        suma = 0;
    }

 

1
komentarz 19 kwietnia 2020 przez amelia.cpp Obywatel (1,860 p.)

@lujasjeden,

	bool theSame = false;
	for (int k = 0; k < 9; k += 3) {
		for (int w = 0; w < 9; w += 3) { 
			for (int i = w; i < w+3; i++) {
				for (int j = k + 1; j < k+3; j++) { 
					if (cyfra[i][k] == cyfra[i][j]) {
						theSame = true;
					}
				}
			}

		}
	}


	std::cout << theSame;

Oto kod na zgodność kwadratów. Trochę mi to zajęło. Muszę przyznać, że pisany metodą prób i błędów ;). Najlepszym sposobem na zrozumienie działania jest rozpisanie sobie tabeli na kartce i podążać za instrukcjami z programu. Szybko wszytsko stanie się jasne.

komentarz 19 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
edycja 19 kwietnia 2020 przez lujasjeden
Bo zmylilo mnie to ze dla petli kolumn nie napisalas theSame=false; na poczatku, jak to sie stalo ze dla wierszy jest jedna klamra wiecej niz kolumn.

Czy petle ktore ja napisalem dla sprawdzania sa poprawne i te ify? Czy takie cos ma sens? Zalezy mi na wiedzy na ten temat. Bo wydaje mi sie bardzo logiczne to co ja napisalem a tego twojego nie do konca rozumiem. I jak bys mogla zedytowac swoj poprzedni komentarz i po // podpisac co robi dana petla for bylbym wdzieczny bo sie pomalu gubie od nadmiaru informacji.
1
komentarz 19 kwietnia 2020 przez amelia.cpp Obywatel (1,860 p.)

Działało by dobrze, ale nie ma za dużo powodów aby robić to w ten sposób.
Poza tym jest trochę błędów (możliwe że wynikają z formatowania tekstu).
Poprawiony kod:

bool sumaW=false;

for (int i=0; i<9; i++) //wiersze

{

 if (cyfra[i][0]+cyfra[i][1]+cyfra[i][2]...+cyfra[i][8]==45)
                  sumaW=true;   //klamry opcjonalnie
}


-----------------------------------------------------

bool sumaK=false;

for (int i=0; i<9; i++)//kolumny

{

 if (cyfra [0][i]+cyfra[1][i]+cyfra[2][i]+...cyfra[8][i]==45)
               bool sumaK=true; //tutaj też klamry opcjonalnie
}

Opis moich sposobów:

        int suma = 0; //tu przechowujemy sumę
	for (int i = 0; i < 9; i++)  //wykonuje się 9 razy bo tyle mamy kolumn
			suma += cyfra[0][i]; //równoważne: suma = suma + cyfra[0][i]

        // index 0 to pierwszy wiersz, i to index kolumny

	std::cout << suma;

Weźmy ten kod dla tablicy [3][3], kod będzie podobny (zamiast < 9: <3) a logika taka sama
1 2 3
1 2 3
1 2 3

Pierwszy wiersz ma index 0, a w tym kodzie zajmujemy się tylko nim.
a kolumna jest równa i, czyli kolejno indexowi 0, 1 i 2.
czyli w wyniku wykonania się pętli otrzymujemy dodane wartości:
cyfra[0][0] (= 1)
cyfra[0][1] (= 2)
cyfra[0][2] (= 3)

Czyli robimy coś takiego:
int suma = 0;
suma = suma + 1
suma = suma + 2
suma = suma + 3

 

1
komentarz 19 kwietnia 2020 przez amelia.cpp Obywatel (1,860 p.)
    int suma = 0; //tutaj przechowujemy sume (opcjonalnie)
    bool wszystkieSumy = true; //tutaj sprawdzamy czy suma każdego wiersza równa się 45
    for (int i = 0; i < 9; i++) { //wiersz
        for (int j = 0; j < 9; j++) { //kolumna
            suma += cyfra[i][j]; //tak samo jak w poprzednim przykładzie
        }
        if (suma != 45) { //jeżeli suma jednego z wierszy jest różna od 45
            wszystkieSumy = false; //wiemy że coś jest źle
        }
        suma = 0; //zerujemy sumę, bo idziemy do następnego wiersza
    }

Przeanalizuj na spokojnie. 

komentarz 19 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)

czyli mam rozumiec ze:

int suma = 0;
    bool wszystkieSumy = true;
    for (int i = 0; i < 9; i++) { //wiersze
        for (int j = 0; j < 9; j++) { //kolumny
            suma += cyfra[i][j]; //suma w wszystkich wierszach i suma we wszystkich kolumnach
        }
        if (!suma == 45) { //jezeli chociaz w jednej taka suma !=45 to wtedy wszystkieSumy=false;
            wszystkieSumy = false;
        }
        suma = 0;
    }

tylko nie rozumiem bo na poczatku jest zadeklarowane ze suma=0 i wtedy wartosc bool wszystkieSumy=true; no i ona bedzie true dla sumy jakiejkolwiek tylko nie dla 45 dobrze rozumiem? czy to tak nie dziala bo jak to tak dziala to na moje chyba zle bo np dla sumy 17 czyli np  dla samej 9 i 8 to bedzie prawda i np gracz wpisze tylko 2 liczby i bedzie prawda czy zle mowie

 

A jezeli to co napisalem to zle moje myslenie to czy ten kod sprawdza juz sumy w wierszach i sumy w kolumnach? No i jeszcze wtedy zostanie suma w kwadratach

 

Jescze raz dziekuje za cala twoja pomoc i licze ze dokonczymy to :)

1
komentarz 19 kwietnia 2020 przez amelia.cpp Obywatel (1,860 p.)

tylko nie rozumiem bo na poczatku jest zadeklarowane ze suma=0 i wtedy wartosc bool wszystkieSumy=true; no i ona bedzie true dla sumy jakiejkolwiek tylko nie dla 45 dobrze rozumiem?

 Jeżeli suma w jednym z wierszy NIE JEST równa 45, to ustawiamy wszystkieSumy na false, ponieważ jak jeden wiersz jest nie tak, to wszytsko jest nie tak.
(!suma == 45) to samo co (suma != 45)

komentarz 19 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
OK dobra rozumiem, i teraz pytanie czy po tym kodzie nie trzeba sprawdzac juz tak samo dla kolumn tzn czy jezeli w wierszach sie wszystko zgadza to w kolumnach takze sie musi wszystko zgadzac czy trzeba jednak jeszcze te kolumny sprawdzic, to by bylo chyba po prostu ten sam kod tylko zamienic miejscami [i][j] na [j][i].

No i poza tym trzeba byloby sprawdzic czy suma w kwadratch rowna sie 45 robic to recznie czy masz jakis pomysl na zrobienie tego petlami?
1
komentarz 19 kwietnia 2020 przez amelia.cpp Obywatel (1,860 p.)
Tak, wystarczy zamienić miejscami.
Jak chodzi o sumę kwadratów to bazuj na kodzie na sprawdzanie kwadratów.
komentarz 19 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
dobra narazie sobie ogarne wszystko poza suma kwadratow a jak cos to sie odezwe potem, jak bedziesz miala czas i checi mozesz to napisac ja i tak postaram sie wymyslec sam to bedzie no dobre sprawdzenie czy to rozumiem, jezeli nie no to sie odezwe pod tym postem, chyba ci przyjdzie powiadomienie, dziekuje Ci za wszystkie odpowiedzi i poswiecony czas nie wiem czy dostajesz za to jakies punkty czy cos ale plusuje ci kazdy koment
komentarz 19 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
okej zbierajac to wszystko po napisaniu tych petli wszystkich warunkiem wygrania gry jest:

if (theSameW==false && theSameK==false && wszystkieSumyW==true && wszystkieSumyK==true && warunek na sume kwadratow)

{

cout<<"Wygrales"

};

theSameW (petla ktora sprawdza czy sie nie powtarza cyfra w wierszach)

theSameK (petla ktora sprawdza czy sie nie powtarza cyfra w kolumnach)

wszystkieSumyW (petla ktora sprawdza sumy w wierszach)

wszystkieSumyK (petla ktora sprawdza sumy w kolumnach)
1
komentarz 20 kwietnia 2020 przez amelia.cpp Obywatel (1,860 p.)

Jest ok.

Dodatkowo mogę ci powiedzieć że if może wyglądać również tak:

if (!theSameW && !theSameK && wszystkieSumyW && wszystkieSumyK && warunek na sume kwadratow)

Ale tak jak jest, jest dobrze

komentarz 20 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
Dobra dzieki za wszystko raz jeszcze, jak bys dala rade wykminic warunek na sume kwadratow w petli to by bylo spoko ale jak nie to tez luz ja moze poradze sobie sam a jak nie to recznie to wszystko przyrownam to juz duzo nie zostanie.
 

Dziekuje za cala pomoc.
komentarz 21 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)

@amelia.cpp, napisalem wzorujac sie na twoich kodach cos takiego ale mam pare pytan

Kod na zgodnosc sumy w kwadratach:

int sumaSqrt=0;
bool wszystkieSumySqrt=true;
for (int k=0; k<9; k+=3;{
       for (int w=0; w<9; w+=3;{
             for (int i=w; i<w+3; i++){
                   for (int j=k+1; j<k+3; j++){
                         sumaSqrt=cyfra[i][k]+cyfra[i][j]
                         if (sumaSqrt!=45){
                              wszystkieSumySqrt=false;
                              }
                              sumSqrt=0;
                              }

Czy to czasami nie policzy mi tylko np sumy pól 1+2+3 i 4+5+6 i 7+8+9 i 10+11+12 itd?

Czy nie musze napisac jeszcze np jakiejs petli zeby wykonala sie trzy razy zeby zsumowac pola 1+2+3+10+11+12+19+20+21?

Bo [i] to wszystkie wiersze tak? k to kolumny 1, 4, 7 a j to kolumny 2,3, 5,6 8,9 tak?

No i bedzie wykonywac sie np dla i=0 i k=0 suma [0][0]+[0][1]+[0][2] i nastepne juz osobno, ze i=0, k=3 suma [0][3]+[0][4]+[0][5] (?)

1
komentarz 21 kwietnia 2020 przez amelia.cpp Obywatel (1,860 p.)

Przeanalizuj ten kod

	int sumaSqrt = 0;
	bool wszystkieSumySqrt = true;
	for (int k = 0; k < 9; k += 3) { //trzy ściany kwadratu (y)
		for (int w = 0; w < 9; w += 3) { //trzy ściany kwadratu (x)
			for (int i = w; i < w + 3; i++) { //poruszanie się w wierszach
				for (int j = k; j < k + 3; j++) { //poruszanie się w kolumnach
					sumaSqrt += cyfra[i][j]; //zwróć uwagę na +=
				}
			}
			std::cout << sumaSqrt << std::endl; //opcjonalnie
			if (sumaSqrt != 45) {
				wszystkieSumySqrt = false;
			}
			sumaSqrt = 0;
		}
	}
}

 
Tutaj taka wizualizacja. Liczby w kwadratach oznaczają kolejność dodawania, np. kwadrat z liczbą 2 oznacza cyfre dodaną jako drugą

komentarz 22 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
edycja 22 kwietnia 2020 przez lujasjeden
dziekuje wszystko dziala jak nalezy jestes Wielka!
1
komentarz 22 kwietnia 2020 przez amelia.cpp Obywatel (1,860 p.)
Nie ma za co, dzięki za komplement ;) , do usług
0 głosów
odpowiedź 17 kwietnia 2020 przez DeBos123 Nałogowiec (44,950 p.)
–3 głosów
odpowiedź 17 kwietnia 2020 przez Mateusz Bartczak Użytkownik (610 p.)
#include <iostream>

using namespace std;

int main()
{
    int cyfra[9];   //tablica cyfr

    for(int i = 0; i < 9; i++){        //dodanie cyfr do tablicy
        cyfra[i]=i;
    }

    cyfra[7]=5;         //ustawienie cyfry nr 7 na wartość 5


    for (int i = 0; i < 9; i++){            //cały algorytm sprawdzający
        for (int j = 0; j < 9; j++){
            if (cyfra[j]==cyfra[i]&&j!=i){      //tu wstaw w if co chcesz
                cout<<cyfra[j];
            }
        }
    }

    return 0;
}

 

komentarz 18 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
nie dokonca chce dodac liczby do tablicy w kolejnosci 1-9, gra polega u mnie na tym ze po kliknieciu na image 1-9 przypisuje sie do zmiennej char value wartosc od "a" do "l" na klawiaturze i po kliknieciu na dane pole z 81 dajmy na to ze na 1 to if value=='a' wczytuje zdjecie 1 i ustawiam wartosc int cyfra1 na 1 analogicznie dla klikniecia 2 value='s' i na kliknieciu pola np 1 if value=='s' wczytuje zdjecie co przedstawia 2 narysowana i wpisuje wartosc cyfra1=2. No i tak na wszystkie pola no a warunki sprawdzajace czy wygrales to czy cyfra1+cyfra2+...cyfra9==45  &&  cyfra10+cyfra11...cyfra18 ==45 i tak kazdy rzad i kazda kolumne i 9 kwadratow 3x3 && kazda liczba w kolumnie, rzedzie jest rozna i wlasnie o to mi chodzi jak to zapisac zeby wyszlo jak najmniej pisania. Moze rozjasnilem sytuacje troche i zwizualizowalem co nie.
1
komentarz 18 kwietnia 2020 przez Mateusz Bartczak Użytkownik (610 p.)

a przepraszam, nie zrozumiałem dobrze, w takim razie można sprawdzać to w pętlach, tu podałem sposób na te twoje cyfra1+cyfra2... = 45

ale to nie działa przeanalizuj proszę 456456456 :)

wklejam kodzik do kolumn i wierszy kwadratów mi się już nie chciało

int cyfra[81];   //tablica cyfr
    int b=1;
    for(int i = 0; i < 81; i++){        //dodanie cyfr do tablicy
        if(b==10){
            b=1;
        }
        cyfra[i]=b;
        b++;
    }
    int suma;
    for (int i = 0; i < 81; i+=9){
        suma=0;
        for (int j = 0; j < 9; j++){
            suma+=cyfra[i+j];
        }
        if(suma==45){
            cout<<"Tak"<<endl;
        }
        else{
            cout<<"Nie"<<endl;
        }
    }
    for (int i = 0; i <= 9; i++){
        suma=0;
        for (int j = 0; j < 81; j++){
            suma+=cyfra[i+j];
        }
        if(suma==45){
            cout<<"Tak"<<endl;
        }
        else{
            cout<<"Nie"<<endl;
        }
    }

 

komentarz 18 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
dzieki, co oznacza b?
komentarz 22 kwietnia 2020 przez Mateusz Bartczak Użytkownik (610 p.)
przypisywanie od 1 do 9 ;)

Podobne pytania

0 głosów
0 odpowiedzi 121 wizyt
pytanie zadane 14 stycznia 2017 w Matematyka, fizyka, logika przez KeiRullez Nowicjusz (120 p.)
0 głosów
1 odpowiedź 422 wizyt
+1 głos
1 odpowiedź 548 wizyt
pytanie zadane 23 października 2021 w PHP przez stanislawruszkowski Obywatel (1,310 p.)

92,556 zapytań

141,403 odpowiedzi

319,559 komentarzy

61,942 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!

...