• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

bsr

Minimo de um array

11 mensagens neste tópico

A ideia do programa seguinte e calcular o minimo de um array, so que nao esta a funcionar.

Alguem pode dar-me umas luzes.

#include <stdio.h>

int main(){

int num, min;
int i = 0;
int j, k;

printf("Quantos numeros vai inserir:\n");
scanf("%d",&num);

printf("\n\n");

int a[num];

while(i<num) 
{
scanf("%d",&a[i]);
i++;
}


for(j=0;j<num;j++) {
        for(k=j+1;k<=num-1;k++) {
             if(a[j]<=a[k]) min = a[j];
                else min = a[k];
                                }

                   }
printf("O minimo é %d\n",min);

return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que queres dizer com "nao esta a funcionar"? Não compila? Compila e corre, mas rebenta? Ou não dá o resultado esperado?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

int min,i;
min=array[0];

           for(i=0; i<num; i++)
           {
               if(min>array)
                    min=array; 
           }

            printf(" Minimo:	%d",min);

Experimenta assim.

[/]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Agradeço desde ja a vossa ajuda, a funçao que calcula o minimo funciona, mas quando a juntei a funcao principal, que e a seguinte,

#include <stdio.h>

int minseq( int a[], int num ){

int y;
int min = a[0];

for(y=0; y<num; y++)
{

if(min>a[y])
   min=a[y];
}

return min;

                              }


int main() {

int num, tmp;
int i = 0;

printf("Quantos numeros vai introduzir\n\n");
scanf("%d",&num);
printf("\n\n");

int a[num];

  while(num!=0) {
  scanf("%d",&a[i]);
  i++;
  num--;
                }

tmp = minseq(a,num);

printf("O menor numero inserido foi %d\n",tmp);

return 0;
}

Devolve-me sempre o valor que esta na posiçao a[ 0].

Alguem pode dizer-me o que esta mal.

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

joana o [ i ] é o bbcode para o itálico por isso não aparece nele. :P

Isto está a acontecer provavelmente porque o while nunca corre a 0 (que é o que atribuis como mínimo inicialmente). :)

Faz:

while(num>=0) {
  scanf("%d",&a[i]);
  i++;
  num--;
}

P.S. - Sim, inicialmente também não me tinha apercebido disso do itálico. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em relaçao scanf, ele esta a ler e a colocar no a[ i ], nao aparece nao sei porque.

O grande problema e, a funcao minimo funciona se a puser sozinha num ficheiro, agora quando a juntei nao funciona.

Sera que o problema esta ao invocar a funcao minseq na funcao main?

Obrigado pela ajuda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O teu código está um bocado overloaded com coisas desnecessárias, deixa-me reescrever isso para algo possivelmente funcional..

minseq(int[], int):

int minseq( int a[], int num ){
int min = a[0];
int i = 0;
for(i = 0 ; i<=num-1 ; i++)
        if(min>a[i]) min = a[i];
return min;
}

main():

int main() {

int num, tmp;
int i = 0;

printf("Quantos numeros vai introduzir\n\n");
scanf("%d",&num);
printf("\n\n");

int a[num];

for(i = 0 ; i <=num-1 ; i++) scanf("%d",&a[i]);

printf("O menor numero inserido foi %d\n",minseq(a,num));

return 0;
}

Vê se funciona. :P

Pontos importantes:

- Uma array tem índices n-1 (isto porque o primeiro índice é 0), ou seja, num-1 seria a forma correcta de aceder ao número de índices.

- Um while ali era desnecessário se o for fazia um trabalho mais simples e potente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

JA descobri o problema.

O problema esta nesta parte:

while(num!=0) {

  scanf("%d",&a);

  i++;

  num--; }  Eu aqui estou a decrementar a varivel num, depois ao invocar a funcao minseq com os paramentros a e num, o valor que envio como parametro nao e igual ao valor de numeros inseridos por isso ao exectuar a funcao minseq a condiçao de teste do for (y<num) falha porque num = 0 e devolve logo min = a[0].

               

Se alguem tiver alguma duvida estou aqui para ajudar.

Obrigado.

tmp = minseq(a,num);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

joana o [ i ] é o bbcode para o itálico por isso não aparece nele. :P

P.S. - Sim, inicialmente também não me tinha apercebido disso do itálico. :P

LOL  :-[

Obrigada

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora