Program with Warning and does not perform what was requested

Asked

Viewed 38 times

0

Good night! When I was studying for the test I’m going to take, I faced that question. However, when I performed the program, I did not realize what I did. I would like you to see my code in order to better understand my mistake. Thank you very much.

Do a program that reads the instruction degree (whole type) and age of a group of people and display the age of the elder (consider that there is no tie) in each degree of instruction. End of reading: degree of instruction = 0. The following instruction grade codes are given: 1 - Illiterate, 2 - First degree, 3 - Second degree, 4 - Higher, 5 - Master’s degree, 6 - Doctorate, 7 - Others. Perform the following duties: a) initializes(): takes as parameter an array of integers and initialize it properly. b) displays():takes as parameter a integer vector already filled and displays the age of the oldest (consider that there is no tie) in each instruction grade.

#include <stdio.h>
#define TOT 7


void inicializa (int *vet){
    int i;
    for (i = 0; i < TOT; i++){
    }


}

void exibe (int *vet){
    int i;
    int velho;
    velho = 0;
    for (i = 0; i < TOT; i++){
        if (velho < vet[i])
            velho = vet[i];     
    }
    printf ("%d", velho);


}


int main (){
    int *vet[TOT], cont, idade, pessoas, instrucao;
    printf ("Digite a quantidade de pessoas\n");
    scanf ("%d", &pessoas);
    inicializa (vet);
    for (cont = 0; cont < pessoas;cont++){
        printf ("Digite o grau de instrucao\n");
        scanf ("%d", &instrucao);

        switch (instrucao)
        {
            case 1:
                printf ("Analfabeto");
                printf ("Digite sua idade");
                scanf ("%d", &idade);
                break;
            case 2:
                printf ("Primeiro Grau");
                printf ("Digite sua idade");
                scanf ("%d", &idade);
                break;
            case 3:
                printf ("Segundo grau");
                printf ("Digite sua idade");
                scanf ("%d", &idade);
                break;
            case 4:
                printf ("Superior");
                            printf ("Digite sua idade");
                scanf ("%d", &idade);
                break;
            case 5:
                printf ("Mestrado");
                            printf ("Digite sua idade");
                scanf ("%d", &idade);
                break;
            case 6:
                printf ("Doutorado");       
                    printf ("Digite sua idade");
                scanf ("%d", &idade);
                break;
            case 7:
                printf ("Outros");
                break;
                default:
                    printf ("opcao invalida");
                }
                exibe (vet);


        }
         return 0;

    }

2 answers

1

inicializa would have to initialize; it’s not what you’re doing there!

void inicializa(int* v)
{
    int i;

    for (i = 0; i < 7; ++i)
    {
        v[i] = -1;
    }
}

Afterward, exibe would have to show the vector content,

void exibe(int* v)
{
    int i;

    printf("Maiores idades por grau de instrucao\n");

    for (i = 0; i < 7; ++i)
    {
        if (v[i] == -1)
        {
            printf("%s: Nenhum informado\n", descricao(i + 1));
        }
        else
        {
            printf("%s: %d\n", descricao(i + 1), v[i]);
        }
    }
}

I created a support function called descricao,

char* descricao(int grauInstrucao)
{
    switch (grauInstrucao)
    {
        case 1:
            return "Analfabeto(a)";
        case 2:
            return "Primeiro grau";
        case 3:
            return "Segundo grau";
        case 4:
            return "Ensino superior";
        case 5:
            return "Mestrado(a)";
        case 6:
            return "Doutorado(a)";
        case 7:
            return "Outros";
    }
}

main could look like this:

int main(int argc, char* argv[])
{
    int idadePorGrauInstrucao[7];
    int qtdPessoas;
    int grauInstrucao = -1;
    int i;
    int idade;

    inicializa(idadePorGrauInstrucao);

    do
    {
        fflush(stdin);
        printf("Digite a quantidade de pessoas: ");
        scanf("%d", &qtdPessoas);

        if (qtdPessoas > 0)
        {
            for (i = 0; i < qtdPessoas; ++i)
            {
                fflush(stdin);
                printf("Digite o grau de instrucao da pessoa %d (0 para sair): ", i + 1);
                scanf("%d", &grauInstrucao);
                if (!grauInstrucao)
                {
                    break;
                }

                fflush(stdin);
                printf("Digite a idade: ");
                scanf("%d", &idade);
                if (idade >= 0)
                {
                    if (idadePorGrauInstrucao[grauInstrucao - 1] < idade)
                    {
                        idadePorGrauInstrucao[grauInstrucao - 1] = idade;
                    }
                }
            }

            exibe(idadePorGrauInstrucao);
        }
    } while (grauInstrucao);

    return 0;
}
  • Got it! Thanks! It’s kind of confusing vectors for me yet.

0

1º - You want to pass an array to a function by reference so use this:

int *vet, cont, idade, pessoas, instrucao;
printf ("Digite a quantidade de pessoas\n");
scanf ("%d", &pessoas);
inicializa (vet);

or else...

int vet[TOT], cont, idade, pessoas, instrucao;

printf ("Digite a quantidade de pessoas\n");
scanf ("%d", &pessoas);
inicializa (&vet[0]);

Instead:

int *vet[TOT];

2º - Note that you are not initiating your data in the function.

void inicializa (int *vet)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.