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

[Zadatak] Generisanje pseudoslucajne sekvence odredjenih brojeva

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Generisanje pseudoslucajne sekvence odredjenih brojeva

[ Pregleda: 3211 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

pri3rak
Beograd

Član broj: 43563
Poruke: 701
*.dial.scnet.yu.

Jabber: pri3rak@elitesecurity.org


+300 Profil

icon [Zadatak] Generisanje pseudoslucajne sekvence odredjenih brojeva03.05.2007. u 22:29 - pre 206 meseci
Naime sledeci je problem.U pitanju je deo domaceg zadatka iz predmeta teorija informacija i kodovanje na 4. godini BG ETF-a.Potrebno je na osnovu godine upisa i broja indexa izgenerisati nekakvu pseudoslucajnu sekvencu odredjenih brojeva kojima je zadata verovatnoca pojavljivanja.Nakon toga je potrebno izracunati entropije pojedinih brojeva.Da bi to bilo moguce potrebno je koristiti log funkciju.Problem je u tome sto me kompajler stalo izbacuje kada natrci na log funkciju u source-u.U pitanju je gcc na SuSE 10.1, isto mi radi i na FreeBSD-u 5.2, kao i na galebu (galeb.etf.bg.ac.yu - nekakav slackware).Kada za isti posao koristim bloodshed na windowsu kompajliranje prodje bez problema, ali ne dobijam nikakvu pseudoslucajnu sekvencu vec niz istih brojeva.Source sledi.(Namerno je pisan ovako prosto, moglo je i krace ali onda ljudi za koje se to radi bi imali problema, a u pitanju su studenti telekomunikacija koji nemaju prilike da vide bas previse programiranja).Jos jedna napomena onaj sinus pri dnu source-a nema nikakvu funkciju u resavanju samog problema, vec je posluzio da se vidi da li ce i na njemu da pukne kompajliranje, i puklo je....

#include <stdio.h>
#include <math.h>

main ()
{
int index,year,flag,n,i,k;
int a,b,v,g;
int lim1,lim2,lim3;
int sekvenca[10000];
int na,nb,nv,ng;
float pa,pb,pv,pg;
float x,h;
FILE *fw;

printf("Uneti broj indeksa: ");
scanf("%d",&index);
printf("Uneti godinu upisa: ");
scanf("%d",&year);

printf("Index: %d\n",index);
printf("Godina: %d\n",year);

a = index%10;
b = year%10;
v = (index+year)%10;
g = (index*year)%10;

printf("a: %d\n",a);
printf("b: %d\n",b);
printf("v: %d\n",v);
printf("g: %d\n",g);

flag = 0; //Bez sazimanja
if(a>=b && a>=v && a>=g) {
pa = 4.0/8.0;
pb = 2.0/8.0;
pv = 1.0/8.0;
pg = 1.0/8.0;
}

if(b>=a && b>=v && b>=g) {
pa = 3.0/8.0;
pb = 2.0/8.0;
pv = 2.0/8.0;
pg = 1.0/8.0;
}

if(v>=a && v>=b && v>=g) {
pa = 0.4;
pb = 0.3;
pv = 0.2;
pg = 0.1;
}

if(g>=a && g>=b && g>=v) {
pa = 0.25;
pb = 0.25;
pv = 0.25;
pg = 0.25;
}

if(a == b) {
flag = 1; //Sazimanje (pb - se gubi)
pa += pb;
pb = 0;
}

if(a == v) {
flag = 2; //Sazimanje (pv - se gubi)
pa += pv;
pv = 0;
}

if(a == g) {
flag = 3; //Sazimanje (pg - se gubi)
pa += pg;
pg = 0;
}

if(b == v) {
flag = 2; //Sazimanje (pv - se gubi)
pb += pv;
pv = 0;
}

if(b == g) {
flag = 3; //Sazimanje (pg - se gubi)
pb += pg;
pg = 0;
}

if(v == g) {
flag = 3; //Sazimanje (pg - se gubi)
pv += pg;
pg = 0;
}

printf("pa: %f\n",pa);
printf("pb: %f\n",pb);
printf("pv: %f\n",pv);
printf("pg: %f\n",pg);
printf("flag: %d\n",flag);

x = 2147483647*pa;
lim1 = x;
flag = 0;

if(pb != 0) {
x += 2147483647*pb;
lim2 = x;
}
else {
x += 2147483647*pv;
lim2 = x;
lim3 = 2147483647;
flag = 1;
}

if(pv!=0 && flag==0) {
x += 2147483647*pv;
lim3 = x;
}

printf("lim1: %d\n",lim1);
printf("lim2: %d\n",lim2);
printf("lim3: %d\n",lim3);

fw = fopen("prs.txt","w");

for(i=0; i<10000; i++) {
n = rand();
if(flag == 0) {
if(n < lim1) sekvenca=a;
if(lim1<=n && n<lim2) sekvenca=b;
if(lim2<=n && n<lim3) sekvenca=v;
if(lim3 <= n) sekvenca=g;
}
if(flag == 1) {
if(n < lim1) sekvenca=a;
if(lim1<=n && n<lim2) sekvenca=v;
if(lim2 <= n) sekvenca=g;
}
if(flag == 2) {
if(n < lim1) sekvenca=a;
if(lim1<=n && n<lim2) sekvenca=b;
if(lim2 <= n) sekvenca=g;
}
if(flag == 3) {
if(n < lim1) sekvenca=a;
if(lim1<=n && n<lim2) sekvenca=b;
if(lim2 <= n) sekvenca=v;
}
//printf("sekvenca[%d]: %d\n",i,sekvenca);
k = sekvenca+48;
putc(k,fw);
}

fclose(fw);

//
// Odredjivanje entropije
//
na = nb = nv = ng = 0;

for(i=0; i<10000; i++) {
if(flag == 0) {
if(sekvenca == a) na++;
if(sekvenca == b) nb++;
if(sekvenca == v) nv++;
if(sekvenca == g) ng++;
}
if(flag == 1) {
if(sekvenca == a) na++;
if(sekvenca == v) nv++;
if(sekvenca == g) ng++;
}
if(flag == 2) {
if(sekvenca == a) na++;
if(sekvenca == b) nb++;
if(sekvenca == g) ng++;
}
if(flag == 3) {
if(sekvenca == a) na++;
if(sekvenca == b) nb++;
if(sekvenca == v) nv++;
}
}

printf("na: %d\n",na);
printf("nb: %d\n",nb);
printf("nv: %d\n",nv);
printf("ng: %d\n",ng);

pa = na;
pb = nb;
pv = nv;
pg = ng;
pa /= 10000;
pb /= 10000;
pv /= 10000;
pg /= 10000;
printf("pa: %f\n",pa);
printf("pb: %f\n",pb);
printf("pv: %f\n",pv);
printf("pg: %f\n",pg);

x = log2(2);
h = sin(x);
// h = log(pa)/x;
printf("h: %f\n",h);
return(0);
}
 
Odgovor na temu

VRider
Marković Damir
(BGD/SD Karaburma)/Pirot

Član broj: 1510
Poruke: 4132
*.maksnet.net.

Jabber: damirm | gmail | com
ICQ: 134002435


+13 Profil

icon Re: [Zadatak] Generisanje pseudoslucajne sekvence odredjenih brojeva03.05.2007. u 22:59 - pre 206 meseci
U sekvencu, koja je niz (pokazivac na int), pokusavas da stavis int. to ti nece poleteti, i zato puca kompajliranje, barem meni.
damir@phoenix:~/temp$ gcc -lm -o prog zadatak.c
zadatak.c: In function ‘main’:
zadatak.c:149: error: incompatible types in assignment
zadatak.c:151: error: incompatible types in assignment
zadatak.c:153: error: incompatible types in assignment
zadatak.c:155: error: incompatible types in assignment
zadatak.c:160: error: incompatible types in assignment
zadatak.c:162: error: incompatible types in assignment
zadatak.c:164: error: incompatible types in assignment
zadatak.c:169: error: incompatible types in assignment
zadatak.c:171: error: incompatible types in assignment
zadatak.c:173: error: incompatible types in assignment
zadatak.c:178: error: incompatible types in assignment
zadatak.c:180: error: incompatible types in assignment
zadatak.c:182: error: incompatible types in assignment
zadatak.c:185: warning: assignment makes integer from pointer without a cast
zadatak.c:200: warning: comparison between pointer and integer
zadatak.c:202: warning: comparison between pointer and integer
zadatak.c:204: warning: comparison between pointer and integer
zadatak.c:206: warning: comparison between pointer and integer
zadatak.c:211: warning: comparison between pointer and integer
zadatak.c:213: warning: comparison between pointer and integer
zadatak.c:215: warning: comparison between pointer and integer
zadatak.c:220: warning: comparison between pointer and integer
zadatak.c:222: warning: comparison between pointer and integer
zadatak.c:224: warning: comparison between pointer and integer
zadatak.c:229: warning: comparison between pointer and integer
zadatak.c:231: warning: comparison between pointer and integer
zadatak.c:233: warning: comparison between pointer and integer
zadatak.c:256: warning: incompatible implicit declaration of built-in function ‘log2’
damir@phoenix:~/temp$

JaFreelancer.com
 
Odgovor na temu

VRider
Marković Damir
(BGD/SD Karaburma)/Pirot

Član broj: 1510
Poruke: 4132
*.maksnet.net.

Jabber: damirm | gmail | com
ICQ: 134002435


+13 Profil

icon Re: [Zadatak] Generisanje pseudoslucajne sekvence odredjenih brojeva03.05.2007. u 23:37 - pre 206 meseci
Ako u for petlji zamenis sekvenca sa sekvenca[ i ], onda nema gresaka, osim sto je fajl popunjen samo jednom te istom cifrom. Ne valja ti ovde nesto ozbiljnije... A ja nemam pojma o cemu si pisao u zadatku, ja sam ipak tek druga godina...

EDIT: Sad sam skapirao da je [es] uklonio [ i ] iz koda. Zato se kod stavlja medju odgovarajuce "code" tagove. Ako ne racunamo to, mislim da samo je problem sto nisi linkovao math biblioteku prilikom kompajliranja (-lm). A ovo da ti sama ideja zbog necega ne valja, stoji. Napisi neke komentare sta tu sta treba da radi, pa da trazim gresku dalje...
JaFreelancer.com
 
Odgovor na temu

pri3rak
Beograd

Član broj: 43563
Poruke: 701
*.vdial.verat.net.

Jabber: pri3rak@elitesecurity.org


+300 Profil

icon Re: [Zadatak] Generisanje pseudoslucajne sekvence odredjenih brojeva04.05.2007. u 11:18 - pre 206 meseci
Hvala kolega, pre svega na dobroj volji za pojasnjavanjem, a i (nadam se) na resenom problemu :).Koliko vidim problem je bio sa linkovanjem matematicke biblioteke tj. onaj svic -lm , nazalost do sada nisam imao potrebe za math.h , tako da je ovo previd.A ne verujem da se tvoj linux preterano razlikuje od moga po ovom pitanju skroz me baca u rebus zasto ti nize iste cifre u datoteci.

