Jump to content

Ajuda num programa básico: maior de 4 inteiros


Patoshik
 Share

Recommended Posts

Boas pessoal eu não sabia bem onde colocar a minha duvida porque não tenho muita experiência neste forum por isso deixo já as minhas desculpas caso esteja no local errado.

Tenho mas de resolver isto como "tpc", para a universidade, mas só tive uma aula e por isso estou com algumas dificuldades. Alguém me pode ajudar?

Cá vai,

O exercício que eu tenho que resolver e´ o seguinte:

Escreva um algoritmo e correspondente programa em c/c++ para calcular o maior de 4 números inteiros.

Eu já tentei e cheguei a isto,

#include<stdio.h>

int main()
/*Vou dividir o programa em dois.
Comparar o num1 com o num2 e chamando numx ao seu resultado.
Fazer a mesma comparação só que desta vez com o num3 e o num4 e chamando numy ao seu reultado.
Voltar a fazer o mesmo só que desta vez comparando numx com numy e dando o nome de numz ao maior numero comparado.*/
{
int num1, num2, num3, num4; /*4 numeros que vão ser introduzidos*/
int numx, numy, numz;  /*nomes dos resultados das comparações*/

printf("Introduza 4 numeros:\n");
scanf("%d %d %d %d", &num1, &num2, &num3, &num4);

 if (num1>=num2)
			num1=numx;
else
num2 = numx;


 if (num3>=num4)
			num3=numy;
else
	 num4=numy;


 if (numx>=numy)
			numx=numz;
else
	 numy=numz;


printf("O maior dos 4 numeros e' o %d\n", numz);

return 0;
}

Mas não está a resultar porque quando tento rodo o programa e introduzo os valores, ele diz sempre que o maior valor é zero.

Se alguém encontrar o erro, ou souber outra maneira de resolver o problema, deixe mensagem aqui no topico sff. 😉

Link to comment
Share on other sites

não vou entrar en detalhes se o algoritmo é bom ou eficiente, no entanto olha para estas linhas :

/*Comparar o num1 com o num2 e chamando numx ao seu resultado.*/
if (num1>=num2)
 num1=numx;
else
 num2 = numx;

/*Fazer a mesma comparação só que desta vez com o num3 e o num4 e chamando numy ao seu reultado.*/
if (num3>=num4)
 num3=numy;
else
 num4=numy;
  • Vote 1
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Obrigado pela tua resposta

Voltei, já estou a dar em maluco. Pensei que já tinha acabado mas afinal voltei a testar esta treta e o programa às vezes dá certo outras vezes dá errado dependendo da forma como introduzo os números. Mas não estou a detectar o erro alguém me pode ajudar?

#include

int main()
{
int num1, num2, num3, num4;
int numx, numy;

printf("Introduza 4 numeros:\n");
scanf("%d%d%d%d", &num1, &num2, &num3, &num4);

if (num1>=num2){num1=numx;}
else{num2=numx;}

if(numx>=num3){numx=numy;}
else{num3=numy;}

if (numy>=num4){printf("O maior numero e' o %d\n", numy);}
else {printf("O maior numero e' o %d\n", num4);}

return 0;
}

Link to comment
Share on other sites

Podes usar este codigo. Todo o algoritmo que precisas esta na funcao greater.

#include <stdio.h>
// Funcao que retorna o maior inteiro do array
int greater(int array[4])
{
 int greater_so_far = array[0];
 for(int i = 1; i < 4; ++i)
   if(greater_so_far < array[i])
     greater_so_far = array[i];
 return greater_so_far;
}
int main()
{
 // Criar um array para armazenar todos os 4 numeros
 int numbers[4];
 // Inserir os numeros
 for(int i = 0; i < 4; ++i) {
   printf("Numero #%i: ", i + 1);
   scanf("%i", numbers+i); // numbers + n = &numbers[n]
 }
 printf("Numero maior = %i\n", greater(numbers));
 return 0;
}
Edited by thoga31
GeSHi
Link to comment
Share on other sites

Podes usar este codigo. Todo o algoritmo que precisas esta na funcao greater.

Supostamente o intuito do P@P é ajudar os membros a chegarem às respostas por si incentivando-os a pensar nos problemas por si mesmos, fornecendos pistas, sugestões, dicas, informação, tutoriais, links, etc, e esclarecendo as dúvidas que vão surgindo. É assim que se aprende. Não é com Ctrl+C->Ctrl+V... 😕

Knowledge is free!

Link to comment
Share on other sites

Estás a utilizar mal as atribuições:

num1 = numx; // num1 passa a ter o valor de numx
numx = num1; // numx passa a ter o valor de num1

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

Já está 🙂

Fiz assim,

#include

int main()

{
int num1, num2, num3, num4;

printf("Introduza 4 numeros:\n");
scanf("%d %d %d %d", &num1, &num2, &num3, &num4);

if((num1>=num2)&&(num1>num3)&&(num1>num4)){printf("O mair numero e' o: %d\n", num1);}

else if ((num2>num1)&&(num2>=num3)&&(num2>num4)){printf("O maior numero e o: %d\n", num2);}

else if ((num3>num1)&&(num3>num2)&&(num3>=num4)){printf("O maior nnumero e o: %d\n", num3);}

else if ((num4>num1)&&(num4>num2)&&(num4>num3)){printf("O maior nnumero e o: %d\n", num4);}

else {printf("Os numeros sao todos iguais.\n");}

return 0;
}

