Ir ao conteúdo
  • Cadastre-se

C Como fazer calculos com vetores?


Posts recomendados

Eu não estou entendendo como colocar os vetores na questão abaixo

 

1)       Uma empresa irá lançar um novo produto no mercado, mas para isso deseja fazer uma pesquisa para saber se as pessoas irão gostar ou não de um novo produto que será lançado. Para isso, pretende cadastrar o sexo do entrevistado e sua resposta (S - Sim ou N - Não). Sabe-se que foram entrevistadas 1000 pessoas. Usando vetores, faça um PROGRAMA EM LINGUAGEM C que calcule e mostre:

a)        o número de pessoas que responderam sim;

b)       o número de pessoas que responderam não;

c)        o número de mulheres que responderam sim;

d)        se as pessoas gostaram ou não do produto. Para isso o número de pessoas que responderam sim tem que ser maior que as que responderam não na proporção 65% para sim e 35% para não.

 

OBS: o código abaixo, está rodando, mas não está mostrando o resultado de Sim e Não.<CODE>

main()
{

char sexo[10], gostoS[10];

float porcentagemsim,porcentagemnao;

int i, nMulher=0, nSim = 0, nNao=0;
    
for(i = 1 ; i <=10  ; i++)
    {    
        
            
            
            printf("gosto do produto 'S' sim ou 'N' nao \n");
            fflush(stdin);
            scanf("%c", &gostoS[i]);
            
            
            if (sexo[i] == 'f' || sexo[i] == 'F')
            {
                nMulher=nMulher+1;
            }
            
            if (gostoS[i] == 's' || gostoS[i] == 'S')
            {
                nSim=nSim+1;
            }
            else
            {
                nNao=nNao+1;
            }
                                
            
            
    }
     
    
        porcentagemsim=  (nSim*100/10);
        porcentagemnao=  (nNao*100/10);
            
            if( porcentagemsim >= 65)
            {
                printf(" a quantidade pessoa que gostou foi de  %d, a porcentagem de %.2f ", nSim, porcentagemsim);
            }
            else
            {
                printf(" a quantidade pessoa que nao gostou foi de  %d, a porcentagem de %.2f ", nNao, porcentagemnao);
            }


            
    

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

@Leonardo Baioco      no seu código você se esqueceu de perguntar o sexo da pessoa , e você não pegou QuaL o Sexo da pessoa ,  e logo em seguida está fazendo huma comparaçÃo para verificar se o sexo da pessoa é f ou m ,  e também não está comparando de modo muito eficaz , não ,  você pode colocar já dentro do mesmo  if   ,  mais ou menos poderia ser   assim  :

#include <stdio.h>
#include <ctype.h>
int main()
{
    char sexo[1000], gostoS[1000];
    float porcentagemsim;
    int i, nMulher=0, nSim = 0, nNao=0, total_pessoas = 2;
    printf("Qual o Total de pessoas que serao entrevistadOs ? ");
    scanf("%d",& total_pessoas);
    for(i=0 ; i<total_pessoas  ; i++)  //  vetores começam em zero
    {
        printf("o sexo ");
        fflush(stdin);
        scanf("%c",& sexo[i]);
        printf("gosto do produto 'S' sim ou 'N' nao ");
        fflush(stdin);
        scanf("%c", & gostoS[i]);
        printf("gostoS[%d] %c\n",i,gostoS[i]);
        if( toupper(gostoS[i]) == 'S' )  // qq pessoa q disse sim
        {
            printf("sim\n");
            nSim = nSim + 1;
            if( toupper(sexo[i]) == 'F' ) // se mulher disse sim
            {
                nMulher = nMulher + 1;
            }
        }
        else
        {
            printf("Nao\n");
            nNao = nNao + 1; // qq pessoa q disse nao
        }
    }
    porcentagemsim = nSim * 100 / total_pessoas;
    if( porcentagemsim >= 65)
    {
        printf("As pessoa Gostaram Do Produto\n");
    }
    else
    {
        printf("As pessoa Nao Gostaram Do Produto\n");
    }
    printf("\n\n\n");
    return 0;
}

 

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

 

a)  o número de pessoas que responderam sim;
b)  o número de pessoas que responderam não;
c)  o número de mulheres que responderam sim;
d)  se as pessoas gostaram ou não do produto.
    Para isso o número de pessoas que responderam sim 
    tem que ser maior que as que responderam não na 
    proporção 65% para sim e 35% para não.

 

