Ir ao conteúdo

Posts recomendados

Postado

Crie um programa que receba o nome dos 8 candidatos em um vetor de strings, onde cada string tem tamanho máximo igual a 30. O programa deve repetidamente apresentar o nome dos candidatos e perguntar ao público (usuário) quem deve sair até que haja apenas três candidatos. Na fase final o público deve escolher quem dentre os três candidatos deve vencer o programa.

 

Eu consegui fazer até a parte que o usuário informa os 8 nomes, mas eu não sei como remover o nome dos candidatos a cada iteração. Alguém pode me ajudar?

 

 

 

 

#include<stdio.h>

int main(){
char vetor1[30], vetor2[30], vetor3[30], vetor4[30];
char vetor5[30], vetor6[30], vetor7[30], vetor8[30];
int i;

 

printf("Digite o primeiro candidato: ");
scanf("%s", &vetor1);

 

printf("Digite o segundo candidato: ");
scanf("%s", &vetor2);

 

printf("Digite o terceiro candidato: ");
scanf("%s", &vetor3);

 

printf("Digite o quarto candidato: ");
scanf("%s", &vetor4);

 

printf("Digite o quinto candidato: ");
scanf("%s", &vetor5);

 

printf("Digite o sexto candidato: ");
scanf("%s", &vetor6);

 

printf("Digite o setimo candidato: ");
scanf("%s", &vetor7);

printf("Digite o oitavo candidato: ");
scanf("%s", &vetor8);

 

printf("Quem dever sair?\n");

 

return 0;

}

  • Amei 1
Postado

@Emerson2156547384729849    vetores não é bem isso não ,  você precisa especificar a qtd de elementos que terá o vetor , e  usando para isso os colchetes   "  [  ]  "  , mais ou menos assim :

int vetor;        // aqui uma variáveL simples do tipo int que pode guardar apenas um único numero
int vetor[8];     // aqui um vetor do tipo int com 8 elementos e pode guardar até 8 numeros
char nome[31];    // aqui uma string simples que pode armazenar até 30 caracteres
char nome[8][31]; // aqui um vetor de char , que na linguagem c é considerado uma string , 
                  // e com 8 elementos de 30 posições cada um , e pode guardar até 8 frases 
                  // que tenha até 30 caracteres , "letras espaços ou símbolos "   , sendo que
                  // o último , na posição 31 , será usado para o finalizador de string '\0'

enyão essa primeira parte de seu código poderia ser assim  :

#include<stdio.h>
#include<windows.h>
int main()
{
    //char vetor1[30], vetor2[30], vetor3[30], vetor4[30];
    //char vetor5[30], vetor6[30], vetor7[30], vetor8[30];  nãoé bem isso não !
    char nome[8][30]; // poderia ser assim
    int i;
    for(i=0; i<8; i++)// melhor usar um laço de repetição
    {
        printf("%d candidato: ",i+1);
        scanf("%s", nome[i]);// não precisa deesse & pois já tem o endereço
    }
/*  aqui são comentarios e pode deletar
    printf("Digite o segundo candidato: ");
    scanf("%s", &vetor2);
    printf("Digite o terceiro candidato: ");
    scanf("%s", &vetor3);
    printf("Digite o quarto candidato: ");
    scanf("%s", &vetor4);
    printf("Digite o quinto candidato: ");
    scanf("%s", &vetor5);
    printf("Digite o sexto candidato: ");
    scanf("%s", &vetor6);
    printf("Digite o setimo candidato: ");
    scanf("%s", &vetor7);
    printf("Digite o oitavo candidato: ");
    scanf("%s", &vetor8);
    printf("Quem dever sair?\n");
*/
    return 0;
}

 

  • Curtir 1
Postado

Você pode criar um vetor de 8 inteiros incialmente com valor 1 em todas as posições e conforme os candidatos forem eliminados você atribui o valor 0, exibindo dentro de um loop apenas as posições com valor 1 e usando o mesmo índice para os dois arrays.

 

Para fazer a comparação basta usar

 if (c[indice]) {
	// seu código
 }

já que 0 é equivalente a falso e demais valores a verdadeiro.

 

E para definir o candidato a ser eliminado você pode usar outro vetor para contar os votos ou criar uma array de inteiros bidimensional com o um índice secundário indicando se o candidato está eliminado ou não e o outro para contar o número de votos.

  • Curtir 1
Postado

