How to find a value that is in the vector but in the wrong position?

-3
I need to know when to find the correct number (color) in the correct position of computaTentativas to be tested if it does not hit every sequence (has 10 tries) but hit A number in a correct position must return in the positions of the left side of the matrix 4x the number 1, CASE hit a number but it is not in the correct position of vet[z] it must return in the positions of the left side of the matrix 4x the number 2, CASE does not hit neither a number or position, it leaves in the line of the left side of the matrix 4x the number 0.

The problem lies between lines 90 and 123,

I'm asking for help I'm a beginner in C and as you can see from the topic I've been doing this for some time xd p>

Edit: I tried to create another for when entering in the if and else but also is not working ... #HELP

Edit 2: now it is affecting only the correct line, but I do not know how to do the tests .... :(

#include <stdio.h>
#include <stdlib.h>
#include <conio.h> // Biblioteca para adicionar cores
#define L 10       // Numero de Linhas da matriz
#define C 8        // Numero de Colunas da matriz
#define TAM 4      // Tamanho do vetor vet que armazenará a senha gerada aleatoriamente

void sorteio(int vet[TAM]) // Funcao que sorteia os numeros aleatorios
{
    int x;
    srand((unsigned)time(NULL));
    for (x = 0; x < TAM; x++)
    {
        vet[x] = 1 + (rand() % 6);
    }
    printf("\n\t\t\t\t====== SENHA GERADA ======\n\n");
    printf("\t\t\t\tBoa sorte Desafiado(a)!!\n\n");
    printf("\t\t\t\t==========================\n");
    printf("\n");
    printf("===================== BEM VINDO AO JOGO DA SENHA NOBRE DESAFIADO(A) =====================\n");
    printf("\n");
    system("pause");
    system("cls");

    for (x = 0; x < TAM; x++) // MOSTRANDO OS NUMERO SORTEADOS NO VETOR DE 4 POSICOES SO PARA TESTAR
    {
        printf("NUMERO DA SENHA GERADA: %d \n", vet[x]);
    }
}

void lerTentativas(int tentativa, int numTentativa, int vet[TAM], int matriz[L][C]) // Função para ler as tentativas do Desafiado
{
    int x, y, numLinha = 1, z = 0;
    tentativa = 1;
    for (x = 0; x < L; x++)
    {
        for (y = 0; y < 4; y++)
        {
            printf("\n");
            textcolor(15);
            printf("\t\t\t================ MENU ==================\n");
            textcolor(2);
            printf("\n\t\t\t\tDigite 1 para a cor verde\n");
            textcolor(9);
            printf("\t\t\t\tDigite 2 para a cor azul\n");
            textcolor(14);
            printf("\t\t\t\tDigite 3 para a cor amarelo\n");
            textcolor(4);
            printf("\t\t\t\tDigite 4 para a cor vermelho\n");
            textcolor(5);
            printf("\t\t\t\tDigite 5 para a cor roxo\n");
            textcolor(1);
            printf("\t\t\t\tDigite 6 para a cor azul marinho\n\n");
            textcolor(15);
            printf("\t\t\t================ MENU ==================\n\n\n");
            printf("\t\t\t\tRespostas do Desafiante:\n");
            printf("\n\tCaso o resultado de sua linha apos sua jogada seja 1 - Significa que ha uma cor certa no lugar certo\n");
            printf("\n\tCaso o resultado de sua linha apos sua jogada seja 2 - Significa que ha uma cor certa mas no lugar errado\n");
            printf("\n\tCaso o resultado de sua linha apos sua jogada seja 0 - Significa que nem a cor e nem a posicao estao corretas\n\n");
            printf("\t\t\t========================================");
            printf("\n\n\t\t\tDigite o numero %d da sua %d tentativa:\t", numLinha, tentativa); // informa tentativa atual
            scanf("%d", &matriz[x][y]);                                                         //preenchendo matriz com tentativas do usuario
            while (matriz[x][y] > 6 || matriz[x][y] < 1)                                        // valida se o numero digitado esta conforme o MENU
            {
                printf("\t\t=======================================================\n");
                printf("\t\tPor favor nobre desafiado(a), digite numeros de 1 ao 6.\n");
                printf("\t\t=======================================================\n");
                printf("\nDigite o numero %d da sua %d tentativa:\t", numLinha, tentativa); // informa tentativa atual
                scanf("%d", &matriz[x][y]);                                                 //preenchendo matriz com tentativas do usuario
            }
            numLinha++;
            mostrarMatriz(matriz); // Chama a funcao para mostrar a matriz atualizada a cada jogada.
            printf("\n");
        }
        computaTentativas(matriz, &vet[z]);
        numLinha = 1;
        tentativa++;
    }
}

void computaTentativas(int matriz[L][C], int vet[TAM]) // Função para comparar e computar as tentativas do Desafiado
{
    int x, y, z = 0, j, i, senha[TAM];
    for (x = 0; x < L; x++)
    {
        for (y = 0; y < C; y++)
        {
            if (matriz[x][y] == vet[z]) // Não sei se está correto este teste para se encontrar o numero preenchido da matriz está dentro do vet
            {
                for (j = 0; j < vet[z]; j++)
                {
                    for (i = 4; i < 8; i++)
                    {
                        matriz[x][i] = 1;
                        printf("PARABENS");
                        // Se entrar aqui deveria mostrar a matriz e no lado esquerdo da matriz, colocar 1 no início da linha
                    }
                }
            }
            else if (matriz[x][y] == vet[0] || matriz[x][y] == vet[1] || matriz[x][y] == vet[2] || matriz[x][y] == vet[3]) // Não sei se está correto este teste para se EXISTIR um numero dentro do vetor MAS ESTIVER NA POSICAO INCORRETA
            {
                for (j = 0; j < L; j++)
                {
                    for (i = 4; i < 8; i++)
                    {
                        matriz[x][i] = 2;
                        // Se entrar aqui deveria mostrar a matriz e no lado esquerdo da matriz, colocar 1 no início da linha
                    }
                } // Se entrar aqui deveria mostrar a matriz e no lado esquerdo da matriz, colocar 2 no início da linha
            }
            z++;
        }
    }
}

void mostrarMatriz(int matriz[L][C])
{
    int x, y;
    printf("\n\n");
    printf("\t\t============== MATRIZ ATUALIZADA ==============");
    for (x = 0; x < L; x++)
    {
        printf("\n");
        for (y = 0; y < C; y++)
        {
            printf("\t%4d", matriz[x][y]);
        }
    }
    printf("\n");
    printf("\t\t============== MATRIZ ATUALIZADA ==============\n\n");
    system("pause");
    system("cls");
}

int main()
{
    int x, y, matriz[L][C] = {0}, senha, vet[TAM], tentativa = 0, numTentativa;
    printf("===================== BEM VINDO AO JOGO DA SENHA NOBRE DESAFIADO(A) =====================\n");
    sorteio(&vet);
    lerTentativas(tentativa, numTentativa, vet, &matriz);
    system("cls");
    printf("\n");
    printf("\t\t\t============== FINAL DE JOGO ==============\n");
    printf("\n\t\t\tTENTATIVAS ESGOTADAS, O DESAFIANTE VENCEU!\n\n\t");
    printf("\t\t============== FINAL DE JOGO ==============\n\n");
    system("pause");
    return 0;
}
    
asked by anonymous 26.06.2017 / 16:39

2 answers

0

I was able to solve PERSONAL, the problem was in the way I was traversing the helper vector to look up the values of the password that was in vet, finally, follows the game finished:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h> // Biblioteca para adicionar cores
#define L 10       // Numero de Linhas da matriz
#define C 8        // Numero de Colunas da matriz
#define TAM 4      // Tamanho do vetor vet que armazenará a senha gerada aleatoriamente





            /* Para o funcionamento correto das cores no menu, foi utilizada a biblioteca Conio 2.1,
            em que foram baixados e extraidos os arquivos na pasta Codeblocks/MinGW e chamando a mesma com <conio.h>
            as cores são definidas conforme numeros inteiros da propriedade textcolor(numero_da_cor); */

void sorteio(int vet[TAM]) // Funcao que sorteia os numeros aleatorios
{
    int x;
    srand((unsigned)time(NULL)); // o legal de usar o 'unsigned' é que cada vez que voce fechar e abrir o algoritmo, a sequencia nunca sera igual a uma das vezes tentada anteriormente
    for (x = 0; x < TAM; x++)
    {
        vet[x] = 1 + (rand() % 6); //Gera uma senha aleatoria de 1 a 6
    }
    printf("\n\t\t\t\t====== SENHA GERADA ======\n\n");
    printf("\t\t\t\tBoa sorte nobre desafiado(a)!!\n\n");
    printf("\t\t\t\t==========================\n");
    printf("\n");
    printf("\n===================== BEM VINDO AO JOGO DA SENHA NOBRE DESAFIADO(A) =====================\n");
    printf("\n");
    system("pause");
    system("cls");

    /* for (x = 0; x < TAM; x++) // ATENÇÃO: Se descomentar este trecho, ele mostrará no início do alg, a senha gerada aleatoriamente pelo desafiante que pode ser utilizada para fins de correção.
    {
        printf("NUMERO DA SENHA GERADA: %d \n", vet[x]);
    }
    */
}

void lerTentativas(int matriz[L][C], int vet[]) // Função para ler as tentativas do Desafiado
{
    int x, y, tentativa, numLinha = 1, jogada[TAM];
    tentativa = 1;
    for (x = 0; x < L; x++)
    {
        for (y = 0; y < 4; y++)
        {
            printf("\n");
            textcolor(15);
            printf("\t\t\t================ MENU ==================\n");
            textcolor(2);
            printf("\n\t\t\t\tDigite 1 para a cor verde\n");
            textcolor(9);
            printf("\t\t\t\tDigite 2 para a cor azul\n");
            textcolor(14);
            printf("\t\t\t\tDigite 3 para a cor amarelo\n");
            textcolor(4);
            printf("\t\t\t\tDigite 4 para a cor vermelho\n");
            textcolor(5);
            printf("\t\t\t\tDigite 5 para a cor roxo\n");
            textcolor(1);
            printf("\t\t\t\tDigite 6 para a cor azul marinho\n\n");
            textcolor(15);
            printf("\t\t\t================ MENU ==================\n\n\n");
            printf("\t\t\tLembre-se, voce tem apenas 10 tentativas!\n");
            printf("\n\t\t\t========================================\n\n\n");
            printf("\t\t\t\tRespostas do Desafiante:\n");
            printf("\n\tCaso o resultado de sua linha apos sua jogada seja 1 - Significa que ha uma cor certa no lugar certo\n");
            printf("\n\tCaso o resultado de sua linha apos sua jogada seja 2 - Significa que ha uma cor certa mas no lugar errado\n");
            printf("\n\tCaso o resultado de sua linha apos sua jogada seja 0 - Significa que nem a cor e nem a posicao estao corretas\n\n");
            printf("\t\t\t========================================");
            printf("\n\n\t\t\tDigite o numero %d da sua %d tentativa:\t", numLinha, tentativa); // informa tentativa atual
            scanf("%d", &matriz[x][y]);
            jogada[y]=matriz[x][y];                                                            //preenchendo matriz com tentativas do usuario
            while (matriz[x][y] > 6 || matriz[x][y] < 1)                                        // valida se o numero digitado esta conforme o MENU
            {
                printf("\t\t=======================================================\n");
                printf("\t\tPor favor nobre desafiado(a), digite numeros de 1 ao 6.\n");
                printf("\t\t=======================================================\n");
                printf("\nDigite o numero %d da sua %d tentativa:\t", numLinha, tentativa); // informa tentativa atual
                scanf("%d", &matriz[x][y]);  //preenchendo matriz com tentativas do usuario
            }
            numLinha++;
            system("cls");
        }
        computaTentativas(matriz, vet, jogada, x); // Procedimento que vai fazer o teste das tentativas
        mostrarMatriz(matriz); // Chama a funcao para mostrar a matriz atualizada a cada jogada.
        numLinha = 1;
        tentativa++;
    }
}


void computaTentativas(int matriz[L][C], int vet[], int jogada[], int x) // Função para comparar e computar as tentativas do Desafiado
{
        int i, j, ganhou, z, varrerVet;
        j=4;
        ganhou=0;
        for (i=0; i <= 3; i++)
        {
                //SE ESTIVER CERTO = 1 PINO BRANCO
                if (jogada[i] == vet[i])
                {
                    matriz[x][j]=1;
                    ganhou++;

                }
                else
                {
                    //VARRENDO VETOR
                    varrerVet=0;
                    for (z=0; z <= 3; z++)
                    {
                        if (jogada[i] == vet[z])
                        {
                            varrerVet++;
                        }
                    }
                    if (varrerVet == 0)
                        {
                            matriz[x][j]=0; // PINO COR 'NENHUM' kkkkkk
                        }

                    //SE ESTIVER ERRRADO = 2 PINO PRETO
                    else if(jogada[i] != vet[i])
                        {
                            matriz[x][j]=2;
                        }
                }
            j++;
        }
        if (ganhou==4) // se os 4 numeros da sequencia estiverem corretos, ganhou e um contador que vai ter 4, constatando a vitoria do usuario
        {
            printf("\n=== !!! PARABENS NOBRE DESAFIADO(A) VOCE DESCOBRIU A SENHA GERADA PELO DESAFIANTE !!! ===\n");
            exit(1);
        }
}

void mostrarMatriz(int matriz[L][C]) // função para ser mostrada a matriz, quando quiser mostrar ela como ta, so chamar a mostrarMatriz :D
{
    int x, y;
    printf("\n\n");
    printf("\t\t============== MATRIZ ATUALIZADA ==============");
    for (x = 0; x < L; x++)
    {
        printf("\n");
        for (y = 0; y < C; y++)
        {
            printf("\t%4d", matriz[x][y]);
        }
    }
    printf("\n");
    printf("\t\t============== MATRIZ ATUALIZADA ==============\n\n");
    system("pause");
    system("cls");
}

int main()
{
    int matriz[L][C] = {0}, vet[TAM], continuar=0;
    printf("\n\t\t============== INSIRA FICHAS ==============\n");
    printf("\n\t\tDeseja iniciar uma partida, nobre desafiado(a)? \n\t\tDigite 1 para Sim e 0 Para sair do jogo:\t\n");
    printf("\n\t\t============== INSIRA FICHAS ==============\n");
    scanf("%d", &continuar);
    system("cls");
    while( continuar != 0)
    {
        printf("\n===================== BEM VINDO AO JOGO DA SENHA NOBRE DESAFIADO(A) =====================\n");
        sorteio(vet);
        lerTentativas(matriz, vet);
        system("cls");
        printf("\n");
        printf("\t\t\t============== FINAL DE JOGO ==============\n"); // Apos as 10 tentativas, se usuario nao ganhar, desafiante(computador) ganha.
        printf("\n\t\t\tTENTATIVAS ESGOTADAS, O DESAFIANTE VENCEU!\n\n\t");
        printf("\t\t============== FINAL DE JOGO ==============\n\n");
        system("pause");
        system("cls");
        printf("\n\t\t============== INSIRA FICHAS ==============\n");
        printf("\n\t\tDeseja iniciar uma partida, nobre desafiado(a)? \n\t\tDigite 1 para Sim e 0 Para sair do jogo:\t\n");
        printf("\n\t\t============== INSIRA FICHAS ==============\n");
        scanf("%d", &continuar);
        system("cls");
    }
    return 0;
}
    
29.06.2017 / 04:59
1

Dude, learn how to debug your code.

To find a position of a value in a vector you can make a function that scans this vector by looking for the given value.

Doing it within for is a poor practice in programming .. be careful, maybe recursion is the most correct path to what you're trying to do

So I understand, you're wanting to do position-value checks in your array, maybe using a method that compares for example:

Top: matrix [x] [y-1]

Low: matrix [x] [y + 1]

matrix [x-1] [y]

Right: matrix [x + 1] [y]

I hope I have helped, if not, please clarify your doubts.

    
28.06.2017 / 18:18