Provavelmente uma questão trivial C

T

tanky321

Guest
Eu estou tentando programa um direito que é dado 5 números inteiros, então ordena os números inteiros em ordem numérica.Catch é que tem que se usar declarações mais ou loops.

Sua proposta de im classe, e Im em uma perda completa.Heres o que tenho até agora, só para os dois primeiros números, mas não funciona.Alguma dica ou ajuda seria apreciada.fim (int int a, b, c, int d, int e)
(Int num_1 = 0;
num_2 int = 0;

if (a <b & & a <c & & a <d & & a <e)
(num_1 = a;
a = 0;)
else if (b <a & & b <c & & b <d & & b <e)
(num_1 = b;
b = 0;)
else if (c <a & & c <b & & c <d & & c <e)
(num_1 = c;
c = 0;)
else if (d <a & & d <b & & d <c & & d <e)
(num_1 = d;
d = 0;)
diferente
(num_1 = e;
E = 0;)
if (a <b & & a <c & & a <d & & a <e & & a! num_1 = & & a! = 0)
(num_2 = a;
a = 0;)
else if (b <a & & b <c & & b <d & & b e <& & b! num_1 = & & b! = 0)
(num_2 = b;
b = 0;)
else if (c <a & & c <b & & c <d & & c e <& & c! num_1 = & & c! = 0)
(num_2 = c;
c = 0;)
else if (d <a & & d <b & & d <c & & d e <& & D = num_1 & & D = 0)
(num_2 = d;
d = 0;)
else if (e <a & & e <b & & e <c & & e <d & & E! num_1 = & & E! = 0)
(num_2 = e;
E = 0;)printf ( "% d% d% d \ n \ n \ n", num_1, num_2);

)

 
Há muitas maneiras de fazer isso.Muito mais fácil de leitura / gravação ao usar um loop.
Uma maneira fácil de fazê-lo é encontrar a minuto de todas as cinco, então armazená-lo em "num_1", em seguida, encontrar as min dos quatro restantes, armazenar e repetir até feito.

 
Em vez de utilizar cinco variáveis inteiras separadas, seria mais fácil colocar os dados de entrada em uma matriz de cinco elementos, e em seguida, processá-lo com um laço.

Tente pesquisar no Google por "triagem algoritmos", e você vai encontrar descrições de várias técnicas.Por exemplo, o tipo "bolha" é provavelmente o mais simples de todas, apesar de ser relativamente ineficiente:
http://en.wikipedia.org/wiki/Sorting_algorithm

 
A triagem e matrizes de som grande, mas eu não posso usá-los.Im bastante restrito às Loops e declarações Se outra pessoa.

Eu tenho o programa de trabalho usando um laço for, mas ela vai funcionar se eu tiver entradas duplicadas.Il posto o meu programa em um segundo, apenas a necessidade de abrir meu laptop.Obrigado rapazes.

 
uso variável de estado (bitmap) para armazenar se vars são impressas ou não.Comece a encontrar um maior, uma vez encontrado - imprimi-lo e marcar o seu mapa de bits variável de estado como transformados em seguida, iniciar novamente em loop e saltar as vars cujos estados são marcadas como classificados.Então não matriz serão necessários.

 
Isto é o que eu tenho, eu uso o 1000000 pelo que tipo será de excluir essa variável.Mas ele acaba enroscando-me no longo prazo.Gostaria muito de usar essa função bitmap, mas não cobrimos isso, e ele não vai deixar-nos usá-lo.fim (int int a, b, c, int d, int e)
(Int num_1 = 0;
int count;

for (count = 0; count <5; count )
(
if (a <b & & a <c & & a <d & & a <e)
(num_1 = a;
a = 1000000;)
else if (b <a & & b <c & & b <d & & b <e)
(num_1 = b;
b = 1000000;)
else if (c <a & & c <b & & c <d & & c <e)
(num_1 = c;
c = 1000000;)
else if (d <a & & d <b & & d <c & & d <e)
(num_1 = d;
d = 1000000;)
else if (e <a & & e <b & & e <c & & e <d)
(num_1 = e;
E = 1000000;)

printf ( "% d", num_1);
)
)

 
Código:

/ / Esta é uma implementação rápida e suja de uma espécie de bolha.
Ele classifica em ordem crescente

/ / Fim.
Eu usei devcpp# include <cstdlib>

# include

# include conio.husing namespace std;

void Sortit (int *);int main (int argc, char * argv [])

(

int a [] = (1123, 675, 435, 33, 456);; matriz de números a serem classificados

int i;for (i = 0; i <= 4; i ); números saída unsorted

printf ( "% d", a );Sortit (a);printf ( "\ n \ n");for (i = 0; i <= 4; i ), a saída ordenada números

printf ( "% d", a );getch ();

system ( "PAUSE");

return EXIT_SUCCESS;

)void Sortit (int * a)

(

int i, bandeira, temp, count;flag = 1 / / 0 indica nenhuma swaps foram feitas, a triagem é feita

count = 0; / / apenas usada para depuração, será

/ / Fim de uma condição de loop infinito.while (flag! = 0 & count <2000)

(

flag = 0;

count ;

for (i = 0; i <= 3; i )

(

if (a > a [i 1]) / / test for maior do que a condição

(

temp = a ; / / swap e, se necessário

a = a [i 1];

a [i 1] = temp;

flag = 1; / / set sinalizador para indicar ainda alguma triagem para fazer

) / / Fim de que

) / / Fim de para

) / / Fim de enquanto

) / / Fim de Sortit
 
Regras do seu professor não deixar você muito de trabalhar.
Como sobre uma solução reentrante?
Código:

fim (int int a, b, c, int d, int e)

(

if (a> b)

ordem (b, c, d, e);

else if (b> c)

ordem (A, C, B, D, E);

else if (c> d)

b ordem (a,, D, C, E);

else if (d> e)

b ordem (a, b, c, e, d);

diferente

printf ( "% d% d% d% d% d \ n", a, b, c, d, e);

)
 
echo47 escreveu:

Regras do seu professor não deixar você muito de trabalhar.

How about this?Código:

fim (int int a, b, c, int d, int e)

(

if (a> b)

ordem (b, c, d, e);

else if (b> c)

ordem (A, C, B, D, E);

else if (c> d)

b ordem (a,, D, C, E);

else if (d> e)

b ordem (a, b, c, e, d);

diferente

printf ( "% d% d% d% d% d \ n", a, b, c, d, e);

)
 
Olhe novamente!"ordem" não é uma função da biblioteca.A função 'ordem' chama a si mesmo.

Opa, eu disse mais cedo "reentrantes".O termo correto é "recursiva".

 
echo47 escreveu:

Olhe novamente!
"ordem" não é uma função da biblioteca.
Esta função chama a si mesmo_Opa, eu disse mais cedo "reentrantes".
O termo correto é "recursiva".
 
const int size = 5;
int temp;
int x [tamanho] = (2, 6, 1, 7, 9);
for (int i = 0; i <tamanho-1; i )
(j = i 1, j <size; j )
if (x <x [j]) (temp = x , x = x [j], x [j] = temp;)
for (i = 0; i <5; i ) cout <<x ;

 

Welcome to EDABoard.com

Sponsor

Back
Top