1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Programa - C++ c/arrays (ajuda)

Discussão em 'Programação' iniciada por Aninha28, 11 de Outubro de 2008. (Respostas: 4; Visualizações: 1085)

  1. Aninha28

    Aninha28 Power Member

    Boas!

    Começei a estudar agora arrays em C++, em Programação, e o primeiro programa que tenho que fazer é:

    - Adivinhar um número entre 0 e 4, em quatro tentativas;

    - O utilizador nunca terá hipótese de adivinhar.


    Gostaria que me dessem algumas dicas, ou se o meu raciocínio está correcto. Estava pensando em fazer o programa da seguinte forma:

    - Utilizando o ciclo do If;

    - Se o utilizador inserir "0", dizer que a resposta é "1";

    - Se inserir "1" dizer que a resposta é "2", e assim sucessivamente, até chegar às quatro tentativas.


    Aceito sugestões.. Obrigado !
     
  2. nsilvio

    nsilvio Power Member

    Parece que descobrir o que pretentes é mais dificil que o programa em si... :confused:

    É algo parecido com isto... http://www.dreamincode.net/forums/showtopic20737.htm ?
     
  3. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Acho que, se é para o utilizador nunca acertar, fazes um ciclo de 1 a 4, e qualquer que seja a resposta que o utilizador dê, ele diz que está errada (ou seja, 4 tentativas, 5 números).
    Se quiseres que o jogo diga o número "certo" no fim, dá jeito saberes usar arrays.
    Senão, ficas com cinco variáveis, cada uma a dizer se um determinado número foi dito ou não. Depois, quando o utilizador disser esse número, essa variável passa a indicar que o número já foi dito, e o número que o jogo dirá será um número correspondente a uma (das?) variável/variáveis que não foi/foram marcada(s).

    Confundi-te o suficiente? :P
     
  4. bsd

    bsd Power Member

    Bom, o "if" não é um ciclo, é apenas uma bifurcação, se isto, faz aquilo, senão, faz aqueloutro.

    As selecções "if" e "switch" e os ciclos "for", "while" e "do {} while" são chamados no seu conjunto "estruturas de contrôlo". São formas estruturadas de alterar o fluxo normal de execução do programa.

    Tu precisas de guardar memória de todos os números que o utilizador já introduziu. No final, simplesmente dizes ao utilizador que o número que ele devia ter adivinhado era o único que ele não disse. Chamemos a essa memória um "saco".

    Só há duas hipóteses:

    1. Ou vais metendo no "saco" as tentativas do utilizador e, no final, experimentas cada um dos números de 0 a 4 para ver se está ou não no "saco", caso não esteja dizes que era esse;
    2. Ou então começas com um "saco" com os números de 0 a 4 e, em cada tentativa, retiras desse "saco" o número que o utilizador disse, no final dizes-lhe que era o número que te sobrou no "saco".
    Este saco pode ser muita coisa:

    • Pode ser um array dos números que foram dados pelo utilizador, ou que ainda não foram dados (consoante vás pela solução 1 ou 2). Não me parece ideal, porque o número de operações total que o computador terá de fazer será em média proporcional ao número de tentativas (M) vezes o número de hipóteses (N) (neste caso 5*4=20, no entanto, o problema podia ser maior).
    • Pode ser uma árvore binária, e nesse caso o número de operações que o computador tem que fazer será proporcional a log M * N ou log N * M, consoante a solução 1 ou 2. Mas suponho que ainda não aprendeste as árvores.
    • Pode ser um array que tem tantas posições como as hipóteses (tem posições de 0 a 4). Só que é um array de booleanos e não de números. Cada posição pode ser verdadeiro ou falso. No início pões todas a falso, à medida que o utilizador faz tentativas vais pondo as hipóteses que ele deu a verdadeiro. No final procuras a primeira hipótese que ainda for falso e dizes-lhe que era essa. Este algorítmo é óptimo para o problema, o número de operações é proporcional a N apenas.
    Acho que já disse o suficiente para teres uma perspectiva suficientemente alargada do problema. Agora só tens de perceber todos os pequenos passos que estão envolvidos e ser capaz de dar ordens precisas ao computador (que é muito burro).

    Na minha opinião é muito indicado para o teu caso que tentes escrever o algoritmo numa espécie de português simplificado (ou estruturado) antes de tentar passá-lo para C++. Uma coisa do género:
    Código:
    Seja n o número introduzido pelo utilizador.
    Colocar na posição n do array "verdadeiro".
    
     
  5. Aninha28

    Aninha28 Power Member

    Obrigado ! ;)
    Já me ajuda bastante.
     

Partilhar esta Página