[Ajuda] urgente!!

marco_g-cs

Power Member
tenhu um trabalho de Fim de 10º pa fazer e tou encravado com isto!

basicamente o programa é:

temos uma chave de quatro numeros de 0 até 9 que o pc vai gerar , e vai ser armazenada num vector. vai ser pedido ao utilizador que insira uma chave pa tentar adivinhar qual é a chave gerada pelo pc. nos temos de ir dando pistas, dizer quantos numeros estao correctos na posiçao correcta e quantos numeros tao correctos na posiçao errada e quantos estao totalmente errados comparando com a chave gerada pelo pc. e o jugador tem 10 tentativas e o programa deve avizar o utilizador de quantas oportunidades tem para chegar a chave mestra( as 10 tentativas ).

o erro que me dá é com os IF's! nao chega a contar quantos números certos na posição certra ,quantos números certos na posição errada e os errados .( e por isto a correr 10 vezes caso o utilizador não acerte na chave_gerada)


tudo o que fiz ta aqui ->
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
#include <time.h>

typedef struct
{
char nick[30];
int idade;
}dados_utilizador;

typedef struct
{
int dia;
char mes[12];
int ano;
}data;

void utilizador(dados_utilizador *ptr)
{
printf("\n\n\n\n\n\t\t\tinsira o seu nick name -> ");
gets(ptr->nick);
printf("\t\t\tinsira a sua idade -> ");
scanf("%d", ptr->idade);
}

void ler_data(data *ptr)
{
printf("data :\n");
printf("dia->");
scanf("%d", &ptr-> dia);
printf("mes->");
scanf(" %s", ptr-> mes);
printf("ano->");
scanf("%d", &ptr-> ano);
}

int gerador()
{
int chave;
randomize();
chave=random(10);
return chave;
}

int inserxao_chave()
{
int chave_inserida;
do
{
scanf("%d", &chave_inserida);
}while((chave_inserida>9)||(chave_inserida<0));
return chave_inserida;
}



void main()
{
int i, j; /* variaveis utilizadas para contadores*/
int chave_gerada[4];
int chave_inserida[4];
int c_correct;
int c_pos_incorrect;
int c_errados;

dados_utilizador jogador[1];
data hoje[1];
utilizador(&jogador[0]);
ler_data(&hoje[0]);
clrscr();

/* esta parte faz com que nao haja repetiçoes de numeros no vector de numeros gerados*/
chave_gerada[0]= gerador();

do
{
chave_gerada[1]= gerador();
}while(chave_gerada[1]==chave_gerada[0]);


do
{
chave_gerada[2]= gerador();
}while((chave_gerada[2]==chave_gerada[0])||(chave_gerada[2]==chave_gerada[1]));

do
{
chave_gerada[3]= gerador();
}while((chave_gerada[3]==chave_gerada[0])||(chave_gerada[3]==chave_gerada[1])||(chave_gerada[3]==chave_gerada[2]));
clrscr();

for(i=0;i<4;i++)
printf("%d", chave_gerada);

/* esta parte acaba aqui */

for(i=0;i<4;i++) /*este ciclo faz com que sejam inseridos 4 numeros*/
chave_inserida=inserxao_chave();

if((chave_inserida[0]==chave_gerada[0])&&(chave_inserida[1]==chave_gerada[1])&&(chave_inserida[2]==chave_gerada[2])&&(chave_inserida[3]==chave_gerada[3]))
printf(" Ganhou o JOGO ");
else
{
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
c_correct=0;
c_pos_incorrect=0;
c_errados=0;
if((chave_gerada==chave_inserida[j])&&(i==j))
{
c_correct=c_correct+1;

}

else
{

if((chave_gerada==chave_inserida[j])&&(i!=j))
{
c_pos_incorrect=c_pos_incorrect+1;

}


if((chave_gerada!=chave_gerada[j])&&(i!=j))
{
c_errados=c_errados+1;

}

}
}

printf("tem %d numeros corectos na posicao correcta\n", c_correct);
printf("tem %d numeros correctos na posicao errada\n", c_pos_incorrect);
printf("tem %d numeros incorrectos\n", c_errados);

}
getch();


}


a amarelo ta a parte em que tou encravado
a parte de fazer o ciclo correr 10 vezes e mostrar quantos numeros ha na posiçao certa



AJUDA PF


