Ir ao conteúdo

Posts recomendados

Postado

de novo um anexo? sério? leu o que eu postei a menos? testou? tem o programa inteiro lá

 

E não é o seu código ou o meu código. Trata-se apenas de completar o código (ruim) do enunciado

  • Curtir 2
Postado
1 hora atrás, Karine Moreira disse:

Como faço a segunda parte, a questão 2?

 

Eu já disse qual o maior problema do programa... Leu os dois tópicos?

  • Curtir 1
Postado
#include <stdio.h>
#include <string.h>
#include <stdlib.h> // ---------- Sugestão de melhoria, o intuito da biblioteca é para limpar a tela.
#include <locale.h> // ---------- Aqui falta a biblioteca necessária para idioma - 0.1 ponto

int main()
{
    char resposta[20];
    int erros=0,acertos=0,max=0,i, j;
    char letra;

    setlocale(LC_ALL,"Portuguese");           // --------- Aqui falta a definiçao de idioma - 0.1 ponto (LEMBRAR DE RETIRAR OS COMENTARIOS)
    printf("************ Jogo da Forca ************\n");
    printf("************** Jogador 1 **************\n\n");
    printf("Utilize apenas letras minúsculas.\n");
    printf("Máximo de 20 letras\n\n");

    letra = ' '; max = 1;
    for (i = 1; i <= 20; i++) {
        resposta[i] = ' ';
    }
    erros = 0; acertos = 0;

    printf("Digite a palavra secreta: ");
    scanf (" %s", resposta);
    max = strlen (resposta);
    system("clear||cls");

    printf("************ Jogo da Forca ************\n");
    printf("************** Jogador 2 **************\n\n");
    printf("Utilize apenas letras minúsculas.\n");
    printf("Limite de 6 erros. Palavra de até 20 letras\n\n");

    while ((erros < 6) && (acertos<max)){
          printf("Digite uma letra: ");
          scanf (" %c", &letra);
          j = 0;
          for (i = 0; i <= max; i++)
          {
               if (resposta[i] == letra)
               {
                   acertos++; j++;
                   printf ("\nAcertos: %d - Erros: %d\n",acertos, erros);
               }
          }
          if (j <= 0)
                erros++;
                if (erros >= 6)
            printf("Derrota com %d erros\n", erros); // condição de vitoria e derrota
        else
            if (acertos >= max)
                printf("Vitoria com %d erros\n", erros); // condição de vitoria e derrota

    }
    return (0);
}

 

  • Curtir 1
Postado
2 horas atrás, Danilo Anderson disse:

ele não roda do code:blocks.

 

De novo postou um anexo? Não entende que é muito chato pra quem quer te ajudar num programa de 40 linhas ter que sair do forum e fazer um download?

 

Ao menos rodou o programa que te mostrei? Comparou ?

 

conhece um programa chamado DiffMerge, grátis? Ele compara dois programas... Mas esse é tão pequeno que talvez você mesmo pudesse ter visto....

 

image.png.1c1f00a8200fc8f9416d457d24bac8dc.png

 

resposta é char[20]. O que acha que vai acontecer quando tentar escrever resposta =  '   '; para i = 20?

 

Não sabe usar um debugger? Mesmo o do Code::Blocks? 

 

Não pode colocar mensagens no programa e ver até onde ele está indo?

 

 

image.png

  • Curtir 2
Postado
13 minutos atrás, herbertbahia disse:

se voce tivesse seguindo bem as orientações voce teria inicializado as variaveis e colocado elas em uma unica linha, o que evitaria essa sua duvida então poderia ser assim

 

Não é para alterar o programa nesse execício, apenas preencher as lacunas e corrigir os erros.

 

De todo modo lembro que é recomendado há muitos anos não declarar mais de uma variável por linha. A razão é simples: é mais legível, facilita inicializar as coisas e diminui o tempo de manutenção de um programa que você não escreveu ontem ou que você não escreveu.

 

É muito chato procurar em declarações de 40 linhas uma variáveis em particular, ver se tem um valor, achar o tipo dela...

 

Pense nisso.

 

Está até no guia oficial de C++ por exemplo. Mas pode experimentar isso na prática em seus programas...

 

 

adicionado 0 minutos depois
11 minutos atrás, Danilo Anderson disse:

Ele trava nesta tela e não vai. O sistema não deixa eu digitar o caractere

 

