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

Odkaz – C / C++ – Fórum – Programujte.comOdkaz – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Epoxi
~ Anonymní uživatel
35 příspěvků
4. 12. 2013   #1
-
0
-

Zdravím, potřeboval bych upravit tento kód . Mělo by to vypadat takhle. Pokud nesplnis check prirad do sudoku[8][8] cislo 9 a znovu zavolej reseni(sudoku, 0, 0), pokud to opet nebude platit dosad do sudoku[8][8] cislo 8 a zavolej znovu funkci reseni. Takhle to bude delat az do jednicky. A potom, kdyz s prislusnym cislem na poli splni check, vypis sudoku (else).

 if( reseni(sudoku, 0, 0) )
    {
        if (check(sudoku)){
        printf("takhle nelze");
        sudoku[8][8] = 9;
        
        }
        else
        {
        printf("Reseni sudoku:\n\n");
        for(i = 0; i < 9; ++i)
        {
            for(j = 0; j < 9; ++j)
                printf("%d ", sudoku[i][j]);
            printf("\n");
        }

        }
    }
Nahlásit jako SPAM
IP: 195.113.242.–
Reklama
Reklama
hlucheucho+10
Posthunter
4. 12. 2013   #2
-
0
-

místo if použít for, který bude do sudoku [8] [8] dosazovat čísla od 1 do 9? Po výpisu řešení by se zavolal break; aby nedošlo k další iteraci cyklu

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Epoxi
~ Anonymní uživatel
35 příspěvků
4. 12. 2013   #3
-
0
-

spíš jestli by to nešlo přes rekurzívu

Nahlásit jako SPAM
IP: 195.113.242.–
hlucheucho+10
Posthunter
4. 12. 2013   #4
-
0
-

  božínku. Osobně jsem příznivcem cesty nejmenšího odporu. Proč ne cyklus?

Asi jsem zdeformovaný z jednočipů, že se rekurzívnímu volání funkcí vyhýbám (většinou mají malou paměť a nechat "kynout" zásobník je cesta do pekel)

hu

Nahlásit jako SPAM
IP: 195.178.67.–
hlucheucho+10
Posthunter
4. 12. 2013   #5
-
0
-

V každé úrovni rekurze bys musel mít informaci o tom, jaké číslo do sudoku[8] [8] vložila předchozí úroveň. Kromě toho každé volání funkce je doprovázeno určitou administrativou (uložení návratové adresy a parametrů do zásobníku ...., při návratu odebírání toho všeho ze zásobníku..). Cyklus se pro tvůj program jeví jednodušší a efektivnější.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Epoxi
~ Anonymní uživatel
35 příspěvků
4. 12. 2013   #6
-
0
-

Snažím se to nějak zprovoznit. Vím, že  pole 8 8, má být 7. Když dosadím 7, tak je to ok. Pokud začínam od jiného čísla, vypise chybu a nic se nedeje.

int main(void)
{
int a, b,i, j;

b = 5;
for(a = 1; a < 10; a++)
{
   int sudoku[9][9]={{0, 0, 0, 0, 0, 6, 5, 0, 9},
                      {0, 0, 1, 0, 0, 0, 0, 0, 0},
                      {0, 0, 2, 5, 0, 0, 0, 0, 0},
                      {0, 0, 5, 0, 0, 0, 8, 0, 1},
                      {0, 0, 0, 0, 8, 0, 0, 0, 0},
                      {7, 0, 8, 0, 0, 0, 9, 0, 0},
                      {0, 0, 0, 0, 0, 7, 4, 0, 0},
                      {0, 0, 0, 0, 0, 0, 2, 0, 0},
                      {5, 0, 6, 4, 0, 0, 0, 0, 0}};


      b++;
      sudoku[8][8] = b;
       if(zkontroluj_vstupni_zadani(sudoku))
       {
           printf("chyba\n");
       }
           else
           {
              if( reseni(sudoku, 0, 0) )
           {
              if(!check(sudoku) )
                 printf("nema reseni \n");
                 else
                 {
                     for(i = 0; i < 9; ++i)
                     {
                     for(j = 0; j < 9; ++j)
                     printf("%d ", sudoku[i][j]);
                     printf("\n");

                     }
                     break;
                 }


           }
         }



}
return 0;
}


Vypadá to že se zasekne tady
if(zkontroluj_vstupni_zadani(sudoku)). Vypise jenom, ze jsou shodna cisla na napr. na radku a konec.
 

Nahlásit jako SPAM
IP: 195.113.242.–
Epoxi
~ Anonymní uživatel
35 příspěvků
4. 12. 2013   #7
-
0
-

jde o jak vyskocit z If, aby pokracoval for

Nahlásit jako SPAM
IP: 195.113.242.–
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, 235 hostů

Podobná vlákna

Odkaz — založil Rocky Marchiano

Odkaz — založil Milan

Odkaz — založil BoBy

Viacnasobny odkaz — založil zonda

Odkaz v divu — založil Stepan

Moderátoři diskuze

 

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