UFMG - ICEx - DCC
DCC003 --Algoritmos e Estruturas de Dados I -- AEDsI
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
int numLanc(){
int cntLanc;
int seisSeguindoSeis;
int atual, anterior;
cntLanc=1; atual=rand()%6+1;
do{
cntLanc++;
anterior=atual;
atual=rand()%6+1;
seisSeguindoSeis=anterior==6 & anterior==atual; //(anterior==atual==6); ERRO
}while(!seisSeguindoSeis);
return cntLanc;
}
int numLancAltDif(){
int cntLanc, face;
cntLanc=0;
do{
do{ cntLanc++; face=rand()%6+1; } while(!(face==6));
do{cntLanc++; face=rand()%6+1;}while(face==6);
}while(!(face==5)); ///erro !face==4
return cntLanc;
}
int numLancAltIguais(){
int cntLanc, face;
cntLanc=0;
do{
do{ cntLanc++; face=rand()%6+1; } while(!(face==6));
face=rand()%6+1; cntLanc++;
}while(!(face==6)); ///erro !face==6
return cntLanc;
}
int numLanc2iguais(){
int cntLanc;
int doisIguais;
cntLanc=1;
int ant,atual;
atual=rand()%6+1;
do{
cntLanc++;
ant=atual;
atual=rand()%6+1;
doisIguais=(ant==atual)&ant==6; //doisIguais=rand()%6==rand()%6;
}while(!doisIguais);
return cntLanc;
}
int numLanc3(){
int cntLanc;
int cincoSeguindoSeis;
int atual, anterior;
cntLanc=1; atual=rand()%6+1;
do{
cntLanc++;
anterior=atual;
atual=rand()%6+1;
cincoSeguindoSeis=anterior==6 & atual==5; //(anterior==atual==6); ERRO
}while(!cincoSeguindoSeis);
return cntLanc;
}
int numLanc4(){
int cntLanc;
int difere1;
int atual, anterior;
cntLanc=1; atual=rand()%6+1;
do{
cntLanc++;
anterior=atual;
atual=rand()%6+1;
difere1=abs(atual-anterior)==1;
}while(!difere1);
return cntLanc;
}
int numLanc4b(){
int cntLanc;
int difereMax1;
int atual, anterior;
cntLanc=1; atual=rand()%6+1;
do{
cntLanc++;
anterior=atual;
atual=rand()%6+1;
difereMax1=abs(atual-anterior)==1 || atual==anterior;
}while(!difereMax1);
return cntLanc;
}
int numLanc3seis(){ // E_0 = 0, E_1 = 6, E_2 = 42, E_3 = 258...
int cntLanc;
int tres6seguidos;
int atual, ant, antant;
cntLanc=2; atual=rand()%6+1;
ant=rand()%6+1;
do{
cntLanc++;
antant=ant;
ant=atual;
atual=rand()%6+1;
tres6seguidos=antant==ant & ant==atual & atual==6; //(anterior==atual==6); ERRO
}while(!tres6seguidos);
return cntLanc;
}
int numLanc654(){ // E_0 = 0, E_1 = 6, E_2 = 42, E_3 = 258...
int cntLanc;
int seguidos654;
int atual, ant, antant;
cntLanc=1; atual=rand()%6+1;
ant=rand()%6+1;
do{
cntLanc++;
antant=ant;
ant=atual;
atual=rand()%6+1;
seguidos654=(antant==6)&(ant==5)&(atual==4); //(anterior==atual==6); ERRO
}while(!seguidos654);
return cntLanc;
}
int main(int argc, char *argv[]) {
srand(time(NULL));
int numeroLanc=0;
double numeroMedioLanc=0;
int NumExp=1000000;
int cntLanc;
int cntExp;
for(cntExp=0; cntExp<NumExp; cntExp++){
cntLanc=numLancAltDif();
numeroMedioLanc=numeroMedioLanc*cntExp/(cntExp+1)+(double)cntLanc/(cntExp+1);
}
printf("numero medio=%.2f\n", numeroMedioLanc);
return 0;
}