Jump to content

Dúvida a tentar descobrir a posição do máx e do mín de um array


EL muchacho
Go to solution Solved by maluco-123,

Recommended Posts

Dúvida a tentar descobrir a posição do máx e do mín de um array

 

O programa em si funciona, mas não corretamente.

Ele dá-me a posição dos dois maiores e a posição dos dois menores;

Gostaria de saber qual é o erro pois máx neste caso só há 1!

#include<stdio.h>
int const DIM=5;
void lerArray (int[DIM]);
int posicaoMaximo (int[DIM]);
int posicaoMinimo (int[DIM]);
int main()
{
    int vet[5]={12,23,2,87,6};
    lerArray(vet);
    posicaoMaximo(vet);
    posicaoMinimo(vet);
}
void lerArray (int vet[5]){
    int i;
    for(i=0;i<5;i++){
        printf("%i    ",vet[i]);
    }
}
int posicaoMaximo (int vet[5]){
    int i, pm=vet[0];
    for(i=0;i<5;i++){
        if(pm<vet[i]){
            printf("Posicao do maximo:%d\n",i);
        }
    }
    return i;
}
int posicaoMinimo (int vet[5]){
    int i, pm=vet[0];
    for(i=0;i<5;i++){
        if(pm>vet[i]){
            printf("Posicao do minimo:%d\n",i);
        }
    }
    return i;
}

 

Edited by thoga31
GeSHi
Link to comment
Share on other sites

  • Solution

Viva,

Aqui há dois problemas:

- não estás a guardar o máximo/mínimo atual (variavel pm), estás apenas a definir como o primeiro valor do array e a comparar depois. Sempre que encontras um novo máximo/minimo, deves guardá-lo na variavel "pm";

- semelhante, não estás a guardar a posição do máximo/minimo, simplesmente retornas o "i" que, no final do for-loop, será sempre 5.

Bónus: visto que guardas a posição 0 na variavel pm, basta iterares a partir da posição 1.

Outro Bonus: printa apenas depois de ler a posicao, nao durante o for-loop

#include<stdio.h>
int const DIM=5;
void lerArray (int[DIM]);
int posicaoMaximo (int[DIM]);
int posicaoMinimo (int[DIM]);
int main()
{
    int vet[5]={12,23,2,87,6};
    lerArray(vet);
    int pos_max = posicaoMaximo(vet);
    int pos_min = posicaoMinimo(vet);
    printf("maximo: %d (posicao %d)\n", vet[pos_max], pos_max);
    printf("minimo: %d (posicao %d)\n", vet[pos_min], pos_min);
}
void lerArray (int vet[5]){
    int i;
    for(i=0;i<5;i++){
        printf("%i    ",vet[i]);
    }
}
int posicaoMaximo (int vet[5]){
    int posicao = 0;	// a posicao do maximo
    // o "pm", neste caso, guarda o maior valor, nao a posicao
    int i, pm=vet[0];
    // iterar a partir do 1
    for(i=1;i<5;i++){
        if(pm<vet[i]){
            // novo maximo, guardar valores
            posicao = i;
            pm = vet[i];
            // nao imprime aqui
            //printf("Posicao do maximo:%d\n",i);
        }
    }
    return posicao;
}
int posicaoMinimo (int vet[5]){
    // semelhante ao anterior
    int posicao = 0;
    int i, pm=vet[0];
    for(i=1;i<5;i++){
        if(pm>vet[i]){
            posicao = i;
            pm = vet[i];
            //printf("Posicao do minimo:%d\n",i);
        }
    }
    return posicao;
} 

 

Link to comment
Share on other sites

Em 28/12/2022 às 12:28, maluco-123 disse:

Viva,

Aqui há dois problemas:

- não estás a guardar o máximo/mínimo atual (variavel pm), estás apenas a definir como o primeiro valor do array e a comparar depois. Sempre que encontras um novo máximo/minimo, deves guardá-lo na variavel "pm";

- semelhante, não estás a guardar a posição do máximo/minimo, simplesmente retornas o "i" que, no final do for-loop, será sempre 5.

Bónus: visto que guardas a posição 0 na variavel pm, basta iterares a partir da posição 1.

Outro Bonus: printa apenas depois de ler a posicao, nao durante o for-loop

#include<stdio.h>
int const DIM=5;
void lerArray (int[DIM]);
int posicaoMaximo (int[DIM]);
int posicaoMinimo (int[DIM]);
int main()
{
    int vet[5]={12,23,2,87,6};
    lerArray(vet);
    int pos_max = posicaoMaximo(vet);
    int pos_min = posicaoMinimo(vet);
    printf("maximo: %d (posicao %d)\n", vet[pos_max], pos_max);
    printf("minimo: %d (posicao %d)\n", vet[pos_min], pos_min);
}
void lerArray (int vet[5]){
    int i;
    for(i=0;i<5;i++){
        printf("%i    ",vet[i]);
    }
}
int posicaoMaximo (int vet[5]){
    int posicao = 0;	// a posicao do maximo
    // o "pm", neste caso, guarda o maior valor, nao a posicao
    int i, pm=vet[0];
    // iterar a partir do 1
    for(i=1;i<5;i++){
        if(pm<vet[i]){
            // novo maximo, guardar valores
            posicao = i;
            pm = vet[i];
            // nao imprime aqui
            //printf("Posicao do maximo:%d\n",i);
        }
    }
    return posicao;
}
int posicaoMinimo (int vet[5]){
    // semelhante ao anterior
    int posicao = 0;
    int i, pm=vet[0];
    for(i=1;i<5;i++){
        if(pm>vet[i]){
            posicao = i;
            pm = vet[i];
            //printf("Posicao do minimo:%d\n",i);
        }
    }
    return posicao;
} 

 

Já está resolvido e esclarecido, muito obrigado pela ajuda, só com essa resolução e esclarecimento além de ter conseguido perceber este exercício consegui resolver os restantes :)

Muito obrigado e umas Boas entras 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.