Nelze ukoncit funkci – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nelze ukoncit funkci – C / C++ – Fórum – Programujte.comNelze ukoncit funkci – C / C++ – Fórum – Programujte.com

 

TuTi_fruTi0
Newbie
13. 11. 2011   #1
-
0
-

   

void kontrola_radku(int sudoku[9][9], int radek, int hledaneCislo){	
	
	
	for(radek; radek < 9; radek++){
		int pozice=0; // vynuluju pocet nul na radku
		
					
		for(int osaY = 0; osaY < 9; osaY++){ 
				
		    //kontrola jestli je na radku mene nez 3 nuly			
		   	if(sudoku[osaY][radek] == 0){					
				pozice++;				
			}
			
		}//konec osaY
		
		//pokud je na radku mene nez 3 nuly(volne mista) zkusim doplnit hledane cislo
		if(pozice <= 3){
			
			while(hledaneCislo <= 9){
			    //pokud se cislo na radku rovna 0 rozjedu kontrolu celeho radku
			    for(int kontrolovaneCislo = 0; kontrolovaneCislo < 9; kontrolovaneCislo++){	
					if(sudoku[kontrolovaneCislo][radek] == 0){	
									
						for(int kontrolaRadku = 0; kontrolaRadku < 9; kontrolaRadku++){
							if(sudoku[kontrolaRadku][radek] == hledaneCislo){
								hledaneCislo++;								
								if(hledaneCislo > 9){kontrola_radku(sudoku, radek, 1);}
								kontrola_radku(sudoku, radek, hledaneCislo);
							}
						}//konec kontrola
											
						// zkontroluju sloupce a kostky moznych pozic 
						bool sloupec=0;
						bool kostka=0;	
						for(int kontrolaY = 0; kontrolaY < 9; kontrolaY++){								
							if(sudoku[kontrolovaneCislo][kontrolaY] == hledaneCislo){
								sloupec = 1;
								break;																
							}							
						}
						
						
						if(kontrolovaneCislo <= 3  && radek <= 3){
							for(int y = 0; y < 3; y++){
								for(int x = 0; x < 3; x++){
								 	if (sudoku[x][y] == hledaneCislo){kostka=1;break;}
								}
							}
						} 
						if(kontrolovaneCislo > 3 && kontrolovaneCislo <= 6 && radek <= 3){ 
							for(int y = 0; y < 3; y++){
								for(int x = 3; x < 6; x++){
								 	if (sudoku[x][y] == hledaneCislo){kostka=1;break;}								
								}
							}
						}						
						if(kontrolovaneCislo > 6 && kontrolovaneCislo < 9 && radek <= 3 ){ 
							for(int y = 0; y < 3; y++){
								for(int x = 6; x < 9; x++){
								 	if (sudoku[x][y] == hledaneCislo){kostka=1;break;}								
								}
							}
						}							
						if(kontrolovaneCislo <= 3  && radek > 3 && radek <= 6){
							for(int y = 3; y < 6; y++){
								for(int x = 0; x < 3; x++){
								 	if (sudoku[x][y] == hledaneCislo){kostka=1;break;}								
								}
							}
						}							
						if(kontrolovaneCislo > 3 && kontrolovaneCislo <= 6 && radek > 3 && radek <= 6){ 
							for(int y = 3; y < 6; y++){
								for(int x = 3; x < 6; x++){
								 	if (sudoku[x][y] == hledaneCislo){kostka=1;break;}								
								}
							}
						}	
						if(kontrolovaneCislo > 6 && kontrolovaneCislo < 9  && radek > 3 && radek <= 6){ 
							for(int y = 3; y < 6; y++){
								for(int x = 6; x < 9; x++){
								 	if (sudoku[x][y] == hledaneCislo){kostka=1;break;}								
								}
							}
						}	
						if(kontrolovaneCislo <=3  && radek > 6 && radek < 9){ 
							for(int y = 6; y < 9; y++){
								for(int x = 0; x < 3; x++){
								 	if (sudoku[x][y] == hledaneCislo){kostka=1;break;}								
								}
							}
						}	
						if(kontrolovaneCislo > 3 && kontrolovaneCislo <= 6  && radek > 6 && radek < 9){
							for(int y = 6; y < 9; y++){
								for(int x = 3; x < 6; x++){
								 	if (sudoku[x][y] == hledaneCislo){kostka=1;break;}								
								}
							}
						}	 
						if(kontrolovaneCislo > 6 && kontrolovaneCislo < 9 && radek > 6 && radek < 9){ 	
							for(int y = 6; y < 9; y++){
								for(int x = 6; x < 9; x++){
								 	if (sudoku[x][y] == hledaneCislo){kostka=1;break;}								
								}
							}					
						}											
					
						// pokud cislo neni obsazeno ani ve sloupci ani kostce prislusne volne pozice oznacim jako podezrele
						if (kostka == 0 && sloupec == 0){sudoku[kontrolovaneCislo][radek] = -1;}
					
					}
				}//konec kontrolovaneCislo
						

				dosad_cislo(sudoku, hledaneCislo);
				vynuluj_pole(sudoku);
				hledaneCislo++;
					
			}//konec while
			hledaneCislo=1;
								
		}
						
	}//konec radek
	
	cout << "KONEC PROCD" << endl;
}