13 horas atrás, Leonardo Baioco disse:

Eu não estou entendendo como colocar os vetores

 

    char sexo[10], gostoS[10];
    float porcentagemsim,porcentagemnao;
 
    int i, nMulher=0, nSim = 0, nNao=0;
    
    for(i = 1 ; i <=10  ; i++)
      
      // ...

 

Não há razão pra colocar vetores numa questão assim. De todo modo vetores são apenas conjuntos  base + deslocamento em C, onde a base é o nome e o deslocamento é o índice. Não há nada diferente nos cálculos em relação às variáveis comuns.

 

Se quer somar 32 ao terceiro elemento do vetor gostoS acima apenas escreve gostoS[2] += 32; por exemplo

 

De volta ao problema,

 

Não há sentido em usar vetores para sexo e gostoS como escreveram. A questão usa apenas resultados sintéticos, não analíticos.  

 

@Leonardo Baioco declarou
 

    char sexo[10], gostoS[10];

 

@devair1010 trocou por 
 

    char sexo[1000], gostoS[1000];


Não há qualquer razão para declarar um vetor das entradas. E se fosse pesquisar dentre a população da India? Iam usar dois vetores de 1 bilhão de char para simplesmente não fazer NADA com os dados?
 

O que importa apenas é processar as duas respostas, com um total de 4 opções, e aí poderia ser um vetor de 4 int ou 3 apenas para contentar o enunciado. Algo como
 

    int resposta[3];


Onde
 

    0   resposta N
    1   resposta S
    2   mulheres que responderam sim 

 

E esse modesto vetor serviria: ao ler uma resposta acumula na coluna certa do vetor de 3 colunas. Nada mais. Basta um char para ler as respostas todas, mesmo que tenha 2 milhões delas. Não faz diferença.

 

Isso apenas para contentar o enunciado, porque 3 variáveis simples serviriam. Não há razão para um vetor.

 

  • 0 + 1 dá o total de respostas, que é preciso para calcular a porcentagem
  • 2 diz, claro, quantas mulheres responderam SIM

A porcentagem pode ser calculada apenas na saída. Não precisa de uma variável para isso

 

14 horas atrás, Leonardo Baioco disse:

        porcentagemsim=  (nSim*100/10);

        porcentagemnao=  (nNao*100/10);

 

Não precisa de fato dessas DUAS variáveis, mas se quer calcular entenda que se escrever assim toda a conta vai ser feita com int. Só depois vai ser convertido para float...  100/10 dá sempre 10 :) inteiro. Se o total é 10 a conta quer fazer é 100 * (nSim / 10), só que precisa converter para float antes, algo como

    100 * (nSim/10.)

e o ponto faz o serviço, ou algo mais claro como

    100 * ( (float)nSim) / 10 )

e assim o código faz as contas em float.

 

Um exemplo

 

Esse programa deve mostrar uma saída como
 