Meni se trenutno lepo kompajlira na SuSEtu, generise pseudorandom sekvence bez problema, i racuna entropije.Jedino sto me malo buni je warrning

x.c: In function ‘main’:
x.c:207: warning: incompatible implicit declaration of built-in function ‘log2’

Ne znam u cemu je greska u logaritmu sa osnovom 2.

Inace koliko su ti rezultati koje dobijam korektni to cu tek videti.

Inace ne brini i tebe ce taj predmet na RTI da doceka za koju godinu ili kada se budes nasao na 4-oj godini.E sada ovo je i dalje rad u progresu, tako da ce verovatno biti jos problema, i ne zameri mi ako te jos neki put budem konsultovao.

Inace evo ga i link ka postavci problema (ima ih u mnozini) je http://nic-nac-project.de/~mbojan/dat.zip Tu postoje i neki opisi algoritama, to su oni jpg fajlovi....

Rade se I-b , I-v , II-b i II-v tj. za njih se pise code (naravno ne ocekujem da ces ovo da radis, vec samo pogledaj sta ces jednog dana raditi ;-) )

Srecno u kolokvijumskoj nedelji !

Pozdrav i svako dobro!
 
Odgovor na temu

jonathan
Aleksandar Ilic
Aleksinac

Član broj: 2113
Poruke: 456
82.208.210.*

Jabber: yu1is@elitesecurity.org
ICQ: 62419462


+45 Profil

icon Re: [Zadatak] Generisanje pseudoslucajne sekvence odredjenih brojeva04.05.2007. u 16:26 - pre 206 meseci
tvoj x je tipa float, zameni log2 sa log2f
Code:

NAME
       log2, log2f, log2l - base-2 logarithmic function

SYNOPSIS
       #include <math.h>

       double log2(double x);
       float log2f(float x);
       long double log2l(long double x);

       Compile with -std=c99; link with -lm.


-=- 73 de YU1IS -=-
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Generisanje pseudoslucajne sekvence odredjenih brojeva

[ Pregleda: 3211 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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