Está lendo o que eu escrevo?

 

adicionado 1 minuto depois

image.png.6cece36cafd617f62842a630e68cefe4.png

 

Não é um "bug terrivel" e não é o "programa dele". É apenas pra consertar...

  • Curtir 1
Postado
3 minutos atrás, herbertbahia disse:

não entendo a palavra secreta de 2 letras tanto a de 15 letras tem a mesma quantidade de chances? acho que tem muito que melhorar...

 

:) essa é a parte 2 do exercício.

 

Talvez seja de propósito, certo? Todos os erros e o teste da mesma condição 2x e a interface pobre :) 

  • Curtir 2
Postado
59 minutos atrás, Karine Moreira disse:

Não encontrei


Que significa?

 

Você corrigiu o programa? Tentou o código que eu postei? Leu o programa todo? Leu o tópico #16?

 

 

adicionado 2 minutos depois

Imagino que entenda a ideia do jogo de forca.

 

Não achou meio bobinho o tal jogador 1 digitar a palavra e ela aparecer na tela?

 

Não acha que podiam aparecer as letras da palavra conforme o jogo anda, e as letras já tentadas? Tipo, digamos, o jogo de forca?

 

São coisas assim

  • Curtir 1
Postado

att.txt

adicionado 2 minutos depois

ATT.txt

#include <stdio.h>
#include <string.h>
#include <locale.h>          // ---------- Aqui falta a biblioteca necessária para idioma - 0.1 ponto

int main()
{
    char resposta[20];  
    int erros;          
    int acertos;         
    char letra;          
    int i, j;            
    int max; 
    
    setlocale (LC_ALL, "portuguese");          
 
      // --------- Aqui falta a definiçao de idioma - 0.1 ponto

    printf("************ Jogo da Forca ************\n");        
    printf("************** Jogador 1 **************\n\n");
    printf("Utilize apenas letras minúsculas.\n");
    printf("Máximo de 20 letras\n\n");

    letra = ' '; max = 1;             
    for (i = 1; i <= 20; i++) {   
        resposta = ' ';   
    }
    erros = 0; acertos = 0;

    printf("Digite a palavra secreta: ");
    scanf (" %s", resposta);
    max = strlen (resposta);
    system("clear||cls");  
        
    printf("************ Jogo da Forca ************\n");   
    printf("************** Jogador 2 **************\n\n");
    printf("Utilize apenas letras minúsculas.\n");
    printf("Limite de 6 erros. Palavra de até 20 letras\n\n");

    while ((erros <6) && acertos <max)    
    // Aqui falta a condição de parada do laço - 0,3 ponto
    {
          printf("Digite uma letra: ");
          scanf (" %c", &letra);
          j = 0;
          for (i = 0; i <= max; i++)
          {
               if (resposta == letra)
               {
                   acertos++; j++;
                   printf ("\nAcertos: %d - Erros: %d\n",acertos, erros);
               }
          }
          if (j <= 0)      
                erros++;
                if ( erros >=6)
                printf ("derrota com %d erros \n", erros);
                else
                if (acertos >=max)

                printf("ganhou!");
                printf ("vitoria com %d acertos\n", acertos); //Aqui falta a parte responável pela verificação de vitoria ou derrota

// -------------------------------------- Final da Verificação ----------------------------------------------------------------*/

    }
    return (0);
}

  • Curtir 1
Postado

image.png.35b95635e48aebd1848de2ab3e728d84.png

 

resposta é char[20]

 

image.png.aab75d4413880c9e440b6fa6b841766b.png

 

letra é char... resposta é... char[20]
 

image.png.3242d7f1a56028462c6a5cd172aefa94.png

 

Quando corrigir o erro e colocar o índice em resposta vai aparecer o outro erro, já que resposta[] só vai até 19...

 

Leu o programa que eu postei? Acompanhou a discussão nos dois tópicos?

 

 

 

image.png

  • Curtir 1
Postado
Em 09/07/2020 às 23:18, devair1010 disse:

@Danilo Anderson      para verificar se ganhou , teste a qtd de letras certas com o total de letras da palavra , então seu código poderia ser assim  :