clube> gcc -Wall -o tst psq.c
clube> ./tst
        [Para encerrar apenas digite ENTER]
        Gostou do produto? s
        Sexo (MmFf): m

        [#2] Gostou do produto? s
        Sexo (MmFf): m

        [#3] Gostou do produto? s 
        Sexo (MmFf): M

        [#4] Gostou do produto? s
        Sexo (MmFf): f

        [#5] Gostou do produto? n

        [#6] Gostou do produto? 


        Do total de 5 entrevistas, gostaram do produto? Sim: 4 (Mulheres: 1). Nao: 1
        80.00% gostaram do produto
clube> 

 

Para algo assim

 

#include <stdio.h>
int main(void)
{
    char    c; // para desprezar o resto da linha das respostas
    char    resposta;
    int     tabela[3] = {0}; // 0 nao gostou 1 gostou 2 mulher e gostou
    printf("\t[Para encerrar apenas digite ENTER]\n\tGostou do produto? ");
    resposta = fgetc(stdin);
    if ( resposta != '\n') while ((c = getchar()) != '\n' && c != EOF); // descarta o resto
    while ( resposta != '\n') // ENTER encerra
    {
        switch ( resposta)
        {
            case 'S':
            case 's':   // gostou do produto
                tabela[1] += 1; // esse gostou
                printf("\tSexo (MmFf): ");
                resposta = fgetc(stdin);
                if ( resposta != '\n')
                    while ((c = getchar()) != '\n' && c != EOF); // descarta o resto
                if ( (resposta == 'F') || (resposta == 'f')) tabela[2] += 1;
                break;
            case 'N':
            case 'n':
                tabela[0] += 1; // nao, nao gostou
                break;
            default:
                printf("\tResposta invalida. Nao considerada\n");
                break;
        };  // switch()
        printf("\n\t[#%d] Gostou do produto? ", 1+tabela[0]+tabela[1] );
        resposta = fgetc(stdin);
        if ( resposta != '\n') while ((c = getchar()) != '\n' && c != EOF); // descarta o resto
    };  // while()

    // respostas 

    if ( (tabela[0] + tabela[1]) != 0)
    printf("\n\n\
\tDo total de %d entrevistas, gostaram do produto? Sim: %d (Mulheres: %d). Nao: %d\n\
\t%.2f%% gostaram do produto\n",
    tabela[0] + tabela[1],
    tabela[1], tabela[2], tabela[0],
    100 * (tabela[1]/(tabela[0]+(float)tabela[1]))
    );

    return 0;
}

 

Note que um arquivo assim, chamado in.txt no disco
 

S gostou
M masculino
S
M
S
F feminino
N
N
N vai encerrar com 6 respostas

 

no prompt do Windows 10 e o arquivo chamado tst.exe como acima, e rodando o simples:
 

Clube> tst < in.txt
        [Para encerrar apenas digite ENTER]
        Gostou do produto?      Sexo (MmFf): 
        [#2] Gostou do produto?         Sexo (MmFf):
        [#3] Gostou do produto?         Sexo (MmFf):
        [#4] Gostou do produto?
        [#5] Gostou do produto?
        [#6] Gostou do produto?
        [#7] Gostou do produto? 

        Do total de 6 entrevistas, gostaram do produto? Sim: 3 (Mulheres: 1). Nao: 3
        50.00% gostaram do produto

 

E pode testar com arquivos de resposta prontos sem ter que ficar parado escrevendo essas respostas uma a uma :D imagine um arquivo seis-nao.txt
 

N
N
N
N
nao
nao mesmo

 

E rodando:

 

Clube>tst < seis-nao.txt
        [Para encerrar apenas digite ENTER]
        Gostou do produto?
        [#2] Gostou do produto?
        [#3] Gostou do produto?
        [#4] Gostou do produto?
        [#5] Gostou do produto? 
        [#6] Gostou do produto?
        [#7] Gostou do produto?

        Do total de 6 entrevistas, gostaram do produto? Sim: 0 (Mulheres: 0). Nao: 6
        0.00% gostaram do produto

 

Claro que pode usar qualquer arquivo. Apenas deve ter uma linha em branco ao final.

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

Olá@Leonardo Baioco

 

22 horas atrás, Leonardo Baioco disse:

Eu não estou entendendo como colocar os vetores na questão abaixo

Antes de escrever o programa certifique-se do entendimento do enunciado, Não escreva nada em C enquanto inseguro das partes que compões a estrutura do programa e seus quesitos.

 

"Como fazer calculos com vetores?" Sua dúvida é com relação aos vetores... coloque nas partes (entrada, saída e processo) :) 

 

Vejamos, o dito:

22 horas atrás, Leonardo Baioco disse:

1)       Uma empresa irá lançar um novo produto no mercado, mas para isso deseja fazer uma pesquisa para saber se as pessoas irão gostar ou não de um novo produto que será lançado. Para isso, pretende cadastrar o sexo do entrevistado e sua resposta (S - Sim ou N - Não). Sabe-se que foram entrevistadas 1000 pessoas. Usando vetores, faça um PROGRAMA EM LINGUAGEM C que calcule e mostre

 

Parafraseando:

Um cadastro tem 1000 registros, um dos (de dois) campos nesse registro tem é a resposta 'S' ou 'N', respectivamente  sim ou não. Para o sexo não é especificado nenhum código, mas o usual é: homem ou mulher: 'H' ou 'M'. 

 

O exercício prenuncia o uso de vetores, logo suponha ser para cada informação (sexos e respostas) um 'buffer' de 1k, e outros mais se puder, já que é para usar vetores, por exemplo, um vetor para guarda o cálculo (relatorios).

 

Relatório

22 horas atrás, Leonardo Baioco disse:

a)       o número de pessoas que responderam sim;

b)       o número de pessoas que responderam não;

c)       o número de mulheres que responderam sim;

d)       se as pessoas gostaram ou não do produto. Para isso o número de pessoas que responderam sim tem que ser maior que as que responderam não na proporção 65% para sim e 35% para não.

 

 

Poderíamos calcular essas informações durante entrada porque é uma iteração e as alíneas são simples contagens condicionadas, a exceção d), que é uma resposta condicionada ao cálculo durante a entrada sendo assim usualmente obtida fora dela.

 

Entretanto, se escolhe usar vetores nas 3 partes:

Ler (todo 1k de cadastro), 

Calcular (e tabular no vetor relatório)

Mostrar (o relatório).

 

Fica assim, o bloco de entrada somente isso mesmo: A leitura completa do cadastro.

 

@Leonardo Baioco  

Entendo de sua programação unicamente a leitura cadastro (com tentativa com vetores), já calcule e mostre poderia ficar com vetor relatórios.

 

Veja minha tentativa para ler o cadastro:

/* Linguagem C de Programação @file main.c @date 06 de 2021*/

#include <stdio.h>
#include <stdlib.h>


int
main ( int  argc , char *argv [] ) {
/*CADASTRAR*/
        /*define-se cadastros sobre dos campos; sexos, respostas -- máximo de 1k*/
        char  sexos [1000] = { 0 } , respostas [1000] = { 0 };
                 /* M- mulher          S- sim
                    H- homem           N- não
                 */
        /*mais duas strings para entrada de sexo e resposta*/
        char  sex [2] = { 0 } , respost [2] = { 0 };

        int contador = 0;
        /*para ler enquanto há cadastros e o máximo.*/
        while (contador < 1000  &&
                      2 == scanf (" %1[MH] %1[SN]" , &sex [0] , &respost [0] )) {

                sexos [contador]     = sex [0];
                respostas [contador] = respost [0];
                contador             = 1 + contador;
        }
        /*!bloco para ajudar somente no GDB!*/
        {
          if (contador) {

                  printf ( " Contador - 1 ....... : %d\n" , (contador - 1) );
                  printf ( " Ultimo sexo ........ : %c\n" , sexos [contador - 1] );
                  printf ( " Ultima resposta .... : %c\n" , respostas [contador - 1] );
          }
          printf ( "FIM ENTRADA\n" );
        }
/*CALCULAR*/
        int  relatorios [4] = {

                 0 , /*o número de pessoas que responderam sim;*/
                 0 , /*o número de pessoas que responderam não;*/
                 0 , /*o número de mulheres que responderam sim;*/
                -1 , /*se as pessoas (1) gostaram ou (0) não do produto*/
        };

/*MOSTRAR*/
	//system ( "PAUSE" ); /*'paradinha' no prompt do Windows*/
	return (EXIT_SUCCESS);
}

 

Notou que tenho 4 vetores só para entrar com as informações, incluído relatório que talvez tente (você) implementar.

Enfim, contemple o máximo de quesitos do enunciado.

[:)

  • Curtir 2
  • Amei 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...