Ir para conteúdo

Arquivado

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

MnhtnProject

Teste de Einstein em C++

Recommended Posts

Pessoal, sou novato nesta área, graduei-me recentemente em história(Sei que é um curso que nada tem a ver com programação) mas, surgiu a oportunidade de estudar na área de Informática, acredito que me saí bem para um novato, mas a matéria vai acumulando, e as dúvidas vão surgindo, peço o auxílio para sanar algumas das minhas dúvidas.

Pois bem, foi solicitado a criação em C++ de um programa semelhante aquele que atribuem a criação a Einstein, mas encontrei certa dificuldade na hora da estruturação/desenvolvimento, então segue como foi solicitado, e a minha dúvida:

 

Teste de Einstein:
- Há 5 estabelecimentos de diferentes cores;
- Em cada estabelecimento há uma pessoa de uma diferente nacionalidade;
- Esses 5 proprietários vendem diferentes bebidas, diferentes tipos de cigarros e têm um certo animal de estimação;
- Nenhum deles têm o mesmo animal, o mesmo cigarro ou a mesma bebida.

O programa deverá disponibilizar as seguintes dicas para o usuário:

- O Norueguês vive no primeiro estabelecimento;
- O Inglês vive na casa Vermelha;
- O Sueco tem Cachorros como animais de estimação;
- O Dinamarquês vende Chá;
- A casa Verde fica do lado esquerdo da casa Branca;
- O homem que vive na casa Verde vende Café;
- O homem que vende Pall Mall cria Pássaros;
- O homem que vive na casa Amarela vende Dunhill;
- O homem que vive na casa do meio vende Leite;
- O homem que vende Blends vive ao lado do que tem Gatos;
- O homem que cria Cavalos vive ao lado do que vende Dunhill;
- O homem que vende BlueMaster vende Cerveja;
- O Alemão vende Prince;
- O Norueguês vive ao lado da casa Azul;
- O homem que vende Blends é vizinho do que vende Água.

A ideia é disponibilizar para o usuário uma matriz 5x5 de forma que a mesma seja atualizada onde cada campo seja preenchido de acordo com as informações passadas pelo usuário (linha, coluna, opção).

Minha dúvida é como armazenar as respostas informadas pelo usuário em cada linha/coluna da matriz com a opção, por exemplo:

linha 1, coluna 1 opção: Norueguês, e após todas as linhas e colunas preenchidas, imprimir se está tudo correto conforme deve ser.
Agradeço a atenção de todos que puderem me auxiliar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenha 5 matrizes com as respostas corretas e outras cinco com as respostas do usuário.
Dai sempre que ele tentar algo você verifica se está certo. Se estiver certo você marca a caixa (checkbox) correspondente a pergunta que ele acertou. Se estava certo e ele modificou, você desmarca a caixa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezados(a)

 

Eis aqui, o meu trabalho até agora:

 

#include <stdio.h>
#include <stdlib.h>
#define MAX 5
int mostra_tabela (void);
void mostra_dicas (void);
int mostra_opcoes (void);
void exibe_linhas (int linha);
int matriz[MAX][MAX];
int main(void) {
int linha, coluna, opcao;
for(linha=0; linha<MAX; linha++) {
for(coluna=0; coluna<MAX; coluna++) {
matriz[linha][coluna]=-1;
}
}
puts("\n-- Teste de Einstein --");
puts("\n-- MENU --");
puts("\n1 - Mostra Tabela");
puts("\n2 - Mostra Dicas");
puts("\n3 - Sair");
fflush(stdout);
scanf("%d", &opcao);
while (opcao != 3) {
switch(opcao) {
case 1:
system("cls");
mostra_tabela();
break;
case 2:
system("cls");
mostra_dicas();
break;
}
}
return EXIT_SUCCESS;
}
int mostra_tabela(void) {
int linha, coluna, opcao;
printf("\n \tCasa 0 \t Casa 1\t Casa 2\t Casa 3\t Casa 4\n\n");
for(linha=0; linha<MAX; linha++) {
exibe_linhas(linha);
for(coluna=0; coluna<MAX; coluna++) {
printf("%d \t", matriz[linha][coluna]);
}
puts("\n");
}
mostra_opcoes();
puts("\n\n");
puts("Entre com a linha:");
fflush(stdout);
scanf("%d", &linha);
puts("Entre com a coluna:");
fflush(stdout);
scanf("%d", &coluna);
puts("Entre com a opcao:");
fflush(stdout);
scanf("%d", &opcao);
matriz[linha][coluna]=opcao;
return 0;
}
void mostra_dicas(void) {
printf("\nDicas");
if
}
void exibe_linhas(int linha) {
if (linha == 0) {
printf("%d-Cor \t", linha);
}
else if (linha == 1) {
printf("%d-Nacion. \t", linha);
}
else if (linha == 2) {
printf("%d-Bebida \t", linha);
}
else if (linha == 3) {
printf("%d-Cigarro \t", linha);
}
else {
printf("%d-Animal \t", linha);
}
}
int mostra_opcoes(void) {
printf("\nCor: \t10-Amarelo\t11-Azul\t12-Branca\t13-Verde\t14-Vermelho");
printf("\nNacion.:\t20-Alemao\t21-Dinamarques\t22-Ingles\t23-Noruegues\t24-Sueco");
printf("\nBebida: \t30-Agua\t31-Cafe\t32-Cerveja\t33-Cha\t34-Leite");
printf("\nCigarro:\t40-Blends\t41-Bluemaster\t42-Dunhill\t43-Pall Mall\t44-Prince");
printf("\nAnimal: \t50-Cachorro\t51-Gato\t52-Passaro\t53-Cavalo\t54-peixe");
return 0;
}
Como podem ver, no "printf dicas" não consegui desenvolver esta específica parte, alguma ideia/sugestão?
pois a cada informação embutida na matriz uma das dicas deverá ser eliminada. esta é minha dificuldade, como desenvolver esta parte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não utilize "fflush()" para limpeza de buffer de saída. Mesmo que ele pareça funcionar, não é garantido o resultado.

 

Utilize outra técnica para isso:

scanf("%d%*c", &variavel);

Sobre a rotina, pensei em algo que talvez simplifique bastante o código:

    unsigned int vet[5][5][5][5][5] = {{{{{0}}}}}; // Inicializa com zero
    unsigned int a = 0;
    unsigned int b = 0;
    unsigned int c = 0;
    unsigned int d = 0;
    unsigned int e = 0;
 
    for ( a = 0; a < 5; a++ )
        for ( b = 0; b < 5; b++ )
            for ( c = 0; c < 5; c++ )
                for ( d = 0; d < 5; d++ )
                    for ( e = 0; e < 5; e++ )
                        if ( (a == b) && (b == c) && (c == d) && (d == e) )
                            printf("SAO IGUAIS !!\n");

Como serão 5 unidades diferentes com características também diferentes, montando um matriz 5x5x5x5x5 resolve o problema.

Onde tem o meu "if()", basta trocar pelas alternativas que você deseja.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.