Jump to content

Recommended Posts

Posted

Boa noite,

Se alguém me puder dar uma ajuda agradecia.

Quero simplesmente por num vector de tipo de uma estrutura que define e há medida que vou preenchendo esse vector, num ciclo, vou enviando para uma função para ordena-lo, só não consigo enviar para a função o vector correcto e completo, já tentei de várias maneira com ponteiros e sem ponteiros, e um simples, mas não consigo implementar. Conseguem ajudar?

Um dos exemplos que fiz foi:

typedef struct teste *t;
typedef struct teste
{
int num;
}node;

t *aux;

alocar = (t *) malloc(num*sizeof(node));

depois faço um for e ele "crasha" sempre no ultimo elemento, não percebo. Quando vou inserir o ultimo elemento ele deixa de funcionar.

Obrigado pela atenção,

alves077

Edit: GeSHi adicionado (pmg)

Ve o tutorial de GeSHi para o adicionares numa proxima oportunidade.

Posted

typedef struct teste *t;

Atencao: com o primeiro typedef o tipo "t" ja e um pointer.

Ao declarares "t *aux" aux e um ponteiro para ponteiros (struct teste **aux)

Por esta razao eu nao gosto de esconder asteriscos atras dum typedef. Usa "struct teste *" em vez de "t"!

Quanto ao teu problema especifico ... mete mais codigo.

Nao te esquecas que em C, os arrays comecam em 0.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

Sim a ideia era essa. Mas basicamente quero ter um array de tipo teste onde envio para uma funçao e ordeno e fica ordenado depois.

typedef struct teste *t;
typedef struct teste
{
     int num;
}node;


int main()
{
    int i=0;

    char nome[max];
    t alocar;

    scanf("%d ",&registos);

    alocar = (bl) malloc(registos*sizeof(biblio_node));

    for(i=0;i<registos;i++)
    {

         scanf("%d %d %d %30[^\n]",&alocar[i].nome);
       
      /*aqui mando para a funçao para ordenar*/
      ordenar(alocar,i);
        
    }

   
    free(alocar);
    return 0;
}

void ordenar(t  *alocar, int i)
{
  aqui ordenava
}

Mais ou menos o codigo que tenho. Isto foi uma das maneiras que testei, mas nada. Se puderem ajudar agradecia.

Obrigado pela atenção,

alves077.

Edit (pmg): nao te esquecas de ler o tutorial de GeSHi

Posted

Nao te esquecas de ler o tutorial de GeSHi.

Uma ideia talvez mais pratica era leres o array todo sem te preocupares com ordenacao, e ordenares so o array completo, depois de todos os elementos terem sido lidos.

Sugestoes / Questoes:

a) para que servem os identificadores "bl" e "biblio_node"?

b) registos nao esta definido ou declarado ...

c) o teu scanf tem 4 % e apenas uma variavel. Mete la os % a baterem certo com as variaveis

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

Tens razão pus o código errado peço desculpa. Estava  no meu de uma alteração e nem corrigi como deve ser. Estes pontos já corrigi. Uma questão se souberes no algoritmo Insertion Sort não temos que ir ordenando á medida da insercção?

Obrigado pela atenção,

alves077.

Posted

no algoritmo Insertion Sort não temos que ir ordenando á medida da insercção?

Nao. O que o Insertion Sort faz é mais ou menos dividir o array em dois, em que a primeira parte esta vazia e a segunda parte tem os elementos todos fora de ordem. Depois, um elemento de cada vez, vai-os passando para a primeira parte respeitando a ordem.

Podes aplicar o algoritmo a medida que vais lendo elementos, mas é mas pratico (tens que escrever menos codigo e menos complexo) aplica-lo no final.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

Já fiz um esboço, não é +/- isto:

   for(i = 1; i <= tam; i++){

                j=i;
                while(v[j].num < v[j-1].num) {
                        aux = v[j];
                        v[j] = v[j - 1];
                        v[j - 1] = aux;
                        j--;
                        if(j == 0)break;
                }
        }


Posted

Já fiz um esboço, não é +/- isto:

   for(i = 1; i <= tam; i++){

Logo a partida, sem ler o resto (mas posso-me enganar), isto esta mal!

Os arrays em C, comecam no indice 0 e vao ate ao indice N - 1, onde N é o tamanho do array

Ao estudar o codigo verifico que a minha suposicao estava correcta ...

A tua ideia para implementacao do Insertion Sort esta +/- correcta, mas tens que ter atencao aos detalhes da implementacao.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

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
×
×
  • 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.