Jump to content

Duvida: Maximo e Minimo de N numeros


LegaliZe
 Share

Recommended Posts

Exercicio:

Desenhe um algoritmo que resolva o seguinte problema. Pretende-se determinar o maior e o menor número duma sequência de N números inteiros dados pelo utilizador. O valor de N deverá ser superior ou igual a 2. Se não for o seu valor deverá ser pedido novamente até ser introduzido um valor válido.A introdução de números deverá terminar quando forem inseridos N números. Nessa altura a aplicação deverá mostrar o valor máximo e mínimo de entre os valores introduzidos.

#include <stdio.h>
int main ()
{
int N, j, max , min , i;
do
{
printf ("Introduza o numero de inteiros: \n");
scanf ("%d", &N);	
}
while (N<2);
scanf("%d",&j);
max =j;
min =j;
for (i=1;i<=N-1;i++);
{
	printf ("Introduza um inteiro: \n");
	scanf ("%d", &j);
	if (j>max)
	max=j;
	if (j<min)
	min=j;
}
printf ("Min=%d , Max=%d \n", min, max);	
}

Este programa foi feito pelo professor como resposta ao exercicio mas acho que nao esta a fazer bem o ciclo do-while ja tive a tentar ver o problema receio que tenha a ver com a variavel j mas não sei o porque

Link to comment
Share on other sites

O programa tem um erro muito simples, no ciclo for.

Logo após o for, tem um ';' a mais.

Isto faz com que o código que supostamente estaria dentro do ciclo for, seja executado apenas após o i ter sido incrementado até 10.

Além disso, supostamente é necessário escrever a mensagem "Introduza um inteiro" para o primeiro número.

Correctamente, ficaria:

#include <stdio.h>
int main ()
{
        int N, j, max , min , i;
        do
        {
        printf ("Introduza o numero de inteiros: \n");
        scanf ("%d", &N);       
        }
        while (N<2);
        printf ("Introduza um inteiro: \n");
        scanf("%d",&j);
        max =j;
        min =j;
        for (i=1;i<=N-1;i++)
        {
                printf ("Introduza um inteiro: \n");
                scanf ("%d", &j);
                if (j>max)
                max=j;
                if (j<min)
                min=j;
        }
        printf ("Min=%d , Max=%d \n", min, max);        
}
Link to comment
Share on other sites

Tens razão, é até N xD o 10 ficou-me na cabeça depois dos testes que fiz 🙂

O scanf a seguir ao while é ler o primeiro inteiro, e ter um número de base para o min/max. Ele també poderia ter posto o min e o max nos valores mínimos e máximos, respectivamente, de um inteiro. Para compensar aquele primeiro scanf, ele faz o for até N-1 apenas.

Link to comment
Share on other sites

Tens razão, é até N xD o 10 ficou-me na cabeça depois dos testes que fiz 🙂

O scanf a seguir ao while é ler o primeiro inteiro, e ter um número de base para o min/max. Ele també poderia ter posto o min e o max nos valores mínimos e máximos, respectivamente, de um inteiro. Para compensar aquele primeiro scanf, ele faz o for até N-1 apenas.

Eu so percebi depois... não estava a ver o porque de 2 numeros para dizer quantos numeros seriam....

Got it?

Link to comment
Share on other sites

Em 28/10/2010 às 20:30, Cynary disse:

O programa tem um erro muito simples, no ciclo for.

Logo após o for, tem um ';' a mais.

Isto faz com que o código que supostamente estaria dentro do ciclo for, seja executado apenas após o i ter sido incrementado até 10.

Além disso, supostamente é necessário escrever a mensagem "Introduza um inteiro" para o primeiro número.

Correctamente, ficaria:

 


#include <stdio.h>
int main ()
{
        int N, j, max , min , i;
        do
        {
        printf ("Introduza o numero de inteiros: \n");
        scanf ("%d", &N);       
        }
        while (N<2);
        printf ("Introduza um inteiro: \n");
        scanf("%d",&j);
        max =j;
        min =j;
        for (i=1;i<=N-1;i++)
        {
                printf ("Introduza um inteiro: \n");
                scanf ("%d", &j);
                if (j>max)
                max=j;
                if (j<min)
                min=j;
        }
        printf ("Min=%d , Max=%d \n", min, max);        
}
 

Sou iniciante na programação, qual é a funcionalidade da variável "i"? Obrigado pela atenção !

Link to comment
Share on other sites

On 10/28/2010 at 8:43 PM, asworm said:

uma coisa que não percebi, foi o scanf logo a seguir ao while... uma pessoa introduz um numero, e o sistema fica à espera de outro numero, sem pedir alguma coisa....

É mesmo assim que queres?

 

On 10/28/2010 at 8:52 PM, LegaliZe said:

Também tava na dúvida nisso mas penso ke será uma variavel para comparar uns com os outros pa ver o maior e o menor

Esse scanf pode ser substituído por um if dentro do loop for. Na minha opinião fica mais elegante.

Porque é que estão a atribuir o valor de j às variáveis min e max?

Porque é que colocam i < N - 1 na condição do loop for? Isto são duas pistas para responder à pergunta "para que serve o scanf a seguir ao while.

 

Na minha opinião falta melhorar a indentação!

Edited by PsySc0rpi0n
Add inline code tags

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

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
 Share

×
×
  • 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.