Ir ao conteúdo
  • Cadastre-se

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


Posts recomendados

Boa tarde pessoal,

 

Estou ingressando na area de tecnologia, estou com muitas duvidas em uma atividade de algoritmos e lógica de programação, foi me passado uma atividade para completar um código que esta em incompleto, ja li o conteudo mas não consigo dar andamento, alguem pode me ajudar?

 

ATIVIDADE

 

Suponha que você é gestor de uma equipe de desenvolvimento de software e em determinado momento é pedido por um gestor de projetos que seja feita uma atualização de um dos programas que haviam sido iniciados, mas não concluídos.
Este software se trata de um jogo da Forca simples, mas que permite jogar em duas pessoas alternando entre quem vai informar a palavra secreta, e quem vai informar letras até acertar a palavra secreta ou ser enforcado.
Basicamente, o funcionamento atual do jogo se baseia da seguinte forma:

1. É informado ao jogador 1 sobre as regras básicas do jogo.
2. O Jogador 1 informa uma palavra secreta com até 20 letras.

3. O jogador 2 é informado das regras básicas do jogo.
4. O jogador 2 informa uma letra palpite.
5. A cada palpite é verificado se o mesmo acertou ou errou, e é informado ao mesmo a quantidade atual de acertos e erros.
6. O jogo termina se ele acertar todas as letras da palavra secreta, ou for enforcado após cometer o sexto palpite equivocado.

Suponha que o mesmo não tenha sido concluído e algumas partes do código estejam faltando para que o mesmo funcione e sua equipe foi encarregada da retomada deste código para que o mesmo possa ser finalizado, executado e testado. Isso representa a tarefa referente a questão 1.
Paralelamente ao desenvolvimento do restante do código faltante pelos desenvolvedores, foi pedido que você e alguns colaboradores se reunam para discutir melhorias que poderiam ser implementadas no software, sendo este o trabalho a ser desenvolvido na questão 2.

Para esta atividade então, são pedidas duas tarefas:
Questão 1: Completar as partes faltantes do código em linguagem C indicadas por lacunas e enviar o mesmo completo usando como base o código que vem ao final da atividade. É preciso completar o código com o ajuste do idioma, a condição de parada do laço de repetição principal do jogo e a verificação de vitória ou derrota do jogador 2.
Questão 2: Citar ao menos duas melhorias que poderiam ser acrescentadas neste código de forma a tornar o software mais completo, robusto ou com uma interface mais agradável em forma textual apenas, não sendo necessário o envio do código relativo a estas melhorias.
Assim, a entrega para esta atividade se baseia em um arquivo TXT de texto simples contendo o código de resposta da Questão 1, e suas considerações escritas para a questão 2 no mesmo arquivo a ser anexado como atividade.
 

 

<CODE>:

 

#include <stdio.h>
#include <string.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;            
 
    __________________________    // --------- 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 _________________________________      // 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++;

\* ------------------- 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

@Danilo Anderson Edite sua postagem, mas dessa vez usando essa ferramenta aqui:

image.png.8047f21097b28818064bec3a42439499.png

Ela permite com que você inclua seu programa, facilita a visualização. Não esqueça de selecionar a opção "C, C++, C#, Java, Objective C".

 

Muito mais do que incluir o enunciado de sua questão: aproveite que irá editar e inclua suas tentativas de completar o código também.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@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);
}

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Oi bom dia,

 

Muito obrigado, só que o código é somente para mudar onde o professor solicitou, o código ja esta pronto são só algumas mudanças. Veja o arquivo em anexo, estou com dificuldades me ajuda a resolver por favor. Desde ja agradeço a disponibilidade. 

ATIVIDADE MAPA II.txt

adicionado 1 minuto depois

As mudanças são só onde tem os comentarios.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

25 minutos atrás, Albukerke disse:

Bom dia Danilo você conseguiu alguma resposta, também estou na mesma situação!

 

