Ir ao conteúdo
  • Cadastre-se

Código em loop


rajaba21

Posts recomendados

Prezados,

 

Boa noite, estou precisando de ajuda no meu código, preciso que ele carregue o vetor fila para com número aleatório de 0 a 5 (tenho que ter no máximo 4 números de cada dentro do vetor), fiz o código abaixo, porém quando rodo o programa ele entra em loop infinito, não está saindo do do while e nem está mais entrando no for.

#include <stdio.h>#include <stdlib.h>#define Pedras 5main (){    int tam=Pedras*4, fila [tam], p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, alea, i, c1=0, c2=0, c3=0, c4=0, c5=0;    srand(time(NULL));    for(i=0;i<20;i++)    {        fila[i]=-1;        //printf ("%d", fila[i]);    }    p1=0;    p2=0;    do    {        p1++;        for(i=0;i<=20;i++)        {            alea=rand()%Pedras+1;            //printf ("%d PPP %d\n", i, alea);            printf ("fila[%d] = %d\n", i, alea);            if(fila[i]==-1)            {                if (c1<=4)                    //(alea==1)                {                    if (alea==1)                    //(c1<=4)                    {                        c1++;                        fila[i]=alea;                    }                }                if (c2<=4)                //(alea==2)                {                    if (alea==2)                    //(c2<=4)                    {                        c2++;                        fila[i]=alea;                    }                }                if (c3<=4)                //(alea==3)                {                    if (alea==3)                    //(c3<=4)                    {                        c3++;                        fila[i]=alea;                    }                }                if (c4<=4)                //(alea==4)                {                    if (alea==4)                    //(c4<=4)                    {                        c4++;                        fila[i]=alea;                    }                }                if (c5<=4)                //(alea==5)                {                    if (alea==5)                    //(c5<=4)                    {                        c5++;                        fila[i]=alea;                    }                }            }        }        if (c1>4 && c2>4 && c3>4 && c4>4 && c5>4)        {            p2=1;        }        printf ("QTD DO C1: %d\n", c1);        printf ("QTD DO C2: %d\n", c2);        printf ("QTD DO C3: %d\n", c3);        printf ("QTD DO C4: %d\n", c4);        printf ("QTD DO C5: %d\n", c5);        printf ("QTD DO DO: %d\n", p1);        printf ("P2 = %d\n", p2);    }    while (p2!=1);    for(i=0;i<20;i++)    {        printf ("%d = %d\n", i, fila[i]);    }    system ("pause");}

 

Preciso de ajuda urgente.

 

Abraços,

Ancião

Link para o comentário
Compartilhar em outros sites

@rajaba21

 

Se eu entendi seu problema...

 

 

 

O vetor fila[20] possui 20 posições alocadas, que vai de 0 até 19, no laço você colocou :

for(i=0;i<=20;i++) //for(i=0; i<20; i++){      //código       // ...}

Ou seja vai de 0 até 20, tem um estouro...

 

Acredito o motivo de não estar saindo do lopp "infinito", seja no do -while:

do    {      //...        if (c1>4 && c2>4 && c3>4 && c4>4 && c5>4)        {            p2=1;        }        printf ("QTD DO C1: %d\n", c1);        printf ("QTD DO C2: %d\n", c2);        printf ("QTD DO C3: %d\n", c3);        printf ("QTD DO C4: %d\n", c4);        printf ("QTD DO C5: %d\n", c5);        printf ("QTD DO DO: %d\n", p1);        printf ("P2 = %d\n", p2);               //...    }    while (p2 != 1); // while (p2 == 1);

obs: Mas mesmo fazendo essas alterações, o programa não fara o que se pede, ele ainda sim terá mais de 4 números iguais em um vetor.

 

 

Uma solução não sei se é a melhor seria essa:

#include <stdio.h>#include <stdlib.h>#include <time.h>//constante#define MAX 20//funcao random , retorna um numero aleatorioint random(int n){    return rand() % n;}int main(void){    //variaveis    int tabela[20] = {0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4};    int num[MAX], fila[MAX];    int i,j,cont;    //seed    srand((unsigned)time(NULL));    /*Algoritimo para alocar 20 numeros de 0 a 19, sem repetir */    for (i=0; i<MAX; i++)    {        cont = 0;        while (cont == 0)        {              cont = 1;              num[i] = random(20);              for (j=0; j<MAX; j++)              {                  if (num[j] == num[i] &&  i != j)                  {                        num[i] = random(20);                        cont = 0;                  }              }        }    }    /*O vetor fila é igual a posicao aleatoria do vetor tabela, feito pelo vetor num*/    for (i=0; i<MAX; i++)    {        fila[i] = tabela[num[i]];        printf("[%d] = %d \n", i, fila[i]);    }    //fim    return 0;}

Qualquer dúvida só perguntar !

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!