Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Honza1302 11. 02. 2013, 11:46:55
-
Dobrý den!
Chtěl bych poprosit s jednou banalitou v C jazyku. Jsem začátečník, tak mě prosím šetřete v kritice. ;)
Jedná se o jeden příklad. Máme udělat "program", který přečte tři čísla a zobrazí nejvetsí z nich.
v učebnici Pavla Herouta je:
1. int a, b, c, x;
2. printf("zadej tri cela cisla: \n");
3. scanf("%d%d%d", &a, &b, &c);
4.
5. if (a > b)
6. if (a > c)
7. x = a;
8.
9. else
10. x = c;
11.
12. else
13. if (b < c)
14. x = c;
14. else
15. x = b;
16.
17.printf("Nejvetsi cislo je: %d", x)
Nechci, aby jste se mi smali, ale nenašel by se někdo, kdo by mi to nějak okomentoval. Pripada mi, že na 9. a 10. řádku (else max = c)je to navic, ale samozrejme to bez toho nefunguje.
Já věřím, že zde jsou rozumní lidé, že mě nebudete mít za debila, že mi někdo napíše něco přínosneho, nejste přece jako komunita lidí na zpovednici či diskuteri z Novinek. :D :D
Tento přiklad jsem udelal pomoci podmíněného přikazu, takto mi to pripadne rozumnejsi a chápatelnější:
#include <stdio.h>
#include <stdlib.h>
void main()
{
int a, b, c;
int x;
printf("Zadej tri cisla : \n");
scanf("%d%d%d", &a, &b, &c);
x = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
printf("Nejvetsi cislo ze zadanych je: %d\n", x);
}
Ale rád bych chtěl 100% rozumět tomu předešlému přikladu z Herouta.
Díky moc za poradění.
:-)))
-
9. else
10. max = c;
Samozřejmě zde má být x, a ne max.
Překlep, pardon.
-
Zkus si tam doplnit chlupatý závorky, pak to bude srozumitelnější.
-
Samozřejmě zde má být x, a ne max.
Opravil jsem.
-
int a, b, c, x;
printf("zadej tri cela cisla: \n");
scanf("%d%d%d", &a, &b, &c);
if (a > b) { /* Je A vetší než B? */
/* Ano, porovnej dále A */
if (a > c) { /* Je A větší než C? */
x = a; /* Ano, nejvyšší číslo je A */
} else {
x = c; /* Není, nejvyšší číslo je C */
}
} else {
if (b < c) {
x = c;
} else {
x = b;
}
}
printf("Nejvetsi cislo je: %d", x)
-
Je to jednoduchý, prostě na začátku testuju, jestli je a > b a tim se mi to rozpadne na 2 pripady. V prvnim pripade je nejvetsi bud a nebo c (a je tam vnorena dalsi podminka) a ve druhem pripade je nejvetsi bud b nebo c (zase je tam vnorena podminka). Je vice nez vhodne pouzivat slozene zavorky, tento priklad je toho dukazem, verim ze skoro na vsech projektech je syntaxe if bez slozenach zavorek zakazana (tyka se nejenom C, ale vsech jazyku s obdobnou syntaxi, jako je C#, Java, PHP).
-
Stačí si to přepsat tak jak se to píše normálně a rázem je to jasné. Použitý prasostyl autora skutečně překážkou k pochopení.
int a, b, c, x;
printf("zadej tri cela cisla: \n");
scanf("%d%d%d", &a, &b, &c);
if (a > b)
{
if (a > c)
{
x = a;
}
else
{
x = c;
}
}
else if (b < c)
{
x = c;
}
else
{
x = b;
}
printf("Nejvetsi cislo je: %d", x)
[/quote]
nebo
int a, b, c, x;
printf("zadej tri cela cisla: \n");
scanf("%d%d%d", &a, &b, &c);
if (a > b)
{
if (a > c) x = a; else x = c;
}
else if (b < c) x = c; else x = b;
printf("Nejvetsi cislo je: %d", x)
[/quote]
-
Buďto jsem nepochopil zadání nebo to příliš komplikujete, proč ne takto?
...
x = a;
if (b > x) x =b;
if (c > x) x =c;
...
-
#define max(x,y) (x ^ ((x ^ y) & -(x < y)))
printf("Nejvetsi cislo je: %d", max(max(a,b),c));
-
Buďto jsem nepochopil zadání nebo to příliš komplikujete, proč ne takto?
...
x = a;
if (b > x) x =b;
if (c > x) x =c;
...
Protože je to špatně pro případ b>c, c>a, b>c...
#define max(x,y) (x ^ ((x ^ y) & -(x < y)))
printf("Nejvetsi cislo je: %d", max(max(a,b),c));
Zamachrovals pěkně, ale z tvé knížky by se (tohle bude nejspíš v kapitole učíme se if-else) nikdo nic nenaučil...
-
Buďto jsem nepochopil zadání nebo to příliš komplikujete, proč ne takto?
...
x = a;
if (b > x) x =b;
if (c > x) x =c;
...
Protože je to špatně pro případ b>c, c>a, b>c...
#define max(x,y) (x ^ ((x ^ y) & -(x < y)))
printf("Nejvetsi cislo je: %d", max(max(a,b),c));
Zamachrovals pěkně, ale z tvé knížky by se (tohle bude nejspíš v kapitole učíme se if-else) nikdo nic nenaučil...
FAIL! ;D
-
Buďto jsem nepochopil zadání nebo to příliš komplikujete, proč ne takto?
...
x = a;
if (b > x) x =b;
if (c > x) x =c;
...
Protože je to špatně pro případ b>c, c>a, b>c...
Vždyť to má dobře.
-
Buďto jsem nepochopil zadání nebo to příliš komplikujete, proč ne takto?
...
x = a;
if (b > x) x =b;
if (c > x) x =c;
...
Protože je to špatně pro případ b>c, c>a, b>c...
Vždyť to má dobře.
Jakto? Já nejsem programátor, tak tu konstrukci možná úplně nechápu...
-
Buďto jsem nepochopil zadání nebo to příliš komplikujete, proč ne takto?
...
x = a;
if (b > x) x =b;
if (c > x) x =c;
...
Protože je to špatně pro případ b>c, c>a, b>c...
Vždyť to má dobře.
Jakto? Já nejsem programátor, tak tu konstrukci možná úplně nechápu...
1. Do x přiřadím 1. vstupní hodnotu (a).
2. Pokud je 2. vstupní hodnota (b) větší než aktuální hodnota x, přiřadím b do x. Nyní je v x hodnota max(a, b).
3. Pokud je 3. vstupní hodnota (c) větší než aktuální hodnota x, přiřadím c do x. Nyní ve v x hodnota max(max(a, b), c), což se rovná max(a, b, c)
... atd.
Lze induktivně rozšířit na libovolný počet vstupních čísel (např. pole). V podstatě provádím sekvenční redukci pomocí asociativní binární operace maximum.
-
Njn, a ještě to nebylo žádné voodoo, ale prostě jsem si to blbě přečetl :-( Tak beru zpět a navíc připouštím, že je to lepší řešení, než to Heroutovo.
Btw z jaké knížky se na IT takové věci učí?
-
Ale chlopi, jak to neni reseno pres templejty, je to cele na vykal ...
ps: Jak mam kuwa vedet, kolik trpajzliku patri ke Snehurce? Treba v nasem state neni mnohozenstvi povoleno. Zatim(?).