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;

}