Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

André Correia

Algoritmo para ler nome e idade

Recommended Posts

/*8) Faça um algoritmo que leia o nome, idade e sexo de 20 pessoas e: 
a) Imprima o nome delas 
b) Calcule e imprima o nome do homem mais velho 
c) Calcule e imprima a média da idade das mulheres
*/

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

main(){

char nome[20],homemvelho[20];
int idade,sexo,i,j,cont=1,velho=-999999,soma_mulher=0,soma_id_mulher=0;
float media;

for (i=0;i<4;i++){
	printf ("\nDigite o nome do %d cliente: ",cont++);
	fflush(stdin);
	scanf("%s",&nome);
	printf ("\nDigite: [1] PARA MASCULINO / [2] PARA FEMININO.");
	fflush(stdin);
	scanf ("%d",&sexo);
	printf ("\nDigite a Idade: ");
	fflush(stdin);
	scanf ("%d",&idade);

	if (sexo==1 && idade>velho){
		strcpy(homemvelho, nome);
	}else{
		soma_mulher=soma_mulher+1;
		soma_id_mulher=soma_id_mulher+idade;
	}	
}
media=soma_id_mulher/soma_mulher;

printf ("\n\tRELATORIO DE CLIENTES.");
printf ("\n\nCLIENTES CADASTRADOS:\n");
for (i=0;i<4;i++){
	printf ("\n\t%s",nome);
}
//	for (i=0;i<4;i++){
	//printf ("%c",homemvelho);
//	}
printf ("\n\nO Nome do Homem mais velho: %s",homemvelho);
printf ("\n\nA media das mulheres e de: %.2f",media);
printf("\n\n");
system("pause");
}

Onde estou errando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tire o fflush(stdin) e a chamada ao system().

Conio.h é da época do DOS. Não se deve usar mais isso.

 

Não sei onde vc está errando sem nem saber o que está acontecendo de errado.

 

O que é isso???

 

 

idade e ---o de 20 pessoas

 

int idade,---o,

 

if (---o==1 && idade>velho)

Compartilhar este post


Link para o post
Compartilhar em outros sites

velho=-999999
Primeiro int unsigned que vejo com valor negativo e com valor acima de 65535... c++12?

 

media=soma_id_mulher/soma_mulher;
Não sei se isso depende do compilador.. mas se vc n passar os valores que estao em int como float vc tera um retorno inteiro (sem virgula) mesmo que a variavel "media" seja um float

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para começar tire o conio.h dos seus algoritimos.segundo você tem que saber matriz de string para facilitar o uso de linhas,ajeitei um pouco o seu algorítimo vou explicar por partes...

 

primeiro as variaveis:

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