#include <stdio.h>
#include <string.h>
#include <iostream>
#include <ctype.h>
#include <conio.h>
using namespace std;
//______________________________           // ---------- Aqui falta a biblioteca necessária para idioma - 0.1 ponto
int main(){
    char letra,resposta[20]={0};
    int  max,i, j,erros=0,acertos=0,tentativas=0;
    bool achou;
    //__________________________    // --------- Aqui falta a definiçao de idioma - 0.1 ponto

    printf("************ Jogo da Forca ************\n");
    printf("************** Jogador 1 **************\n\n");
    //printf("Utilize apenas letras minúsculas.\n");
    printf("Máximo de 20 letras\n\n");

    /*for (i = 1; i <= 20; i++) {
        resposta[i] = ' ';
    }
    erros = 0; acertos = 0;*/

    printf("Digite a palavra secreta: ");
    fgets(resposta,20,stdin);             // lê até no máximo 20 Letras mas pega o NewLine
    resposta[strlen(resposta)-1] = '\0';  // removendo o NewLine da leitura
    max = strlen (resposta);
    for(i=0; i<max; i++)
        resposta[i] = toupper(resposta[i]);
    system("clear||cls");

    printf("************ Jogo da Forca ************\n");
    printf("************** Jogador 2 **************\n\n");
    //printf("Utilize apenas letras minúsculas.\n");
    printf("Limite de 6 erros. Palavra de até 20 letras\n\n");
    j = 0;
    while( 1 ){//_________________________________      // Aqui falta a condição de parada do laço - 0,3 ponto
        printf("Digite uma letra: ");
        scanf (" %c", &letra);
        tentativas++;
        letra = toupper(letra);
        achou = false;
        for (i = 0; i <= max; i++){
            if (resposta[i] == letra){
                achou = true;
                resposta[i] = (char)219;
                //acertos++;
                j++;  //  contador de letras certas
                //printf ("\nAcertos: %d - Erros: %d\n",acertos, erros);
            }
        }
        if( achou ){
            acertos++;
        }
        else
            //if (j <= 0)
            erros++;
/* ------------------- Aqui falta a parte responável pela verificação de vitoria ou derrota ----------------------*/

        if( j == max ){
            cout<<"Parabéns , você acertou todas as "<<max<<" letras"<<endl;
            cout<<"da palavra em "<<tentativas<<" tentaivas !"<<endl;
            break;
        }

/* -------------------------------------- Final da Verificação ----------------------------------------------------------------*/

    }
    return (0);
}

 

Não entendo esses códigos soltos no tópico sendo que o enunciado pede apenas para completar! Estão acrescentando bibliotecas, variáveis KKKKK Não faz sentido

  • Curtir 1
Postado

@zZsmithZz Acontece que o código do enunciado é ruim, leia toda a discussão que irá entender... Esses tipos de questões normalmente deixam o aluno de mãos atadas: se houver algo que pode ser melhorado, mas envolva acrescentar algo fora do que foi cobrado, nada poderá ser feito.

Ao menos a 2ª questão permite citar melhorias...

  • Curtir 1
Postado

@Lucca Rodrigues Sim, mas na questão 1, não há a necessidade de melhorar e sim fazer com que funcione! Até porque,como o @arfneto disse, parece ser fraco de propósito para facilitar um pouco a segunda questão!  O primeiro erro que notei de cara, é que o programa não distingue acerto de palavras repetidas, mas não foi pedido para corrigir "isso" em questão 

  • Curtir 1
Postado

@zZsmithZz Bem... Você não achou que iriam simplesmente completar o programa como solicitado pela própria questão para que os demais possam se aproveitar da resposta, achou?

Houve toda uma discussão a cerca de como o mesmo deveria ser completado devidamente. Novamente: leia toda a discussão que irá entender. :)

11 minutos atrás, zZsmithZz disse:

o programa não distingue acerto de palavras repetidas, mas não foi pedido para corrigir "isso" em questão

Se não foi cobrado, não o faça. Por isso mesmo disse que o aluno poderia ficar de mãos atadas.

Se achar necessário, converse com seu professor sobre isso.

  • Curtir 1
Postado

@Lucca Rodrigues

#include <stdio.h>
#include <string.h>
#include <locale.h>           // ---------- Aqui falta a biblioteca necessária para idioma - 0.1 

