Ir ao conteúdo
  • Cadastre-se
Hanarge

Retornar o menor valor dentre vários digitados

Recommended Posts

Olá, Bom Dia!

Estou com um problema e não consigo resolver. Estou elaborando um código que dentre os valores digitados ele me retorne o menor valor de todos. Se o primeiro valor for igual a -1, ele automaticamente me informa que o valor não existe. Entretanto, desenvolvi o código no Dev-C++, porém, ele só me retorna como o menor valor, o último número que digitei, qual seria o problema no código que elaborei abaixo? Se alguém puder ajudar agradeço.

#include <stdio.h>

#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {

int val, men;

printf("DIGITE OS VALORES \n");

scanf("%d", &val);

while (val!=(-1)) {

men = 0;

scanf("%d", &men);

if (val>men) {

men = men;}

else {

men = val;}

scanf("%d%d", &men, &val);

}

if (val=(-1)) {

printf("O MENOR VALOR E %d", men);

}

else {

printf("O VALOR DIGITADO NAO E VALIDO %d", val);}

return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hanarge,

Tem um problema de lógica aí, você quer que o programa retorne o menor valor de todos, mas de todos o que?.

No mínimo você deveria criar um vetor de inteiros e ir armazenando os numeros no vetor e no final encontrar o menor valor entre esses números.

E no seu programa só tem duas variáveis que armazenam numeros.

Se quiser encontrar o menor valor entre esses dois números é só fazer...


if(val > men)
//val é maior que men
else
//men é maior que val

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez eu não tenha me explicitado direito. Eu quero na verdade que, para quando um número for diferente de -1, ele fique na estrutura enquanto eu digito vários valores, até que eu resolva finalizar digitando -1. Após isso ele me retorna o menor valor que foi digitado dentre todos. Se não for digitado nenhum valor, ele me retornaria nenhum valor digitado válido. A verdade é que sou principiante e não sei usar muito bem vetores. Não entendi como faço pra encaixar aquelas linhas de comando que você falou. Agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, você quer que o usuário digite vários valores até que uma hora ele digita -1 e o programa para de pedir pra ele digitar mais números, e devolve o menor numero digitado, correto?

Se for isso, o computador precisa ter acesso a todos os numeros digitados pelo usuario para poder comparar cada um deles e ver qual é o menor. É como eu disse,o seu programa declara duas variáveis, ou seja só vai armazenar dois números. Se o usuário digitar 50 números, aonde o seu programa vai armazenar esses 50 numeros se ele só tem duas variáveis?

Aí que entra vetores...

Compartilhar este post


Link para o post
Compartilhar em outros sites

É exatamente isso. Eu vou implorar então. Como faço isso acontecer por vetores? Muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É só declarar uma variável...

int num[50];

Esse código declara um vetor do tipo inteiro com 50 elementos, ou seja agora eu posso armazenar 50 numeros diferentes e acessá-los facilmente, por exemplo pra acessar o primeiro elemento desse vetor eu faço:

num[0]

O segundo:

num[1]

O terceiro:

num[2]

E por aí vai...

Se eu quisesse armazenar um valor digitado pelo usuario na posição 29 desse vetor eu poderia fazer:

scanf("%d", &num[29]);

Então o que você pode fazer é estabelecer um limite de numeros que o usuario pode digitar, e criar um vetor do tamanho desse limite, e fazer um loop e ir armazenando os números do usuário no vetor. quando o usuário digitar -1, sai do loop e faz outro loop e percorre todo o vetor e vai comparando os numeros que estão nele até encontrar o menor numero.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda. Mas, como eu disse. Não sei codificar em vetores ainda. Eu sei que parece simples. Vou tentar, mas acho que vou voltar novamente. Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vetores não são necessários.

Declare três variáveis de tipo integral: uma para armazenar um valor digitado, outra para o menor valor e mais outra para contar o número de valores digitados. Inicialize-as, colocando um valor extremamente grande na do menor valor e zero na de contagem F5Rua4D.gif.

Em seguida, escreva uma chamada da função scanf que receba um valor inserido pelo usuário e armazene na variável criada para esse fim. Não esqueça da limpeza do buffer de entrada padrão.

Depois, envolva esse código em um loop do-while. A condição para sua execução continuar deve ser a não-igualdade entre o número inserido e o número -1 GbhmuXl.gif.

Incremente a variável de contagem a cada número recebido pela função scanf.

Ainda no corpo do loop e abaixo de todos os códigos até então colocados nele, verifique com um if se a valor da variável do número inserido é menor que valor da variável do menor valor e se o valor inserido é diferente de -1. Se essas condições forem simultaneamente satisfeitas, atribua o valor inserido à variável do menor valor F5Rua4D.gif.

Finalmente, fora do loop, verifique se o valor da variável de contagem é igual a 1. Se for, mostre uma mensagem ao usuário dizendo que o valor não existe. Caso contrário, exiba o conteúdo da variável do menor valor.

Espero ter ajudado GbhmuXl.gif.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos com calma. Uma hora eu estava em vetores e agora eu tenho que incluir um sistema de contagem e fazer as comparações. Assim vou ficar louco. No código que eu coloquei, será que pode ser informado as linhas que estão erradas. Assim eu posso trabalhar em cima delas. Agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hanarge, boa tarde

