Luthien 0 Denunciar post Postado Outubro 25, 2014 Tenho que inserir elementos na ordem crescente, fiz uma função usando strcmp, fiz só um teste pra testar mas n está dando certo, o programa para de responder. Alguém me ajuda? #include <stdio.h>#include <stdlib.h>typedef struct{ char nome; char sobrenome[50]; char data_nasc[15]; char id[15]; char ---o[20]; int idade;}TipoItem;typedef struct celula{ TipoItem item; struct celula *prox;}Celula;typedef struct{ Celula *prim; Celula *ult;}Lista;void FLVazia(Lista *lista){ lista->prim=(Celula*)malloc(sizeof(Celula)); lista->prim->prox=NULL; lista->ult=lista->prim;}int Vazia(Lista lista){ if(lista.prim==lista.ult) return 0; else return 1;}void Insere(Lista *lista, TipoItem x){//tipoitem x é valor pois não precisa altera-lo lista->ult->prox=(Celula*)malloc(sizeof(Celula));//aloca memoria para o prox do ultimo lista->ult->prox->item=x;//acessa o campoitem e coloca x dentro dele lista->ult=lista->ult->prox;//o ultimo avança para a primeira lista->ult->prox=NULL;//aterra}void Imprime(Lista lista){ Celula *aux; aux = (Celula*)malloc(sizeof(Celula)); aux = lista.prim->prox; while(aux!=NULL){ printf("Nome: %s ", aux->item.nome); printf("Sobrenome: %s ", aux->item.sobrenome); printf("Idade: %d",aux->item.idade); printf("Identidade: %s",aux->item.id); printf("Data de nascimento: %s ", aux->item.data_nasc); printf("---o: %s ", aux->item.---o); aux = aux->prox; }}//Celula *Pesquisa(TipoItem x, Lista lista)//{// if(!Vazia(lista)){// Celula *aux =lista.prim;// while(aux->prox != NULL){// if(aux->prox->item.cod==x.cod){// return aux;// }// aux=aux->prox;// }// printf("Posicao nao existente!")// }else// printf("Posicao nao existente!")//}void Retira(Celula *p, Lista *lista, TipoItem *x){ if(p==NULL || p->prox==NULL || Vazia(*lista)){ printf("\nNão [e possivel retirar!"); return; } Celula *aux; aux=p->prox; p->prox=aux->prox; *x=aux->item; free(aux); if(p->prox==NULL){ lista->ult=p; }}void ordenaNome(Lista* lista, TipoItem x){ Celula *aux; Celula *aux2; aux2 = (Celula*)malloc(sizeof(Celula)); aux2->item.nome = x.nome;//aux2 é a celula que vai armazenar o nome digitado aux = lista->prim->prox;;//aux vai apontar pro prox da cabeça //se o nome digitado for maior que o que está no prox da aux, e menor que o prox do prox da aux if(strcmp(x.nome, aux->item.nome) == 1 && strcmp(x.nome, aux->prox->item.nome) == -1){ aux2 = aux->prox;//aux de prox passa a apontar para aux2 aux2->prox = aux->prox;//aux2 passa a apontar para a celula que aux apontava }}int main(){ TipoItem item; Lista lista; FLVazia(&lista); int qtd, i; printf("Informe a quantidade de pessoas que deseja cadastrar: "); scanf("%d",&qtd); for(i = 0 ; i < qtd; i++){ printf("Informe o nome: "); scanf("%s",&item.nome); Insere(&lista,item); printf("Informe o sobrenome: "); scanf("%s",&item.sobrenome); Insere(&lista,item); printf("Informe a idade: "); scanf("%d",&item.idade); Insere(&lista,item); printf("Informe a data de nascimento no formato dd/mm/aa: "); scanf("%s",&item.data_nasc); Insere(&lista,item); printf("Informe a identidade: "); scanf("%s",&item.id); Insere(&lista,item); printf("Informe o ---o: "); scanf("%s",&item.---o); Insere(&lista,item); } Imprime(lista); ordenaNome(&lista,item);} Estava tentando imprimir a lista normal primeiro, mas fui testar e o programa n responde dps q digito os dados. Oq pode ser? Minha função imprime nao funciona em nenhum exercicio, n consigo nem ver se meus codigos estao certos D: sempre para de responder na hora q chamo a função... Compartilhar este post Link para o post Compartilhar em outros sites
LazaroBinda 3 Denunciar post Postado Outubro 26, 2014 Boa tarde, você precisa se atentar às partes que envolvem alocação dinâmica. #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct{ char nome[50]; char sobrenome[50]; char data_nasc[15]; char id[15]; char ___o[20]; int idade; }TipoItem; typedef struct celula{ TipoItem item; struct celula *prox; }Celula; typedef struct{ Celula *prim; Celula *ult; }Lista; void FLVazia(Lista *lista){ lista->prim=(Celula*)malloc(sizeof(Celula)); lista->prim->prox=NULL; lista->ult=lista->prim; } int Vazia(Lista lista){ if(lista.prim==lista.ult) return 0; else return 1; } void Insere(Lista *lista, TipoItem x){//tipoitem x é valor pois não precisa altera-lo lista->ult->prox=(Celula*)malloc(sizeof(Celula));//aloca memoria para o prox do ultimo lista->ult->prox->item=x;//acessa o campoitem e coloca x dentro dele lista->ult=lista->ult->prox;//o ultimo avança para a primeira lista->ult->prox=NULL;//aterra } void Imprime(Lista lista){ // aux = (Celula*)malloc(sizeof(Celula)); Celula *aux = lista.prim->prox; while(aux!=NULL){ printf("Nome: %s ", aux->item.nome); printf("Sobrenome: %s ", aux->item.sobrenome); printf("Idade: %d ",aux->item.idade); printf("Identidade: %s ",aux->item.id); printf("Data de nascimento: %s ", aux->item.data_nasc); printf("---o: %s\n", aux->item.___o); aux = aux->prox; } } //Celula *Pesquisa(TipoItem x, Lista lista) //{ // if(!Vazia(lista)){ // Celula *aux =lista.prim; // while(aux->prox != NULL){ // if(aux->prox->item.cod==x.cod){ // return aux; // } // aux=aux->prox; // } // printf("Posicao nao existente!") // }else // printf("Posicao nao existente!") //} void Retira(Celula *p, Lista *lista, TipoItem *x){ if(p==NULL || p->prox==NULL || Vazia(*lista)){ printf("\nNão [e possivel retirar!"); return; } Celula *aux; aux=p->prox; p->prox=aux->prox; *x=aux->item; free(aux); if(p->prox==NULL){ lista->ult=p; } } void ordenaNome(Lista* lista, TipoItem x){ Celula *aux, *aux2, *temp; temp = (Celula*)malloc(sizeof(Celula)); aux = lista->prim->prox; while (aux->prox) { aux2 = aux->prox; while (aux2) { if (strcmp(aux->item.nome, aux2->item.nome) > 0) { temp->item = aux->item; aux->item = aux2->item; aux2->item = temp->item; } aux2 = aux2->prox; } aux = aux->prox; } free(temp); // aux2->item.nome = x.nome;//aux2 é a celula que vai armazenar o nome digitado // aux = lista->prim->prox;;//aux vai apontar pro prox da cabeça // //se o nome digitado for maior que o que está no prox da aux, e menor que o prox do prox da aux // if(strcmp(x.nome, aux->item.nome) == 1 && strcmp(x.nome, aux->prox->item.nome) == -1){ // aux2 = aux->prox;//aux de prox passa a apontar para aux2 // aux2->prox = aux->prox;//aux2 passa a apontar para a celula que aux apontava // } } int main(){ TipoItem item; Lista lista; FLVazia(&lista); int qtd, i; printf("Informe a quantidade de pessoas que deseja cadastrar: "); scanf("%d",&qtd); for(i = 0 ; i < qtd; i++){ printf("Informe o nome: "); scanf("%s",item.nome); printf("Informe o sobrenome: "); scanf("%s",item.sobrenome); printf("Informe a idade: "); scanf("%d", &item.idade); printf("Informe a data de nascimento no formato dd/mm/aa: "); scanf("%s",item.data_nasc); printf("Informe a identidade: "); scanf("%s",item.id); printf("Informe o ---o: "); scanf("%s",item.___o); Insere(&lista,item); } ordenaNome(&lista,item); Imprime(lista); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
Eduardojt 0 Denunciar post Postado Outubro 27, 2014 Boa noite, pessoal. Estou como uma grande dificuldade neste algoritmo não sei por onde começar, alguém pode me dar uma ajuda. Obrigado Considere n cidades numeradas de 0 a n-1 que estão interligadas por uma série de estradas de mão única. As ligações entre as cidades são representadas pelos elementos de uma matriz quadrada Lnxn, cujos elementos lij assumem o valor 1 ou 0, conforme exista ou não estrada direta que saia da cidade i e chegue à cidade j. Assim, os elementos da linha i indicam as estradas que saem da cidade i, e os elementos da coluna j indicam as estradas que chegam à cidade j. Por convenção lii = 1. (a) Dado k, determinar quantas estradas saem e quantas chegam à cidade k. (usar o if) A qual das cidades chega o maior número de estradas? (cont++) (d) Relacionar as cidades que possuem saídas diretas para a cidade k. (e) Relacionar, se existirem: i. As cidades isoladas, isto é, as que não têm ligação com nenhuma outra; ii. As cidades das quais não há saída, apesar de haver entrada; iii. As cidades das quais há saída sem haver entrada. Compartilhar este post Link para o post Compartilhar em outros sites