Ir para conteúdo
Fórum Script Brasil

petalpusher

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre petalpusher

petalpusher's Achievements

0

Reputação

  1. Ola meus caros geeks...estou correndo contra o relógio... tenho 6 dias para entregar e travei... meu código tem muitas coisas desnecessárias, me perdi no meio do lixo todo, não estou conseguindo retornar ponteiro de um nó, não tenho a menor ideia de como implementar, estou praticamente f*****, continuar na facu depende desse trabalho, tive muitas provas e não tive tempo para trabalhar encima... é para fazer em grupo de 3 pessoas e eu não tenho grupo e sozinho não vou conseguir atender o prazo precisaria de umas 2 ou 3 semanas e tenho só 6 dias, trabalho e estudo dormindo 6hs por dia... peço ajuda ao veteranos que tem mais "pegada" para me ajudar com o código. as vezes um pequeno esforço de um grande, se torna uma enorme ajuda para um pequeno... agradeço de coração quem puder ajudar... tenho até terça para entregar... e estou f***** eu tenho 5 arquivos e já estruturei varias funções menos a parte de arquivo.... são 2 arvores, uma partido e outra candidatos, vao salvando todos os dados em arquivo binario. main,c tad.h tad.c candidatos.h candidatos.c uma aplicação em C para cadastrar os partidos e candidatos às eleições. Os dados de um partido são os seguintes: número, sigla e nome. O número do partido deve ser um valor maior do que 10 e menor que 100. Os dados de um candidato são: número e nome. Os dois primeiros dígitos do número do candidato correspondem ao número do seu partido (faça uma entrada de dados consistente e sem redundância). O número do candidato também informa o cargo que ele pleiteia: se o número do candidato tiver apenas dois dígitos (correspondentes ao número de seu partido), então trata-se de um candidato a prefeito; se o número do candidato possui 5 dígitos, então trata-se de um candidato a vereador. O programa deve ser conduzido por menu com as seguintes opções: • Cadastrar partido: solicita o número, sigla e nome de um ou mais partidos, sem permitir dois ou mais partidos com o mesmo número; • Alterar um partido: dado o número do partido, é possível alterar sua sigla ou nome; • Excluir um partido: dado o número do partido, excluir o partido e todos os seus candidatos; • Cadastrar candidato a prefeito: solicita o número do partido, mostra sua sigla, e depois solicita o nome do candidato, sem permitir dois ou mais candidatos com o mesmo número; • Cadastrar candidato a vereador: solicita o número do partido, mostra sua sigla, e depois solicita o número e o nome de um ou mais candidatos desse partido, sem permitir dois ou mais candidatos com o mesmo número (lembre-se que os 2 primeiros dígitos no número do candidato são o número do seu partido); • Alterar um candidato: dado o número de um candidato, permite alterar seu nome; • Excluir um candidato: dado o número do candidato, excluí-lo do cadastro; • Listar todos os partidos: deve permitir a listagem de todos os partidos cadastrado, exibindo em formato de tabela seu número, sigla e nome ordenados pelo número do partido; • Listar candidatos a prefeito: deve permitir a listagem no formato de tabela de todos os candidatos a prefeito cadastrados ordenados pelo número, exibindo a sigla do partido, o número e o nome do candidato. • Listar candidatos a vereador de um partido: deve solicitar o número do partido e exibir o nome do partido e uma listagem no formato de tabela contendo o número e o nome de todos os candidatos a vereador desse partido ordenados pelo seu número. Todas as informações a respeito dos partidos e candidatos devem ser armazenadas nos arquivos partidos.dat e candidatos.dat, respectivamente. Quando o programa é executado, ele cria automaticamente uma árvore binária de busca para cada arquivo, onde cada nó corresponde a um partido ou candidato. A partir daí, o único meio de acesso às informações deve ser através dessas árvores. O programa deve permitir que o arquivo e a árvore sejam atualizados quando um novo candidato ou partido é cadastrado, alterado ou excluído. Para permitir a atualização dos arquivos nas operações sem a necessidade de uma busca sequencial nos arquivos, cada nó da árvore também deve armazenar a posição do registro correspondente no arquivo. A operação de exclusão não exclui fisicamente o registro do arquivo, apenas da árvore. Os registros excluídos devem ser sinalizados com 0 (zero) no número do partido ou candidato. Esses registros não devem ser carregados nas árvores. #include <stdio.h> #include <stdlib.h> #include "candidatos.h" #include "tad.h" int main() { BinTree* treeParty = init_bintree(); int op; do { printf("\n\n\t [ CANDIDATOS A ELEICAO v1.0 ]\n\n"); printf("\t <1> Cadastrar Partido\n"); //add_Party printf("\t <2> Alterar Partido\n"); // mod_Party printf("\t <3> Excluir Partido\n"); // del_Party printf("\t <4> Cadastrar candidato a Prefeito\n"); // add_Mayor printf("\t <5> Cadastrar candidato a Vereador\n"); // add_Alderman printf("\t <6> Alterar um candidato\n"); //mod_Candidate printf("\t <7> Excluir candidato\n"); // del_Candidate printf("\t <8> Listar todos os partidos\n"); // print_Partys printf("\t <9> Listar candidatos a prefeito\n"); // print_Mayors printf("\t<10> Listar candidatos a vereador de um partido\n"); // print_Aldermans_party printf("\t <0> Sair\n"); printf("\n\t Opcao: "); scanf("%d", &op); switch (op) { case 1: add_Party(); // struct NODE* newNode = (node*) malloc(sizeof(newNode)); // newNode->dat_pos= 1; // break; case 2: mod_Party(); break; case 3: del_Party(); break; case 4: add_Mayor(); break; case 5: add_Alderman(); break; case 6: mod_Candidate(); break; case 7: del_Candidate(); break; case 8: print_Partys(); break; case 9: print_Mayors(); break; case 10: print_Alderman_party(); break; case 0: break; default: system("cls"); printf("\nOpcao invalida!"); } } while (op != 0); return 0; } #ifndef _TAD_H #define _TAD_H #include <stdbool.h> typedef struct NODE* BinTree; typedef struct NODE node; BinTree* init_bintree(); struct NODE* init_node(); void free_BinTree(BinTree *); int isempty_BinTree(BinTree *); int depth_BinTree(BinTree *); int howMany_nodes(BinTree *); int ins_node_bintree(BinTree *, struct NODE*); int ins_BinTree(BinTree *,int); int del_node_bintree(BinTree *,int); struct NODE* remove_node(struct NODE*); #endif #include "tad.h" #include <stdio.h> #include <stdlib.h> #include <stdbool.h> struct NODE { int num; char initials[7]; char name[35]; int dat_pos; struct NODE *left; struct NODE *right; }; BinTree* init_bintree() { BinTree* root = (BinTree*) malloc(sizeof(BinTree)); if(root != NULL) *root = NULL; return root; } struct NODE* init_node() { struct NODE* newNode = (struct NODE*) malloc(sizeof(struct NODE)); return newNode; }; void free_node(struct NODE* node) { if(node == NULL) { return; } free_node(node->left); free_node(node->right); free(node); node = NULL; } void free_BinTree(BinTree* root) { if(root == NULL) return; free_node(*root); free(root); } int isempty_BinTree(BinTree *root) { if(root == NULL) return 1; if(*root == NULL) return 1; return 0; } int depth_BinTree(BinTree *root) { if(root == NULL) return 0; if(*root == NULL) return 0; int depth_left = depth_BinTree(&((*root)->left)); int depth_right = depth_BinTree(&((*root)->right)); if(depth_left > depth_right) return(depth_left + 1); else return(depth_right + 1); } int howMany_nodes(BinTree *root) { if(root == NULL) return 0; if(*root == NULL) return 0; int depth_left = howMany_nodes(&((*root)->left)); int depth_right = howMany_nodes(&((*root)->right)); return(depth_left + depth_right + 1); } int ins_node_bintree(BinTree* root, struct NODE* newNode) { if(root == NULL) return 0; if(newNode == NULL) return 0; newNode->right = NULL; newNode->left = NULL; if(*root == NULL) *root = newNode; else { struct NODE* current = *root; struct NODE* previous = NULL; while(current != NULL) { previous = current; if(newNode->num == current->num) { free(newNode); return 0; //elemento já exite } if(newNode->num > current->num) current = current->right; else current = current->left; } if(newNode->num > previous->num) previous->right = newNode; else previous->left = newNode; } return 1; } int ins_BinTree(BinTree* root,int value) { if(root == NULL) return 0; struct NODE* newNode; newNode = (struct NODE*) malloc(sizeof(struct NODE)); if(newNode == NULL) return 0; newNode->num = value; newNode->right = NULL; newNode->left = NULL; if(*root == NULL) *root = newNode; else { struct NODE* current = *root; struct NODE* previous = NULL; while(current != NULL) { previous = current; if(value == current->num) { free(newNode); return 0; //elemento já exite } if(value > current->num) current = current->right; else current = current->left; } if(value > previous->num) previous->right = newNode; else previous->left = newNode; } return 1; } int del_node_bintree(BinTree *root,int value) { if(root == NULL) return 0; struct NODE* previous = NULL; struct NODE* current = *root; while(current != NULL) { if(value == current ->num) { *root = remove_node(current); } else { if(previous->right == current) current->right = remove_node(current); else previous->left = remove_node(current); } return 1; } previous = current; if(value > current->num) { current = current->right; } else { current = current->left; } return 0; } struct NODE* remove_node(struct NODE* current) { struct NODE *node1, *node2; if(current->left == NULL) { node2 = current->right; free(current); return node2; } node1 = current; node2 = current->left; while(node2->right != NULL) { node1 = node2; node2 = node2->right; } if(node1 != current) { node1->right = node2->left; node2->left = current->left; } node2->right = current->right; free(current); return node2; } void preordem_bintree(BinTree *root) { if(root == NULL) return; if(*root == NULL) { printf("%d\n",(*root)->num); preordem_bintree(&((*root)->left)); preordem_bintree(&((*root)->right)); } } void emordem_bintree(BinTree *root) { if(root == NULL) return; if(*root != NULL) { emordem_bintree(&((*root)->left)); printf("%d\n",(*root)->num); emordem_bintree(&((*root)->right)); } } int query_bintree(BinTree *root, int value) { if(root == NULL) return 0; struct NODE* current = *root; while(current != NULL) { if(value == current->num) { return 1; } if(value > current->num) current = current->right; else current = current->left; } return 0; } #ifndef _CANDIDATOS_H #define _CANDIDATOS_H #include <stdbool.h> /* função que adiciona Partido solicita numero, sigla e nome */ bool add_Party(); /* função que dado o numero do partido Altera sua Sigla ou Nome */ bool mod_Party(); /* função que deleta Partido dado seu numero junto a todos seus candidatos */ bool del_Party(); /* função que adiciona Prefeito solicita numero do partido, mostra a sigla e solicita o nome */ bool add_Mayor(); /* função que adiciona Vereador solicita numero do partido, mostra a sigla e solicita o nome */ bool add_Alderman(); /* função que dado o numero do candidato permite altera seu nome */ bool mod_Candidate(); /* função que dado o numero do candidato, exclui dito candidato */ bool del_Candidate(); /* função que mostra em tabela todos os partidos, seu numero, sigla e nome ordenados pelo numero do partido */ void print_Partys(); /* função que mostra em tabela todos os candidatos a prefeito ordenados pelo numero, exibindo a sigla, o numero e o nome do candidato */ void print_Mayors(); /* função que solicita o numero do partido e exibe nome do partido e uma listagem no formato de tabela contendo o numero e o nome de todos os vereadores desse partido ordenado por nome */ void print_Alderman_party(); #endif #include "candidatos.h" #include "tad.h" #include <stdio.h> #include <stdlib.h> #include <stdbool.h> bool add_Party() { // struct NODE* newNode = (struct NODE*) malloc(sizeof(struct NODE)); // struct NODE* newNode = (node*) malloc(sizeof(newNode)); newNode->dat_pos= 1; system("cls"); printf("\n\n\t [ CANDIDATOS A ELEICAO v1.0 ]\n\n"); printf("\t <1> Cadastrar Partido\n\n"); //add_Partido printf("\t Inserir Numero: "); // scanf("%d", &newNode->num); printf("\t Inserir Sigla: "); // scanf("%6s", &newNode->initials); printf("\t Inserir Nome: "); // scanf("%34[^\n]s", &newNode->name); // ArvBin* node = init_node(); // scanf("%d", ); // printf("\t Inserir Sigla: "); // scanf("%6s", &node->sigla); // scanf("%[^\n]s",a); // printf("\t Inserir Nome: "); // scanf("%6s", &node->nome); return false;} bool mod_Party() {return false;} bool del_Party() {return false;} bool add_Mayor() {return false;} bool add_Alderman() {return false;} bool mod_Candidate() {return false;} bool del_Candidate() {return false;} void print_Partys() {;} void print_Mayors() {;} void print_Alderman_party() {;} desde já obrigado.
×
×
  • Criar Novo...