Tomei a liberdade de resolver seu problema:


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

main(){

int menor, n_momento;
menor = 999999;
while(n_momento != -1){
printf("Numero: ");
scanf("%d", &n_momento);
if ((n_momento < menor) && (n_momento != -1)){
menor = n_momento;
}
}
if (menor != 999999){
printf("\n\nO menor numero digitado foi: %d", menor);
}else{
printf("\n\nNenhum numero lido");
}
getch();

}

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obs.: Eu coloquei o número 999999, imaginando que o usuário não vá digitar um número maior do que esse.

Se você quiser fazer do jeito mais correto, você deve saber qual a quantidade de bits que o seu compilador guarda para um numero do tipo int.

Por exemplo: No TurboC (que eu uso na escola), são 2bytes, o primeiro bit usado para o sinal (positiov-negativo) e os 15bits restantes para o numero (valor absoluto).

O que gera 2^(15)... dando então o maior número possível 32768.

No entanto, outros compiladores mais modernos como o Dev C++ que eu usei pra resolver ele guarda mais do que 2 bytes para um número do tipo int

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora eu entendi o artificio de atribuir um valor a menor. Muito obrigado mesmo. Eu tenho outro código que fiz tudo certinho. É para verificar se um número é divisível. Mas não entendo prq, ele não executa as condições else if. Você pode olhar? Agradeço.

int main(int argc, char *argv[]) {

int A, B, C;

printf("DIGITE UM NUMERO \n");

scanf("%d", &A);

B = A%3;

C = A%7;

if (B!=0 && C!=0) {

printf("O NUMERO %d NAO E DIVISIVEL NEM POR 3 E NEM POR 7 \n", A);}

else if ((B!=0) && (C=0)){

printf("O NUMERO %d E DIVISIVEL POR 7 MAS NAO POR 3 \n", A);}

else if ((B=0) && (C!=0)){

printf("O NUMERO %d E DIVISIVEL POR 3 MAS NAO POR 7 \n", A);}

else {

printf("O NUMERO %d E DIVISIVEL POR 3 E POR 7 \n", A);}

system("pause");

return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em C não existe if-elseif-else

Existe apenas if-else

tente fazer assim:


if($$$$$$$){
##########
}else{
if($$$$$$$){
##########
}else{
if($$$$$$$){
##########
}
}
}

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Vetores não são necessários.

Declare três variáveis de tipo integral: uma para armazenar um valor digitado, outra para o menor valor e mais outra para contar o número de valores digitados. Inicialize-as, colocando um valor extremamente grande na do menor valor e zero na de contagem F5Rua4D.gif.

Em seguida, escreva uma chamada da função scanf que receba um valor inserido pelo usuário e armazene na variável criada para esse fim. Não esqueça da limpeza do buffer de entrada padrão.

Depois, envolva esse código em um loop do-while. A condição para sua execução continuar deve ser a não-igualdade entre o número inserido e o número -1 GbhmuXl.gif.

Incremente a variável de contagem a cada número recebido pela função scanf.

Ainda no corpo do loop e abaixo de todos os códigos até então colocados nele, verifique com um if se a valor da variável do número inserido é menor que valor da variável do menor valor e se o valor inserido é diferente de -1. Se essas condições forem simultaneamente satisfeitas, atribua o valor inserido à variável do menor valor F5Rua4D.gif.

Finalmente, fora do loop, verifique se o valor da variável de contagem é igual a 1. Se for, mostre uma mensagem ao usuário dizendo que o valor não existe. Caso contrário, exiba o conteúdo da variável do menor valor.

Espero ter ajudado GbhmuXl.gif.

No caso, esta variável de contagem nem seria necessário...


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


int main()
{
int entrada = 0, menor_valor = 99999;

do{
printf("Digite um numero: ");
scanf("%d", &entrada);


if(entrada < menor_valor && entrada != -1)
menor_valor = entrada;
}while(entrada != -1);

printf("Menor numero digitado: %d", menor_valor);
return 0;


}

Porém o usuário estaria limitado a digitar sempre um valor menor do que o programa estabelece, não um valor menor do que o computador dele suporta. Usando vetores daria uma certa "liberdade".

Acho que pra fazer esse programa, teria que usar ponteiros e alocação de memória, já que não se sabe a quantidade números que o usuário vai digitar né?

------------#

estagiario2013,

Você pode usar um else if em C

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

estagiario2013,

Você pode usar um else if em C

Não tenho muita certeza, estou começando a aprender agora, me desculpe se estiver errado, mas...

else if <<<apenas uma linha>>>

>

>

e depois disso não pode usar outro "else if"

Não é isso?

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Não tenho muita certeza, estou começando a aprender agora, me desculpe se estiver errado, mas...

else if <<<apenas uma linha>>>

>

>

e depois disso não pode usar outro "else if"

Não é isso?

Pode...

Se tiver um else depois de qualquer if... é valido. O que não pode é um else sem if, aí o compilador aponta erro.

Eu posso fazer:


if(x == 1)
//alguma coisa..

else if(x == 2)
//alguma coisa

else if(x == 3)
// outra coisa...

else if(x == 4)
// etc...

else
//exit

Mas é aconselhável substituir esse monte de else if por um switch, fica mais fácil de ler...

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×