Ir para conteúdo
Fórum Script Brasil
  • 0

Novo Problema com Lista.


N a T a N

Pergunta

Minha Lista tem apresentado alguns problemas, e estou ficando com algumas dúvidas na passagem de parametros, e ela está com erro na hora de imprimir.

Arquivos .h

// agenda.h

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "Compromisso.h"

struct agenda{
       int idAgend;
        int identProf;
        char nomeProfer[MAX];
        int ano;
        Compromisso *c;
        struct agenda *prox;
        }; typedef struct agenda Agenda;

Agenda * criaAgenda(Agenda *a, int idProf, char *name, int ano);

Agenda * insereCompromisso(Agenda *a,char *tip,char *name,Data *dat, int hor, int durac);

Agenda * novoAgenda(Agenda *a,Compromisso *comp);


void imprimeAgenda(Agenda *a);


/* ------------------------------------------------------------------------------------------------------------------------------ */

//Compromisso.h

#define MAX 100
enum boolean { true=1,false=0 };
typedef enum boolean bool;

enum Status { A_SER_CUMPRIDO=1, ADIADO=2, CANCELADO=3 };
typedef enum Status stats;

typedef struct{
        int dia;
        int mes;
        int ano;
        }Data;

typedef struct{
        char tipo[MAX];
        char nome[MAX];
        Data data;
        int hora;
        int duracao;
        int prioridade;
        stats status;
        bool adiavel;
        int identificador;
        } Compromisso;

int inicializaCompromisso(Compromisso *c,char *tip,char *name,Data *dat,int hor, int durac);

void alteraPrioridade(Compromisso *c,int priorid);

int retornaPrioridade(Compromisso *c);

bool eAdiavel(Compromisso *c);

bool temConflito(Compromisso *c1, Compromisso *c2);

void atribuiStatus(Compromisso *c,stats status1);

void imprimeCompromisso(Compromisso *c);
Arquivos .c
//Compromisso.c


#include "agenda.h"

int i=0;

int inicializaCompromisso(Compromisso*c,char *tip,char *name,Data *dat, int hor, int durac){

    c->identificador=++i;
    c->hora=hor;
    c->duracao=durac;
    if(strcmp("Aula",tip)==0)
       c->prioridade=2;
    else if(strcmp("Orientacao",tip)==0)
       c->prioridade=1;
    else if(strcmp("Reuniao",tip)==0)  
         c->prioridade=4;
    else if(strcmp("Evento",tip)==0)
         c->prioridade=3;
    else if(strcmp("Compromisso Particular",tip)==0)
        c->prioridade=2;               
         strcpy(c->tipo,tip);
         strcpy(c->nome,name);
         c->status=A_SER_CUMPRIDO;
         c->adiavel=false;
         c->data.dia=dat->dia;
         c->data.mes=dat->mes;
         c->data.ano=dat->ano;
    return c->identificador;
}

void alteraPrioridade(Compromisso *c,int priorid){
     c->prioridade=priorid;
     }

int retornaPrioridade(Compromisso *c){
    return c->prioridade;
}

bool eAdiavel(Compromisso *c){
          if(c->tipo=="Aula" || c->tipo == "Evento")
                         return false;
     else
         return true;
}

bool temConflito(Compromisso *c1, Compromisso *c2){//Já testada.
          if((c1->data.dia==c2->data.dia)&&(c1->data.mes==c2->data.mes)&&(c1->data.ano==c2->data.ano) && (c1->hora==c2->hora))
                           return true;
     else
         return false;
}

void atribuiStatus(Compromisso *c,stats status1){ c->status=status1; }

stats retornaStatus(Compromisso *c){ return c->status; }

