IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Největší společný dělitel

Aktivity
Avatar
Patrik
Neregistrovaný
Avatar
Patrik:10.11.2013 22:07

Ahojte,

pracuji na programu, který počítá více věcí a jednou z nich je největší společný dělitel. S touhle části bych potřeboval poradit. V jedné z části kódu nechápu co se děje tak kdyby mi to někdo objasnil byl bych rád :)

int nsd( int x, int y ) {

    int mensi = ( x <= y ) ? x : y;

    for ( int i = mensi; i > 0; i-- ) {
        if ( ( x % i == 0 ) && ( y % i == 0) ) {
            return i;
        }
    }

    return 1;
}

Teď myslím tu část:
int mensi = ( x <= y ) ? x : y;
Co naplňuje proměnou mensi? Jinak celkově kód mi funguje, jenom nechápu tuhle malou část. Díky za rady.

 
Odpovědět
10.11.2013 22:07
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na
Jan Vargovský:10.11.2013 22:28

Říká se tomu ternární podmínka. Samotná podmínka je x<=y tak je menší x, pokud je větší x tak se přiřadí mensi = y. Pak jen vezmeš to menší číslo a dekrementuješ ho a testuješ, zdali když vydělíš čísla x a y číslem i, jestli je to 0. Pokud jo, tak je to největší společný dělitel. Pro příklad máš třeba 32 a 10

menší číslo je 10.
Takže jdeš od 10 k 1 a kontroluješ:
je 32/ 10 se zbytkem 0 ? není
je 32 / 9 se zbytkem 0 ? není
je 32 / 8 se zbytkem 0 ? je tak testuješ ještě druhé číslo. Je 10/8 se zbytkem 0 ? není
.
.
.
je 32 / 5 se zbytkem 0 ? není
je 32/4 se zbytkem 0 ? ano je. Tak testuješ druhé číslo 10/4 není se zbytkem 0.
32/3 není
32/2 je 10/2 je => NSD je 2.

 
Nahoru Odpovědět
10.11.2013 22:28
Avatar
Silvinios
Tvůrce
Avatar
Silvinios:10.11.2013 22:28

Jde o ternární operátor pro podmíněný výraz. Dělá to to samé, co následující kód:

int mensi;
if ( x <= y ) {
  mensi = x;
} else {
  mensi = y;
}

Mimochodem k výpočtu NSD je lepší použít Euklidův algoritmus. Setkal jsi se s ním?

 
Nahoru Odpovědět
10.11.2013 22:28
Avatar
Patrik
Neregistrovaný
Avatar
Patrik:10.11.2013 23:08

Jste super :) díky za rychlé a vyčerpávající odpovědi. Ale asi tam použiji ten Euklidův algoritmus jak píše Silvinios, to se mi bude lehčeji obhajovat. Jinak děkuji za váš čas a pěkný zbytek večera.

 
Nahoru Odpovědět
10.11.2013 23:08
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.