Acham que está bom esteticamente? Só estou a perguntar porque ouvi dizer que isso era importante, e como estou a começar é melhor corrigir já os erros do que ter de mudar mais tarde

Edited by thoga31
GeSHi
Link to comment
Share on other sites

não ... esteticamente não está bem, se o que entendes como esteticamente é ser correctamente indentado.

para isso deverias usar um dos métodos mais usados para o fazer, tendo algo deste género no final:

#include <stdio.h>

int main(void)
{
 int num1, num2, num3, num4;

 printf("Introduza 4 numeros:\n");
 scanf("%d %d %d %d", &num1, &num2, &num3, &num4);

 if((num1 >= num2) && (num1 > num3) && (num1 > num4))
 {
   printf("O mair numero e' o: %d\n", num1);
 }
 else if ((num2 > num1) && (num2 >= num3) && (num2 > num4))
 {
   printf("O maior numero e o: %d\n", num2);
 }
 else if ((num3 > num1) && (num3 > num2) && (num3 >= num4))
 {
   printf("O maior nnumero e o: %d\n", num3);
 }
 else if ((num4 > num1) && (num4 > num2) && (num4 > num3))
 {
   printf("O maior nnumero e o: %d\n", num4);
 }
 else
 {
   printf("Os numeros sao todos iguais.\n");
 }

 return 0;
}

isto assenta sempre na base da facilidade de leitura do código, que no entanto também recai na implementação da solução.

exemplo, olha para a tua solução e analisa a facilidade de leitura do teu código. consegues dizer rápidamente qual a diferença entre a primeira condição e a segunda ? e a terceira, onde está a diferença ?

como exemplo, esta seria a minha solução:

#include <stdio.h>

#define XOR_SWAP(x, y) \
 do {                 \
   (x) ^= (y);        \
   (y) ^= (x);        \
   (x) ^= (y);        \
 } while (0)

int main(void)
{
 int num1, num2, num3, num4;

 printf("Introduza 4 numeros:\n");
 scanf("%d %d %d %d", &num1, &num2, &num3, &num4);

 if (num1 > num2) XOR_SWAP(num1, num2);
 if (num2 > num3) XOR_SWAP(num2, num3);
 if (num3 > num4) XOR_SWAP(num3, num4);

 printf("O maior numero e o: %d\n", num4);

 return 0;
}

a macro XOR_SWAP pode ser mais complicada de perceber em termos matemáticos, mas ao ler o código sabes (pelo nome) qual a sua finalidade (trocar dois valores de posição), ficando no final com um código da função main muito simples e claro de perceber.

Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Já está 🙂

Fiz assim,

#include

int main()

{
int num1, num2, num3, num4;

printf("Introduza 4 numeros:\n");
scanf("%d %d %d %d", &num1, &num2, &num3, &num4);

if((num1>=num2)&&(num1>num3)&&(num1>num4)){printf("O mair numero e' o: %d\n", num1);}

else if ((num2>num1)&&(num2>=num3)&&(num2>num4)){printf("O maior numero e o: %d\n", num2);}

else if ((num3>num1)&&(num3>num2)&&(num3>=num4)){printf("O maior nnumero e o: %d\n", num3);}

else if ((num4>num1)&&(num4>num2)&&(num4>num3)){printf("O maior nnumero e o: %d\n", num4);}

else {printf("Os numeros sao todos iguais.\n");}

return 0;
}

Acham que está bom esteticamente? Só estou a perguntar porque ouvi dizer que isso era importante, e como estou a começar é melhor corrigir já os erros do que ter de mudar mais tarde

1 - Antes de mais, testaste o código? A 1ª Linha do código, como está escrita não te permite compilar o código.

#include /*não falta nada?*/

2 - Tens erros ortográficos no print do código.

3 - Em C a identação do código acaba por ser uma característica pessoal de cada programador, no entanto na minha opinião o teu código está um pouco confuso, nas instruções if-else encadeadas no teu código torna-se difícil associar as instruções e condições.

Edited by Gonkali

" The quieter you become, the more you are able to hear"

"Eu adoraria mudar o mundo, mas não me deram o código-fonte."

"A arte de programar consiste na arte de organizar e dominar a complexidade."

"Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam."

Link to comment
Share on other sites

Patoshik,

Uma vez que a dúvida é diferente, deverá ser colocada num tópico diferente também. Antes de a colocares, no entanto, procura no fórum, poderá haver já alguma questão semelhante.

Uma dica, já agora: não te esqueças de tentar perceber o que são os caracteres ASCII (que ao contrário do que te disseram, são apenas 128... "Extended" ASCII é que tem 256).

Link to comment
Share on other sites

Obrigado,

não sabia que tinha de colocar num tópico diferente, porque em alguns fóruns o pessoal não gosta que se esteja sempre a criar novos tópicos, Mas vou seguir a tua recomendação. E coloquei aqui a questão da mesma forma que vinha na minha ficha de exercícios feita pelo professor, mas devem ser os "Extended" ASCII como tinhas dito. 👍

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.