int main()
{
    char resposta[20];  
    int erros;          
    int acertos;         
    char letra;          
    int i, j;            
    int max;            
 
    setlocale(LC_ALL,"Portuguese");    // --------- Aqui falta a definiçao de idioma - 0.1 ponto

    printf("************ Jogo da Forca ************\n");        
    printf("************** Jogador 1 **************\n\n");
    printf("Utilize apenas letras minúsculas.\n");
    printf("Máximo de 20 letras\n\n");

    letra = ' '; max = 1;             
    for (i = 1; i <= 20; i++) {   
        resposta[i] = ' ';   
    }
    erros = 0; acertos = 0;

    printf("Digite a palavra secreta: ");
    scanf (" %s", resposta);
    max = strlen (resposta);
    system("clear||cls");  
        
    printf("************ Jogo da Forca ************\n");   
    printf("************** Jogador 2 **************\n\n");
    printf("Utilize apenas letras minúsculas.\n");
    printf("Limite de 6 erros. Palavra de até 20 letras\n\n");

    while ((erros < 6) && (acertos<max))      // Aqui falta a condição de parada do laço - 0,3 ponto
    {
          printf("Digite uma letra: ");
          scanf (" %c", &letra);
          j = 0;
          for (i = 0; i <= max; i++)
          {
               if (resposta[i] == letra)
               {
                   acertos++; j++;
                   printf ("\nAcertos: %d - Erros: %d\n",acertos, erros);
               }
          }
          if (j <= 0)      
                erros++;

}
if (acertos == strlen(resposta)) //Aqui falta a parte responável pela verificação de vitoria ou derrota
{
 printf ("\nPARABÉNS, VOCÊ VENCEU!\n");
}
else
 printf ("\n VOCÊ PERDEU!!!\n"); //Final da Verificação
   return (0);
}

Vou entrar em contato com o professor sim! Mas seguindo o que foi pedido pela universidade, apenas fiz edição onde estão os comentários. Eu queria consertar essa questão de contar como acerto palavras repetidas =S A questão 2, pode utilizar qualquer coisa que foi comentado aqui na discussão 

  • Curtir 2
Postado

Usando termos suaves, o programa é bem fraquinho. 

 

Mas não é pra mudar nada no item 1. Apenas corrigir o que está errado e preencher as lacunas e o trecho faltante, como foi muito discutido aqui e em dois tópicos. :) 

 

Curiosamente você deixou de corrigir DOIS erros óbvios que foram listados e comentados... Espero que não tenha entregue isso...

   for (i = 1; i <= 20; i++) {   
        resposta[i] = ' ';   
    }

De novo? resposta é char[20] não pode escrever <=20 🤔

          for (i = 0; i <= max; i++)
          {
               if (resposta[i] == letra)

max é strlen(resposta) então não pode comparar comparar de 0 a max inclusive. Provavelmente não testou com uma palavra de 20 letras né? De 0 a 20 são 21... Mas seu professor pode testar...

 

Sobre as melhorias

 

44 minutos atrás, zZsmithZz disse:

Eu queria consertar essa questão de contar como acerto palavras repetidas

 

Acho que não era isso que queria escrever... Não são palavras repetidas.

 

Talvez não tenha lido a discussão, mas não acha mais interessante antes de tudo tirar o código duplicado no if e no while? E não ecoar a palavra quando o tal "jogador 1" digita? E deixar ele confirmar já que não está vendo a palavra que digitou?

 

E já pensou em mostrar as letras posicionadas na palavra, tipo aquele jogo, sabe? Forca? E deixar uma listinha com as letras que o cara já tentou, só por cortesia? Tipo forca mesmo? Algo ingênuo assim

A __ A  __ __ S __    (T B M)

para análise...

 

E que tal usar uma fonte tipo máquina de escrever --- monospaced, tipo Courier New por exemplo --- para mostrar as letras, pra ficar mais arrumadinho na tela?

 

E que tal letras grandes, já que é só digitar o número? No seu programa, claro.

image.png.d8de7d945490b95ee54a370bc2f09466.png

 

E afinal não precisa nem implementar...

 

E mostrar um "ASCII chart" com o tal "enforcado" clássico conforme o cara for errando?

 

image.thumb.png.4238ff278e80823c6a8789e414e589ee.png

 

Olha que meigo, pesquisando por "hangman ASCII art" no Bing

 

E que tal enviar mensagens pela rede para jogar em dois computadores o jogador 1 e o 2?

 

...

  • Curtir 3

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!