Vocês estão tentando ao menos fazer algo? As duas primeiras "lacunas" por exemplo devem estar presentes nos programas anteriores que fizeram em C, certo? ou não usaram NUNCA esse lance de definição de idioma? aquilo de setlocale e tal? Ou não deu pra ver?

 

E o while com um loop interno que conta acertos? Num jogo de forca? qual será o teste para sair do loop? (a) Acertar as letras todas? (b) Adivinhar a precisão do tempo para a próxima terça? (c) estourar o limite de erros?

 

E a parte responsável por verificação de vitória num jogo de forca? Como saber se ganhei num jogo de forca tentando acertar uma palavra que tem max letras? e com um limite de erros?

 

 

 

 

 

 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@Danilo Anderson      para fazer essa verificação  ,  precisa modificar algumas coisas ,  acrescentar variáveis  e nesse código acima tem partes que não funcionam de jeito certo ,  como o loop onde verifica os acertos ,  então experimente esse código seu com algumas modificações , 

#include <stdio.h>
#include <stdlib.h>
#include <locale.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(){
    setlocale(LC_ALL,"");
    char letra,resposta[20]={0},aux[20],jasaiu[100]={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;*/
    for(i=0; i<20; i++)                       // para ver o que está nessa variável char
    if(resposta[i]==0)
        printf(" resposta[%3d ] = 0\n",i+1);  // antes de ser preenchida
    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
    strcpy(aux , resposta);                   // armazena a palavra para futuras pesquisas
    max = strlen (resposta);                  // calcula o tamnha da palavra
    for(i=0; i<max; i++)
        resposta[i] = toupper(resposta[i]);   // converte todas as letras da palavra para Maiúsculas
    system("clear||cls");                     // limpando a tela no windows ou no Linux

    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;                                    //  usado como contador de tentativas
    while( 1 ){                               //________ Loop Etherno // Aqui falta a condição de parada do laço - 0,3 ponto
        for(i=0; i<max; i++)                  // percorrer todas as letras da palavra
            if(resposta[i] == 0 )             // se nessa posição já maracada como respondida certo
                printf(" %c ",aux[i]);        // escreve a letra Original da Palavra
            else// senão
                printf(" - ");                // escreve um traço , indicando que ainda não foi respondida
        printf("\n\n");                       // pular duas linhas
        printf("Digite uma letra: ");
        scanf (" %c", &letra);                // pegar uma letra
        tentativas++;                         // incrementa o número de tentativas
        achou = false;
        for(i=0; i<100; i++)                  // percorrer onde guarda todas as letras tentadas
            if(jasaiu[i] == letra){           // se já saiu
                printf("Essa Letra  ( %c )  , Já Saiu . . . !\n",jasaiu[i]);// informa que já saiu
                break;                        // sai do Loop
            }
            else                              // senão
                jasaiu[i] = letra;            // guarda a letra
        letra = toupper(letra);               // converte a letra para Maiúscula
        for( i=0; i<max; i++){                // percorrer todas as letras da palavra
            if( resposta[i] == letra){        // se a letra for igual a alguma da palavra
                achou = true;                 // marca como encontrada
                resposta[i] = 0;              // maraca todas essas letras da palavra como certas
                //acertos++;
                j++;                          //  contador de letras certas
                //printf ("\nAcertos: %d - Erros: %d\n",acertos, erros);
            }
        }
        if( achou ){                          // se a letra está certa
            acertos++;                        // incrementa o número de acertos
        }
        else                                  // senão
            //if (j <= 0)
            erros++;                          // incrementa o número de Erros
/* ------------------- Aqui falta a parte responável pela verificação de vitoria ou derrota ----------------------*/

        if( j == max ){                       // se o contador de acertos for igual ao número de letras da Palavra
            printf("\a");                     // aquele som de Beep
            cout<<"\n\n"<<endl;               // pulando três Linhas
            cout<<"Parabéns , você acertou todas as "<<max<<" letras"<<endl;// escreve essa mensagem na tela
            cout<<"da palavra em "<<tentativas<<" tentaivas ! \n\n\n"<<endl;// escreve essa mensagem na tela
            break;                            // sai desse Loop While
        }
        if( erros > 5 ){
            printf("\n\n\nErrou mais de 6 letras , perdeu . . . !\n\n\n");
            break;
        }

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

    }
    return 32768;                             // só Para Ser Diferente
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@devair1010 o objetivo do exercício é preencher as lacunas, como aqueles exercícios de idiomas. Virou moda depois de uma série de livros chamados "Heads-up ...." 

 

Você tem que deixar claro pelo que está trocando os //____ em cada um dos casos.


Não pode mudar o código, como a condição do while() porque faz parte da pergunta...

 

E a segunda parte, depois que o programa rodar, é dizer onde melhorar o código e porque... Sem escrever outro código. E aí poderia sugerir suas idéias :) 

  • Curtir 2
  • Haha 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, arfneto disse:

 

