Ir ao conteúdo
  • Cadastre-se

48rneves15

Membro Júnior
  • Posts

    14
  • Cadastrado em

  • Última visita

Tudo que 48rneves15 postou

  1. Alguem pode me ajudar com a busca binaria e a busca recursiva e com apagar um elemento struct do vetor em C. #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <string.h> #include <time.h> #include <windows.h> ///Teste para verificar sistema operacional Windows ou Linux #ifdef __WIN32 ///para uso no Windows #define limpatela "cls" #else ///para uso no Linux #define limpatela "clear" #endif static int tam_vetor=0; /** definindo o tamanho dos vetores das strings*/ #define TAM 60 /** definindo tamanho máximo para o cadastro*/ #define MAX 10 /** Estrutura cadastro pessoa*/ typedef struct registro{ int cod; char nome[TAM]; int cpf; int idade; char sexo; char endereco[TAM]; int cep; char cidade[TAM]; char estado[TAM]; char cargo[TAM]; int celular; char email[TAM]; struct registro *prox; }REG_FUNCIONARIO; /** Criando um vetor struct para o registro*/ REG_FUNCIONARIO cadastro[MAX]; /** Protótipo da Funções*/ void pause(); void time_sleep(); void date_horas(); void dados_empresa(); void menu(); void opcao_menu(int op); void novo_cadastro(); void exibir_tudo(); void menu_busca(); void busca_nome(); void busca_recursiva(REG_FUNCIONARIO cadastro[],int tamanho,int pesq); void busca_idade(); void ordenar_idade(); int busca_binaria_codigo(); void bus_bin(); int main(void){ setlocale(LC_ALL,"portuguese"); ///Definindo a linguagem system("color 3f"); int tecla; ///variável de teste dados_empresa();///chama a função com os dados da empresa fictícia printf("\n\n\n\n\n\n\t\t\t\t\t\t\tBEM VINDO\n"); printf("\t\t\t\t\estão PROGRAMA DE CADASTRO DE FUNCIONÁRIOS\n\n\n\n\n\n"); printf("\n\n\n\n\t\t\t\t\t Precione <ENTER> para iniciar!\n"); tecla=getchar();///recebe o valor digitado if(tecla){ menu(); } return 0; } ///Uso estético void pause(){ printf("\n\n\n\n\n\n\n\n\t\t\tPrecione ENTER para continuar...\n"); getchar();///espera um digito } ///Uso estético void time_sleep(){ printf("\n\n\t\t\tAguarde Carregando...\n"); Sleep(1000);///gera um tempo de espera } ///Uso estético void date_horas(){ printf("\t\t\t%s, %s\n",__DATE__,__TIME__); } /** Declarando um ponteiro de acesso para o arquivo */ FILE *fpessoa; /** Dados de uma empresa fictícia */ void dados_empresa(){ char nome[]="NR MARKETING & LOGÍSTICA LTDA - ME"; char endereco[]="Av. josé Costa nº 23, BAIRRO: Cohama"; char cidade[]="São Luís - MA"; int fone=43216789; char cnpj[]="CNPJ 9567823410/0001-32"; char IE[]="IE 4321.321.567.98"; char email[]="E-mail: [email protected]"; printf("\n"); date_horas(); ///imprime data e hora printf("\t\t\t*********************************************************************\n"); printf("\t\t\t\t\t %s\n",nome); printf("\t\t\t\t %s, %s\n",endereco,cidade); printf("\t\t\t\t %s, %s\n",cnpj,IE); printf("\t\t\t Telefone %d, ",fone); printf("%s\n",email); printf("\t\t\t*********************************************************************\n"); } /** função menu de opções */ void menu(){ system(limpatela); int opc; dados_empresa();///exibe dados empresa fictícia puts("\n\n"); printf("\n\n\t\t CADASTRO DE FUNCIONÁRIOS \n\n"); puts(" \t\t\t 1 -> NOVO CADASTRO"); puts(" \t\t\t 2 -> EXIBIR CADASTRO"); puts(" \t\t\t 3 -> PESQUISA CADASTRO"); puts(" \t\t\t 4 -> ORDENAR"); puts(" \t\t\t 5 -> REMOVER CADASTRO"); puts(" \t\t\t 6 -> ZERAR CADASTRO"); puts(" \t\t\t 0 -> SAIR\n"); printf("\t\t Escolha uma opção: ");///recebe a opcao do menu scanf("%d",&opc);fflush(stdin);///limpar o buffer do teclado opcao_menu(opc);///passa o valor da opção } /** função verificar valor da opção */ void opcao_menu(int op){ switch(op){ case 1:/// INSERIR system(limpatela); novo_cadastro(); break; case 2:///--------EXIBIR system(limpatela); exibir_tudo(); break; case 3:///--------BUSCA system(limpatela); menu_busca(); break; case 4:///--------ORDENAÇÃO system(limpatela); ordenar_idade(); break; case 6:///--------ZERAR CADASTROS system(limpatela); remove("DADOs.bin"); break; case 0:///--------FECHA PROGRAMA system(limpatela); dados_empresa(); printf("\n\n\n\n\t\t\t\t\t\tAté Breve!\n\n\n\n"); exit(1); default:///-------NO CASO OPCÃO DIFERENTE system("cls"); printf("\n\n\t\t\tOpção Invalida!\n"); pause(); system(limpatela); menu();///retorna ao menu } } /** função INSERIR novo elemento */ void novo_cadastro(){ char sn;///variável de teste system(limpatela); fpessoa=fopen("DADOs.bin","a+b"); ///abri o arquivo if(fpessoa==NULL){ printf("\n\n\t\t\tERRO: Arquivo vazio!\n"); pause(); menu();///retorna ao menu } int rfve,i=0;///variaveis de controle dados_empresa(); if(!cadastro){///verificar o espaço do vetor struct printf("\n\n\t\t\tMemória Indisponível\n"); pause(); menu(); } int x=0;///variável de controle fseek(fpessoa,0,SEEK_END);///move a posição de leitura para o fim do arquivo x=ftell(fpessoa);///recebe quantidade de byte do arquivo possui if(x==0){ cadastro.cod=1;///recebe valor 1 para o primeiro cadastro }else{ /// Posiciona a leitura do arquivo para o inicio fseek(fpessoa,x-sizeof(struct registro),SEEK_SET); /// Ler os dados gravados em binário fread(&cadastro,sizeof(struct registro),1,fpessoa); /// recebe mais 1 e incrementa para cada novo cadastro.cod=cadastro.cod+1; } ///recebe os dados de uma nova pessoa printf("\nCADASTRO DE FUNCIONÁRIO\n");fflush(stdin); printf("Nome: ");gets(cadastro.nome); fflush(stdin); printf("Idade: ");scanf("%d",&cadastro.idade);fflush(stdin); //printf("Endereço: ");gets();fflush(stdin); // printf("Cidade: ");gets();fflush(stdin); printf("Cep: ");scanf("%d",&cadastro.cep); fflush(stdin); // printf("");gets();fflush(stdin); fseek(fpessoa,0,SEEK_END); ///Salva os dados no arquivo rfve=fwrite(&cadastro,sizeof(struct registro),1,fpessoa); if(rfve==1){ ///verifica se está sendo salvo system(limpatela); printf("\n\n\n\t\t\t\tSalvo com sucesso!\n"); printf("\n\n\n\n\t\t\tDESEJA CADASTRAR NOVO ?[s/n] "); scanf("%c",&sn);fflush(stdin); }else{ system(limpatela); printf("\n\n\n\t\t\tNão foi possível salvar!\n"); pause(); } i++; tam_vetor++; fclose(fpessoa);///fecha o arquivo if(sn=='s'||sn=='S'){ system(limpatela); time_sleep(); system(limpatela); novo_cadastro(); }else{ /// senão nao desejar continuar system(limpatela); time_sleep(); system(limpatela); menu(); /// retorna ao menu } } /** função EXIBIR dados gravados */ void exibir_tudo(){ system(limpatela); fpessoa=fopen("DADOs.bin","r+b");///abri o arquivo if(fpessoa==NULL){ printf("\n\n\n\t\t\tERRO: Arquivo vazio!\n"); pause(); menu(); } time_sleep(); system(limpatela); int rfve,i=0;///variáveis de controle /** FALTA=============================================================== organizar a exibição dos dados, os dados devem aparecer lado a lado com suas demais itens dos cadastros. =========================================================================*/ printf("\n\t\t\tLISTANDO TODOS OS REGISTROS\n\n\n"); rfve=fread(cadastro,sizeof(struct registro),1,fpessoa);///ler os dados gravados while(rfve==1){///verifica se é verdadeiro e exibe printf("\t\tCodigo: %d\n",cadastro.cod); printf("\t\tNome: %s\n",cadastro.nome); printf("\t\tIdade: %d\n",cadastro.idade); printf("\t\tCep: %d\n",cadastro.cep); i++; ///incrementa rfve=fread(&cadastro,sizeof(struct registro),1,fpessoa);/// refaz a leitura printf("\n"); break; } fclose(fpessoa); ///fecha o arquivo pause(); menu();///retorna ao menu } /// Menu de seleção de busca void menu_busca(){ int op; dados_empresa(); printf("\n\n\t\t\t*************************************\n"); printf("\t\t\t\tCOMO DESEJA PROCURAR?\n"); printf("\t\t\t*************************************\n"); printf("\n\t\t\t\t 1 -> Nome\n"); printf("\t\t\t\t 2 -> Idade\n"); printf("\t\t\t\t 3 -> E-mail\n"); printf("\t\t\t\t 4 -> Celular\n"); printf("\t\t\t\t 5 -> Código\n"); printf("\t\t\t\t 0 -> Voltar\n"); printf("\n\n\t\t\t\tDigite a opção: "); scanf("%d",&op);fflush(stdin); switch(op){ case 1:/// --------BUSCAR POR NOME E CPF system(limpatela); busca_nome(); break; case 2:/// --------BUSCA POR IDADE system(limpatela); busca_idade(); break; case 3:/// --------BUSCA POR E-MAIL system(limpatela); break; case 5:/// --------BUSCA POR NUMERO DE CELULAR system(limpatela); bus_bin(); break; case 0:/// --------RETORNAR AO MENU PRINCIPAL system(limpatela); menu(); default:/// -------DIGITO ERRADO system(limpatela); printf("\n\n\t\t\t=================================\n"); printf("\t\t\t\tOpção inválida "); printf("\t\t\t\tTente Novamente!\n"); printf("\t\t\t=================================\n"); pause(); system(limpatela); menu_busca(); break; } } /** Função busca pelo nome */ void busca_nome(){ system(limpatela); fpessoa=fopen("DADOs.bin","r+b");///abri o arquivo if(fpessoa==NULL){ ///verifica a existencia do arquivo printf("\n\n\t\t\tERRO: Arquivo vazio!\n"); pause(); menu(); } else{ char npesquisa[30];///variável recebe nome de pesquisa int n_cpf; int rfve,i=0,veri=0;///variável de controle rfve=fread(cadastro,sizeof(struct registro),1,fpessoa);///ler o arquivo printf("\n\n\tDIGITE O NOME: "); gets(npesquisa);fflush(stdin);///recebe o nome de busca // printf("\n\n\tDIGITE O CPF: "); // scanf("%d",&n_cpf);fflush(stdin);///recebe o CPF de busca time_sleep(); system(limpatela); rewind(fpessoa);///retorna ao inicio do arquivo while(1){ rfve=fread(&cadastro,sizeof(struct registro),1,fpessoa);///ler o arquivo if(rfve==0)///verifica se é falso break; ///encerra ///compara os nomes e o CPF if((strcmpi(cadastro.nome,npesquisa)==0)){ printf("Nome: %s\n",cadastro.nome); printf("cep: %d\n",cadastro.cep); veri=1;///atribui o valor 1 para ser verdadeiro break; } i++;///incrementa } if(veri==0){///se valor continuar com 0 será falso printf("\n\n\t\tNao encontrado!\n"); } fclose(fpessoa);///fecha o arquivo } pause(); menu_busca(); } ///****************************************/////* /*void busca_recursiva(struct registro cadastro[],int tamanho,int pesq){ while(inicio<=fim){ rn=fread(&cadastro,sizeof(struct registro),1,fpessoa); int meio; meio=(inicio+fim)/2; if(cadastro[meio].idade==pesq){ return meio; }else if(cadastro[meio].idade<pesq){ return busca_binaria_recursiva(meio+1,fim,pesq); }else{ return busca_binaria_recursiva(inicio,meio-1,pesq); } } return -1; } */ /** Função busca por idade */ void busca_idade(){ system(limpatela); fpessoa=fopen("DADOs.bin","r+b");///abri o arquivo if(fpessoa==NULL){ ///verifica a existencia do arquivo printf("\n\n\t\t\tERRO: Arquivo vazio!\n"); pause(); menu(); } else{ int n_idade;///variável recebe idade de pesquisa int rfve,i=0;///variável de controle // rfve=fread(cadastro,sizeof(struct registro),1,fpessoa);///ler o arquivo printf("\n\n\tDIGITE A IDADE: "); scanf("%d",&n_idade);fflush(stdin);///recebe a idade para ser buscada no vetor rewind(fpessoa);///retorna ao inicio do arquivo system(limpatela); time_sleep(); system(limpatela); while(1){ if(cadastro.idade==n_idade){ rfve=fread(&cadastro,sizeof(struct registro),1,fpessoa);///ler o arquivo printf("\n\n\t\tENCONTRADO:\n\n"); printf("\t\t\tNome: %s\n",cadastro.nome); printf("\t\t\tIdade: %d\n",cadastro.idade); printf("\t\t\tCep: %d\n",cadastro.cep); break; }else{ system(limpatela); printf("\n\n\t\t\tNão Encontrado!\n"); } i++; } fclose(fpessoa);///fecha o arquivo } pause(); menu_busca(); } ///****************************************//////// void ordenar_idade(){ REG_FUNCIONARIO *cad; int nbyte,i,j,k,rfne; int *n1,*n2; nbyte=tam_vetor; rfne=fread(&cadastro,sizeof(struct registro),1,fpessoa); time_sleep(); if(rfne==1){ for(i=0;i<nbyte;i++){ n1=cadastro.idade; for(j=i+1;j<nbyte;j++){ n2=cadastro[j].idade; if(cadastro.idade>cadastro[j].idade){ cad=cadastro.idade; cadastro.idade=cadastro[j].idade; cadastro[j].idade=cad; } } } } system(limpatela); } ///***************************************///////// int busca_binaria_codigo(struct registro cadastro[],int n){ system(limpatela); dados_empresa(); int tam=MAX; int esq=0,dir=tam-1,meio=0; fread(&cadastro,sizeof(struct registro),1,fpessoa); rewind(fpessoa); while(esq<=dir){ fread(&cadastro,sizeof(struct registro),1,fpessoa); meio=(dir+esq)/2; if(cadastro[meio].cod==n){ return meio; }else if(n>cadastro[meio].cod){ esq=meio+1; }else dir=meio-1; } return -1; } ///**************************************/////// void bus_bin(){ system(limpatela); dados_empresa(); int res,i=0; int n_codigo; printf("\n\nInforme o codigo: "); scanf("%d",&n_codigo);fflush(stdin); time_sleep(); system(limpatela); res=busca_binaria_codigo(cadastro,n_codigo); if(res==-1){ printf("\nNao encontrado\n"); }else{ fread(&cadastro,sizeof(struct registro),1,fpessoa); printf("\n\n\t\t\tEncontrado: \n\n"); printf("\t\t\tCódigo: %d",cadastro.cod); printf("\t\t\tNome: %s\n",cadastro.nome); printf("\t\t\tIdade: %d\n",cadastro.idade); printf("\t\t\tCep: %d\n",cadastro.cep); } pause(); system(limpatela); menu_busca(); } Por enquanto so fiz até aqui. alguns itens presentes na struct não estão todos presentes na inserção por motivos de agilizar e facilitar os testes. Agradeço desde já quem puder me ajudar.
  2. Obrigado pelas dicas me ajudaram a compreender melhor essa parte, qualquer novidade volto a postar quando terminar postarei o codigo todo para ajudar outros em suas possíveis duvidas.
  3. Porque foi so atá aqui que fiz, estou fazendo em partes, agora estou conseguindo salvar em um arquivo, mais não estou conseguindo ler o arquivo salvo, esse é um trabalho da faculdade e são varios os requisitos pedidos pelo prof. São eles: Criar lista com alocação dinâmica, salvar e ler em arquivo, busca sequencial e binaria*, Ultilizar pelo menos 3 métodos de ordenação, uma função recursiva. eu prefiro ir por partes para ficar melhor verificar os erros ao longo do desenvolvimento, para não gerar um monte de erros no fim, no meu ponto de vista dar mais trabalho. Bom eu consegui colocar pra salvar em um arquivo, não sei se o modo em que eu estou fazendo é certo mais deu. Postando o Código do programinha em C #include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> #include <windows.h> struct Cad_funcionario{ int codigo; char nome[50]; int idade; char sexo; char endereco[50]; char cidade[50]; char estado[50]; int cep; char cargo[50]; float salario; char email[50]; int fone; struct Cad_funcionario *prox; }; typedef struct Cad_funcionario cadastro; int tam; ///-------------------------Função inicio do programa---------------------- void inicio(){ cadastro *cad_fun=(cadastro *)malloc(sizeof(cadastro)); if(!cad_fun){ printf("MEMÓRIA INSUFICIENTE!\n"); exit(1);///----------------------------------------fecha o programa }else{ inicia(cad_fun); int opt; do{ opt=menu(); opcao(cad_fun,opt); }while(opt); free(cad_fun); return 0; } }///-----fim da função inicio--------- ///-------------funçao inicia lista---------------------------- void inicia(cadastro *cad_fun){///--------ponteiro cad aponta para struct cadastro cad_fun->prox=NULL; ///--------------ponteiro aponta prox recebe nulo tam=0; ///-----------------------------------tamanho recebe zero } ///------fim da função inicia------ ///--------------funcao menu da lista----------------- int menu(void){ system("cls"); int opt; dados_empresa(); puts("\n\n"); puts("\t 1 -> Cadastrar novo funcionário"); puts("\t 2 -> Exibir todos funcionários"); puts("\t 3 -> Remover funcionário"); puts("\t 4 -> Apagar tudo"); puts("\t 5 -> Ordenar"); puts("\t 6 -> Pesquisar"); puts("\t 0 -> Sair\n"); puts("Escolha uma opção: "); scanf("%d",&opt);fflush(stdin);///------------limpar o buffer do teclado return opt; }///-------------fim da função menu------------ ///--------------funçao opcao do menu------------ void opcao(cadastro *cad_fun,int op){ switch(op){ case 1: ///-------------------------inserir elemento system("cls"); ///--------------limpa tela inserir_novo(cad_fun); ///------chama função system("cls"); ///------------- limpa tela break; case 2: ///------------------------listar todos system("cls"); exibe_cad(cad_fun); system("cls"); break; case 3: ///------------------------Remover Elemento (OBS: So atá esta função que fiz.) system("cls"); remover_cad(cad_fun); system("cls"); break; } }///---fim da função opcao--------------- ///-------------Função vazia------------------ int vazia(cadastro *cad_fun){ if(cad_fun->prox==NULL){///------------se struct for aponta para nulo return 1;///-----------------------retorna valor verdadeiro vazia }else{ return 0;///-----------------------retorna valor falso e sai da função } }/// -------------------fim da função vazia--------------- ///-------------------Declarando Arquivo e ponteiro------------ FILE *fcadastro; /// ----------ponteiro do arquivo /** --------------------funcao linhas --------------*/ void nlinhas(){ int n; for(n=0;n<135;n++){ printf("="); } }///---------------Fim da Função Linha /**----------- Dados de uma empresa fictícia------------*/ void dados_empresa(){ char nome[]="NR MARKETING & LOGÍSTICA LTDA - ME"; char endereco[]="Av. josé Costa nº 23, BAIRRO: Aparecida"; char cidade[]="Juazeiro - PE"; int fone=32416897; char cnpj[]="CNPJ 0706985378/0001-32"; char IE[]="IE 1517.391.110.12"; char email[]="E-mail: [email protected]"; printf("\n"); nlinhas(); printf("\n\t\t\t\t\t\t %s\n",nome); printf("\t\t\t\t\t%s, %s\n",endereco,cidade); printf("\t\t\t\t\t %s, %s\n",cnpj,IE); printf("\t\t\t\t\tTelefone %d, ",fone); printf("%s\n",email); nlinhas(); }/// ------------- fim dados ficticios----------------- ///-------------------------função "INSERIR" ----------------------------- void inserir_novo(cadastro *cad_fun){ system("color 4f"); fcadastro=fopen("DADOs.bin","a+b"); if(fcadastro==NULL){ printf("ERRRO!\n"); exit(1); } int valor_byte; cadastro *novo_cad=(cadastro *)malloc(sizeof(cadastro)); if(!novo_cad){ printf("Sem memória disponível!\n"); getche(); exit(1); }else{ ///------etiqueta descrição da empresa------ dados_empresa();///-----------------Nome fictício da empresa ///-------Recebendo dados de um novo funcionario----- printf(" \n Entre com os dados do funcionário\n"); printf(f," \nCÓDIGO: %i",novo_cad->codigo); scanf("%d",&novo_cad->codigo);fflush(stdin); puts("\nNome: "); gets(&novo_cad->nome);setbuf(stdin,NULL); puts("Idade: "); scanf("%d",&novo_cad->idade);fflush(stdin); puts("Sexo [M/F]: "); scanf("%c",&novo_cad->sexo);fflush(stdin); puts("Endereço: "); gets(novo_cad->endereco);fflush(stdin); puts("Cidade: "); gets(novo_cad->cidade);fflush(stdin); puts("Estado: "); gets(novo_cad->estado);fflush(stdin); puts("Cep: "); scanf("%d",&novo_cad->cep);fflush(stdin); puts("Cargo: "); gets(novo_cad->cargo);fflush(stdin); puts("Salário: "); scanf("%f",&novo_cad->salario);fflush(stdin); puts("E-mail: "); gets(novo_cad->email);fflush(stdin); puts("Celular: "); scanf("%d",&novo_cad->fone);fflush(stdin); // fseek(stdin,0,SEEK_END); // fseek(f,0,SEEK_END); ///---------aqui abaixo está a função de salvar no arquivo--------------- valor_byte=fwrite(novo_cad,sizeof(cadastro),1,fcadastro); fclose(fcadastro); system("cls"); Sleep(1000); printf("\n\t\t Salvando... \n"); system("cls"); if(valor_byte==1){ puts("\n\t\tSalvo com Sucesso!\n\n"); printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\tTecle ENTER para retornar. \n"); getchar(); }else{ printf("\n\t\tERRO: Não foi possível salvar!\n\n"); } cadastro *aux=cad_fun->prox; cad_fun->prox=novo_cad; novo_cad->prox=aux; } }///--------------------fim da função inserir------------------------ ///-------------------função exibe lista completa------------------ void exibe_cad(cadastro *cad_fun){ int i=0; fcadastro=fopen("DADOs.bin","rb"); if(fcadastro==NULL){ printf("Arquivo nao existe\n"); exit(1); } if(vazia(cad_fun)){ printf("\n\tNENHUM FUNCIONÁRIO CADASTRADO!\n\n"); printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\tTecle ENTER para retornar.\n"); getchar(); system("cls"); return ; } dados_empresa(); cadastro *tmp; tmp=cad_fun->prox; printf("\n\t Listando Todos os Cadastros \n\n"); while(tmp!=NULL){ int valor=0; valor = fread(&tmp,sizeof(cadastro),1,fcadastro); if(valor==1){ do{ ///---------------Exibe lista com todos os elementos cadastrados------------- printf("\n----------------------------------- "); printf("\t\tCÓDIGO: %d\n",tmp->codigo); printf("Nome: %s\n",tmp->nome); printf("Idade: %d\n",tmp->idade); printf("Sexo: %c\n",tmp->sexo); printf("Endereço: %s\n",tmp->endereco); printf("Cidade: %s\n",tmp->cidade); printf("Estado: %s\n",tmp->estado); printf("CEP: %d\n",tmp->cep); printf("Cargo: %s\n",tmp->cargo); printf("Salário: %.2f\n",tmp->salario); printf("E-Mail: %s\n",tmp->email); printf("Celular: %d\n",tmp->fone); }while(!feof(fcadastro)); printf("\n------------------------------------\n"); tmp=tmp->prox; }else{ printf("\nNenhum arquivo encontrado!\n"); } } getchar(); } /// --------------------fim da função exibir--------------------- ///--------------Função apagar-"Remover"-------------------------- void remover_cad(cadastro *cad_fun){ int j=0; char busca[30];///-------------------------------------------------string q recebe o nome a ser buscado para apagar if(vazia(cad_fun)){ printf("\n\t Nenhum cadastro encontrado! \n\n"); getchar(); system("cls"); menu();///------------------------------------------------------se tiver vazio retorna ao menu }else{ dados_empresa();///-------------------nome da empresa fictíco printf("\n\tAPAGAR UM CADASTRO\n"); printf("Nome: ");gets(busca);fflush(stdin);///---------recebe o nome de busca printf("\n\n\t\tBuscando...\n"); Sleep(1000); system("cls"); cadastro *aux=cad_fun; ///------------------compara os nomes se são idênticos-------------------- while(!(aux==NULL)&&!(strcmp(aux->nome,busca)==0)){ aux=aux->prox; j++; } if(aux==NULL){ dados_empresa();///-------------------------------------nome da empresa ficticia printf("\n\t CADASTRO NÂO ENCONTRADO!!! \n\n"); getchar(); system("cls"); }else{ char op; dados_empresa(); printf("\n\n\t\tCADASTRO ENCONTRADO\n"); printf("\n\n\tDeseja realmente apagar? [S/N]\n"); scanf("%c",&op);fflush(stdin); system("cls"); if(op=='s'||op=='S'){ cadastro *atual=cad_fun->prox, *anterior=cad_fun; while(atual->prox!=NULL){ anterior=atual; atual=atual->prox; } system("cls"); dados_empresa(); printf("\n\n\t\tApagando...\n"); Sleep(1000); system("cls"); dados_empresa(); printf("\n\t\tCADASTRO REMOVIDO\n"); atual=anterior->prox; printf("\n----------------------------------- "); printf("\t\tCÓDIGO: %d\n",atual->codigo); printf("Nome: %s\n",atual->nome); printf("Idade: %d\n",atual->idade); printf("Sexo: %c\n",atual->sexo); printf("Endereço: %s\n",atual->endereco); printf("Cidade: %s\n",atual->cidade); printf("Estado: %s\n",atual->estado); printf("CEP: %d\n",atual->cep); printf("Cargo: %s\n",atual->cargo); printf("Salário: %.2f\n",atual->salario); printf("E-Mail: %s\n",atual->email); printf("Celular: %d\n",atual->fone); printf("\n------------------------------------\n"); printf("\n\t\tTecle ENTER para retornar.\n"); getchar(); anterior->prox=atual->prox; tam--; return atual; }else{ system("cls"); printf("\n\n\tretornando ao menu..."); Sleep(1000); system("cls"); menu(); } } } }------------------------- fim da função remover--------------------- ///OBS: As funções feitas até o momento só foram essas. ///---------------------função main-------------------------- int main(void){ system("color 3f"); setlocale(LC_ALL,"portuguese"); int tecla; dados_empresa();///----------------dados da empresa fictícia printf("\n\n\n\n\n\n\t\t\t\t\t\t\t\tBEM VINDO\n"); printf("\t\t\t\t\t\estão PROGRAMA DE CADASTRO DE FUNCIONÁRIOS\n\n\n\n\n\n"); printf("\n\n\n\n\t\t\t\t\t\t Precione <ENTER> para iniciar!\n"); tecla=getchar(); if(tecla){ inicio(); } return 0; }-----------------------fim do main----------------------------------- Espero que agora de para compreender melhor o que estou tentando fazer, quem poder me dar uma ajudinha agradeço.
  4. ///---------------------------estrutura de cadastro de funcionarios-------------- struct Cad_funcionario{ int codigo; char nome[50]; int idade; char sexo; char endereco[50]; char cidade[50]; char estado[50]; int cep; char cargo[50]; float salario; char email[50]; int fone; struct Cad_funcionario *prox; }; typedef struct Cad_funcionario cadastro; ///-------------Declarando o arquivo e seu ponteiro----------- FILE *cad_arq; ///-------------Obs função contém erros-------- ///---------Função salvar no arquivo "dados.bin"------------ void salvar_arq(cadastro *cad_fun){ cad_arq=fopen("dados.bin","ab"); if(cad_arq==NULL){ printf("Destino do arquivo inexistente!\n"); getche(); system("cls"); menu(); } while(cad_fun){ fwrite(&cad_fun,sizeof(cadastro),1,cad_arq);///grava o arquivo } fclose(cad_arq);///fecha o arquivo } ///------------Obs função contém erros--------------- ///--------------Função ler o arquivo "dados.bin"------------- void ler_arq(cadastro *cad_fun){ cad_arq=fopen("dados.bin","ab"); if(cad_arq==NULL){ printf("Destino do arquivo inexistente!\n"); getche(); system("cls"); menu(); } if(!cad_fun){ printf("Sem arquivo!\n"); return ; } cadastro *tmp; while(!feof(cad_arq)){ ///ler ate o ultimo elemento do arquivo fread(&cad_fun,sizeof(cadastro),1,cad_arq); printf("\t\tCÓDIGO: %d\n",tmp->codigo); printf("Nome: %s\n",tmp->nome); printf("Idade: %d\n",tmp->idade); printf("Sexo: %c\n",tmp->sexo); printf("Endereço: %s\n",tmp->endereco); printf("Cidade: %s\n",tmp->cidade); // if(1!=fread(cad_fun,sizeof(cadastro),1,cad_arq)){ // } } fclose(cad_arq); } ///-------------função alocação de novo elemento na memória "INSERIR"------------ void inserir_novo(cadastro *cad_fun){ cadastro *novo_cad=(cadastro *)malloc(sizeof(cadastro)); if(!novo_cad){ printf("Sem memória disponível!\n"); getche(); exit(1); }else{ printf(" \n Entre com os dados do funcionário\n"); printf(" \n\t\tCÓDIGO: "); scanf("%d",&novo_cad->codigo);fflush(stdin); puts("\nNome: "); gets(novo_cad->nome);fflush(stdin); puts("Idade: "); scanf("%d",&novo_cad->idade);fflush(stdin); puts("Sexo [M/F]: "); scanf("%c",&novo_cad->sexo);fflush(stdin); puts("Endereço: "); gets(novo_cad->endereco);fflush(stdin); puts("Cidade: "); gets(novo_cad->cidade);fflush(stdin); puts("Estado: "); gets(novo_cad->estado);fflush(stdin); puts("Cep: "); scanf("%d",&novo_cad->cep);fflush(stdin); puts("Cargo: "); gets(novo_cad->cargo);fflush(stdin); puts("Salário: "); scanf("%f",&novo_cad->salario);fflush(stdin); puts("E-mail: "); gets(novo_cad->email);fflush(stdin); puts("Celular: "); scanf("%d",&novo_cad->fone);fflush(stdin); ///-------------------aqui abaixo está a função de salvar no arquivo---------- salvar_arq(cad_fun);///----------------chama função salvar no arquivo----- system("cls"); puts("\n\t\tSalvo com Sucesso!\n\n"); getchar(); cadastro *aux=cad_fun->prox; cad_fun->prox=novo_cad; novo_cad->prox=aux; } } ///-----------------------função exibe lista completa----------------- void exibe_cad(cadastro *cad_fun){ if(vazia(cad_fun)){ printf("\n\tNENHUM FUNCIONÁRIO CADASTRADO!\n\n"); getchar(); system("cls"); return ; } cadastro *tmp;///----------deefinindo um ponteiro temporário do tipo nó tmp=cad_fun->prox; printf("\n\t Listando Todos os Cadastros \n\n"); while(tmp!=NULL){///verifica se o ptr do tipo nó é diferente de nulo ///------------Exibe lista com todos os elementos cadastrados printf("\n----------------------------------- "); printf("\t\tCÓDIGO: %d\n",tmp->codigo); printf("Nome: %s\n",tmp->nome); printf("Idade: %d\n",tmp->idade); printf("Sexo: %c\n",tmp->sexo); printf("Endereço: %s\n",tmp->endereco); printf("Cidade: %s\n",tmp->cidade); printf("Estado: %s\n",tmp->estado); printf("CEP: %d\n",tmp->cep); printf("Cargo: %s\n",tmp->cargo); printf("Salário: %.2f\n",tmp->salario); printf("E-Mail: %s\n",tmp->email); printf("Celular: %d\n",tmp->fone); printf("\n------------------------------------\n"); tmp=tmp->prox;///Avança para o proximo elemento da lista } ler_arq(cad_fun);///-------Função para ler os arquivos salvos getchar(); } Tenho um trabalho da faculdade para entregar e nao estou conseguindo salvar os dados em um arquivo binario. alguem puder me ajudar eu agradeço!
  5. Galera estou precisando de uma ajuda com programação em assembly. fiz quatro códigos e apenas o de soma está mostrando o resultado na tela, já os demais subtração, multiplicação e divisão não aparecem os resultados esperados, o que imprimi na tela é apenas um caractere de símbolos. Como não sei muito de assembly preciso de ajuda. código de subtração .model small.datanum1 db 7hnum2 db 3hres db 0h.codemov ax,@[member="dAtA"]mov ds,axmov bl, num1mov al, num2sub al,blmov res, alsub res, 30hmov ah,02hmov dl,resint 21hmov ah,4chint 21hendcódigo de multiplicação.model small.datan1 db 2hn2 db 3hprod db 0h.codemov ax,@[member="dAtA"]mov ds,axmov al, n1mov bl, n2mul blmov prod, bl;mul prod, 30h -> linha comentei porque dar um erro!mov ah,02hmov dl,prodint 21hmov ah, 4chint 21hendcódigo de divisão.model small.datav1 db 4hv2 db 2hquo db 0hres db 0h.codemov ax,@[member="dAtA"]mov ds,axmov ah,00hmov al, v1mov bl, v2div blmov quo, almov res, ah;div res, 30h -> linha comentei porque dar um erro!mov ah, 02hmov dl,quoint 21hmov ah,4chint 21hend se alguem puder me ajudar eu agradeço
  6. PRECISO DE UMA AJUDA COM UM TRABALHO DE FACULDADE, QUE DEVE ESTÁ PRONTO ATÉ AMANHA AS 15:00, ALGUMAS DAS FUNÇÕES NÃO ESTÃO FUNCIONANDO CORRETAMENTE, NÃO SEI DIZER SE É A FUNÇAO EXIBE OU A FUNÇÃO PUSH, A OUTRA É A FUNÇÃO PESQUISA QUE EXECUTA MAIS quando PEDE PARA PESQUISAR DA ERRO E FECHA O PROGRAMA. QUEM PUDER ME AJUDAR EU AGRADEÇO. #include <stdio.h> #include <stdlib.h> struct LIVRO{ char nome[30]; char autor[30]; char edit[30]; int ano, pag, codigo; struct LIVRO *prox; }; typedef struct LIVRO livro; int tam; int menu(void); //int submenu(livro *PILHA); void inicia(livro *PILHA); void opcao(livro *PILHA, int op); void exibe(livro *PILHA); void libera(livro *PILHA); void push(livro *PILHA); int vazia(livro *PILHA); int pesquisa(livro *PILHA); livro *pop(livro *PILHA); int submenu(void) { livro *PILHA = (livro *) malloc(sizeof(livro)); if(!PILHA){ printf("SEM ESPACO NA MEMORIA!\n"); exit(1); }else{ inicia(PILHA); int opt; do{ opt=menu(); opcao(PILHA,opt); }while(opt); free(PILHA); return 0; } } void inicia(livro *PILHA) { PILHA->prox = NULL; tam=0; } int menu(void) { int opt; linha(); printf("-=- -=-\n"); printf("-=- BIBLIOTECA CADASTRO DE LIVROS -=-\n"); printf("-=- -=-\n"); linha(); printf("\n\n"); printf("\t\t-=>>>DIGITE UMA OPCAO<<<=-\n\n"); printf("\t\t1 -> INSERIR UM UM LIVRO NA PILHA\n"); printf("\t\t2 -> REMOVER UM LIVRO DA PILHA\n"); printf("\t\t3 -> EXIBIR TODOS OS LIVROS\n"); printf("\t\t4 -> PESQUISAR LIVRO\n"); printf("\t\t5 -> APAGAR TODOS\n"); printf("\t\t6 -> SAIR\n"); printf("DIGITE A OPCAO: "); scanf("%d", &opt); return opt; } void opcao(livro *PILHA, int op) { livro *tmp; switch(op){ case 1: system("cls"); inicia(PILHA); push(PILHA); system("pause"); system("cls"); break; case 2: system("cls"); tmp=pop(PILHA); if(tmp!=NULL) printf("LIVRO RETIRADO DA PILHA! \n\n"); system("pause"); system("cls"); break; case 3: system("cls"); exibe(PILHA); system("pause"); system("cls"); break; case 4: system("cls"); pesquisa(PILHA); system("pause"); system("cls"); break; case 5: system("cls"); libera(PILHA); inicia(PILHA); printf("PILHA ZERADA\n\n"); system("pause"); system("cls"); break; case 6: system("cls"); libera(PILHA); system("pause"); system("cls"); return main(); break; default: printf("\n\t\t\tOPCAO INVALIDA!!!\n\t\t\tTENTE NOVAMENTE!!!"); } } int vazia(livro *PILHA) { if(PILHA->prox == NULL) return 1; else return 0; } livro *aloca() { livro *novo=(livro *) malloc(sizeof(livro)); if(!novo){ printf("NOT MEMORY!\n"); exit(1); }else{ printf("DIGITE O TITULO DO LIVRO:\n "); scanf("%s", &novo->nome); fflush(stdin); printf("NOME O AUTOR DO LIVRO:\n "); scanf ("%s",&novo->autor); fflush(stdin); printf("EDITORA DO LIVRO:\n "); scanf ("%s",&novo->edit); fflush(stdin); printf("ANO DO LIVRO:\n "); scanf ("%d",&novo->ano); fflush(stdin); printf("NUMERO DE PAGINAS:\n "); scanf ("%d",&novo->pag); fflush(stdin); printf("DIGITE O CODIGO:\n "); scanf ("%d",&novo->codigo); fflush(stdin); printf("-=>EMPILHADO COM SUCESSO!!!<=-\n"); return novo; system("pause"); system("cls"); } } void exibe(livro *PILHA) { if(vazia(PILHA)){ printf("PILHA VAZIA!\n\n"); system("pause"); system("cls"); return ; } livro *tmp; tmp = PILHA->prox; printf("\t=------> PILHA <--------=\n"); while( tmp != NULL){ // printf("%5d", tmp->num); printf("\tTITULO: %s\n", tmp->nome); printf("\tAUTOR: %s\n", tmp->autor); printf("\tEDITORA: %s\n",tmp->edit); printf("\tEDICAO: %d\n",tmp->ano); printf("\tPAGINAS: %d\n",tmp->pag); printf("\tCODIGO: %d\n", tmp->codigo); printf("\n\n"); tmp = tmp->prox; } /*printf("\n "); int count; for(count=0 ; count < tam ; count++) printf(" ^ "); printf("\nOrdem:"); for(count=0 ; count < tam ; count++) printf("%5d", count+1); */ printf("\n\n"); } void libera(livro *PILHA) { if(!vazia(PILHA)){ livro *proxLivro, *atual; atual = PILHA->prox; while(atual != NULL){ proxLivro = atual->prox; free(atual); atual = proxLivro; } } } void push(livro *PILHA) { livro *novo=aloca(); novo->prox = NULL; if(vazia(PILHA)) PILHA->prox=novo; else{ livro *tmp = PILHA->prox; while(tmp->prox != NULL) tmp = tmp->prox; tmp->prox = novo; } tam++; } livro *pop(livro *PILHA) { if(PILHA->prox == NULL){ printf("PILHA VAZIA!!!\n\n"); return NULL; }else{ livro *ultimo = PILHA->prox, *penultimo = PILHA; while(ultimo->prox != NULL){ penultimo = ultimo; ultimo = ultimo->prox; } penultimo->prox = NULL; penultimo->prox=NULL; printf("Retirado titulo: %s\n", ultimo->nome); printf("Retirado autor: %s\n",ultimo->autor); printf("Retirado editora: %s\n",ultimo->edit); printf("Retirado edicao: %d\n",ultimo->ano); printf("Retirado paginas: %d\n",ultimo->ano); printf("Retirado codigo: %d\n",ultimo->codigo); tam--; return ultimo; } } //ESTA FUNÇÃO aqui NAO ESTÁ FUNCIONANDO int pesquisa(livro *PILHA){ //int codigo; int cod = 0; int contador = 0; printf("DIGITE O CODIGO DO LIVRO:"); scanf("%d", cod); if(vazia(PILHA)){ printf("NAO EXISTE NENHUM LIVRO!\n"); }else printf("MOSTRANDO LIVRO CADASTRADO!\n"); livro *tmp = PILHA; while(!(tmp == NULL) && !(tmp -> codigo == cod)) { tmp = tmp -> prox; contador++; } printf("O LIVRO E: %d\n", tmp -> nome); if(tmp == NULL){ return -1; }else{ return contador; } } codigo_linha(){ int i; for(i=0;i<26;i++){ printf("<=>"); } printf("\n"); } vertical(){ printf("<|> <|>\n"); } linha(){ int i; for(i=0;i<20;i++){ printf("-=-"); } printf("\n"); } int main (void){ system("color 30"); int opc; printf("\n\n"); codigo_linha(); codigo_linha(); codigo_linha(); vertical(); printf("<|> ->>>PROJETO II PILHA<<<- <|>\n"); vertical(); vertical(); printf("<|> PRESSIONE ->> '1' PARA INICIAR O PROJETO <|>\n"); vertical(); vertical(); vertical(); codigo_linha(); codigo_linha(); scanf("%d",&opc); if(opc==1){ system("cls"); menu(); submenu(); getchar(); }else{ printf("\n\n\t\t\t OPCAO INVALIDA!!!\n\t\t\tPOR FAVOR DIGITE '1'\n"); getchar(); return main(); } }
  7. só consegui fazer ate aqui. codigo: //obrigrações:criar_pilha(), push(), top(), pop(), vazia(), mostra_pilha() e liberar_pilha(). void menu(){ printf("\n\n -------BIBLIOTECA DE LIVROS------- \n\n"); printf("\n 1 - CADASTRO DE LIVRO\n"); printf("\n 2 - MOSTRAR TODOS NA PILHA\n"); printf("\n 3 - CONSULTAR LIVRO CONTATO POR NOME\n"); printf("\n 4 - REMOVER LIVRO DA PILHA\n"); printf("\n 5 - SAIR DO SISTEMA\n"); } /*struct cadastrar(){ char nome[50]; char autor[50]; char editora[50]; int codigo; }Livro;*/ typedef struct cadastrar *cadastrarNovo; #define MAX 5 cadastrarNovo tab[MAX]; struct pilha{ int num; float vetor[MAX]; }; /*pilha *cria(void){ pilha *p=(Pilha*)malloc(sizeof(Pilha)); p->num=0; return p; }*/ #include <stdio.h> #define MAX 5 //obrigrações:criar_pilha(), push(), top(), pop(), vazia(), mostra_pilha() e liberar_pilha(). int main(void){ int op; menu(); // cadastrar(); switch(op){ case 1: /*cadastrar(); i++;*/ break; case 2: printf("");break; case 3: printf("");break; case 4: printf("");break; case 5: printf("");break; default:printf("Opcao Invalida!!!"); } }
  8. #include <stdio.h>#include <stdlib.h>int main(void){ int rodadas, derrota=0, empate=0, vitoria=0, pontotime; printf("Digite o numero de Rodadas:\n"); scanf("%d",&rodadas); printf("______________________________________________\n"); printf("DERROTA= 0 PONTOS\n"); printf("EMPATE= 1 PONTOS\n"); printf("VITORIA= 3 PONTOS\n"); printf("______________________________________________\n"); printf("Digite a quantidade de pontos conquistados nessa rodada: \n"); while(rodadas>0){ printf("Rodada:%d\n",rodadas); scanf("%d",& pontotime); //ACUMULADOR if(pontotime==0){ derrota=derrota+1; }
  9. fiz uns testes, mais sempre da um erro. #define RODADAS 10 int main(void){ int rodada[RODADAS]; int i; for (i=0;i<RODADAS;i++){ scanf("%d", &rodadas); } int i; int acumulador = 0; for ( i=0;i<RODADAS;i++){ acumulado = acumulador + rodadas; } int derrotas = 0; int empates = 0; int vitorias = 0; int i; for ( i=0; i<RODADAS; i++){ if ( rodada == 0){ derrota++; }else if ( rodada == 1 ){ impate++; }else if ( rodada == 3 ){ vitorias++; }else{ } } } abaixo aparece esses textos de erros. mingw32-gcc.exe -c E:\1time.c -o E:\1time.o E:\1time.c: In function 'main': E:\1time.c:9:5: warning: incompatible implicit declaration of built-in function 'scanf' [enabled by default] E:\1time.c:9:18: error: 'rodadas' undeclared (first use in this function) E:\1time.c:9:18: note: each undeclared identifier is reported only once for each function it appears in E:\1time.c:11:9: error: redeclaration of 'i' with no linkage E:\1time.c:6:9: note: previous declaration of 'i' was here E:\1time.c:15:9: error: 'acumulado' undeclared (first use in this function) E:\1time.c:20:9: error: redeclaration of 'i' with no linkage E:\1time.c:11:9: note: previous declaration of 'i' was here E:\1time.c:24:9: error: 'derrota' undeclared (first use in this function) E:\1time.c:26:13: error: 'impate' undeclared (first use in this function) Process terminated with status 1 (0 minute(s), 0 second(s)) 6 error(s), 1 warning(s) (0 minute(s), 0 second(s))
  10. Pergunta: Desenvolva um algoritmo que faça o acompanhamento de UM TIME num torneio de futebol. O algoritmo deve capturar do usuário o número de rodadas. Em cada rodada, o algoritmo deve capturar do usuário o ponto conquistado pelo time, deve ser somente considerado 0 (derrota), 1 (empate) e 3 (vitória), e acumular esses pontos numa variável chamada PONTOTIME. O final do algoritmo deve mostrar um resultado tal como o seguinte: "Ao final de 'N' rodadas, o time teve 'N' vitórias, 'N' empates e 'N' derrotas, ficando com um total de 'N' pontos."
  11. pergunta: Desenvolva um algoritmo que faça o acompanhamento de UM TIME num torneio de futebol. O algoritmo deve capturar do usuário o número de rodadas. Em cada rodada, o algoritmo deve capturar do usuário o ponto conquistado pelo time, deve ser somente considerado 0 (derrota), 1 (empate) e 3 (vitória), e acumular esses pontos numa variável chamada PONTOTIME. O final do algoritmo deve mostrar um resultado tal como o seguinte: "Ao final de 'N' rodadas, o time teve 'N' vitórias, 'N' empates e 'N' derrotas, ficando com um total de 'N' pontos."

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!