-
Posts
173 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que Igor Vargas postou
-
Exercício em C: identificação de ovelhas
Igor Vargas respondeu ao tópico de Alex Brito Brito em C/C#/C++
Se tiver como postar o que já foi feito. A partir dai podemos ajudar. -
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.
-
C++ Programinha em C que pede 10 numeros
Igor Vargas respondeu ao tópico de thiagocarmin em C/C#/C++
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? -
C Crie matriz onde os números de linhas e colunas serão digitados pelo usuário
Igor Vargas respondeu ao tópico de Luis Gonzales em C/C#/C++
Alocando memória dinamicamente. Da uma olhada no malloc(); -
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
-
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); }
-
@AnsiC Agora funcionou!!. Obrigado pela ajuda mesmo. Desculpa ocupar muito do teu tempo.
-
@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.
-
@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
-
@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.
-
@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 ; }
-
@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; }
-
@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.
-
@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
-
@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; }
-
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.
-
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
-
@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; } }
-
@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?
-
@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; } }
-
@AnsiC essa variavel, eu pego como?. Desse jeito?
-
@AnsiC eu tenho que fazer algo parecido com a ilustração abaixo. Não entendi muito bem essa parte de apontar para outra lista. Porque as letras estão em outra lista, o que eu pensei em fazer é. Por exemplo. eu digito Igor, pego a inicial "i" e aponto ela pra lista que vai estar com meu nome, agora eu adiciono outra pessoa digamos AnsiC faço a mesma coisa só que o ultimo nome teria que apontar pra proxima letra como se fosse uma lista, foi assim que eu entendi. Mas não estou conseguindo emplementar. adicionado 9 minutos depois @AnsiC Eu dei uma atualizada no código. #include <stdio.h> #include <stdlib.h> #include <string.h> #include "agenda.h" #define TAM 50 main(){ contato *c; letras *l; c = NULL; l = NULL; char nome[TAM]; char sobrenome[TAM]; char email[TAM]; int numero; printf("_______________________\n"); printf("Bem-Vindo a Sua Agenda\n"); printf("_______________________\n"); //printf("\n"); int escolha; do{ printf("\n"); printf("1: Adicionar contato\n"); printf("2: Remover Contato\n"); printf("3: Exibir Contatos\n"); printf("4: Favoritos\n"); printf("5: Sair\n"); printf("_______________________\n"); printf("Escolha a Opcao Desejada: "); scanf("%d",&escolha); switch(escolha){ case 1: printf("_______________________\n"); printf("voce Selecionou Adicionar Contato\n"); printf("_______________________\n"); printf("Nome do Contato: "); fflush(stdin); gets(nome); printf("Sobrenome do Contato: "); gets(sobrenome); fflush(stdin); printf("email do contato: "); gets(email); printf("Numero de Contato: "); scanf("%d",&numero); c =inserir(nome,sobrenome,email,numero,c); l = insereChar(c,l); ordenar(c); break; //menu do programa case 2: printf("_______________________\n"); printf("voce Selecionou Remover Contato\n"); printf("_______________________\n"); printf("Digite o nome do contato: "); char nomec[TAM],sobrenomec[TAM]; fflush(stdin); gets(nomec); printf("Digite o Sobrenome: "); gets(sobrenomec); l =retiranome(c,nomec); l =retirasobrenome(c,sobrenomec); printf("Contato removido com sucesso!\n"); break; case 3: imprime(c,l); break; case 4: break; default: printf("Fim do Programa"); break; } }while(escolha != 5); } As funções estão nesse biblioteca #define TAM 50 #define MAX 500 typedef struct CONTATO{ char *nome; char *sobrenome; int numeroT; char *email; struct CONTATO *prox; }contato; typedef struct LETRAS{ char inicial; struct LETRAS *prox; }letras; contato *inserir(char *nome,char *sobrenome,char *email, int numero, contato *c){ contato *novo; novo = (contato*)malloc(sizeof(contato)); novo->nome =(char *)malloc(strlen(nome)+1); strcpy(novo->nome,nome); novo->sobrenome=(char *)malloc(strlen(sobrenome)+1); strcpy(novo->sobrenome,sobrenome); novo->email=(char *)malloc(strlen(email)+1); strcpy(novo->email,email); //inserção de contatos novo->numeroT=numero; novo->prox = c; return novo; } letras *insereChar(contato *c,letras *l){ letras *novo; contato *novoc = c; char passa[TAM]; if(c == NULL){ return 0; }else{ novo = (letras*)malloc(sizeof(letras)); passa[TAM]= novoc->nome; strcpy(passa,c->nome); char i = passa[0]; novo->inicial = i; novo->prox = l; //inserção de iniciais } return novo; } void ordenar(contato *c) { if(c == NULL || c->prox == NULL) return; //se for nulo(vazio), ou apenas 1 elemento contato *aux = c; contato *t; char s[MAX]; //precisa de espacao suficiente para armazenar o nome while(aux != NULL) { t = aux->prox; while(t != NULL) { if(strcmp(aux->nome, t->nome) > 0) { //se vir depois strcpy(s, aux->nome); strcpy(aux->nome, t->nome); strcpy(t->nome, s); } t = t->prox; } aux = aux->prox; } } void imprime(contato *c, letras *l){ contato *p=c; letras *t=l; while(p!=NULL && t!=NULL){ //printf("\n"); printf("%c-> %s %s\n",t->inicial,p->nome,p->sobrenome); t =t->prox; p=p->prox; } } contato *retiranome(contato *c, char *nome){ contato *ant = NULL; contato *p = c; while (p!=NULL && strcmp(p->nome,nome)!=0){ ant = p; p = p->prox; } if(p == NULL){ return c; //retira o nome } if(ant == NULL){ c = p->prox; }else{ ant->prox = p->prox; } free(p); return c; } contato *retirasobrenome(contato *c, char *sobrenome){ contato *ant = NULL; contato *p = c; while (p!=NULL && strcmp(p->sobrenome,sobrenome)!=0){ ant = p; p = p->prox; //retira o sobrenome } if(p == NULL){ return c; } if(ant == NULL){ c = p->prox; }else{ ant->prox = p->prox; } free(p); return c; }
-
@giu_d Daria, acontece que eu criei outro post pra ficar melhor caso outros membros tenha a mesma dúvida
-
Olá estou com duvida de como faço para minha lista LESTRAS apontar para CONTATOS. Toda vez que eu digito um novo nome preciso guardar a inicial do nome e apontar ela para os nomes que contem aquela inicial, mas estou com problemas para implementar. #include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 50 #define MAX 500 typedef struct CONTATO{ char *nome; char *sobrenome; int numeroT; char *email; struct CONTATO *prox; struct CONTATO *inicial; }contato; typedef struct LETRAS{ char inicial; struct LETRAS *prox; }letras; contato *inserir(char *nome,char *sobrenome,char *email, int numero, contato *c){ contato *novo; novo = (contato*)malloc(sizeof(contato)); novo->nome =(char *)malloc(strlen(nome)+1); strcpy(novo->nome,nome); novo->sobrenome=(char *)malloc(strlen(sobrenome)+1); strcpy(novo->sobrenome,sobrenome); novo->email=(char *)malloc(strlen(email)+1); strcpy(novo->email,email); novo->numeroT=numero; novo->prox = c; return novo; } letras *insereChar(letras *l, char nome){ letras *novo; novo = (letras*)malloc(sizeof(letras)); novo->inicial = nome; novo->prox = l; return novo; } void ordenar(contato *l) { if(l == NULL || l->prox == NULL) return; //se for nulo(vazio), ou apenas 1 elemento contato *aux = l; contato *t; char s[MAX]; //precisa de espacao suficiente para armazenar o nome while(aux != NULL) { t = aux->prox; while(t != NULL) { if(strcmp(aux->nome, t->nome) > 0) { //se vir depois strcpy(s, aux->nome); strcpy(aux->nome, t->nome); strcpy(t->nome, s); } t = t->prox; } aux = aux->prox; } } void imprime(contato *c, letras *l){ contato *p=c; letras *t=l; while(p!=NULL && t!=NULL){ //printf("\n"); printf("%c-> %s %s\n",t->inicial,p->nome,p->sobrenome); t =t->prox; p=p->prox; } } main(){ contato *l; letras *c; l = NULL; c = NULL; char nome[TAM]; char sobrenome[TAM]; char email[TAM]; int numero; printf("_______________________\n"); printf("Bem-Vindo a Sua Agenda\n"); printf("_______________________\n"); //printf("\n"); int escolha; do{ printf("\n"); printf("1: Adicionar contato\n"); printf("2: Remover Contato\n"); printf("3: Exibir Contatos\n"); printf("4: Favoritos\n"); printf("5: Sair\n"); printf("_______________________\n"); printf("Escolha a Opcao Desejada: "); scanf("%d",&escolha); switch(escolha){ case 1: printf("_______________________\n"); printf("voce Selecionou Adicionar Contato\n"); printf("_______________________\n"); printf("Nome do Contato: "); fflush(stdin); gets(nome); char passa = nome[0]; c = insereChar(c,passa); printf("Sobrenome do Contato: "); gets(sobrenome); fflush(stdin); printf("email do contato: "); gets(email); printf("Numero de Contato: "); scanf("%d",&numero); l =inserir(nome,sobrenome,email,numero,l); ordenar(l); break; case 2: break; case 3: imprime(l,c); break; case 4: break; default: printf("Fim do Programa"); break; } }while(escolha != 5); }
-
Aqui funcionou normal, talvez seja sua ide.
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