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
#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
Pergunta
petalpusher
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; }#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; }#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.
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.