int main()
{
	
	char nome[20][100],homemvelho[1][100];
	int idade,sexo,i,x,j,velho,cont=1;
	float media,soma_mulher,soma_id_mulher;
	

- char nome tem '[20]' que sera um numero máximo de linhas e'[100]'que sera o numero máximo de caracteres,ou seja o tamanho máximo de um nome por linha;

- homemvelho tem '[1]' que sera o limite de linhas(lembrando que char começa do '0',por isso serão 2 linhas) e tem '[100]' que é o limite do tamanho nome do homem mais velho;

-o resto vc ja sabe 'i' e 'j' são variaveis dos 'for','x' sera variavel da posição do nome(você vera mais a frente)

 

OBS: não tente censurar nomes nas variáveis,coloque apenas a primeira letra se não gostar,mas nunca símbolos pois o pc entendera como comando assim se você fizer isso --o ele ira decrementar a variável em -1,se quiser censurar com simbolos faça no printf;


	for (i=0;i<20;i++)
	{
		idade=0;
		sexo=0;
		printf ("\nDigite o nome do %d cliente: ",cont++);
		scanf("%s",nome[i]);
		printf ("\nDigite: [1] PARA MASCULINO / [2] PARA FEMININO.");
		scanf ("%d",&sexo);
		printf ("\nDigite a Idade: ");
		scanf ("%d",&idade);
		if ((sexo==1)&&(idade>velho))
		{
			velho=idade;
			x=i;
		}
		else (sexo==2);
		{
			soma_id_mulher+=idade;
			soma_mulher++;
		}
	}

No primeiro 'for' temos a variavel 'i' que fara ele ser repitido '20' vezes,com o formulario,'idade' e 'sexo' seram zerados sempre para o prixomo usuario,se não zerar ele sempre somara a idade anterior com a que o usuario ira inserir,o mesmo acontecera com o sexo;

Outra mudança e na hora de digitar o nome do cliente,esta no scanf e que devemos adicionar o 'i' no char nome para o pc saber qual linha utilizar,assim se 'i' for 0 ele ira usar a 1 linha,se for 2 ira usar a segunda e assim vai

Agora o 'if' e o 'else',o 'if' ira gravar a a idade do homem mais velho na variave toda vez que a idade ultrapassar a do cliente anterior,tambem ira salvar a linha do nome do home mais velho em x,mais na frente você vera para que;O 'else' ira incrementar a soma das mulheres e da idade das mulheres toda ves que o usuario digitar 2;

strcpy(homemvelho[0],nome[x]);
media=soma_id_mulher/soma_mulher;
	
printf ("\n\tRELATORIO DE CLIENTES.");
printf ("\n\nCLIENTES CADASTRADOS:\n");

Agora copiamos o nome do homem mais velho funciona assim: a variavel 'homemvelho[0]' sera o destino,sendo que ela gravara o nome na primeira linha do variavel;e 'nome[x]' e a variavel que ira mandar o nome,sendo que 'x' ira conter a linha onde tem o nome do homem mais velho;

 

Temos dois printf que inicia um cabeçalho de finalização do programa;

for (j=0;j<2;j++)
{
   printf ("\n%s",nome[j]);
}
printf ("\n\nO Nome do Homem mais velho: %s",homemvelho[0]);
printf ("\n\nA media das mulheres e de: %.1f",media);
printf("\n\n");
system("pause"); 

Este 'for' ira iniciar a contagem exibindo linha por linha dos nomes digitados,repare que em 'nome[j]' esse 'j' e do for que ira ser incrementado mudando a linha de exibição,bem o resto axo que da para entender...

Compartilhar este post


Link para o post
Compartilhar em outros sites

/*
8) Faça um algoritmo que leia o nome, idade e ---o de 20 pessoas e:
a) Imprima o nome delas
B) Calcule e imprima o nome do homem mais velho
c) Calcule e imprima a média da idade das mulheres
*/

/*
 * Cara que bagunça...
 * Vamos lá...
 *
 * Entrada de dados:
 *     Nome, idade e ---o de 20 pessoas.
 *
 * Processamento:
 *    Verificar qual o homem mais velho
 *    Calcular a média de idade das mulheres
 *
 * Saída de dados:
 *    Nome das 20 pessoas
 *    Nome do homem mais velho
 *    Média da idade das mulheres
 *
 * Esqueça fflush...
 */


#include <stdio.h>

#define MAX_PESSOAS 4
#define MAX_NOME 46

int main()
{
    char nome[MAX_PESSOAS][MAX_NOME];
    int idade[MAX_PESSOAS];
    char ---o[MAX_PESSOAS];
    float media = 0;
    int mais_velho;
    int idade_mais_velho = 0;
    int mulheres = 0;
    int i;

    //ENTRADA DE DADOS:
    for (i = 0; i < MAX_PESSOAS; i++)
    {
        printf("Insira as informações da %dª pessoa\n", i+1);
        printf("Nome: ");
        scanf("%[^\n]s", &nome[i]);
        printf("Idade: ");
        scanf("%d%*c", &idade[i]);
        printf("---o [M/F]: ");
        scanf("%c%*c", &---o[i]);

        /*
         * Posso muito bem fazer o processamento aqui...
         * Mas iniciantes devem aprender a separar a lógica de um programa...
         */
    }

    //PROCESSAMENTO:
    for (i = 0; i < MAX_PESSOAS; i++)
    {
        //Média...
        if (---o[i] == 'F' || ---o[i] == 'f')
        {
            media += (float) idade[i];
            mulheres++;
        }
        else
        {
            //Homem mais velho
            //É claro que não está verificando se existem mais pessoas com a mesma idade...
            if (idade[i] > idade_mais_velho)
            {
                idade_mais_velho = idade[i];
                mais_velho = i;
            }
        }
    }

    //média
    media /= mulheres;


    printf("----------------------------------------\n");
    //SAÍDA DE DADOS:
    for (i = 0; i < MAX_PESSOAS; i++)
    {
        printf("Nome: %s\tIdade: %d\t---o: %c\n", nome[i], idade[i], ---o[i]);
    }

    printf("------------------ Homem mais velho ------------------\n");
    printf("Nome: %s\tIdade: %d\t---o: %c\n", nome[mais_velho], idade[mais_velho], ---o[mais_velho]);
    printf("------------ Média da idade das mulheres ------------\n");
    printf("Média: %.2f\n", media);
    /*
     * É amigo, sem isso aqui o kernel não sabe se o seu programa terminou com sucesso ou não...
     */
    return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.