alves077 Posted May 1, 2012 at 09:09 PM Report #452526 Posted May 1, 2012 at 09:09 PM 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.
lesiano16 Posted May 1, 2012 at 09:15 PM Report #452529 Posted May 1, 2012 at 09:15 PM Mete o código todo.
pmg Posted May 1, 2012 at 09:18 PM Report #452531 Posted May 1, 2012 at 09:18 PM 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!
alves077 Posted May 1, 2012 at 09:33 PM Author Report #452534 Posted May 1, 2012 at 09:33 PM 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 ",®istos); 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
pmg Posted May 1, 2012 at 09:44 PM Report #452535 Posted May 1, 2012 at 09:44 PM 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!
alves077 Posted May 1, 2012 at 09:47 PM Author Report #452536 Posted May 1, 2012 at 09:47 PM 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.
pmg Posted May 1, 2012 at 09:54 PM Report #452538 Posted May 1, 2012 at 09:54 PM 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!
alves077 Posted May 1, 2012 at 10:00 PM Author Report #452540 Posted May 1, 2012 at 10:00 PM 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; } }
pmg Posted May 1, 2012 at 10:12 PM Report #452545 Posted May 1, 2012 at 10:12 PM 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!
alves077 Posted May 1, 2012 at 10:30 PM Author Report #452552 Posted May 1, 2012 at 10:30 PM Ok, tens razão não estava muito bem. Vou ver se consigo desenrascar. Obrigado pela ajuda, alves077.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now