pri3rak Beograd
Član broj: 43563 Poruke: 701 *.dial.scnet.yu.
Jabber: pri3rak@elitesecurity.org
|
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);
}
|