Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Petlja za stampanje prostih brojeva do N!?

[es] :: C/C++ programiranje :: Petlja za stampanje prostih brojeva do N!?

[ Pregleda: 6564 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

MixMaster

Član broj: 10076
Poruke: 323
*.crnagora.net.



+32 Profil

icon Petlja za stampanje prostih brojeva do N!?05.11.2004. u 20:24 - pre 206 meseci
Ajde ovako.

Kako da napravim petlju koja bi mi stampala sve proste brojeve do nekog broja N koji se unese.
Uh, nikako da postavim uslov, a zadatak je jednostavan pa se nerviram sad zbog toga.:)
Radi se u C-u.

Evo jos jedna kombinacija. Napisati petlju ili cio program (nije vazno) koji dati prirodni broj N razbija na proste cinioce.

Unaprijed hvala.

Vidi bako, DžEDAJ!
 
Odgovor na temu

Alef
Viktor Kerkez
Novi Sad

Član broj: 505
Poruke: 188
*.66.EUnet.yu.



Profil

icon Re: Petlja za stampanje prostih brojeva do N!?05.11.2004. u 23:12 - pre 206 meseci
Ovo bi trebalo da radi.

1) Prosti do n

Code:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
        int i, j;

        if (argc != 2) return(-1);
        if (atoi(argv[1]) < 2) {
                printf("Nema ih.\n");
                return(-1);
        }

        for (i = 2; i <= atoi(argv[1]);  i++) {
                for (j = 2; i % j; j++);
                if (i == j) printf("%d ", i);
        }
        printf("\n");

        return 0;
}

Code:

$ ./prosti 100
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 





2) Rastavljanje na činioce

Code:

#include <stdio.h>
#include <stdlib.h>

int niz[100], pos = 0;

void cinioci(int n)
{
        int i;
        if (n == 1) return;
        for (i = 2; n % i; i++);
        niz[pos++] = i;
        cinioci (n / i);
}

int main(int argc, char *argv[])
{
        int i;
        if (argc != 2) return(-1);
        if (atoi(argv[1]) < 2) {
                printf("Ne moze da se rastavi na proste cinioce.\n");
                return(-1);
        }

        cinioci(atoi(argv[1]));
        for (i = 0; i < pos; i++)
                printf("%d ", niz[i]);
        printf("\n");

        return 0;
}



Code:

$ ./cinioci 100
2 2 5 5 



[Ovu poruku je menjao Alef dana 07.11.2004. u 23:44 GMT+1]
 
Odgovor na temu

MixMaster

Član broj: 10076
Poruke: 323
*.crnagora.net.



+32 Profil

icon Re: Petlja za stampanje prostih brojeva do N!?05.11.2004. u 23:24 - pre 206 meseci
E prije svega da ti kazem, odusevio si me!
Puno hvala.

Inace, izgleda da sam zaboravio da kazem da to treba da se odradi samo sa najjednostavnijim petljama, bez argc i argv, ali nema veze. Iz ovoga mogu sve da shvatim.

Mozda cu ovih dana imati jos koji problem, pa se nadam da ces biti tu kao ispomoc.

Pozdrav, cujemo se!!!
Vidi bako, DžEDAJ!
 
Odgovor na temu

MixMaster

Član broj: 10076
Poruke: 323
*.crnagora.net.



+32 Profil

icon Re: Petlja za stampanje prostih brojeva do N!?07.11.2004. u 21:27 - pre 206 meseci
Prvi zadatak OK.

E sada sto se tice drugog on glasi:
"napisati program kojim se dati prirodni broj N razbija na proste cinioce, na izlazu ispisati vektor prostih cinilaca. Javiti gresku u slucaju da broj nije prirodan."
U funkciji "cinioci" "j" nam ne treba, ali to nije ni vazno, vec u for petlji si stavio da "i" ide od 2 pa na dalje, ali nisi naglasio da ide do "n"?! Hmm.

Znaci kako to odraditi krace, koristeci samo f-iju main() i petlje?

Hvala unapijed.
Vidi bako, DžEDAJ!
 
Odgovor na temu

Alef
Viktor Kerkez
Novi Sad

Član broj: 505
Poruke: 188
*.221.eunet.yu.



Profil

icon Re: Petlja za stampanje prostih brojeva do N!?07.11.2004. u 22:46 - pre 206 meseci
A da nabaviš neku dobru knjigu za C?

Evo ti kako si tražio, ali probaj ipak da razumeš gornji kod: ni ne treba da naglasim da ide do n, jer ne ide. U funkciji i ide do prvog broja sa kojim je n deljiv, tada pamtim taj broj i rekurzivno pozivam istu funkciju prosledivši joj n/i i ponavljam postupak…

No, kad sam već imao vremena…

Code:

#include <stdio.h>
#include <stdlib.h>

int niz[100];
int pos = 0;

