Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Laurenn

[Resolvido] Exercício em C

Recommended Posts

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.