Jump to content

Duvida em C, muito simples


Primordius
 Share

Recommended Posts

Muito Boa tarde pessoal

(eu nao estou a pedir para me fazer 1 programa atençao)

Eu tenho que fazer isto (Maior e Menor) Escreva um programa que determine o maior e o menor número de N números reais dados pelo utilizador usando as funções float maior (float a, float b); e float menor (float a, float b);. Considere que N é um valor pedido ao utilizador.

Eu sei como é que peço 1 valor e sei comprar por exemplo 3 valores e devolver o maior

#include <stdio.h>
/*Qual o maior de 3 numeros introduzidos*/

int main()
{
int a, b, c;
scanf("%d %d %d", &a,&b,&c);
if (a > b)
	if (a > c)
	printf("O Número maior é: %d\n",a);
if (b > a)
	if (b > c)				
	 printf("O Número maior é: %d\n",b);
if (c > a)
	if (c > b)
	printf("O Número maior é: %d\n",c);
}

Sim eu sei isto ta tudo mal escrito, ainda sou novo em C e foi o melhor que consegui,

agora a minha duvida é simples: Como é que posso receber um numero infinito ou neste caso N numeros? é que estou mesmo á nora com isso

#include <stdio.h>
/*Determinar o numero maior e menor de N numeros introduzidos*/

int main()
{
float a,b,c,d;
int n;

scanf("%d", n);
printf("Introduza os seus %d valores \n",n);
while (n > 0)
 --n;

isto é o que tenho até agora, a funcao de comparaçao irá ser parecida com a primeira que introduzi, a minha duvida está mesmo na leitura dos tais N numeros, será que é assim que estou a tentar fazer?

Muito Obrigado

Link to comment
Share on other sites

Tens que guardar os numeros introduzidos pelo utilizador nalgum lado -- num array.

A maneira mais simples é definires um array com um número grandito de elementos, verificar que o utilizador vai usar menos que esse número, e prontos!

Outra maneira é usar malloc(), realloc(), e free() para gerir a memória à medida das necessidades.

Ainda outra maneira é usar os "variable length arrays" introduzidos com a actualização do C em 1999 (vulgo C99).

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Já deste arrays (há quem lhes chame "vectores")?

Se não deste, é suposto aprenderes por ti próprio?

Basicamente um array é um agrupamento de diversos valores do mesmo tipo. Assim, por exemplo, podes ter um array para 42 elementos sem necessitares de 42 nomes diferentes. Cada elemento é accessivel pelo nome do grupo e a posição do elemento dentro do grupo.

int main(void) {
    int array[42];
    array[2] = 12; /* mete o terceiro elemento a 12; o primeiro elemento é o array[0]! */
}

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Hmm ainda nao dei, mas parece-me ser simples de utilizar, eu agora vou ter que desligar isto mas mais tarde vou tentar fazer com os arrays, eu até agora tenho isto

#include <stdio.h>
/*Determinar o numero maior e menor de N numeros introduzidos*/

int main()
{
int a, b , c , d, n, maior, menor;
maior=0;
menor=10000;
scanf("%d", &n);
printf("Introduza os seus %d valores \n",n);
{
while (n > 0)
 --n;
scanf("%d %d", &a,&b);
if ((a > b)&&(a > maior)&&(b<menor))
menor=b;
maior=a;
if ((a < b)&&(b > maior)&&(a<menor))
menor=a;
maior=b;
}
printf("O maior é: %d, e o menor é: %d \n", maior, menor);

}

apenas funciona para 2 valores 😞 se metermos mais que 2 ele so vai ler os 2 primeiros

Muito obrigado pela ajuda na mesma 🙂 vou tentar fazer com arrays mais tarde Abrç 😉

Link to comment
Share on other sites

Só para te dar uma ajuda ... para meteres os números de 0 (inclusive) a 100 (exclusive) num array com capacidade para 100 elementos, o mais natural é assim

int main(void) {
    int array[100]; /* capacidade para 100 elementos: do 0 ao 99 */
    for (int i = 0; i < 100; i++) {
        array[i] = i; /* mete 0 no primeiro elemento; 1 no segundo; etc ... */
    }
}

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

@Primordius

Repara que para devolver o maior e menor elemento de uma série não precisas de guardar todos os números que recebeste até agora. De facto, se o problema consistisse em receber números continuamente e ter que dizer de x em x tempo qual era o maior e o menor (imagina um termómetro numa localização remota que deve registar a cada segundo a temperatura e manter constantemente registo da temperatura mais alta e mais baixa alcançadas, e que só é verificado uma vez por ano, 31536000 valores num circuito com memória limitada, e se alguém se esquece de fazer reset ao fim de um ano? etc.etc.), a abordagem de usar um array seria impossível por falta de memória.

Se estamos apenas interessados em achar o maior e o menor, não vamos guardar os números todos - o que até calha bem visto que tu ainda não aprendeste a usar arrays de tamanho variável, e assim podes pensar na solução correta para este problema 😄

EDIT: Estás no bom caminho, mas o ciclo while(n>0) tem que englobar também o scanf e as comparações etc. Neste momento estás apenas a fazer um ciclo que conta desde n até 0 mas não faz nada.

Não respondo a dúvidas por mensagem.

Link to comment
Share on other sites

Xiiiiiiiiiiiiiiiii ... ca ganda FAIL meu.

Peço desculpa pelas complicações ... pensei que era preciso ordenar os valores.

O que o pedrosorio diz é que está bem.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

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.