@Emerson2156547384729849   olá , e o que o @JorgeGus   disse realmente procede ,  e não tem jeito de deletar nada da memória ,   que é onde está armazenado os nomes ,   pois quando você cria a variáveL , já tem alguma coisa guardada naquela mesma posição , então o que você pode fazer é adicionar um valor qualquer na posição do nome que você quer deletar , e assim através de comparações você verifica o valor da variável e se for o que você marcou como deletado , então ignore essa  e passa para outra ,  e no caso de ser um vetor ,  você pode puxar os nomes que estão acima desse que se quer deletar , para baixo e assim tal nome será eliminado e depois decrementa o contador de nomes , pois foi deletado hum .  e então faça essa parte e poste aqui , para ajudarmos caso precise de alguma correção   .

Postado

Exemplo de como eliminar os candidatos.

#include <stdio.h>
#include <string.h>

#define T_NOME 30
#define Q_CANDIDATOS 8

#define T_BUFFER 256

/* Colocação de cada candidato */
const char *COLOCACAO[] = {"primeiro",
                           "segundo",
                           "terceiro",
                           "quarto",
                           "quinto",
                           "sexto",
                           "setimo",
                           "oitavo",
                           "nono",
                           "decimo"};


int main(void)
{
    int contador, opcao;
    /* Os candidatos restantes */
    int rest_candidatos[Q_CANDIDATOS] = {0};
    int total_candidatos = 0;
    /* Cria uma matriz de caracteres */
    char candidatos[Q_CANDIDATOS][T_NOME];
    char buffer[T_BUFFER];      /* Buffer para ser usado no teclado */

    /* Pega os nomes dos candidatos */
    for (contador = 0; contador < Q_CANDIDATOS; contador++) {
        printf("Digite o nome o %s candidato\n", COLOCACAO[contador]);
        do {
            /* Pega a entrada do teclado */
            if (fgets(buffer, T_BUFFER, stdin) != NULL) {
                /* Verifica se a entrada é valída */
                if (buffer[0] != '\n' && strlen(buffer) < T_NOME-1) {
                    strcpy(candidatos[contador], buffer);
                    /* Sinaliza que o cadidato e valido */
                    rest_candidatos[contador] = 1;
                    total_candidatos++;
                } else {
                    printf("Digite uma entrada valida!\n");
                }
            }
        /* Repete novamente se a entrada for invalida */
        } while (buffer[0] == '\n' || strlen(buffer) > T_NOME-1);
    }

    printf("Total de candidatos no sistema %d\n", total_candidatos);

    do {
        /* Mostra os candidatos restantes no sistema */
        printf("Total de candidatos restantes %d\n", total_candidatos);
        for (contador = 0; contador < Q_CANDIDATOS; contador++) {
            if (rest_candidatos[contador] == 1)
                printf("%d-%s candidato %s", contador+1, COLOCACAO[contador], candidatos[contador]);
        }

        printf("Digite o numero do candidato para ser eleminado\n");
        /* Pega a posição do candidato */
        do {
            if (fgets(buffer, T_BUFFER, stdin) != NULL) {
                if (sscanf(buffer, "%d", &opcao) != 1) {
                    printf("Digite uma opcao valida!\n");
                    opcao = -1;
                }
            }
        } while (opcao < 1 || opcao > Q_CANDIDATOS);

        if (rest_candidatos[opcao-1] == 1) {
            printf("Candidato %s\teliminado!\n", candidatos[opcao-1]);
            /* Retira o candidato */
            rest_candidatos[opcao-1] = 0;
            total_candidatos--;
        } else {
            printf("O candidato ja foi eleminado!\n");
        }
    } while (total_candidatos > 3);

    printf("Candidatos restantes\n");
    for (contador = 0; contador < Q_CANDIDATOS; contador++) {
        if (rest_candidatos[contador] == 1) {
            printf("%s", candidatos[contador]);
        }
    }
    getchar();
    return(0);
}

 

  • Curtir 1
Postado
22 horas atrás, Emerson2156547384729849 disse:

Eu consegui fazer até a parte que o usuário informa os 8 nomes, mas eu não sei como remover o nome dos candidatos a cada iteração

 

Faça como no bubble sort: troque com o candidato no final da lista e diminua o tamanho da lista de candidatos

  • Obrigado 1
Postado

Para ir removendo o nome das opções você pode atribuir 0 a posição do nome no próprio vetor. E com um contador saberá quantos ficam para sair quando chegar a 3, p.ex,

 

while(1){
    int conta = 0;
    int indice;
    printf("Quem deve sair?\n");
    for(int i = 0; i < 8; i += 1){
        if(vetor[i][0]){
            printf("%d - %s\n",i + 1, vetor[i]);
            conta += 1;
        }
    }
    if(conta == 3){
        break;
    }
    scanf("%d",&indice);
    vetor[indice - 1][0] = 0;
}

 

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!