Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.
Avatar
coells
Tvůrce
Avatar
coells:27.3.2014 9:46

Tohle je naprosto korektní kód v C:

int p[] = { 10, 20, 30, 40, 50, 0 }, *r = 0[&p], q = 0;

while (0[r])
    q += 0[r++];

printf("%d\n", 0[&q]);
 
Odpovědět
27.3.2014 9:46
Avatar
Odpovídá na coells
Zdeněk Pavlátka:27.3.2014 10:26

Jojo, je to super :)

Nahoru Odpovědět
27.3.2014 10:26
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Jakub Zourek
Člen
Avatar
Odpovídá na coells
Jakub Zourek:27.3.2014 12:56

Pěkné. Musel jsem si to nejprve zkompilovat, abych zjistil, co to má dělat. Teprve po několika minutách jsem pochopil, proč to funguje.

 
Nahoru Odpovědět
27.3.2014 12:56
Avatar
Odpovídá na coells
Libor Šimo (libcosenior):27.3.2014 13:12

Takto je to tiež zaujímavé. ;)

#include <stdio.h>

int main(int argc, char *argv[])
{
    int p[] = { 10, 20, 30, 0, 40, 50 }, *r = 0[&p], q = 0;

    while (0[r])
    q += 0[r++];

    printf("%d\n", 0[&q]);

    return 0;
}
Nahoru Odpovědět
27.3.2014 13:12
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Martin Konečný (pavelco1998):27.3.2014 13:37

V C nedělám, mohl by mi někdo říct, co to dělá?

Nahoru Odpovědět
27.3.2014 13:37
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Libor Šimo (libcosenior):27.3.2014 13:46
int main(void)
{
    int p[] = { 10, 20, 30, 40, 50, 0 }; // vytvorí pole int-ov
    int *r = 0[&p]; / do pointeru *r vloží adresu prvého prvku pola p[]
    int q = 0;

    while (0[r]) { // cyklus beží kým v je na adrese prvok väčší ako nula
        q += 0[r++]; // prechádza adresy poľa a spočítava ich
    }

    printf("%d\n", 0[&q]); // vypíše obsah adresy

    return 0;
}

Dúfam, že som to správne popísal.

Nahoru Odpovědět
27.3.2014 13:46
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Tycek
Člen
Avatar
Tycek:27.3.2014 13:52

Zajímavý kód. Pochopil jsem co dělá, ale nějak jsem nepochopil co znamená to pole 0.

Editováno 27.3.2014 13:52
 
Nahoru Odpovědět
27.3.2014 13:52
Avatar
Odpovídá na Tycek
Zdeněk Pavlátka:27.3.2014 14:29

Pole a index jdou ve výrazu prohodit ;) V tom je celý vtip.

Nahoru Odpovědět
27.3.2014 14:29
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
vitamin
Člen
Avatar
vitamin:27.3.2014 17:45

x[index] a index[x] kompilator transfomuje na *(x+index)
Ten kod je napisany naschval zlozito, zjednodusena verzia:

int p[] = { 10, 20, 30, 40, 50, 0 }, *r = p, q = 0;

while(*r)q += *r++;

printf("%d\n", q);
 
Nahoru Odpovědět
27.3.2014 17:45
Avatar
Libor Šimo (libcosenior):28.3.2014 8:52

Samozrejme, že sa to dá riešiť aj bez pointerov a potom sa do dá použiť aj v iných jazykoch.

int p[] = {10, 20, 30, 40, 50, 0}, r = 0, q = 0;

while (p[r])
    q += p[r++];

printf("%d\n", q); // výstup si vie každý upraviť podľa jazyka
Nahoru Odpovědět
28.3.2014 8:52
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
coells
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
coells:28.3.2014 12:15

Řešení od C# juniora:

int[] p = new int[] { 10, 20, 30, 40, 50, 0 };
int q = p.Sum();

Řešení od C# seniora:

List<int> p = new List<int>(new int[] { 10, 20, 30, 40, 50, 0 });
int q = p.Sum();

Řešení, když nebereš dostatek vitaminu:

Devbook.cz => Nové vlákno => Mám za úkol sečíst prvky v poli, ale nevím si s tím rady. Kdo mi to napíše?
 
Nahoru Odpovědět
28.3.2014 12:15
Avatar
Nahoru Odpovědět
28.3.2014 12:27
Aj tisícmíľová cesta musí začať jednoduchým krokom.
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 12 zpráv z 12.