toda a ajuda é bem vinda!


obrigado
cumps
 
Pah, eu sei que sou um chato e que isto é spam, mas
1) Não uses títulos como este. Não atraem a atenção de ninguém, e faz com que toda a gente ignore isto.
2) Não devias usar o amarelo :x é que há quem use skins claras, e o que está a amarelo percebe-se muito mal.
3) Esse "AJUDA PF" com letras enormes é redundante. Se colocas o post, é natural que precises de ajuda.
4) Indentar o código dá imenso jeito, assim como usar as tags [code][/code] em vez das quotes, e em vez de colocares o local que te traz problemas a amarelo, coloca-o em itálico e bold:

Código:
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
#include <time.h>

typedef struct
{
    char nick[30];
    int idade;
} dados_utilizador;

typedef struct
{
    int dia;
    char mes[12];
    int ano;
} data;

void utilizador(dados_utilizador *ptr)
{
    printf("\n\n\n\n\n\t\t\tinsira o seu nick name -> ");
    gets(ptr->nick);
    printf("\t\t\tinsira a sua idade -> ");
    scanf("%d", ptr->idade);
}

void ler_data(data *ptr)
{
    printf("data :\n");
    printf("dia->");
    scanf("%d", &ptr-> dia);
    printf("mes->");
    scanf(" %s", ptr-> mes);
    printf("ano->");
    scanf("%d", &ptr-> ano);
}

int gerador()
{
    int chave;
    randomize();
    chave=random(10);
    return chave;
}

int inserxao_chave()
{
    int chave_inserida;
    do
    {
        scanf("%d", &chave_inserida);
    } while((chave_inserida>9)||(chave_inserida<0));

    return chave_inserida;
}

void main()
{
    int i, j; /* variaveis utilizadas para contadores*/
    int chave_gerada[4];
    int chave_inserida[4];
    int c_correct;
    int c_pos_incorrect;
    int c_errados;

    dados_utilizador jogador[1];
    data hoje[1];
    utilizador(&jogador[0]);
    ler_data(&hoje[0]);
    clrscr();

    /* esta parte faz com que nao haja repetiçoes de numeros no vector de numeros gerados*/
    chave_gerada[0]= gerador();

    do
    {
        chave_gerada[1]= gerador();
    } while(chave_gerada[1]==chave_gerada[0]);

    do
    {
        chave_gerada[2]= gerador();
    } while((chave_gerada[2]==chave_gerada[0])||(chave_gerada[2]==chave_gerada[1]));

    do
    {
        chave_gerada[3]= gerador();
    } while((chave_gerada[3]==chave_gerada[0])||(chave_gerada[3]==chave_gerada[1])||(chave_gerada[3]==chave_gerada[2]));

    clrscr();

    for(i=0;i<4;i++)
        printf("%d", chave_gerada[i]);

    /* esta parte acaba aqui */
[I]
[B]     for(i=0;i<4;i++) /*este ciclo faz com que sejam inseridos 4 numeros*/
        chave_inserida[ i]=inserxao_chave();

    if((chave_inserida[0]==chave_gerada[0])&&(chave_inserida[1]==chave_gerada[1])&&(chave_inserida[2]==chave_gerada[2])&&(chave_inserida[3]==chave_gerada[3]))
        printf(" Ganhou o JOGO ");
    else
    {
        for(i=0;i<4;i++)
        for(j=0;j<4;j++)
        {
            c_correct=0;
            c_pos_incorrect=0;
            c_errados=0;
            if((chave_gerada[ i]==chave_inserida[j])&&(i==j))
            {
                c_correct=c_correct+1;
            } else {
                if((chave_gerada[ i]==chave_inserida[j])&&(i!=j))
                {
                    c_pos_incorrect=c_pos_incorrect+1;
                }
                
                if((chave_gerada[ i]!=chave_gerada[j])&&(i!=j))
                {
                    c_errados=c_errados+1;
                }
            }
        }
    printf("tem %d numeros corectos na posicao correcta\n", c_correct);
    printf("tem %d numeros correctos na posicao errada\n", c_pos_incorrect);
    printf("tem %d numeros incorrectos\n", c_errados);
    }
[/B] [/I]     getch();
}
Desculpa vir cá spammar, mas é que dessa forma dificilmente alguém te irá responder.
 
Última edição:
Back
Topo