Stránka 1 z 1

Naprogramování programu s prvočísly.

Napsal: 07 lis 2013 18:44
od zezr
Ahoj
Asi jako každý student mám za domácí úkol:Navrhněte algoritmus, který vypíše všechna prvočísla menší, než zadané číslo.
No upřímně není problém program napsat ale já jsem nepochopil jak funguje for
Byl by tu někdo tak ochotný a napsal by mi zcela jasně jak to funguje? Programujeme v C.
Prosím nepište sem že na netu je.... prostě jsem to nepochopil ani z netu ani od učitele. Děkuji
zezr

Re: Naprogramování programu s prvočísly.

Napsal: 07 lis 2013 19:33
od faraon
Příkaz for v Céčku je vlastně jen rozšířené while, takže když napíšeš:

Kód: Vybrat vše

for (i=0;i<10;++i)
    printf("%d\n",i);

je to úplně to samé jako bys napsal tohle:

Kód: Vybrat vše

i=0;
while (i<10)
      {
      printf("%d\n",i);
      ++i;
      }

A pro upřesnění, máš tam tři bloky oddělené středníky. To co je v prvním bloku se provede před spuštěním cyklu. To co je v druhém bloku je podmínka, dokud platí, cyklus se opakuje. A to co je ve třetím bloku je činnost, která se provede na konci každé iterace, předtím než se testuje podmínka. Kterýkoliv z těch bloků může být prázdný, a když vynecháš všechny, vytvoříš nekonečný cyklus:

Kód: Vybrat vše

for (;;)
    {
    ...
    }

Ještě nějaká nejasnost?

Re: Naprogramování programu s prvočísly.

Napsal: 07 lis 2013 20:48
od zezr
Dobře takže to co v tom je tak v základu je "i" rovno 2 a pak se přidává a přidává po 1 dokud nebude "i" to číslo které jsem si zvolil. Po té co je toto číslo stejné jako to co jsem si zvolil se začne dít co?(Pokud ti tento kod příjde povědomí tak je od tebe(částečně) pardon za vypůjčení
ale já potřebuji jasnej příklad.)
edit1 A ten druhej for generuje čísla zase od 2-našeho čísla a pak se to mezi sebou dělí a zjištujě to jestli to číslo má nějakej dělitel bezezbytku a pak to vypíše výsledky ne?

Kód: Vybrat vše

#include <stdio.h>


int main()
    {
    int i,j,cislo;

   printf("\n Zadej hodnotu maximalniho CELEHO cisla");
   scanf("%i",&cislo);


    for (i=2;i<cislo;++i)
        {
        for (j=2;j<i;++j)
            if (i%j==0)
               break;
        if (i==j)
           printf("%d\n",i);
        }

    return 0;
    }

Re: Naprogramování programu s prvočísly.

Napsal: 07 lis 2013 21:01
od faraon
Cyklus i bere všechna čísla od 2 až po číslo o 1 menší než zadané. Jakmile se dostane až k němu, program skončí.
Cyklus j testuje jestli je i prvočíslo, prostě se ho pokusí vydělit všemi čísly od 2 až po číslo o 1 menší než i, a pokud mu to vyjde beze zbytku, ví že to není prvočíslo.

Pozor na jeden rozdíl! Když budeš mít cyklus

Kód: Vybrat vše

for (i=1;i<10;++i)

tak ti napočítá od 1 do 9. Ale když uděláš

Kód: Vybrat vše

for (i=1;i<=10;++i)

tak napočítá od 1 do 10! Vidíš v čem je ten rozdíl?

Re: Naprogramování programu s prvočísly.

Napsal: 07 lis 2013 21:14
od zezr
Jo rozdíl vidím. Jsem moc rád že jsi mi to vysvětlil. Opravdu děkuji.