Ir ao conteúdo
  • Cadastre-se

meanmatheus

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

posts postados por meanmatheus

  1. @arfneto Eu dei uma arrumada no código, e agora eu consigo cadastrar uma disciplina do aluno e as avaliações da disciplina cadastrada, mas na hora de excluir um aluno ou uma disciplina do aluno a minha lógica não está dando certo. Se puder dar uma olhadinha, segue o código:

    aluno.h

    #ifndef ALUNO_H_INCLUDED
    #define ALUNO_H_INCLUDED
    #include "disciplinas.h"
    
    typedef struct AlunoNode {
        char nome[100], dataNascimento[11],matricula[10];
    	Disciplina * disciplinas;
        struct AlunoNode  * next;
        struct AlunoNode  * prev;
    }alunoNode;
    
    typedef struct Hnode {
        int size;
        struct AlunoNode * first;
    }hnode;
    
    void insertAluno(hnode * head, alunoNode * newnode);
    void show_list(hnode * head);
    void remove_node(hnode * head, alunoNode * nremove);
    hnode * initialize_list(hnode * head);
    hnode * new_list(void);
    alunoNode * new_node(char *matricula, char *nome, char *dataNascimento);
    alunoNode * search_node(hnode * head, char * matricula);
    #endif

    disciplina.h

    #ifndef DISCIPLINAS_H_INCLUDED
    #define DISCIPLINAS_H_INCLUDED
    
    #include "avaliacoes.h"
    
    typedef struct Avaliacoes {
        char nome[100];
        int nota, valor;
        struct Avaliacoes * prox;
    }Avaliacao;
    
    typedef struct DisciplinasListas {
        char nome[100];
        Avaliacao * avalicao;
        struct DisciplinasListas * prox;
    }Disciplina;
    
    Disciplina * removeDisciplina(Disciplina * headDisciplina);
    Disciplina * search_disciplina(Disciplina * disciplina, char * nome);
    int verificaNome(Disciplina *,char *);
    
    #endif

    disciplinas.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #include "disciplinas.h"
    
    int verificaNome(Disciplina * headDisciplina, char * disciplina) {
        struct DisciplinasListas * current = headDisciplina;
        int i=0;
        while(current != NULL ) {
            if(!strcmp(current->nome,disciplina))
                return i;
            current = current->prox;
            i++;
        }
        return -1;
    }
    
    Disciplina * search_disciplina(Disciplina * headDisciplina, char * disciplina) {
        struct DisciplinasListas * current = headDisciplina;
        while(current != NULL ) {
            if(!strcmp(current->nome,disciplina))
                return current;
            current = current->prox;
        }
        return NULL;
    }
    
    Disciplina * removeDisciplina(Disciplina * headDisciplina) {
        if(headDisciplina->prox == NULL) {
            printf("\nDisciplina removida!!!");
            return NULL;
        } else {
            Disciplina *ultimo = headDisciplina->prox,
                  *penultimo = headDisciplina;
            while(ultimo->prox != NULL) {
                penultimo = ultimo;
                ultimo = ultimo->prox;
            }
            penultimo->prox = NULL;
            return ultimo;
        }
    }

    aluno.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "aluno.h"
    
    void show_avaliacoes(Avaliacao * avaliacao) {
        if(avaliacao==NULL) return;
        Avaliacao * atual = NULL;
        for(atual = avaliacao; atual!= NULL; atual= atual->prox) {
            printf("\n%d-%d-%s",atual->valor,atual->nota,atual->nome);
        }
    }
    
    void show_disciplinas(Disciplina * disciplina) {
        if(disciplina==NULL) return;
        Disciplina * atual = NULL;
        for(atual = disciplina; atual!= NULL; atual= atual->prox) {
            printf("\n%s",atual->nome);
            if(atual->avalicao) show_avaliacoes(atual->avalicao);
        }
    }
    
    void show_node(alunoNode * no) {
        printf("\n[%s] ", no->matricula);
    }
    
    alunoNode * new_node(char *matricula, char *nome, char *dataNascimento) {
    
        alunoNode * newnode = (alunoNode*)malloc(sizeof(alunoNode));
        if(!newnode) {
            printf("Memory allocation failed");
            exit(1);
        }
        strcpy(newnode->dataNascimento,dataNascimento);
        strcpy(newnode->matricula,matricula);
        strcpy(newnode->nome,nome);
        newnode->disciplinas = NULL;
        newnode->prev = NULL;
        newnode->next = NULL;
    
        return newnode;
    }
    
    void insertAluno(hnode * head, alunoNode * newnode) {
        if (!head->first) {
            newnode->next = newnode->prev = newnode;
            head->first = newnode;
        } else {
            alunoNode * last = head->first->prev;
            newnode->next = head->first;
            head->first->prev = newnode;
            newnode->prev = last;
            last->next = newnode;
        }
        head->size+=1;
        return;
    }
    
    void remove_node(hnode * head, alunoNode * nremove) {
        if(head->first == nremove) {
            head->first = nremove->next;
            head->first->prev = nremove->prev;
            nremove->prev->next = nremove->next;
        } else {
            nremove->prev->next = nremove->next;
            nremove->next->prev = nremove->prev;
        }
        free(nremove);
        head->size-=1;
        return;
    }
    
    void show_list(hnode * head){
        struct AlunoNode * current = head->first;
        if(current){
            do{
                show_node(current);
                if (current->disciplinas)  show_disciplinas(current->disciplinas);
                current = current->next;
            }while(current != head->first);
            printf("\n");
        }
        return;
    }
    
    alunoNode * search_node(hnode * head, char * matricula) {
        struct AlunoNode * current = head->first;
        if(current) {
            do {
                current = current->next;
            } while(current != head->first && strcmp(current->matricula,matricula)!=0);
        }
        if(current) {
            return current;
        }
        return NULL;
    }
    
    hnode * new_list(void) {
        hnode * newlist = (hnode *)malloc(sizeof(hnode));
        initialize_list(newlist);
        return newlist;
    }
    
    hnode * initialize_list(hnode * head) {
        head->first = NULL;
        head->size = 0;
        return NULL;
    }

    main.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <locale.h>
    #include "aluno.h"
    #include "disciplinas.h"
    
    void cadastrarAluno(hnode * head) {
        char matricula[10],nome[100],dataNascimento[11];
        printf("\nForneca a matricula: ");
        fgets(matricula,10,stdin);
        setbuf(stdin,NULL);
        printf("\nForneca o nome: ");
        fgets(nome,100,stdin);
        setbuf(stdin,NULL);
        printf("\nForneca a data de nascimento: ");
        fgets(dataNascimento,11,stdin);
        setbuf(stdin,NULL);
        insertAluno(head,new_node(matricula,nome,dataNascimento));
    }
    
    void cadastrarDisciplinas(hnode *head) {
        char matricula[10], disciplina[100];
        printf("\nForneca a matricula do aluno: ");
        fgets(matricula,10,stdin);
        setbuf(stdin,NULL);
        alunoNode * busca;
        busca = search_node(head,matricula);
        if(busca) {
            do {
                printf("\nForneca o nome da disciplina: ");
                fgets(disciplina,100,stdin);
                setbuf(stdin,NULL);
            } while(verificaNome(busca->disciplinas,disciplina)!=-1);
            Disciplina * lDisciplina;
            if(busca->disciplinas==NULL) {
                Disciplina *temp = (Disciplina *)malloc(sizeof(Disciplina));
                strcpy(temp->nome,disciplina);
                temp->avalicao =NULL;
                temp->prox = busca->disciplinas;
                busca->disciplinas = temp;
            } else {
                Disciplina *temp = (Disciplina *)malloc(sizeof(Disciplina));
                strcpy(temp->nome,disciplina);
                temp->avalicao =NULL;
                lDisciplina = busca->disciplinas;
                temp->prox = lDisciplina->prox;
                lDisciplina->prox=temp;
            }
    
        } else {
            printf("\nAluno inexistente!!!");
        }
    }
    
    void cadastrarAvaliacaoDisciplinas(hnode *head) {
        char matricula[10], disciplina[100], nomeAvaliacao[100];
        int valor, nota;
        printf("\nForneca a matricula do aluno: ");
        fgets(matricula,10,stdin);
        setbuf(stdin,NULL);
        alunoNode * busca = search_node(head,matricula);
        if(busca) {
            printf("\nForneca o nome da disciplina: ");
            fgets(disciplina,100,stdin);
            setbuf(stdin,NULL);
            Disciplina * buscaDisciplina = search_disciplina(busca->disciplinas,disciplina);
            if(buscaDisciplina) {
                printf("\nForneca o nome da avaliacao: ");
                fgets(nomeAvaliacao,100,stdin);
                setbuf(stdin,NULL);
                printf("\nForneca o valor da avaliacao: ");
                scanf("%d",&valor);
                setbuf(stdin,NULL);
                do {
                    printf("\nForneca a nota do aluno na avaliacao: ");
                    scanf("%d",&nota);
                    setbuf(stdin,NULL);
                } while(nota<0 || nota>valor);
    
                Avaliacao * lAvaliacao;
                if(busca->disciplinas->avalicao==NULL) {
                    Avaliacao *temp = (Avaliacao *)malloc(sizeof(Avaliacao));
                    strcpy(temp->nome,nomeAvaliacao);
                    temp->valor=valor;
                    temp->nota=nota;
                    temp->prox = busca->disciplinas->avalicao;
                    busca->disciplinas->avalicao = temp;
                } else {
                    Avaliacao *temp = (Avaliacao *)malloc(sizeof(Avaliacao));
                    strcpy(temp->nome,nomeAvaliacao);
                    temp->valor=valor;
                    temp->nota=nota;
                    lAvaliacao = busca->disciplinas->avalicao;
                    temp->prox = lAvaliacao->prox;
                    lAvaliacao->prox=temp;
                }
            } else {
                printf("\nDisciplina inexistente!!!");
            }
        } else {
            printf("\nAluno inexistente!!!");
        }
    }
    
    void excluirAluno(hnode * head) {
        char matricula[10];
        int opcao;
        printf("\nForneça a matricula do aluno:");
        fgets(matricula, 10, stdin);
        setbuf(stdin,NULL);
        alunoNode * busca=search_node(head,matricula);
        if(busca!=NULL) {
            if(busca->disciplinas!=NULL) {
                printf("\nO aluno contem disciplinas cadastradas.");
                printf("\nDeseja continuar? 1-Sim 2-Não");
                scanf("%d", &opcao);
                setbuf(stdin, NULL);
                if(opcao==1) {
                    remove_node(head,busca);
                }
            } else {
                remove_node(head,busca);
            }
        } else {
            printf("\nAluno inexistente!!!");
        }
    }
    
    void excluirDisciplinaAluno(hnode * head) {
        char matricula[10], disciplina[100];
        int opcao;
        printf("\nForneça a matricula do aluno:");
        fgets(matricula, 10, stdin);
        setbuf(stdin,NULL);
        alunoNode * busca= search_node(head,matricula);
        if(busca!=NULL) {
            printf("\nForneça a disciplina:");
            fgets(disciplina, 100, stdin);
            setbuf(stdin,NULL);
            Disciplina * buscaDisciplina = search_disciplina(busca->disciplinas, disciplina);
            if(buscaDisciplina!=NULL) {
                if(buscaDisciplina->avalicao!=NULL) {
                    printf("\nO aluno contem avaliações cadastradas.");
                    printf("\nDeseja continuar? 1-Sim 2-Não");
                    scanf("%d", &opcao);
                    setbuf(stdin, NULL);
                    if(opcao==1) {
                        buscaDisciplina = removeDisciplina(buscaDisciplina);
                    }
                } else {
                    buscaDisciplina = removeDisciplina(buscaDisciplina);
                }
            } else {
                printf("\nDisciplina inexistente!!!");
            }
        } else {
            printf("\nAluno inexistente!!!");
        }
    }
    
    int main() {
        hnode * list1 = new_list();
        int opcao;
        setlocale(LC_ALL,"portuguese");
        do {
            printf("\n1- Cadastrar aluno");
            printf("\n2- Cadastrar disciplina do aluno");
            printf("\n3- Cadastrar avaliação da disciplina");
            printf("\n4- Listar");
            printf("\n5- Excluir aluno");
            printf("\n6- Excluir disciplina");
            printf("\n7- Sair");
            printf("\nForneca a sua opcao: ");
            scanf("%d", &opcao);
            setbuf(stdin,NULL);
            switch(opcao) {
            case 1:
                cadastrarAluno(list1);
                break;
            case 2:
                cadastrarDisciplinas(list1);
                break;
            case 3:
                cadastrarAvaliacaoDisciplinas(list1);
                break;
            case 4:
                show_list(list1);
                break;
            case 5:
                excluirAluno(list1);
                break;
            case 6:
                excluirDisciplinaAluno(list1);
                break;
            }
        } while(opcao!=7);
        return 0;
    }

     

  2. Eu estou fazendo um cadastro escolar onde eu crio uma lista duplamente encadeada circular para inserir os alunos, e uma lista simplesmente encadeada para inserir uma disciplina do aluno.
    Na parte de cadastrar aluno deu tudo certo, mas na hora de inserir a lista de disciplina na lista do aluno selecionado da erro. Quem puder me ajudar eu agradeço.
    Segue o codigo:

    aluno.h

    #ifndef ALUNO_H_INCLUDED
    #define ALUNO_H_INCLUDED
    
    typedef struct DisciplinasListas {
        char nome[100];
        struct DisciplinasListas * prox;
    }Disciplina;
    
    struct AlunosLista{
        char nome[100], dataNascimento[11],matricula[10];
        Disciplina * disciplinas;
        struct AlunosLista * next;
        struct AlunosLista * prev;
    };
    
    void cadastrarAluno();
    void imprimirLista();
    void cadastrarDisciplinas();
    struct AlunosLista * buscaAluno(char *);
    
    #endif


    main.c
     

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <stdbool.h>
    #include "aluno.h"
    
    typedef struct AlunosLista node;
    node *head = NULL, *tail = NULL;
    
    void cadastrarAluno() {
        node *newNode = (node *) malloc(sizeof(node));
        printf("\nForneca a matricula: ");
        fgets(newNode->matricula,10,stdin);
        setbuf(stdin,NULL);
        printf("\nForneca o nome: ");
        fgets(newNode->nome,100,stdin);
        setbuf(stdin,NULL);
        printf("\nForneca a data de nascimento: ");
        fgets(newNode->dataNascimento,11,stdin);
        setbuf(stdin,NULL);
        newNode->disciplinas=NULL;
    
        newNode->next = newNode;
        newNode->prev = newNode;
    
        if(head==NULL) {
            head = newNode;
            tail = newNode;
        } else {
            tail->next = newNode;
            newNode->next = head;
            newNode->prev = tail;
            tail = newNode;
            head->prev = tail;
        }
    }
    
    void imprimirLista() {
        if(head==NULL)  return;
        node *current = head;
        do {
            printf("\n%s", current->matricula);
            Disciplina *currentDisc = current->disciplinas;
            do {
                printf("\n%s", currentDisc->nome);
                currentDisc = currentDisc->prox;
            } while(currentDisc != current->disciplinas);
            current = current->next;
        }   while(current != head);
    }
    
    struct AlunosLista * buscaAluno(char matricula[]) {
        if(head==NULL)  return;
        node *current = head;
        do {
            if(!strcmp(current->matricula,matricula)) {
                return current;
                current = current->next;
            }
        }   while(current != head);
        return 0;
    }
    
    void cadastrarDisciplinas() {
        char disciplina[100], matricula[10];
        if(head==NULL)  return;
    
        printf("\nForneça a matricula do aluno:");
        fgets(matricula,10,stdin);
        setbuf(stdin,NULL);
        struct AlunosLista *busca = buscaAluno(matricula);
        if(busca!=0) {
            printf("\nForneça o nome da disciplina:");
            fgets(disciplina,100,stdin);
            setbuf(stdin,NULL);
            node *current = head;
            do {
                if(current==busca) {
                    if (!strcmp(current->matricula,matricula)) {
                        Disciplina * lDisciplina = (Disciplina *)malloc(sizeof(Disciplina));
                        strcpy(lDisciplina->nome,disciplina);
                        lDisciplina->prox = current->disciplinas;
                        current->disciplinas->prox = lDisciplina;
                        break;
                    }
                }
                current = current->next;
            }   while(current != head);
    
        } else
            printf("\nAluno inexistente!!!");
    }
    
    int main(){
        int opcao;
        do{
            printf("\n1-cadastrar aluno");
            printf("\n2-cadastrar disciplinas do aluno");
            printf("\n3-listar");
            printf("\n4-sair");
            printf("\nForneca a sua opcao: ");
            scanf("%d",&opcao);
            setbuf(stdin,NULL);
            switch(opcao){
                case 1:
                    cadastrarAluno();
                    break;
                case 2:
                    cadastrarDisciplinas();
                    break;
                case 3:
                    imprimirLista();
                    break;
            }
        }while(opcao!=4);
        return 0;
    }

     

  3. Eu fiz uma função em C que substitui os acentos que determinada palavra passada pelo parâmetro tem. O código funciona e substitui os caracteres com acento, mas o programa em si é abortado quando executa. Quem puder me ajudar com melhorias ou sugestões eu agradeço. Segue o código:

    void retiraAcentos(char str[]) {
        char *pch;
        pch = strstr(str,"Á");
        if (pch != NULL)
            strncpy(pch,"A",6);
        pch = strstr(str,"À");
        if (pch != NULL)
            strncpy(pch,"A",6);
        pch = strstr(str,"Â");
        if (pch != NULL)
            strncpy(pch,"A",6);
        pch = strstr(str,"Ã");
        if (pch != NULL)
            strncpy(pch,"A",6);
        pch = strstr(str,"Ä");
        if (pch != NULL)
            strncpy(pch,"A",6);
        pch = strstr(str,"É");
        if (pch != NULL)
            strncpy(pch,"E",6);
        pch = strstr(str,"È");
        if (pch != NULL)
            strncpy(pch,"E",6);
        pch = strstr(str,"Ê");
        if (pch != NULL)
            strncpy(pch,"E",6);
        pch = strstr(str,"Ë");
        if (pch != NULL)
            strncpy(pch,"E",6);
        pch = strstr(str,"Í");
        if (pch != NULL)
            strncpy(pch,"I",6);
        pch = strstr(str,"Ì");
        if (pch != NULL)
            strncpy(pch,"I",6);
        pch = strstr(str,"Î");
        if (pch != NULL)
            strncpy(pch,"I",6);
        pch = strstr(str,"Ï");
        if (pch != NULL)
            strncpy(pch,"I",6);
        pch = strstr(str,"Ó");
        if (pch != NULL)
            strncpy(pch,"O",6);
        pch = strstr(str,"Ò");
        if (pch != NULL)
            strncpy(pch,"O",6);
        pch = strstr(str,"Ô");
        if (pch != NULL)
            strncpy(pch,"O",6);
        pch = strstr(str,"Õ");
        if (pch != NULL)
            strncpy(pch,"O",6);
        pch = strstr(str,"Ö");
        if (pch != NULL)
            strncpy(pch,"O",6);
        pch = strstr(str,"Ú");
        if (pch != NULL)
            strncpy(pch,"U",6);
        pch = strstr(str,"Ù");
        if (pch != NULL)
            strncpy(pch,"U",6);
        pch = strstr(str,"Û");
        if (pch != NULL)
            strncpy(pch,"U",6);
        pch = strstr(str,"Ü");
        if (pch != NULL)
            strncpy(pch,"U",6);
        pch = strstr(str,"Ç");
        if (pch != NULL)
            strncpy(pch,"C",6);
    }

     

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!