Zdravím,

na začátek bych chtěl upozornit, že s C++ začínám, takže pokud je v této funkci moc prasáckých chyb - učím se a potřebuji vědět jak psát zprávně.

Tato procedura je součástí "prográmku", který má luštit hru sudoku  (do programu jsem se snažil přepsat svůj myšlenkový pochod).  Problém je však ten že se co celé skládá ze tří procedur (jedan kontroluje kostky 3x3 druhá sloupce a třetí řádky).

Tato procedurka mi dělá tu chybu, že kdzž se dostane na poslední řádek a doplní na něm číslo, tak se neukončí ale zasekne na tom poslením řádku. Pro kontrolu jsem si napsal ten řádek který mi vzpisuje "KONEC PROCD"  a na něj se normálně dostane, ale potom se nesmyslně znovu vrátí....

Už si s tím hraju dva dny a neůžu na to přijít, kdyby to někdo prokousnul moc by mi to pomohlo....

Díkec Víťas

Nahlásit jako SPAM
IP: 80.213.165.–
KIIV
~ Moderátor
+43
God of flame
13. 11. 2011   #2
-
0
-

zkus dat taky neco na zacatek... treba se vracis porad z venku a ne vevnitr

Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
TuTi_fruTi0
Newbie
13. 11. 2011   #3
-
0
-

#2 KIIV
jeslti jsem to dobře pochopil, taohle mam taky ošetřeno tím, že v místě volání teto procedury mám jak před voláním, tak po ukončení cin.get()....

Nahlásit jako SPAM
IP: 80.213.165.–
TuTi_fruTi0
Newbie
14. 11. 2011   #4
-
0
-

#3 TuTi_fruTi
Nechapu ... tuhle funkci volam v mainu jednou a kdyz se do ni dostanu tak uz s ni nevylezu..opravdu nevim co muse zpusobovat to zacykleni   

Nahlásit jako SPAM
IP: 80.213.165.–
TuTi_fruTi0
Newbie
2. 12. 2011   #5
-
+1
-
Zajímavé

Nejlepší řešení bylo to nakone od základů přepsat. 

Teď už vše funguje jak má :-)

Nahlásit jako SPAM
IP: 88.90.191.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 111 hostů

Podobná vlákna

Ukoncit program — založil Adriana

SVCHOST - ukončit — založil Garret Raziel

Vlákna, jak je ukončit — založil Kartmen

[Java6]Jak ukoncit thread? — založil shadius

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý