Ir ao conteúdo
  • Cadastre-se

C desenvolvimento de código (atividade de algoritmos e lógica de programação)


Posts recomendados

#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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!