Ir ao conteúdo
  • Cadastre-se

Igor Vargas

Membro Pleno
  • Posts

    180
  • Cadastrado em

  • Última visita

Tudo que Igor Vargas postou

  1. @Josesousa "novo" = novo nó "prox" = ponteiro que guarda a memória do prox valor inserido. "l" =cabeça da lista. "l" é a lista, mas como ela vai estar vazia ele vai receber NULL ou seja o ponteiro novo->prox= l vai apontar pro vazio que no momento é "l" pois não tem nada dentro ainda . No próximo valor inserido que vai ser o seu novo "NOVO" teu "NOVO->prox = l" recebe o resto da lista ou seja "l" vai ter o nó anterior e o teu "NOVO->prox" vai apontar pra ele. EX: 1->2->NULL quero adicionar o numero 3. passo o valor "novo->dado = 3", "l =1->2->NULL", "novo->prox=l" quando for adicionado meu novo "novo->prox " vai apontar pro numero "1" então 3->1->2->NULL. A a inserção de valores é sempre no inicio então se já tiver um nó na lista o próximo valor vai ser inserido atrás dele. Espero ter ajudado de alguma forma se ficou muito confuso desenhar é a melhor forma e praticar bastante.
  2. Cara o que me ajudou a entender listas encadeadas foi desenhar ela . E entender do zero o que cada função/estrutura esta fazendo. Se tiver dúvidas eu tenho uma lista com algumas funções. https://github.com/igorvargasp/C--codes Sua função inserir pode ser algo mais simples. Pequena sugestão. Lista* inserir(Lista *l, int valor){ Lista* novo= (Lista*)malloc(sizeof(Lista)); if(!novo){ printf("SEM MEMORIA!\n"); exit(1); } novo->dado = valor; novo->prox = l; return novo; } }
  3. @thiagocarmin A geral. int x,soma; for(x=0; x<10; x++{ soma+=vet[x]; }
  4. Se tiver como postar o que já foi feito. A partir dai podemos ajudar.
  5. strcmp() compara letra por letra. Não sei se entendi. Mas o certo seria. if(strcmp(ch1,ch2)==0) { printf("acesso permitido"); }else printf("acesso negado");  caso seja de exemplo, erro meu.
  6. Para achar o maior. int x,maior=0; for(x=0; x<10; x++{ if(vet[x] > maior){ maior = vet[i]; } } Para achar o menor. int x,menor=0; for(x=0; x<10; x++{ if(vet[x] < menor){ menor= vet[i]; } } Para saber os negativos. int x,cont=0; for(x=0; x<10; x++{ if(vet[x] < 0){ cont++; } } Não entendi essa. A soma do maior e menor ou a soma geral?
  7. No do - while tu define a saída do laço. Ex: int x=0; do{ }while(x!=1); //enquanto o x nao for 1 ele fica repetindo sobre o switch. Você coloca a variável a ser usada. Ex int num; printf("1:Arroz"); printf("2:Batata"); do{ switch(num){ case 1:printf("informações sobre arroz"); break; case 2: printf("informações sobre Batata"); break; default: //Escolher qualquer opção que nao esteja no switch entra em default e termina o programa }while(num !=0); //coloque uma opção de saída para o usuário
  8. Olá estou tentando implementar uma fila de prioridade, mas a minha função de inserção não esta funcionando. #include <stdio.h> #include <stdlib.h> #define MAX 10 void insercao(int vet[MAX],int i){ int cont=-1; cont++; vet[cont]=i; } void troca(int vet[MAX],int a, int b){ int aux; aux = vet[a]; vet[a] = vet[b]; vet[b] = aux; } void pai(int vet[MAX], int i){ while( i > 0 && vet[i]<vet[i/2]){ troca(vet,i,i/2); i = i/2; } } void imprime(int vet[MAX]){ int x; for(x = 0; x<MAX; x++){ printf("[%d]-",vet[x]); } } int vet[MAX]; main(){ printf("Digite um Numero na heap:"); insercao(vet,10); insercao(vet,35); insercao(vet,30); imprime(vet); }
  9. @AnsiC Agora funcionou!!. Obrigado pela ajuda mesmo. Desculpa ocupar muito do teu tempo.
  10. @AnsiC Essa parte esta correta. Estou com dúvidas na parte de inserção de um novo contato. Pois quando eu exibo a lista ela duplicado o contato.
  11. @AnsiCEsta acontecendo esse problema. letra_t *insere_char(contato *c, letra_t *iniciais). depois de inserido a primeira palavra fica assim. i: igor. Quando é inserido a segunda fica assim. Na exibição. i: igor,joao. j: joao. imagem abaixo
  12. @AnsiCAgora funcionou a parte de excluir. Estou tentando arrumar essa questão. depois de inserido a primeira palavra fica assim. i: igor. Quando é inserido a segunda fica assim. Na exibição. i: igor,joao. j: joao.
  13. @AnsiCMais ou menos isso ?. Ta funcionando mas acho que estou retornando algo errado pois a lista fica vazia quando apago um contato da letra. Função de busca letra_t *busca_letra(letra_t *l, char nome){ letra_t *busca = l; letra_t *ant=NULL; while(busca!=NULL){ ant = busca->prox; if(busca->letra == nome){ return ant; } busca = busca->prox; } } Função de retirar a letra. Caso não tenha nome com a letra inicial dela. letra_t *letra_retira(letra_t *l,char nome){ letra_t *p = l; letra_t *marcador =busca_letra(marcador,nome); if(marcador!=NULL){ p = marcador->prox; marcador->prox = p->prox; } return l ; }
  14. @AnsiC Não estou conseguindo fazer a parte de se a letra estiver sem contato.A letra ser deletada. letra_t *retira_letra(letra_t *l){ letra_t *p =l; letra_t *ant=NULL; while(p!=NULL){ ant = p; p = p->prox; } if(ant->prox = NULL){ l = p->prox; }else{ ant->prox = p->prox; } return l; }
  15. @AnsiC Entendi, de qualquer foma valeu pela ajuda, tenho uns 12 dia pra entregar ainda. O meu professor não ajudou muito com as explicações dele, ai to tentando me virar com o o que eu sei.
  16. Olá. Estou estou com uma dúvida onde preciso adicionar um contato de uma lista normal para outra lista favoritos. Só que não pode fazer a cópia do contato da lista normal. Favoritos: Uma outra lista, com ponteiros para os contatos favoritos deve ser criada. Contatos marcados como favoritos na agenda devem ser adicionados ao final da lista de favoritos. Contatos podem ser removidos apenas da lista de favoritos. Contatos removidos da agenda, caso sejam favoritos, devem ser removidos dos favoritos. Por fim, deve ser possível visualizar a lista dos contatos favoritos. typedef struct CONTATO{ char *nome; char *sobrenome; int numeroT; char *email; struct CONTATO *prox; }contato; typedef struct FAVORITOS{ struct contato * listadeContatos; struct Favoritos * prox; }favorito; favorito *inserir_Fav(favorito *f, contato *c, char nome[TAM], char sobrenome[TAM]){ contato *contato_= c,*ant; favorito *favorito_ =(favorito*)malloc(sizeof(favorito)); while(contato_!=NULL){ ant = contato_; if(nome[TAM] == contato_->nome && sobrenome[TAM] == contato_->sobrenome){ favorito_->listadeContatos = contato_; favorito_->prox =NULL; }else{ contato_=contato_->prox; } } return favorito_; }
  17. @AnsiC Me confundi. É isso que devo fazer. Favoritos: Uma outra lista, com ponteiros para os contatos favoritos deve ser criada. Contatos marcados como favoritos na agenda devem ser adicionados ao final da lista de favoritos. Contatos podem ser removidos apenas da lista de favoritos. Contatos removidos da agenda, caso sejam favoritos, devem ser removidos dos favoritos. Por fim, deve ser possível visualizar a lista dos contatos favoritos. Dei uma editada no código, gostaria que você desse uma olhada, se der. https://pastebin.com/7wcimDws
  18. @AnsiC Estou com uma certa dúvida numa parte desse trabalho que estou fazendo. O trabalho pede pra mim criar uma lista favoritos, receber ela da lista contatos, caso a pessoa queira adicionar um contato aos favoritos, se a pessoa excluir um contato da lista de favoritos ele ser excluido da lista normal. O problema é que o professor não quer que seja uma copia, pois precisaria deletar da lista favoritos e da lista normal. Tentei fazer uma função mas acho que esta faltando algo. A ideia que eu tive era pegar o endereço de memoria onde esse nome esta e excluir caso eu queira, ou buscar ele. typedef struct CONTATO{ char *nome; char *sobrenome; int numeroT; char *email; struct CONTATO *prox; }contato; typedef struct FAVORITOS{ struct contato * listadeContatos; struct Favoritos * prox; }favorito; favorito *insercao_Fav(favorito *f, contato *c, char *nome, char *sobrenome){ contato *contato_= c,*ant; favorito *favorito_ =(favorito*)malloc(sizeof(favorito)); while(contato_!=NULL){ ant = contato_ if(nome == contato_->nome && sobrenome == contato_->sobrenome){ favorito_->listadeContatos = contato_; favorito_->prox =ant; }else{ ontato_=contato_->prox; } } return favorito; }
  19. C é interessante mas as vezes é uma dor de cabeça, recomendo python. Você precisa tentar resolver o código e mandar aqui quando tiver dúvidas.
  20. eu tenho que apontar a letra pro nome que tem o mesmo inicio só que em ordem?. Tem algum material que tu possa me recomendar pra dar uma lida ? @AnsiC
  21. @AnsiC Fiz a ordenação dessa maneira, mas acho que esta faltado algo. Porque ele mostra duas vezes o nome da pessoa. Digamos na lista que tem os nomes com "i" e depois mostra na lista certa. void ordena_alfa(letra_t * l) { if (l == NULL || l - > prox == NULL) return; //se for nulo(vazio), ou apenas 1 elemento letra_t * aux = l; letra_t * t; char s; while (aux != NULL) { t = aux - > prox; while (t != NULL) { if (aux - > letra > t - > letra) { //se vir depois s = aux - > letra; aux - > letra = t - > letra; t - > letra = s; } t = t - > prox; } aux = aux - > prox; } }
  22. @AnsiC valeu pela ajuda, não consegui entender direito listas ainda, mas to me esforçando haha. No caso da ordenação eu terei que fazer pela letra, certo?
  23. @AnsiC Eu acho que entendi. Vai ficar algo assim? letra_t *insereChar(contato *c,letra_t *iniciais){ //aqui eu coloco os contatos na lista da letra contato *novo_contato= malloc(sizeof(contato)); char inicial_do_novo_contato= novo_contato->nome[0]; if(iniciais == NULL){ iniciais= malloc(sizeof(letra_t)); iniciais->letra = c->nome; iniciais->lista_de_contatos=c; iniciais->prox = NULL; }else{ letra_t *buscar=iniciais; while(buscar !=NULL){ if(buscar->letra == inicial_do_novo_contato){ c->prox = buscar->lista_de_contatos; buscar->lista_de_contatos = c; break; }else{ buscar=buscar->prox; } } if(buscar == NULL){ letra_t *tmp_iniciais= malloc(sizeof(letra_t)); tmp_iniciais->letra= c->nome; tmp_iniciais->lista_de_contatos= c; tmp_iniciais->prox= iniciais; iniciais= tmp_iniciais; } } return iniciais; } A minha função de impressão, não ta imprimindo a letra. void imprime(contato *c, letra_t *l){ contato *p=c; letra_t *t=l; while(p!=NULL && t!=NULL){ //printf("\n"); printf("%c ->%s %s\n",t->letra,p->nome,p->sobrenome); t =t->prox; p=p->prox; } }
  24. @AnsiC essa variavel, eu pego como?. Desse jeito?

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!