int main(int argc, char *argv[])
{
    int i = 2, broj;
    float tmp;    

    if (argc != 2) return(-1);

    tmp = atof(argv[1]);

    if (((tmp - (int)tmp) != 0) || ((broj = (int)tmp) < 1)) {
        printf("Nije prirodan broj.\n");
        return(-1);
    }

    if (broj == 1) {
        printf("1\n");
        return 0;
    }

    while (broj != 1)
        if (!(broj % i)) {
            niz[pos++] = i;
            broj /= i;
            i = 2;
        } else
            i++;

    for (i = 0; i < pos; i++)
        printf("%d ", niz[i]);
    printf("\n");

    return 0;
}

 
Odgovor na temu

MixMaster

Član broj: 10076
Poruke: 323
*.crnagora.net.



+32 Profil

icon Re: Petlja za stampanje prostih brojeva do N!?08.11.2004. u 01:53 - pre 206 meseci
Hvala na savjetu.
Da znas da sam bas juce uzeo neke skripte iz C-a. Posle dugo, dugo vremena se vracam ovome, sto je dobro. Programiranje mi je uvijek bilo interesantno, ali ako se ne radi zaboravi se sto, siguran sam, znas i sam.
Tako da, eto, ako nekad budes imao vremena svrati ovdje, jer sam siguran da ce biti jos, mozda za tebe, cudnih pitanja, ali eto kad se mora.

Za dosadasnju pomoc ti se puno zahvaljujem!
Poz.
Vidi bako, DžEDAJ!
 
Odgovor na temu

MixMaster

Član broj: 10076
Poruke: 323
*.crnagora.net.



+32 Profil

icon Re: Petlja za stampanje prostih brojeva do N!?08.11.2004. u 20:27 - pre 206 meseci
OK ok, ajde idemo ovako. Imamo znaci tu f-iju cinioci, for petlju gdje i ide od 2 na dalje, a imamo i a%i. E sada po mojoj logici tu si trazio moduo (tj. ostatak) dijeljenja izmedju n i i. E sada, gdje mi provjeravamo da moduo ne postoji, tacnije da je n djeljivo sa i??!
Ta mi petlja nije bas najjasnija, ali pokusavam da je shvatim!

p.s. Cimese ti inace bavis Alef? Sta studiras, tj. pretpostavljm da studiras nesto?
Vidi bako, DžEDAJ!
 
Odgovor na temu

Alef
Viktor Kerkez
Novi Sad

Član broj: 505
Poruke: 188
*.124.eunet.yu.



Profil

icon Re: Petlja za stampanje prostih brojeva do N!?08.11.2004. u 21:34 - pre 206 meseci
Ajmo od početka (al ovo je poslednji put )…

Prvo uvek krećem od dvojke jer je dvojka najmanji prost broj. Znači podesim i na 2:
Code:

int i = 2, broj;

i uđem u petlju. Prverim koliki je ostatak pri deljenju broja sa i:
Code:

if (!(broj % i)) {


Ovaj ostatak uvek postoji! A broj je, jelda, deljiv sa i kada je taj ostatak nula. E sad, to valjda znaš, 0 == false, sve ostalo == true, pa ću sa !(broj %i) dobiti true samo onda kada je ostatak 0, tj. kada je broj deljiv.
Pa kad je deljiv onda je to jedan od činioca, ubacim ga u niz:
Code:

niz[pos++] = i;


podelim broj sa i
Code:

broj /= i;


i postavim i ponovo na dvojku jer krećem iz početka, tj. tražim najmanji broj sa kojim je ovaj novi broj deljiv…

Ako broj nije deljiv sa i onda samo povećam i za jedan i pokušam ponovo.

Kraj čitavog algoritma je kada broj postane jednak jedinici:
Code:

while (broj != 1)

jer je tada proizvod svih brojeva u nizu jednak upravo samom tom broju.

QED

Nego koliko ti imaš godina? Pa ovo je matematika osnovne škole?
 
Odgovor na temu

MixMaster

Član broj: 10076
Poruke: 323
*.crnagora.net.



+32 Profil

icon Re: Petlja za stampanje prostih brojeva do N!?08.11.2004. u 23:09 - pre 206 meseci
Znam da je matematika za osnovnu skolu ali nije matematika to sto mi pravi problem naravno, vec C, tj. neke sitnice. Zato sam pitao za onu for petlju samo. Ti si mi objasnio za ovaj zadnji program koji si mi napisao, mada sam te pitao za f-iju cinioci, ali skontacu nema frke. Jeste da sam te malo namucio, ali zato i postoji ovaj forum, da ovi koji ne znaju dobro muce malo ove koji znaju vise. Jel tako?


Hvala i pozdrav.
Vidi bako, DžEDAJ!
 
Odgovor na temu

[es] :: C/C++ programiranje :: Petlja za stampanje prostih brojeva do N!?

[ Pregleda: 6564 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.