viciado 1 Denunciar post Postado Dezembro 8, 2008 A prefeitura de uma cidade fez uma pesquisa entre seus habitantes, coletando dados sobre salário, idade e número de filhos. Faça um programa que leia esses dados de 20 pessoas, calcule e mostre: -A média de salário da população; -A média do número de filhos; -O maior salário; -O percentual de mulheres com salário superior a R$ 1000,00 #include <stdio.h> #include <stdlib.h> struct { char nome[30]; float salario; int idade; int num; }dados[20]; float media_salario(float media){ int i; float soma = 0; for(i=0;i<20;i++){ soma = soma + (dados[i].salario); } media = soma/20; return (media); } float media_filhos(float media){ int i; float soma = 0; for(i=0;i<20;i++){ soma = soma + (dados[i].num); } media = soma/20; return (media); } int main(){ int i; for(i=0;i<20;i++){ printf("Digite o nome\n"); scanf("%s",&dados[i].nome); printf("Digite o salario \n"); scanf("%d",&dados[i].salario); printf("Digite a idade\n"); scanf("%d",&dados[i].idade); printf("Digite o numero de filhos\n"); scanf("%d",&dados[i].num); } printf("A media de salario e: \n %f \n",media_salario(media)); printf("A media do numero de filhos e: \n %f \n",media_filhos(media)); system("PAUSE"); return(0); } Qual o problema nos dois ultimos printf? Como posso resolver esses: -O maior salário; -O percentual de mulheres com salário superior a R$ 1000,00 Compartilhar este post Link para o post Compartilhar em outros sites
José Enésio 4 Denunciar post Postado Dezembro 8, 2008 Nas funções de média a variável media não é declarada. -O maior salário; Já tem tópicos o suficiente sobre encontrar maior e menor valor em vetor/matriz. Procure. -O percentual de mulheres com salário superior a R$ 1000,00 Vai precisar de um novo campo na struct contendo o sexo da pessoa. Depois é só comparar o número de cadastros com sexo = 'f' && salario > 1000 e comparar com o número total de cadastros. Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Dezembro 8, 2008 Estou tendo problemas de logica a unica resposta exate é a média do número de filhos maior salario = 0 SEMPRE media do salario = 0 SEMPRE percentual de mulheres salario maior 1000 resposta negativa sempre #include <stdio.h> #include <stdlib.h> #define M 20 struct { char nome[30]; float salario; int idade; int num; char sexo[2]; }dados[M]; float media_salario(){ int i; float soma = 0; for(i=0;i<M;i++){ soma = soma + (dados[i].salario); } float media; media = soma/M; return (media); } float media_filhos(){ int i; float soma = 0; for(i=0;i<M;i++){ soma = soma + (dados[i].num); } float media; media = soma/M; return (media); } float maior(){ float maior; maior = dados[0].salario; int i; for(i=0;i<M;i++){ if(dados[i].salario > maior){ maior = dados[i].salario; } } return(maior); } float percentual(){ int i; int count; for(i=0;i<M;i++){ if(dados[i].sexo == 'f' && dados[i].salario > 1000){ count++; } } float perc; perc = (count * 100) / M; return (perc); } int main(){ int i; for(i=0;i<M;i++){ printf("Digite o nome\n"); scanf("%s",&dados[i].nome); printf("Digite o salario \n"); scanf("%d",&dados[i].salario); printf("Digite a idade\n"); scanf("%d",&dados[i].idade); printf("Digite o numero de filhos\n"); scanf("%d",&dados[i].num); printf("Informe o sexo: \n (m) masculino \n (f) feminino \n"); scanf("%s",&dados[i].sexo); } printf("A media de salario e: \n %f \n",media_salario()); printf("A media do numero de filhos e: \n %f \n",media_filhos()); printf("O maior salario e: \n %f \n",maior()); printf("O percentual de mulheres com salario superior a R$1000 e: \n %f % \n",percentual()); system("PAUSE"); return(0); } Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Dezembro 8, 2008 Não deu erro, mas veja os warnings: $ gcc -Wall teste2.c -o teste2 && ./teste2 teste2.c: Na função ‘percentual’: teste2.c:50: aviso: comparison between pointer and integer teste2.c: Na função ‘main’: teste2.c:62: aviso: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[30]’ teste2.c:64: aviso: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘float *’ teste2.c:70: aviso: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[2]’ teste2.c:75: aviso: unknown conversion type character 0xa in format Para pegar uma string, não passe o endereço com &, pois uma strng é um vetor, que é um endereço para o seu primeiro índice. Você usou %d para pegar o saláiro, que é float, nã int Você usou %s para pegar um caractere (sexo), use %c #include <stdio.h> #include <stdlib.h> #define M 3 struct { char nome[30]; float salario; int idade; int num; char sexo[2]; }dados[M]; float media_salario(){ int i; float soma = 0; for(i=0;i<M;i++){ soma = soma + (dados[i].salario); } float media; media = soma/M; return (media); } float media_filhos(){ int i; float soma = 0; for(i=0;i<M;i++){ soma = soma + (dados[i].num); } float media; media = soma/M; return (media); } float maior(){ float maior; maior = dados[0].salario; int i; for(i=0;i<M;i++){ if(dados[i].salario > maior){ maior = dados[i].salario; } } return(maior); } float percentual(){ int i; int count; for(i=0;i<M;i++){ if(dados[i].sexo == 'f' && dados[i].salario > 1000){ count++; } } float perc; perc = (count * 100) / M; return (perc); } int main(){ int i; for(i=0;i<M;i++){ printf("Digite o nome\n"); scanf("%s",dados[i].nome); __fpurge(stdin); printf("Digite o salario \n"); scanf("%f",&dados[i].salario); __fpurge(stdin); printf("Digite a idade\n"); scanf("%d",&dados[i].idade); __fpurge(stdin); printf("Digite o numero de filhos\n"); scanf("%d",&dados[i].num); __fpurge(stdin); printf("Informe o sexo: \n (m) masculino \n (f) feminino \n"); scanf("%c", &dados[i].sexo); __fpurge(stdin); } printf("A media de salario e: \n %f \n",media_salario()); printf("A media do numero de filhos e: \n %f \n",media_filhos()); printf("O maior salario e: \n %f \n",maior()); printf("O percentual de mulheres com salario superior a R$1000 e: \n %f % \n",percentual()); system("PAUSE"); return(0); } Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Dezembro 9, 2008 Obrigado. Agora esta quase tudo resolvido o único problema é o percentual do salario continua negativo #include <stdio.h> #include <stdlib.h> #define M 20 struct { char nome[30]; float salario; int idade; int num; char sexo[2]; }dados[M]; float media_salario(){ int i; float soma = 0; for(i=0;i<M;i++){ soma = soma + (dados[i].salario); } float media; media = soma/M; return (media); } float media_filhos(){ int i; float soma = 0; for(i=0;i<M;i++){ soma = soma + (dados[i].num); } float media; media = soma/M; return (media); } float maior(){ float maior; maior = dados[0].salario; int i; for(i=0;i<M;i++){ if(dados[i].salario > maior){ maior = dados[i].salario; } } return(maior); } float percentual(){ int i; int count; for(i=0;i<M;i++){ if(dados[i].sexo == 'f' && dados[i].salario > 1000){ count++; } } float perc; perc = (count * 100) / M; return (perc); } int main(){ int i; for(i=0;i<M;i++){ printf("Digite o nome\n"); scanf("%s",&dados[i].nome); printf("Digite o salario \n"); scanf("%f",&dados[i].salario); printf("Digite a idade\n"); scanf("%d",&dados[i].idade); printf("Digite o numero de filhos\n"); scanf("%d",&dados[i].num); printf("Informe o sexo: \n (m) masculino \n (f) feminino \n"); scanf("%c",&dados[i].sexo); } printf("A media de salario e: \n %f \n",media_salario()); printf("A media do numero de filhos e: \n %f \n",media_filhos()); printf("O maior salario e: \n %f \n",maior()); printf("O percentual de mulheres com salario superior a R$1000 e: \n %f % \n",percentual()); system("PAUSE"); return(0); } Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Dezembro 9, 2008 Inicie count com o valor zero você criou "sexo" como um vetor de char. Bast um char: char sexo Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Dezembro 9, 2008 Iniciando count com zero o percentual da sempre 0 Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Dezembro 9, 2008 float percentual(){ int i; int count = 0; for(i=0;i<M;i++){ if(dados[i].sexo == 'f' && dados[i].salario > 1000){ count++; } } float perc; printf("count=%d\n", count); perc = (count * 100) / M; return (perc); } Aqui não dá zero Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Dezembro 9, 2008 Estranho aqui da zero, utilizo o dev #include <stdio.h> #include <stdlib.h> #define M 3 struct { char nome[30]; float salario; int idade; int num; char sexo[2]; }dados[M]; float media_salario(){ int i; float soma = 0; for(i=0;i<M;i++){ soma = soma + (dados[i].salario); } float media; media = soma/M; return (media); } float media_filhos(){ int i; float soma = 0; for(i=0;i<M;i++){ soma = soma + (dados[i].num); } float media; media = soma/M; return (media); } float maior(){ float maior; maior = dados[0].salario; int i; for(i=0;i<M;i++){ if(dados[i].salario > maior){ maior = dados[i].salario; } } return(maior); } float percentual(){ int i; int count = 0; for(i=0;i<M;i++){ if(dados[i].sexo == 'f' && dados[i].salario > 1000){ count++; } } float perc; perc = (count * 100) / M; return (perc); } int main(){ int i; for(i=0;i<M;i++){ printf("Digite o nome\n"); scanf("%s",&dados[i].nome); printf("Digite o salario \n"); scanf("%f",&dados[i].salario); printf("Digite a idade\n"); scanf("%d",&dados[i].idade); printf("Digite o numero de filhos\n"); scanf("%d",&dados[i].num); printf("Informe o sexo: \n (m) masculino \n (f) feminino \n"); scanf("%c",&dados[i].sexo); } printf("A media de salario e: \n %f \n",media_salario()); printf("A media do numero de filhos e: \n %f \n",media_filhos()); printf("O maior salario e: \n %f \n",maior()); printf("O percentual de mulheres com salario superior a R$1000 e: \n %f % \n",percentual()); system("PAUSE"); return(0); } Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Dezembro 9, 2008 troque char sexo[2] por char sexo, como eu disse no post anterior. Teste e veja se reslve Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Dezembro 9, 2008 Mesmo assim continua dando 0 Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Dezembro 9, 2008 #include <stdio.h> #include <stdlib.h> #define M 3 struct { char nome[30]; float salario; int idade; int num; char sexo; }dados[M]; float media_salario(){ int i; float soma = 0; for(i=0;i<M;i++){ soma = soma + (dados[i].salario); } float media; media = soma/M; return (media); } float media_filhos(){ int i; float soma = 0; for(i=0;i<M;i++){ soma = soma + (dados[i].num); } float media; media = soma/M; return (media); } float maior(){ float maior; maior = dados[0].salario; int i; for(i=0;i<M;i++){ if(dados[i].salario > maior){ maior = dados[i].salario; } } return(maior); } float percentual(){ int i; int count = 0; for(i=0;i<M;i++){ if(dados[i].sexo == 'f' && dados[i].salario > 1000){ count++; } } float perc; perc = (count * 100) / (float)M; return (perc); } int main(){ int i; for(i=0;i<M;i++){ printf("Digite o nome\n"); scanf("%s", dados[i].nome); __fpurge(stdin); printf("Digite o salario \n"); scanf("%f",&dados[i].salario); __fpurge(stdin); printf("Digite a idade\n"); scanf("%d",&dados[i].idade); __fpurge(stdin); printf("Digite o numero de filhos\n"); scanf("%d",&dados[i].num); __fpurge(stdin); printf("Informe o sexo: \n (m) masculino \n (f) feminino \n"); scanf("%c",&dados[i].sexo); __fpurge(stdin); } printf("A media de salario e: \n %f \n",media_salario()); printf("A media do numero de filhos e: \n %f \n",media_filhos()); printf("O maior salario e: \n %f \n",maior()); printf("O percentual de mulheres com salario superior a R$1000 e: \n %f %% \n",percentual()); return(0); } Retire os __fpurge() e insira o system(). Aqui funcionou corretamente: Digite o nome wfef Digite o salario 1250 Digite a idade 5 Digite o numero de filhos 54 Informe o sexo: (m) masculino (f) feminino f Digite o nome bjhb Digite o salario 10 Digite a idade 5 Digite o numero de filhos 54 Informe o sexo: (m) masculino (f) feminino f Digite o nome bhi Digite o salario 1250 Digite a idade 54 Digite o numero de filhos 521 Informe o sexo: (m) masculino (f) feminino f A media de salario e: 836.666687 A media do numero de filhos e: 209.666672 O maior salario e: 1250.000000 O percentual de mulheres com salario superior a R$1000 e: 66.666664 % Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Dezembro 9, 2008 Depois que informo nome, salario... Aparece a seguinte mensagem ' Á ' AW@' não é reconhecido como um comando interno ou externo, um programa operavel ou um arquivo em lote. quando chaga na parte de informe o sexo o programa pula para o nome denovo #include <stdio.h> #include <stdlib.h> #define M 3 struct { char nome[30]; float salario; int idade; int num; char sexo; }dados[M]; float media_salario(){ int i; float soma = 0; for(i=0;i<M;i++){ soma = soma + (dados[i].salario); } float media; media = soma/M; return (media); } float media_filhos(){ int i; float soma = 0; for(i=0;i<M;i++){ soma = soma + (dados[i].num); } float media; media = soma/M; return (media); } float maior(){ float maior; maior = dados[0].salario; int i; for(i=0;i<M;i++){ if(dados[i].salario > maior){ maior = dados[i].salario; } } return(maior); } float percentual(){ int i; int count = 0; for(i=0;i<M;i++){ if(dados[i].sexo == 'f' && dados[i].salario > 1000){ count++; } } float perc; perc = (count * 100) / M; return (perc); } int main(){ int i; for(i=0;i<M;i++){ printf("Digite o nome\n"); scanf("%s",&dados[i].nome); system(stdin); printf("Digite o salario \n"); scanf("%f",&dados[i].salario); system(stdin); printf("Digite a idade\n"); scanf("%d",&dados[i].idade); system(stdin); printf("Digite o numero de filhos\n"); scanf("%d",&dados[i].num); system(stdin); printf("Informe o sexo: \n (m) masculino \n (f) feminino \n"); scanf("%c",&dados[i].sexo); system(stdin); } printf("A media de salario e: \n %f \n",media_salario()); printf("A media do numero de filhos e: \n %f \n",media_filhos()); printf("O maior salario e: \n %f \n",maior()); printf("O percentual de mulheres com salario superior a R$1000 e: \n %f % \n",percentual()); system("PAUSE"); return(0); } Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Dezembro 9, 2008 não existe system(stdin) Eu coloquei __fpurge() pois é o que uso para limpar o buffer do teclado em Linux. Em windows acho que fflush(stdin) funciona. O problema de ir direto do sexo para o nome é o fato de haver um '\n' no buffer de teclado. limpe-o. Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Dezembro 9, 2008 #include <stdio.h> #include <stdlib.h> #define M 3 struct { char nome[30]; float salario; int idade; int num; char sexo; }dados[M]; float media_salario(){ int i; float soma = 0; for(i=0;i<M;i++){ soma = soma + (dados[i].salario); } float media; media = soma/M; return (media); } float media_filhos(){ int i; float soma = 0; for(i=0;i<M;i++){ soma = soma + (dados[i].num); } float media; media = soma/M; return (media); } float maior(){ float maior; maior = dados[0].salario; int i; for(i=0;i<M;i++){ if(dados[i].salario > maior){ maior = dados[i].salario; } } return(maior); } float percentual(){ int i; int count = 0; for(i=0;i<M;i++){ if(dados[i].sexo == 'f' && dados[i].salario > 1000){ count++; } } float perc; perc = (count * 100) / M; return (perc); } int main(){ int i; for(i=0;i<M;i++){ printf("Digite o nome\n"); scanf("%s",&dados[i].nome); fflush(stdin); printf("Digite o salario \n"); scanf("%f",&dados[i].salario); fflush(stdin); printf("Digite a idade\n"); scanf("%d",&dados[i].idade); fflush(stdin); printf("Digite o numero de filhos\n"); scanf("%d",&dados[i].num); fflush(stdin); printf("Informe o sexo: \n (m) masculino \n (f) feminino "); scanf("%c",&dados[i].sexo); fflush(stdin); } printf("A media de salario e: \n %f \n",media_salario()); printf("A media do numero de filhos e: \n %f \n",media_filhos()); printf("O maior salario e: \n %f \n",maior()); printf("O percentual de mulheres com salario superior a R$1000 e: \n %f % \n",percentual()); system("PAUSE"); return(0); } Porcentagem continua dando 0 Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Dezembro 9, 2008 Como eu posso criar biblioteca para essas funções e depois compilar li isso na internet nem sabia que existia alguem poderia me explicar o que é como funciona ? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Dezembro 9, 2008 isto está errado: scanf("%s", &dados[i].nome); o certo é scanf("%s", dados[i].nome);sem &, pois nome é um vetor Faça um casting no percentual: perc = (count * 100) / (float)M;caso contrário o resultado será sempre inteiro Sobre criação de bibliotecas, basta pesquisar por modularização http://www.google.com/search?ie=UTF-8&...ariza%C3%A7ao+c Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Dezembro 9, 2008 Acho que esse codigo já ta de sacanagem. Continua dando 0 #include <stdio.h> #include <stdlib.h> #define M 3 struct { char nome[30]; float salario; int idade; int num; char sexo; }dados[M]; float media_salario(){ int i; float soma = 0; for(i=0;i<M;i++){ soma = soma + (dados[i].salario); } float media; media = soma/M; return (media); } float media_filhos(){ int i; float soma = 0; for(i=0;i<M;i++){ soma = soma + (dados[i].num); } float media; media = soma/M; return (media); } float maior(){ float maior; maior = dados[0].salario; int i; for(i=0;i<M;i++){ if(dados[i].salario > maior){ maior = dados[i].salario; } } return(maior); } float percentual(){ int i; int count = 0; for(i=0;i<M;i++){ if(dados[i].sexo == 'f' && dados[i].salario > 1000){ count++; } } float perc; perc = (count * 100) / (float) M; return (perc); } int main(){ int i; for(i=0;i<M;i++){ printf("Digite o nome\n"); scanf("%s",dados[i].nome); fflush(stdin); printf("Digite o salario \n"); scanf("%f",&dados[i].salario); fflush(stdin); printf("Digite a idade\n"); scanf("%d",&dados[i].idade); fflush(stdin); printf("Digite o numero de filhos\n"); scanf("%d",&dados[i].num); fflush(stdin); printf("Informe o sexo: \n (m) masculino \n (f) feminino "); scanf("%c",&dados[i].sexo); fflush(stdin); } printf("A media de salario e: \n %f \n",media_salario()); printf("A media do numero de filhos e: \n %f \n",media_filhos()); printf("O maior salario e: \n %f \n",maior()); printf("O percentual de mulheres com salario superior a R$1000 e: \n %f % \n",percentual()); system("PAUSE"); return(0); } Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Dezembro 9, 2008 poste o resultado da execução do código Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Dezembro 9, 2008 A execução está correta menos a do percentual Compartilhar este post Link para o post Compartilhar em outros sites