Vocês estão tentando ao menos fazer algo? As duas primeiras "lacunas" por exemplo devem estar presentes nos programas anteriores que fizeram em C, certo? ou não usaram NUNCA esse lance de definição de idioma? aquilo de setlocale e tal? Ou não deu pra ver?

 

E o while com um loop interno que conta acertos? Num jogo de forca? qual será o teste para sair do loop? (a) Acertar as letras todas? (b) Adivinhar a precisão do tempo para a próxima terça? (c) estourar o limite de erros?

 

E a parte responsável por verificação de vitória num jogo de forca? Como saber se ganhei num jogo de forca tentando acertar uma palavra que tem max letras? e com um limite de erros?

 

@arfneto A primeira e a segunda lacuna eu consegui, estou perdido um pouco no While... Poderia me ajudar como resolver esse problema? 

Sou novo na area de tecnologia da informação, estoou um pouco perdido... Se puder me ajudar agradeço.

 

 

 

 

 

 

adicionado 7 minutos depois

@arfneto Isso, eu estou tentando e não consigo resolver, gostaria que alguem pudesse me ajudar, me explicar um pouco se for possivel.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

image.png.a05cf9839267d1d77365be8d7cfa320d.png

 

 

Você está de fato lendo o programa? É um jogo de forca com um limite de 6 erros

    printf("Utilize apenas letras minúsculas.\n");
    printf("Limite de 6 erros. Palavra de até 20 letras\n\n");

Como você sai de um jogo desses? Forca? Ou você acerta a palavra ou você se enforca. Cero? Forca. Então deve sair do loop quando acertar a palavra ou estourar os erros...

 

Como tem uma parte DENTRO do loop que verifica se o cara acertou ou perdeu

\* ------------------ - Aqui falta a parte responável pela verificação
        de vitoria ou derrota----------------------
    */

isso quer dizer que o programa é mesmo ruim e você não vai ter dificuldades no item 2. :) 

 

Se eu tenho um limite de erros e um contador de acertos não pode ser difícil ver se o usuário ganhou ou perdeu...

 

O programa não funciona. Depois de corrigir as lacunas é preciso corrigir o programa para que ele ao menos rode antes de ser "melhorado".

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

Faltou o índice de resposta, certo? 

               if (resposta == letra)

E aqui também...

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

sério que não vai postar o programa e preciso sair do forum e baixar algo pra depois voltar aqui? 
 

2 horas atrás, Danilo Anderson disse:

Ele não deixa eu digitar a proxima letra, o processo é interrompido na primeira letra


que condição usou para sair do loop? foi seu programa que interrompeu o processo.

 

Como eu disse antes, e acho que você sabe, há duas condições: ou você acertou ou você se enforcou, que no caso quer dizer que errou mais de 6 vezes.

 

E que condição você usou? 

while (letra == resposta); 

pois é... 

 

letra é um char, resposta é char[20] e estava errado em dois lugares do programa e você corrigiu. E aí escreveu errado de novo... Não entendo. Se corrigiu os dois erros como escreveu esse? resposta é um vetor de 20 char. De nada adianta comparar com letra que é um char.

 

E essa parte abaixo?

/* ------------------- Aqui falta a parte responável pela 
         verificação de vitoria ou derrota 
 ----------------------*/

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

