Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Ruka284

Programa Crescente (mais pequeno para o maior)

Mensagens Recomendadas

Ruka284

Alguém me pode ajudar, e que não estou detetar o erro, devido ele não me ordenar os numeros, do mais pequeno para o maior.

Aqui deixou o codigo abaixo mencionado.

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

main()

{
float num1,num2,num3,maior,menor;

printf("\n Programa Crescente\n");

printf("Introduza primeiro numero?\n");
scanf("%f",&num1);
printf("Introduza segundo numero?\n");
scanf("%f",&num2);
printf("Introduza terceiro numero?\n");
scanf("%f",&num3);   
if (num1>num2>num3){
printf ("%f %f %f",&num3,num2,num1); 
}                                
if (num1>num3>num2){
printf ("%f %f %f",&num2,num3,num1);  
}                                                 
if (num2>num1>num3){                    
printf ("%f %f %f",&num3,num1,num2);
}
if (num2>num3>num1){
printf ("%f %f %f",&num1,num3,num2); 
}
if (num3>num1>num2){
printf ("%f %f %f",&num2,num1,num3);
}
if (num3>num2>num1){
printf ("%f %f %f",&num1,num2,num3);     
 {                                                                       
                                                                      }

printf("segue lista de numeros em ordem crescente: %f %f %f",num1,num2,num3);

 getch();
}

Editado por thoga31
GeSHi acrescentado + negrito removido

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Primeiro: se tiveres 10 números, como os organizas por ordem crescente?

Segundo, se fazes o printf dos números por ordem primeiro, para que queres aquele último printf? Não estás a atribuir nada antes às variáveis que te permita fazer aquele output. Aquela série estrondosa de ifs já te dá a lista ordenada...

Terceiro: para que queres as variáveis maior e menor?

Tenta mas é fazer um algoritmo melhor, isso está terrível... :confused:

Editado por thoga31

Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
dramos21

aqueles if's podem se fazer daquela maneira? não tem de ser recorrendo a operadores && || ( 'e' 'ou' ) ? as variáveis maior e menor acho que não estão a ter utilidade.

se tivesses que fazer isso com 10 números tinhas código muito maior. tenta ver outra maneira de fazer isso.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ruka284

Este programa que estou a fazer e só para três números, não me expliquei bem.

Esse printf que estas a mencionar primeiro, segundo e terceiro não tem nada haver com a ordem dos numeros, mas sim esta dizer para introduzir um primeiro numero e sucessivamente.

Essas variaveis de maior ou menor, está errado ja tinha reparado, mas obrigado pela atenção

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Este programa que estou a fazer e só para três números, não me expliquei bem.

Ainda assim, é um método que não me agrada nada.

Esse printf que estas a mencionar primeiro, segundo e terceiro não tem nada haver com a ordem dos numeros, mas sim esta dizer para introduzir um primeiro numero e sucessivamente.

Não são esses a que me refiro, são estes:

if (num1>num2>num3){
printf ("%f %f %f",&num3,num2,num1); 
}                                
if (num1>num3>num2){
printf ("%f %f %f",&num2,num3,num1);  
}                                                 
if (num2>num1>num3){                    
printf ("%f %f %f",&num3,num1,num2);
}
if (num2>num3>num1){
printf ("%f %f %f",&num1,num3,num2); 
}
if (num3>num1>num2){
printf ("%f %f %f",&num2,num1,num3);
}
if (num3>num2>num1){
printf ("%f %f %f",&num1,num2,num3);  


Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
dramos21

Eu acho que ele se está a referir aos printf dentro de cada if. depois no final do programa dizes para ele fazer o mesmo printf que ele já fez dentro do if para qualquer uma das situações.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ruka284

aqueles if's podem se fazer daquela maneira? não tem de ser recorrendo a operadores && || ( 'e' 'ou' ) ? as variáveis maior e menor acho que não estão a ter utilidade.

se tivesses que fazer isso com 10 números tinhas código muito maior. tenta ver outra maneira de fazer isso.

Ainda começei a pouco dar c, estou a começar com tres numero, claro que tem haver outra maneira, se fossem 1000!!!!....era só sintaxe

Ainda assim, é um método que não me agrada nada.

Não são esses a que me refiro, são estes:

if (num1>num2>num3){
printf ("%f %f %f",&num3,num2,num1);
}								
if (num1>num3>num2){
printf ("%f %f %f",&num2,num3,num1);  
}												
if (num2>num1>num3){					
printf ("%f %f %f",&num3,num1,num2);
}
if (num2>num3>num1){
printf ("%f %f %f",&num1,num3,num2);
}
if (num3>num1>num2){
printf ("%f %f %f",&num2,num1,num3);
}
if (num3>num2>num1){
printf ("%f %f %f",&num1,num2,num3);  

Porque eu em cada numero tenho de ter as três opções.

por ex:

introdução do primeiro numero e 5

"" segundo "" e 10

""" terceiro "" e 7

como ordenas em ordem crescente no programa, como pode variar os numeros nas posições

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Ainda começei a pouco dar c, estou a começar com tres numero, claro que tem haver outra maneira, se fossem 1000!!!!....era só sintaxe

Nós sabemos isso, evitas de reagir assim. E cuidado com os negritos, são desnecessários. Apenas te estamos a colocar questões que te permitam pensar no problema, nem que seja mais tarde quando aprenderes coisas novas que te permitam simplificar.

Porque eu em cada numero tenho de ter as três opções.

por ex:

introdução do primeiro numero e 5

"" segundo "" e 10

""" terceiro "" e 7

como ordenas em ordem crescente no programa, como pode variar os numeros nas posições

Eu isso entendi. Só não percebi é porque é que tens este printf...

printf("segue lista de numeros em ordem crescente: %f %f %f",num1,num2,num3);

...quando com esses ifs todos já deste os números ordenados.


Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ruka284

Nós sabemos isso, evitas de reagir assim. E cuidado com os negritos, são desnecessários. Apenas te estamos a colocar questões que te permitam pensar no problema, nem que seja mais tarde quando aprenderes coisas novas que te permitam simplificar.

Eu isso entendi. Só não percebi é porque é que tens este printf...

printf("segue lista de numeros em ordem crescente: %f %f %f",num1,num2,num3);

...quando com esses ifs todos já deste os números ordenados.

esse printf e o que sai para o utilizador saber a ordem crescente dos numeros

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ruka284

esse printf e o que sai para o utilizador saber a ordem crescente dos numeros

peço desculpa, não quis reagir mal, sou humilde o suficiente para aceitar todas as criticas

Mas antes tu fazes esse printf, um para cada situação. Esse não serve para nada, só dá os números pela ordem pela qual foram introduzidos.

sim quando esta processar no if, tem de sair a ordem crescente dos numeros

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ruka284

Então se no if já sai a ordem crescente, não precisas daquele último printf. Certo?

no if estas a dar as varias maneiras como os numeros podem aparaçer, no ultimo printf da-te os numeros ordenados, não sei se me estou a fazer entender

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
dramos21

no if estas a dar as varias maneiras como os numeros podem aparaçer, no ultimo printf da-te os numeros ordenados, não sei se me estou a fazer entender

em cada if, o printf que fazes, vai fazer com que o teu programa escreva a sequencia de números que metas nesse mesmo printf, caso essa condição seja verdadeira.

o ultimo printf não faz isso que pretendes, esse printf já não está dentro de nenhum if, logo ele vai-te escrever apenas a ordem pela qual introduziste os teus números.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ruka284

printf que esta no if vai dar ordem crescente naquela sintaxe.

o ultimo printf vai mostrar ao ulizador a ordem crescente dos numeros.

qual a sintaxe que voçês faziam no programa ??

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

aplica o algoritmo de ordenação mais simples de todos : bubble sort

fazer
 marcar como sem alterações
 para todos os elementos menos o último
   se o elemento for maior que o seguinte
     troca os elementos
     marcar como com alterações efectuadas
enquando houver alterações


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ruka284

aplica o algoritmo de ordenação mais simples de todos : bubble sort

fazer
marcar como sem alterações
para todos os elementos menos o último
se o elemento for maior que o seguinte
troca os elementos
marcar como com alterações efectuadas
enquando houver alterações

esse algoritmo ainda não dei, podes explicar como funciona??

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ruka284

está explicado no pseudo-código, lê

algoritmo que tenho escrito a mão não esta com para mas sim com se, por isso não convêm alterar.

esse algoritmo dá para if ??

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

printf que esta no if vai dar ordem crescente naquela sintaxe.

o ultimo printf vai mostrar ao ulizador a ordem crescente dos numeros.

qual a sintaxe que voçês faziam no programa ??

Ok... vamos a ver se entendemos uma coisa: quando fazes o printf em cada if, já estás a dar a lista por ordem crescente. O último printf não faz mais nada se não dar os números pela ordem pela qual foram introduzidos. Até aqui, alguma dúvida?

Depois, estás a utilizar apontadores nos printf em 1 das 3 variáveis numéricas - não se usa apontadores neste caso.

Por último, olha o teu código, mas corrigido, e vê se compreendes aquilo que te temos vindo a dizer.

#include<stdio.h>

int main()

{
float num1,num2,num3;

printf("\n Programa Crescente\n");

printf("Introduza primeiro numero?\n");
scanf("%f",&num1);
printf("Introduza segundo numero?\n");
scanf("%f",&num2);
printf("Introduza terceiro numero?\n");
scanf("%f",&num3);   

printf("segue lista de numeros em ordem crescente: ");
if (num1>num2 && num2>num3){
printf ("%f %f %f",num3,num2,num1); 
}                                
if (num1>num3 && num3>num2){
printf ("%f %f %f",num2,num3,num1);  
}                                                 
if (num2>num1 && num1>num3){                    
printf ("%f %f %f",num3,num1,num2);
}
if (num2>num3 && num3>num1){
printf ("%f %f %f",num1,num3,num2); 
}
if (num3>num1 && num1>num2){
printf ("%f %f %f",num2,num1,num3);
}
if (num3>num2 && num2>num1){
printf ("%f %f %f",num1,num2,num3);
}

return 0;
}

Para o input...

2
6
4

...obtive este output:

Programa Crescente
Introduza primeiro numero?
Introduza segundo numero?
Introduza terceiro numero?
segue lista de numeros em ordem crescente: 2.000000 4.000000 6.000000

btw, já aprendeste arrays?

Editado por thoga31

Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

não, será sempre com um ciclo

se queres usar if's o que tens de fazer é

variavel X, Y, Z

ler do teclado X
ler do teclado Y
ler do teclado Z

se X menor que Y entao
 troca X com Y
se Y menor que Z entao
 troca Y com Z
se X menor que Y entao
 troca X com Y


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ruka284

Ok... vamos a ver se entendemos uma coisa: quando fazes o printf em cada if, já estás a dar a lista por ordem crescente. O último printf não faz mais nada se não dar os números pela ordem pela qual foram introduzidos. Até aqui, alguma dúvida?

Depois, estás a utilizar apontadores nos printf em 1 das 3 variáveis numéricas - não se usa apontadores neste caso.

Por último, olha o teu código, mas corrigido, e vê se compreendes aquilo que te temos vindo a dizer.

#include<stdio.h>

int main()

{
float num1,num2,num3;

printf("\n Programa Crescente\n");

printf("Introduza primeiro numero?\n");
scanf("%f",&num1);
printf("Introduza segundo numero?\n");
scanf("%f",&num2);
printf("Introduza terceiro numero?\n");
scanf("%f",&num3);  

printf("segue lista de numeros em ordem crescente: ");
if (num1>num2 && num2>num3){
printf ("%f %f %f",num3,num2,num1);
}								
if (num1>num3 && num3>num2){
printf ("%f %f %f",num2,num3,num1);  
}												
if (num2>num1 && num1>num3){					
printf ("%f %f %f",num3,num1,num2);
}
if (num2>num3 && num3>num1){
printf ("%f %f %f",num1,num3,num2);
}
if (num3>num1 && num1>num2){
printf ("%f %f %f",num2,num1,num3);
}
if (num3>num2 && num2>num1){
printf ("%f %f %f",num1,num2,num3);
}

return 0;
}

Para o input...

2
6
4

...obtive este output:

Programa Crescente
Introduza primeiro numero?
Introduza segundo numero?
Introduza terceiro numero?
segue lista de numeros em ordem crescente: 2.000000 4.000000 6.000000

btw, já aprendeste arrays?

tu metes o int antes do main para saber se o programa correu normalmente?

ele não aceita esta sintaxe if (num3>num2>num1)

tem de ser assim if (num3>num2 && num2>num1){

Editado por Ruka284

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
dramos21

tu metes o int antes do main para saber se o programa correu normalmente?

mesmo como fizeste não ordena os numeros testa, estou testar no dev c e dá os meus erro como eu tinha.

Eu testei e ordena os números como pretendes, não testei foi no dev c.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Ruka284

No dev C dá erro

#include<stdio.h>


int main()

{
float num1,num2,num3;

printf("\n Programa Crescente\n");

printf("Introduza primeiro numero?\n");
scanf("%f",&num1);
printf("Introduza segundo numero?\n");
scanf("%f",&num2);
printf("Introduza terceiro numero?\n");
scanf("%f",&num3);   

printf("segue lista de numeros em ordem crescente: ");
if (num1>num2 && num2>num3){
printf ("%f %f %f",num3,num2,num1); 
}                                
if (num1>num3 && num3>num2){
printf ("%f %f %f",num2,num3,num1);  
}                                                 
if (num2>num1 && num1>num3){                    
printf ("%f %f %f",num3,num1,num2);
}
if (num2>num3 && num3>num1){
printf ("%f %f %f",num1,num3,num2); 
}
if (num3>num1 && num1>num2){
printf ("%f %f %f",num2,num1,num3);
}
if (num3>num2 && num2>num1){
printf ("%f %f %f",num1,num2,num3);     
 {                                                                       
                                                                      }

return 0;

 }

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.