Ir ao conteúdo
  • Cadastre-se

Ludmila Ribeiro

Membro Júnior
  • Posts

    4
  • Cadastrado em

  • Última visita

Reputação

0
  1. Boa tarde! Meu problema é que o conteúdo da lista encadeada não está sendo impresso, eu acredito que o problema possa estar no laço de repetição, porém já tentei por exemplo, trocar pelo while, e mesmo assim não funcionou. Desde já agradeço ela ajuda. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.c> typedef struct lembrete Lembrete; struct lembrete{ char lembretes[200]; int dia; int mes; }; typedef struct node Node; struct node{ Lembrete reminder; struct node *prox; }; Node* criar_node(){ Node* novo=(Node*)malloc(sizeof(Node)); return novo; } Node* inserir_fim(Node* Lista, int dia, int mes, char* string){ Node* novo = criar_node(); novo->reminder.dia = dia; novo->reminder.mes = mes; strcpy(novo->reminder.lembretes, string); if(Lista==NULL){ novo->prox=NULL; Lista=novo; } else{ Node* aux = Lista; while(aux->prox!=NULL){ aux = aux->prox; } novo->prox=NULL; aux->prox=novo; } printf("Lembrete cadastrado com sucesso!"); return Lista; } void imprimir_mes(Node* Lista, int mes_ver){ Node* ant = NULL; Node* p = Lista; const char *months[]={ "\nJaneiro","\nFevereiro","\nMarço","\nAbril","\nMaio","\nJunho","\nJulho","\nAgosto","\nSetembro","\nOutubro","\nNovembro","\nDezembro" }; int month_days[] = {0, 31, 29, 31, 30, 31, 30, 31 ,31 ,30, 31, 30, 31}; int year = 2020; int first_day; int x; int y; int z; int j; x = (year - 1.)/4.0; y = (year - 1.)/100.; z = (year - 1.)/400.; first_day = (year + x - y + z) %7; int i; printf("%s %d\n\n", months[mes_ver-1], year); printf("Dom Seg Ter Qua Qui Sex Sab\n"); for(i = 1; i < mes_ver; i++) { first_day = ((first_day + month_days[i])%7); } for(i = 1; i <= 1 + first_day * 5; i++) { printf(" "); } for(i = 1; i <= month_days[mes_ver]; i++) { while (p != NULL && p->reminder.mes != mes_ver && p->reminder.dia != i){ ant = p; p = p->prox; } if (ant == NULL && p != NULL) { textcolor(4); printf("%2d", i); textcolor(7); } else{ printf("%2d", i); } if((i + first_day)%7 > 0) printf(" "); else printf("\n "); }} void imprimir(Node* Lista){ int mes_ver; Node* aux; printf("Digite o mês que deseja visualizar(em número): "); scanf("%d", &mes_ver); imprimir_mes(Lista, mes_ver); printf("LEMBRETES\n"); for(aux=lista; aux!=NULL; aux=aux->prox) {if(aux->reminder.mes==mes_ver) { printf("Dia %d: %s", aux->reminder.dia, aux->reminder.lembretes); } }} Node* retirar(Node *Lista){ int month, day; printf("Digite o dia do lembrete que deseja deletar:"); scanf("%d", &day); printf("Digite o mês do lembrete que deseja deletar:"); scanf("%d", &month); Node* ant =NULL; Node* aux = Lista; while(aux!=NULL && aux->reminder.mes!=month){ ant = aux; aux=aux->prox;} if(aux == NULL) { printf("\nNão existe nenhum lembrete cadastrado"); return Lista; } if(ant == NULL) { Lista = aux->prox;} else{ ant->prox=aux->prox;} free(aux); return Lista; } void libera(Node* Lista){ while(Lista!=NULL){ libera(Lista->prox); free(Lista); } } int main(){ char string[200]; int opt, dia, mes; do{ Node* lista=NULL; printf("Escolha a opção\n"); printf("0. Sair\n"); printf("1. Apagar todos os lembretes\n"); printf("2. Exibir lembretes\n"); printf("3. Adicionar lembrete\n"); printf("4. Remover lembrete\n"); printf("Opção: "); scanf("%d", &opt); switch(opt){ case 0: libera(lista); break; case 1: libera(lista); break; case 2: imprimir(lista); system("pause"); break; case 3: printf("Digite o dia: "); scanf("%d", &dia); printf("Digite o mês(em número): "); scanf("%d", &mes); printf("Digite o lembrete: "); scanf("%s", string); lista=inserir_fim(lista, dia, mes, string); system("pause"); break; case 4: lista = retirar(lista); break; default: printf("Comando invalido\n\n"); } system("cls"); }while(opt!=0); }
  2. @arfneto Pensando em uma lista de eventos onde cada um possui um dia, um mês e um título, é possível inserir na lista essas três variáveis ou seria necessário fazer uma lista para cada variável?
  3. Boa tarde! Gostaria de ajuda com o meu código. O objetivo é fazer uma agenda, onde o usuário pode adicionar lembretes. É obrigatório que o código possua listas, pilhas ou filas, eu optei por usar pilhas porém estou enfrentando problemas com praticamente todas as funções. Poderiam me ajudar com algumas dicas para que o meu código funcione? #include <stdio.h> #include <stdlib.h> #define ANSI_COLOR_RED "\x1b[31m" #define ANSI_COLOR_BLACK "\033[30m" struct Calendario{ char lembrete[200][30]; int dia[30]; int mes[30]; struct Calendario *prox; }; typedef struct Calendario calendario; int tam; int menu(void); void inicia(calendario *PILHA); void opcao(calendario *PILHA, int op); void exibe(calendario *PILHA); void exibe(calendario *PILHA); void imprime_mes(calendario *PILHA, int meses); void libera(calendario *PILHA); void adicionar(calendario *PILHA); calendario *deletar(calendario *PILHA); int main(void) { calendario *PILHA = (calendario *) malloc(sizeof(calendario)); if(!PILHA){ printf("Sem memoria disponivel!\n"); exit(1); }else{ inicia(PILHA); int opt; do{ opt=menu(); opcao(PILHA,opt); }while(opt); free(PILHA); return 0; } } void inicia(calendario *PILHA) { int i =0; for (i = 0; i<30; i++){ PILHA->prox = NULL; tam=0; }} int menu(void) { int opt; printf("Escolha a opcao\n"); printf("0. Sair\n"); printf("1. Apagar todos os lembretes\n"); printf("2. Exibir lembretes\n"); printf("3. Adicionar lembretes\n"); printf("4. Remover lembretes\n"); printf("Opcao: "); scanf("%d", &opt); return opt; } void opcao(calendario *PILHA, int op) { calendario *tmp; switch(op){ case 0: libera(PILHA); break; case 1: libera(PILHA); inicia(PILHA); break; case 2: exibe(PILHA); break; case 3: adicionar(PILHA); break; case 4: tmp= deletar(PILHA); if(tmp != NULL) printf("LEMBRETE DELETADO"); break; default: printf("Comando invalido\n\n"); } } int vazia(calendario *PILHA) { int i =0; int cont = 0; for (i = 0; i<30; i++){ if(PILHA->prox == NULL) {cont++;} if(cont == 0) return 1; else return 0; }} calendario *aloca(c) { calendario *novo=(calendario *) malloc(sizeof(calendario)); if(!novo){ printf("Sem memoria disponivel!\n"); exit(1); }else{ printf("Título do lembrete: "); scanf("%s", &novo->lembrete[c]); printf("Dia do lembrete: "); scanf("%d", &novo->dia[c]); printf("Mês do lembrete(em número): "); scanf("%d", &novo->mes[c]); return novo; } } void imprime_mes(calendario *PILHA, int meses){ const char *months[]={ "\nJaneiro","\nFevereiro","\nMarço","\nAbril","\nMaio","\nJunho","\nJulho","\nAgosto","\nSetembro","\nOutubro","\nNovembro","\nDezembro" }; int month_days[] = {0, 31, 29, 31, 30, 31, 30, 31 ,31 ,30, 31, 30, 31}; int year = 2020; int first_day; int x; int y; int z; int j; x = (year - 1.)/4.0; y = (year - 1.)/100.; z = (year - 1.)/400.; first_day = (year + x - y + z) %7; int i; printf("%s %d\n\n", months[meses-1], year); printf("Dom Seg Ter Qua Qui Sex Sab\n"); for(i = 1; i < meses; i++) { first_day = ((first_day + month_days[i])%7); } for(i = 1; i <= 1 + first_day * 5; i++) { printf(" "); } for(i = 1; i <= month_days[meses]; i++) { for(j = 0; j<30; j++) { if (PILHA->mes[j] == 1) { printf(ANSI_COLOR_RED "%2d",i); printf(ANSI_COLOR_BLACK); } else { printf("%2d", i); }} if((i + first_day)%7 > 0) printf(" "); else printf("\n "); } } void exibe(calendario *PILHA) { if(vazia(PILHA)){ printf("PILHA vazia!\n\n"); return ; } int j; int meses; calendario *tmp; tmp = PILHA->prox; printf("Digite o mês que deseja visualizar: "); scanf("%d", &meses); imprime_mes( PILHA, meses); printf("LEMBRETES:"); for(j = 0; j<30; j++) { if(PILHA->mes[j] == meses) { while( tmp != NULL){ printf("Dia %d: %s", tmp->dia[j], tmp->lembrete[j]); tmp = tmp->prox; } } printf("\n\n"); } } void libera(calendario *PILHA) { if(!vazia(PILHA)){ calendario *proxCalendario, *atual; atual = PILHA->prox; while(atual != NULL){ proxCalendario = atual->prox; free(atual); atual = proxCalendario; } } } void adicionar(calendario *PILHA) { int c = 0; calendario *novo=aloca(c); c++; novo->prox = NULL; if(vazia(PILHA)) PILHA->prox=novo; else{ calendario *tmp = PILHA->prox; while(tmp->prox != NULL) tmp = tmp->prox; tmp->prox = novo; } tam++; } calendario *deletar(calendario *PILHA) { if(PILHA->prox == NULL){ printf("PILHA ja vazia\n\n"); return NULL; }else{ calendario *ultimo = PILHA->prox, *penultimo = PILHA; while(ultimo->prox != NULL){ penultimo = ultimo; ultimo = ultimo->prox; } penultimo->prox = NULL; tam--; return ultimo; } }
  4. Meu facebook foi hackeado e foi enviado no meu e-mail o endereço IP, a cidade e o modelo do celular do invasor. Segundo as informações, é alguém de minha cidade. Eu gostaria de saber se através do endereço IP eu conseguiria encontrar o endereço físico dessa pessoa ou o nome, para que eu leve o caso na justiça. Aproveitando este tópico, alguém sabe me informar se esse caso iria pra frente caso eu denuncie na delegacia? Desde já agradeço pelas respostas!

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!