PC Ekspert Forum

PC Ekspert Forum (https://forum.pcekspert.com/index.php)
-   Web dizajn, programiranje i ostalo (https://forum.pcekspert.com/forumdisplay.php?f=39)
-   -   C, parnost float brojeva... (https://forum.pcekspert.com/showthread.php?t=147894)

Imamic23 18.05.2009. 10:42

C, parnost float brojeva...
 
pozdrav.. kako ispitati parnost realnih brojeva...
imam zadatak di treba u polje generirati 10 realnih brojeva...
i onda ispitati kolko je parnih
npr, kako ispitati dali je 23.45367 ili 0.784578 paran ili ne?!?

jel to moguce uopce??? il nisam dobro shvatio zadatak..


Napisati program koji učita broj elemenata m (2 polja za koje funkcijom malloc alocira potrebnu memoriju, te ga popuni slučajnim
brojevima iz intervala [-10.0, 30.0].
Napisati funkciju koja izračuna i vrati koliko je brojeva u polju parnih, a koliko je
neparnih.
Deklarirati pokazivače na polja u kojima će se razvrstavati parne i neparne vrijednosti i
funkcijom malloc alocirati potrebnu memoriju.
Napisati funkciju koja prima pokazivač na kreirano polje i pokazivače na polja parnih i
neparnih vrijednosti, te njegove elemente razvrstava u odgovarajuća zasebna polja.
Na kraju ispisati sadržaje kreiranog i zasebnih polja, te osloboditi korištenu
memoriju.

Bubba 18.05.2009. 11:08

Citiraj:

Autor Imamic23 (Post 1344301)
pozdrav.. kako ispitati parnost realnih brojeva...
imam zadatak di treba u polje generirati 10 realnih brojeva...
i onda ispitati kolko je parnih
npr, kako ispitati dali je 23.45367 ili 0.784578 paran ili ne?!?

jel to moguce uopce??? il nisam dobro shvatio zadatak..

Parnost je definirana na Z (skup cijelih brojeva), tako da jedino tamo mozes provjeriti je li neki broj paran ili ne.

Ipak, parnost bilo kojeg broja (pa makar i realnog) mozes provjeriti najjednostavnije da vidis koliki je njegov ostatak, za sto u C-u mozes koristiti operator modulo ('%').

Drugim rijecima,
Code:

if ( ! (broj % 2) ) { /* sto vec trebas raditi s parnim brojevima... */ }
.

Imamic23 18.05.2009. 12:20

da..al onda moram baj broj pretvorit u (int) da bi se mogao izvesti modul %2...
al ok, thx, tako cu i napravit, pa sta god profa kaže, drugacije nisam znao :)

_hmp_ 18.05.2009. 12:57

Za ove brojeve iz intervala pretpostavljam koristiš onu shemu rand()%(GG-DG+1)+DG, gdje su GG i DG, donja i gornja granica.

Ta "formula" ti tako i tako nece dati nista sta nije u skupu cijelih brojeva, pa se nemoras brinut o tome. Al dobro je Bubba reko, parnost brojeva se moze provjeravati samo u skupu cijelih brojeva.

Imamic23 18.05.2009. 20:32

ne, ja koristin (float) rand()/(float)(GG-DG+1)+DG
jer moramo generirat float brojeve u polje...

_hmp_ 18.05.2009. 21:49

Citiraj:

Autor Imamic23 (Post 1344667)
ne, ja koristin (float) rand()/(float)(GG-DG+1)+DG
jer moramo generirat float brojeve u polje...

Aha, al jos uvijek mi nije jasno kako onaj tko ti je zadao zadatak misli ispitat parnost broja iz skupa R?

EDIT:

Evo frend me nazico da mu rijesim taj zadatak, ocito je to DZ na TVZ-u, kolegij programiranje. Napravio sam tako da provjerim da li je cijeli dio broja paran, neznam kako bi drugacije.

Code:

#include
#include
#include
#include
#define ranrange(a, b) ((a) + rand()/(RAND_MAX + 1.0) * ((b) - (a) + 1))
#define GG 30.
#define DG 10.
#define LOW 3
#define HIGH 30

void prov(float *p1, float *p2, float *p3, int *np, int *nn, int n) {
        int i=0,k;
        *np=0; *nn=0;
        for (i=0;i                 k= (int) *(p1+i);
                if (!(k%2)) {
                        *(p2+(*np)) = *(p1+i);
                        (*np)++;
                }
                else {
                        *(p3+(*nn))=*(p1+i);
                        (*nn)++;
                }
        }                               
}
               
int main(void) {
        int i, n, pk, pn;
        float *ar,*par,*nep;
        srand(time(NULL));
        do {
                printf("Unesite velicinu polja\n");
                scanf("%d", &n);
        }
        while (nHIGH);
        ar=(float *) malloc(n*sizeof(float));
        par=(float *) malloc(n*sizeof(float));
        nep=(float *) malloc(n*sizeof(float));
       
        for (i=0;i                 *(ar+i) = ranrange(GG,DG);
                printf("%f\t", *(ar+i));
                }
       
        prov(ar,par,nep,&pk,&pn,n);
       
        printf("\nParni:\n");
        for (i=0; i         printf("%f\t", *(par+i));
       
        printf("\nNeparni:\n");
        for (i=0; i         printf("%f\t", *(nep+i));
        free(ar);
        free(par);
        free(nep);
        return 0;
}

Malo je glup, zauzima previse memorije, koristi visak varijabli, ali mi ga se ne da optimizirat :D

gbijelic 20.05.2009. 10:40

evo da i ja pitam jedno mutavo pitanje koje nemogu skotnat, naime nekuzim kod ovog koda : "if (a%2!=0) printf ("\n Broj %d je neparan",a);"
ovaj dio a%2!=0, cemu sluzi ovaj % i !....2 je tu kolko sam skonto u vezi parnosti i neparnosti i jos me zanima zasto je =0, ako neko moze to poblize objasnit.hvala

zwer 20.05.2009. 11:19

a%2 je broj a modan sa 2 (ostatak pri djeljenju sa 2)

!= je NIJE JEDNAKO

znaci ako ostatak pri djeljenju s 2 nije nula, printaj da je broj neparan...

gbijelic 20.05.2009. 11:25

ooo hvala na super brzom odgovoru :D


Sva vremena su GMT +2. Sada je 01:18.

Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 1999-2024 PC Ekspert - Sva prava pridržana ISSN 1334-2940
Ad Management by RedTyger