Não acha que devia escrever algo aí? Essa tal  "parte que falta"?

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

É um jogo de forca afinal

 

Como você sai  do while? 


Duas opções: ou você acertou a palavra ou se enforcou. Isso já está sendo controlado no código. E como seriam duas condições em C?

( A || B ) ou mesmo (!A && !B) dependendo de seu gosto. As variáveis já estão lá.

 

Como define 

        /* ----- Aqui falta a parte responsavel pela verificação                  de vitoria ou derrota             -------------------- */


o que por aqui dentro?
 

É a mesma coisa e essa é a óbvia primeira melhoria do programa, já que ele testa duas vezes exatamente a mesma coisa. Bem ingênuo o programa...

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@Gustavos27 Vocês são todos da mesma turma de programação?

Vieram aqui pra tentar conseguir uma resposta mais facilmente?

Vi duas postagens com o mesmo exercício, não sei qual a intenção de vocês.

O colega @arfneto já lhes deu 1001 explicações, já era pra vocês terem uma ideia de como seguir com o exercício.

Façam perguntas mais objetivas, dizer "não tenho ideia do que fazer" não vai mudar muita coisa. Mostre o que você tentou fazer, diga o porquê acha que está incorreto, pergunte, tire suas dúvidas.

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

16 minutos atrás, Gustavos27 disse:

Estou no mesmo barco, não consegui fazer o loop while, nem a parte responsável pela verificação de vitória ou derrota, e não tenho ideia de como escrever essas duas partes, nada parece funcionar pois não possuo o conhecimento suficiente em programação C para fazer rodar.

 

Eu postei um exemplo ontem...
 

 

Completo, até com as lacunas numeradas. Depois de ter mostrado outras vezes o que estava errado no programa original e em algumas soluções propostas, que envolviam reescrever o código original, o que eu acho que vai dar m#$d@ na nota ;) 

 

19 minutos atrás, Gustavos27 disse:

não consegui fazer o loop while

 

image.png.980e717c0feafd26cd3330f073c96022.png

 

20 minutos atrás, Gustavos27 disse:

nada parece funcionar pois não possuo o conhecimento suficiente em programação C para fazer rodar

 

Trata-se do jogo de forca, @Gustavos27 você sai do while quando estoura o limite, que está lá no programa, erros = 6 

 

ou quando você ganha, acertos = max que é o número de letras... Nada a ver com C porque só pode usar o que já está escrito lá...

 

21 minutos atrás, Gustavos27 disse:

a parte responsável pela verificação de vitória ou derrota

image.png.ed9f838f57de927b5f66878dafae0df5.png

 

É a mesma coisa. Não era pra testar duas vezes se o programa original não fosse tão ruim...

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

13 minutos atrás, Danilo Anderson disse:

@Gustavos27 tudo bem?

 

Me explica como você fez?

 

10 minutos atrás, Danilo Anderson disse:

@wetshy poderia me mostrar como você fez?

 

Vocês notaram que eu postei o código com as soluções numeradas, além de repetir aqui as razões?

 

:) 

adicionado 1 minuto depois
Spoiler

#define _CRT_SECURE_NO_WARNINGS

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

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

    //__2__
    // --------- Aqui falta a definiçao de idioma - 0.1 ponto
    setlocale(LC_ALL, "C");
    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 = 0; 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");
// __ 3 __
// Aqui falta a condição de parada do laço - 0,3 ponto
    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()
        };  // for()
        if (j <= 0) erros++; // nao tinha essa letra

        /* ----- Aqui falta a parte responsavel pela verificação
                 de vitoria ou derrota 
           --------------------
         */
        if (erros >= 6)
            printf("Derrota com %d erros\n", erros);
        else
            if (acertos >= max)
                printf("Vitoria com %d erros\n", erros);
        /* --------------------------------------Final da Verificação---------------------------------------------------------------- * /
        */
    };  // while()
    return (0);
}

 

 

Ou será falta de confiança? 🤔 😃

  • Curtir 1
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...