Laurenn 0 Denunciar post Postado Setembro 12, 2009 Olá pessoal ... Se pudessem, gostaria da ajuda de vocês, estou fazendo técnico em informática, e tenho dificuldades na linguagem C. Utilizamos o programa Dev C++ no curso. então ... tenho um exercicio pra resolver, vejam : 1- Desenvolva um programa em C que leia um vetor de inteiros com 20 posições o coloque-o em ordem crescente, usando a seguinte estratégia de ordenação: • procure e selecione o menor elemento do vetor; • troque esse elemento pelo primeiro; • repita essa operação, envolvendo os 19 elementos restantes (selecionando o de menor valor com o elemento da segunda posição), depois os 18 elementos (trocando o de menor valor com o elemento da terceira posição), assim por diante até sobrar um único elemento: o maior de todos. ****************************** tenho este programa logo embaixo, mas preciso usar uma função void para resolve-lo. Então, como faço ???????? #include <stdlib.h> #include <stdio.h> int main() { int x[10]; int i, j, temp; /* Leitura do Vetor */ for (i = 0; i<10; i++) { printf("Digite um numero:"); scanf("%d",&x[i]); } //ordenando o vetor for (i=0;i<10; i++) for(j=i+1;j<10;j++) { if (x[i]>x[j]) { temp=x[i]; x[i]=x[j]; x[j]=temp; } } /* Impressão do Vetor Ordenado */ printf("Vetor em ordem crescente: \n"); for(i=0;i<10;i++) printf(" %d",x[i]); system("pause"); return 0; } **** Att - Laurenn Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Setembro 12, 2009 Olá Laurenn, Eu não entendi direito a sua dúvida... O seu programa funciona, certo? Então qual o problema? Como assim: "Usar uma função void para resolve-lo"?? você quiz dizer que precisa de uma função que ordene um array, é isso? A sua dificuldade está apenas em modularizar o código? http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Laurenn 0 Denunciar post Postado Setembro 12, 2009 Olá Laurenn, Eu não entendi direito a sua dúvida... O seu programa funciona, certo? Então qual o problema? Como assim: "Usar uma função void para resolve-lo"?? você quiz dizer que precisa de uma função que ordene um array, é isso? A sua dificuldade está apenas em modularizar o código? http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Creio que sim ! Mas ordenando um array ?! Como assim ? O que iria mudar no programa ? Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Setembro 12, 2009 Pelo que entendi voce precisa de uma função que receba um array por referencia e ordene-o. Assim voce pode retornar void e ao mesmo tempo ordenar o array passsado a função. Compartilhar este post Link para o post Compartilhar em outros sites
Laurenn 0 Denunciar post Postado Setembro 13, 2009 Sem querer incomodar, mas como farei isso ? :mellow: Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Setembro 13, 2009 Faz tempo que não programo em C. Vamos tentar: #include <stdlib.h> #include <stdio.h> int main(){ int x[10]; int i; /* Leitura do Vetor */ for (i = 0; i<10; i++){ printf("Digite um numero:"); scanf("%d",&x[i]); } //ordenando o vetor // aqui voce deve chamar a funcao, algo desse tipo: ordena(x); /* Impressão do Vetor Ordenado */ printf("Vetor em ordem crescente: \n"); for(i=0;i<10;i++) printf(" %d",x[i]); system("pause"); return 0; } Agora falta criar a função: void ordena(int *v){ int i, j, temp; for (i=0;i<9; i++){ for(j=i+1;j<10;j++){ if (v[i]>v[j]){ temp=v[i]; v[i]=v[j]; v[j]=temp; } } } } Veja se funciona, eu não tenho como testar. Compartilhar este post Link para o post Compartilhar em outros sites
Laurenn 0 Denunciar post Postado Setembro 13, 2009 funcionou, só que os números não ficam em ordem crescente ;x Compartilhar este post Link para o post Compartilhar em outros sites
Laurenn 0 Denunciar post Postado Setembro 13, 2009 O que seria ... comparação de pares de elementos adjacentes ? Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Setembro 13, 2009 O que seria ... comparação de pares de elementos adjacentes ? Eu apenas copiei o que voce postou. Única coisa que fiz foi modularizar. Agora eu li o que voce precisa fazer. Primeiro ele pede para ser 20 elementos e não 10. A estratégia que voce pode usar é essa: void ordena(int *v){ int i, j, temp; int menor; for (i=0;i<9; i++){ menor = v[i]; for(j=i+1;j<10;j++){ // ache o menor // quando achar o menor guarde o índice do menor e do elemento que será trocado } // faca a troca aqui } } Tente implementar isso. Compartilhar este post Link para o post Compartilhar em outros sites
Antharaz 3 Denunciar post Postado Setembro 14, 2009 O que seria ...comparação de pares de elementos adjacentes ? Olha cara... Acho que você não está nem tentando fazer... Eu apenas peguei a função que você criou e a do Kandrade e coloquei na ordem correta, logo depois compilei e executei. Não vi problema algum. Logo depois modifiquei para que seja armazenado 20 inteiros como o problema pede e não 10 como você colocou e deu certo. Code final: #include <stdlib.h> #include <stdio.h> void ordena(int *v){ int i, j, temp; for (i=0;i<19; i++){ for(j=i+1;j<20;j++){ if (v[i]>v[j]){ temp=v[i]; v[i]=v[j]; v[j]=temp; } } } } int main(){ int x[20]; int i; for (i = 0; i<20; i++){ printf("Digite um numero:"); scanf("%d",&x[i]); } ordena(x); printf("Vetor em ordem crescente: \n"); for(i=0;i<20;i++) printf(" %d",x[i]); system("pause"); return 0; } Créditos ao Kandrade que fez a função de ordenar... eu apenas deixei as funções na ordem certa. Compartilhar este post Link para o post Compartilhar em outros sites
Laurenn 0 Denunciar post Postado Setembro 14, 2009 Obrigada Antharaz http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif . E a todos que colaboraram !Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Setembro 15, 2009 Só que mesmo ela ordenando corretamente ela não cumpri o que o algoritmo pedia. A estratégia a ser usada era aquela que mostrei anteriormente. void ordena(int *v){ int i, j, temp; int menor; for (i=0;i<9; i++){ menor = v[i]; for(j=i+1;j<10;j++){ // ache o menor // quando achar o menor guarde o índice do menor e do elemento que será trocado } // faca a troca aqui } } Leia atentamente o que o exercício pede. O que foi implementado troca não apenas uma posição, mas todas que verificar seu posterior menor que o atual. Obrigada Antharaz http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif . E a todos que colaboraram !Abraços Compartilhar este post Link para o post Compartilhar em outros sites