gRoOvE 0 Denunciar post Postado Agosto 7, 2008 Exercicio: 1. Faça uma função que inicialize todas as posições do vetor para NULL. (Como vou inicializar todos se nem sei quantos vão ter?) 2. A cada cadastro, fazer o malloc utilizando um ponteiro auxiliar. Leia os dados de cadastro para dentro desta estrutura e passe para a função cadastrar este ponteiro como parâmetro para que esta proceda o cadastro. A forma de cadastro será somente atribuir o endereço recebido para a posição do cadastro atual no vetor. Fazer a verificação se o ponteiro recebido como parâmetro é nulo, antes de efetuar o cadastro. 3. Insira uma lógica para cadastrar a nova estrutura recebida na 1ª posição livre do vetor de ponteiros. (Usei a váriavel global qtd_cadastro, seria isso?) bom, estou tentando fazer alocação de uma struct aqui, mas to perdido...não sei onde criar a variavel da struct, se como global, ou dentro da main, ou sei lah onde...O que seria isso: FUNCIONARIO* cadastros[N]; ?? Um ponteiro para um vetor?? Não entendi como funciona isso "/ #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char nome[60]; int idade; }Funcionario; Funcionario *cadastro; int qtd_cadastro = 0; void Menu(); void ExecutaOpcao(int opcao); void Cadastrar(char *nome, int idade); void Exibir(); int main(void) { int opcao; cadastro = (Funcionario*)malloc(qtd_cadastro * sizeof(Funcionario)); if(cadastro == NULL) { printf("\nESTOURO DE MEMORIA!"); exit(0); } do { Menu(); printf("\nDigite uma opcao: "); scanf("%d",&opcao); ExecutaOpcao(opcao); }while(opcao != -1); return(0); } void Menu() { printf("0 - Cadastrar"); printf("\n1 - Exibir"); printf("\n2 - Alterar"); printf("\n3 - Excluir"); printf("\n-1 - Sair"); } void ExecutaOpcao(int opcao) { char nome[60]; int idade; switch(opcao) { case 0: printf("\nNome: "); fflush(stdin); scanf("%s",&nome); printf("Idade: "); fflush(stdin); scanf("%d",&idade); Cadastrar(nome,idade); break; case 1: Exibir(); break; case -1: printf("\nSAINDO..."); break; } } void Cadastrar(char *nome, int idade) { system("cls"); strcpy(cadastro[qtd_cadastro].nome,nome); cadastro[qtd_cadastro].idade = idade; qtd_cadastro++; } void Exibir() { int i; system("cls"); for(i=0;i<qtd_cadastro;i++) { printf("Nome: %s",cadastro[i].nome); printf("\nIdade: %d\n\n",cadastro[i].idade); } } Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Agosto 7, 2008 1. Faça uma função que inicialize todas as posições do vetor para NULL. (Como vou inicializar todos se nem sei quantos vão ter?) Na maioria das vezes não se espera a necessidade surgir p/ alocar espaço. O que se tem é um pool com espaço pra N elementos pré-alocado. Isso é de algum livro? Se for,ajuda reler o capítulo p/ ver qual é o foco da coisa. 3. Insira uma lógica para cadastrar a nova estrutura recebida na 1ª posição livre do vetor de ponteiros. (Usei a váriavel global qtd_cadastro, seria isso?) Parece que não. você só está contando qtos cadastros tem,mas essa variável não insere nada em lugar nenhum. É isso que tem que ser criado. .O que seria isso: FUNCIONARIO* cadastros[N]; ?? Um ponteiro para um vetor?? Não entendi como funciona isso Onde você tá vendo *cadastros[N]? 2. A cada cadastro, fazer o malloc utilizando um ponteiro auxiliar. Leia os dados de cadastro para dentro desta estrutura e passe para a função cadastrar este ponteiro como parâmetro para que esta proceda o cadastro. A forma de cadastro será somente atribuir o endereço recebido para a posição do cadastro atual no vetor. Fazer a verificação se o ponteiro recebido como parâmetro é nulo, antes de efetuar o cadastro. Leia essa parte de novo e olhe o que você está fazendo... Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Agosto 8, 2008 é tudo da minha "apostila"... Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Agosto 8, 2008 Assim fica dificil. Leia de novo pq tem coisa que você ta fazendo errado. Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Agosto 8, 2008 só uma coisa, isso existe FUNCIONARIO* cadastros[N];? Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Agosto 8, 2008 Sim... FUNCIONARIOS **Cadastro; Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Agosto 17, 2008 mudei umas coisas ai, mas ainda ta errado...não to conseguindo entender o que este exercício pede...ta muito confuso, mas acho que "Funcionarios cadastro;" tem que ser declarado como variável local neh?? pra fazer sentido este vetor de ponteiros para a estrutura Funcionarios. #include <stdio.h> #include <stdlib.h> #include <string.h> #define CADASTRAR 0 #define EXCLUIR 1 #define ALTERAR 2 #define IMPRIMIR 3 #define SAIR -1 #define SIZE 50 int qtd_cadastro = 0; typedef struct { char nome[60]; short idade; int rg; float salario; }Funcionarios; Funcionarios cadastro[SIZE]; void Menu(); void executaOpcao(int opcao); void Cadastrar(char *nom, short id, int rg, float sal, int slot); void Imprimir(); void Excluir(char *nom); void Alterar(char *nom); void inicializaVetorZerado(); int verificaPosicaoLivre(); void main(void) { int opcao; inicializaVetorZerado(); do { Menu(); printf("\nDigite a opcao: "); scanf("%d",&opcao); executaOpcao(opcao); }while(opcao != SAIR); } void Menu() { printf("0 - Cadastrar Funcionario\n"); printf("1 - Excluir aluno\n"); printf("2 - Alterar aluno\n"); printf("3 - Imprimir dados\n"); printf("-1 - SAIR\n"); } void executaOpcao(int opcao) { char nom[30]; short id; int rg; float sal; int slot; switch(opcao) { case CADASTRAR: slot = verificaPosicaoLivre(); if(slot == -1) { printf("\nVETOR CHEIO"); break; } printf("\nNome: "); fflush(stdin); gets(nom); printf("Idade: "); scanf("%d",&id); printf("RG: "); scanf("%d",&rg); printf("Salario: "); scanf("%f",&sal); Cadastrar(nom,id,rg,sal,slot); break; case EXCLUIR: printf("\nInforme o nome: "); fflush(stdin); gets(nom); Excluir(nom); break; case ALTERAR: printf("\nNome: "); fflush(stdin); gets(nom); Alterar(nom); break; case IMPRIMIR: Imprimir(); break; case SAIR: printf("\nSAINDO..."); break; } } void Cadastrar(char *nom, short id, int rg, float sal, int slot) { system("cls"); strcpy(cadastro[slot].nome,nom); cadastro[slot].idade = id; cadastro[slot].rg = rg; cadastro[slot].salario = sal; printf("MEMBRO CADASTRADO COM SUCESSO\n\n"); } void Imprimir() { int i; system("cls"); printf("[*** LISTA DE REGISTRO ***]\n"); for(i=0;i<SIZE;i++) { if(!(cadastro[i].nome[0] == '\0')) { printf("\nID #: %d",i); printf("\nNome: %s",cadastro[i].nome); printf("\nIdade: %d",cadastro[i].idade); printf("\nRG: %d",cadastro[i].rg); printf("\nSalario: %.2f",cadastro[i].salario); printf("\n"); } } printf("\n\n"); } void Excluir(char *nom) { int naoencontrado = 0; int i,k; system("cls"); for(i=0;i<SIZE;i++) { if(strcmp(nom,cadastro[i].nome) == 0) { for(k=i;k<SIZE;k++) { strcpy(cadastro[k].nome,cadastro[k+1].nome); } printf("REGISTRO EXCLUIDO!\n\n"); break; } else { naoencontrado = 1; } } if(naoencontrado) { printf("REGISTRO NAO ENCONTRADO\n\n"); } } void Alterar(char *nom) { int nao_encontrado = 0; int i; system("cls"); for(i=0;i<SIZE;i++) { if(strcmp(nom,cadastro[i].nome) == 0) { printf("Novo Nome: "); fflush(stdin); gets(cadastro[i].nome); printf("Nova Idade: "); scanf("%d",&cadastro[i].idade); printf("Novo RG: "); scanf("%d",&cadastro[i].rg); printf("Novo Salario: "); scanf("%f",&cadastro[i].salario); printf("REGISTRO ALTERADO!\n\n"); nao_encontrado = 0; break; } else { nao_encontrado = 1; } } if(nao_encontrado == 1) { printf("Registro Nao Encontrado no BD!\n\n"); } } void inicializaVetorZerado() { int i; for(i=0;i<SIZE;i++) { cadastro[i].nome[0] = '\0'; } } int verificaPosicaoLivre() { int i; for(i=0;i<SIZE;i++) { if(cadastro[i].nome[0] == '\0') { if(i == SIZE) { return -1; } return i; } } } Compartilhar este post Link para o post Compartilhar em outros sites