void imprimeCompromisso(Compromisso *c){
     printf("Identificador: %d\n",c->identificador);
     printf("Tipo: %s\n",c->tipo);
     printf("Data: %d/%d/%d\n",c->data.dia,c->data.mes,c->data.ano);
     printf("Hora: %d:00\n",c->hora);
     
     if(strcmp(c->tipo,"Evento")==0)
                                 printf("Duracao: %d\n",c->duracao);
     else{
         printf("Duracao: %d\n",c->duracao); } 
     
     if(strcmp("Aula",c->tipo)==0)
                                   printf("Nome da Disciplina: %s\n",c->nome); 
     else if(strcmp("Orientacao",c->tipo)==0)
          printf("Nome do Aluno: %s\n",c->nome);
     else if(strcmp("Reuniao",c->tipo)==0)
          printf("Nome da Reuniao: %s\n",c->nome);
     else if(strcmp("Evento",c->tipo)==0)
          printf("Nome do Evento: %s\n",c->nome);
     else if(strcmp("Compromisso Particular",c->nome)==0)
          printf("Motivo: %s\n",c->nome); 
          
     if(c->status==A_SER_CUMPRIDO)
          printf("A Ser Cumprido\n");
     else if(c->status==ADIADO)
          printf("Adiado\n");
     else if(c->status==CANCELADO)
          printf("Cancelado\n");
          
     if(c->adiavel==true)
                     printf("Pode ser adiado\n");
     if(c->adiavel==false)
                     printf("não pode ser adiado\n");
                     
}

/* --------------------------------------------------------------------------------------------------------------------------------------------------- */

//agenda.c


#include "agenda.h"

static int idenAgend=1;

Agenda * criaAgenda(Agenda *a, int idProf, char *name, int ano){
    a=(Agenda *)malloc(sizeof(Agenda));
    a->identProf=idProf;
    strcpy(a->nomeProfer,name);
    a->ano=ano;
    a->idAgend=idenAgend;
    a->prox=NULL;
    idenAgend++;
    return a;
}

Agenda * novoAgenda(Agenda *a,Compromisso *comp){
    Agenda *novo=(Agenda*)malloc(sizeof(Agenda));
    novo->c=comp;
    novo->prox=a;
    return novo;
}

Agenda * insereCompromisso(Agenda *a,char *tip,char *name,Data *dat, int hor, int durac){
       int x=inicializaCompromisso(&(a->c),tip,name,dat,hor,durac);
       Agenda *b=novoAgenda(a,(a->c));   
       return b;
}


void imprimeAgenda(Agenda *a){
     Agenda *z;
     printf("Id Agenda: %d\n",a->idAgend);
     printf("ID Professor: %d\n",a->identProf);
     printf("Nome do Professor: %d\n",a->nomeProfer);
     printf("Ano: %d\n",a->ano);
     printf("\n");
     for(z=a;z->prox!=NULL;z=z->prox){
     imprimeCompromisso(&(z->c));
     getch();
     printf("\n");
     }
}

[/quote]E a main.

[quote]

#include "agenda.h"


int main(){
    bool g;
    int a,b,cd;
    char name[]="Natan Avila";
    char nameEvent[]="Cervejada";
    char nameEvent2[]="Calourada";
    char nameEvent3[]="Trote";
    Data *dat;
    dat->dia=29;
    dat->mes=01;
    dat->ano=2010;
    char tip[]="Evento";
    char tip2[]="Orientacao";
    char tip3[]="Compromisso Particular";
    Agenda *k=criaAgenda(k, 2626, name, 2011);

    k=insereCompromisso(k,tip,nameEvent,dat,06,50);
        imprimeAgenda(k);
    k=insereCompromisso(k,tip2,nameEvent2,dat,02,40);
        imprimeAgenda(k);
    k=insereCompromisso(k,tip3,nameEvent3,dat,16,60);
        imprimeAgenda(k);

    imprimeAgenda(k);
    
    system("pause");
    free(k);
    return 0;
}

Como podem ver, o código apresenta erros durante a compilação, e não consigo resolver, principalmente na função de imprimir...

Se alguém souber alguma possível solução, ou informar o que está errado, eu agradeceria :D

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Desculpe, mas está dificil dar suporte a esse código. Fica muito dificil a leitura quando os nomes de variaveis não são auto-explicativas.

É uma minoria de variaveis, mas atrapalham demais na hora da leitura. Mesmo que sejam variaveis temporarias deve-se dar nomes melhores que a, k, c, z...

Excluindo os laços de repetição, quando usamos um i, j ou k como contadores por exemplo.

Mas eu até consegui fazer o código compilar, foi só retirar alguns '&' que não precisavam estar por la.

Se numa função você espera receber, por exemplo

void function(Agenda *agenda) { }
e sua agenda já foi declarada como um ponteiro
Agenda *agenda2011;
Então na passagem de parametros para função é só passar ela direto, sem o &.
function(agenda2011);

Após corrigidos esses erros o programa compilou, mas apareceram os problemas de lógica, alguns ponteiros são chamados sem terem sido alocados entre outros.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...