Ir ao conteúdo
  • Cadastre-se

Mateus Elias

Membro Júnior
  • Posts

    7
  • Cadastrado em

  • Última visita

Reputação

4
  1. /*Este programa cadastra 5 atletas em um arquivo com seus dados ( nome, esporte, idade e altura ) , ele imprime os atletas e também deve imprimir os dados do atleta de maior altura. O problema é imprimir os dados do atleta de maior altura. Não acho o erro na lógica! Alguém pode me ajudar???*/ //Código abaixo //----------------------------------------------------------------- #include<stdio.h> #include<stdlib.h> #include<locale.h> #include<string.h> typedef struct{ char nome[41]; char esporte[61]; int idade; double altura; }atleta; void cadastrar(atleta *m, int n){ //passando como parametro o struct atleta para um ponteiro(vetor) e a quantidade de cadastros (5) FILE *arq; arq = fopen("bd.txt","ab"); //abrindo arquivo para gravação append do tipo binário if(arq==NULL){ printf("Erro para abrir arquivo para cadastro!\n"); exit(0); } int i; //preenchendo os dados para cadastro for(i=0;i<n;i++){ printf("Nome: "); fflush(stdin); scanf("%[^\n]s",m.nome); printf("ESPORTE: "); fflush(stdin); scanf("%[^\n]s",m.esporte); printf("IDADE: "); scanf("%d",&m.idade); printf("ALTURA: "); scanf("%lf",&m.altura); system("cls"); } if(fwrite(m,sizeof(atleta),n,arq)==n){ //gravando no arquivo e se der certo ele imprime uma mensagem printf("\nGravado com sucesso!!\n"); } fclose(arq); //fechando arquivo } void listar(){ atleta m; //struct FILE *arq; arq = fopen("bd.txt","rb"); //abrindo arquivo para leitura do tipo binário if(arq==NULL){ printf("Erro para abrir arquivo para impressão!\n"); exit(1); } printf("\n\tAtleta cadastrados\n\n"); while(fread(&m,sizeof(atleta),1,arq)==1){ //imprimindo todos registros do arquivo printf("NOME: %s\n",m.nome); printf("ESPORTE: %s\n",m.esporte); printf("IDADE: %d\n",m.idade); printf("ALTURA: %.2lf\n",m.altura); printf("------------------------"); printf("\n"); } fclose(arq); //fechando arquivo printf("\n\n\n"); system("Pause"); system("cls"); } void maisAlto(int n){ atleta m; FILE *arq; arq = fopen("bd.txt","rb"); if(arq==NULL){ printf("Erro para achar atleta mais alto!\n\n"); exit(3); } double maior=0; while(fread(&m,sizeof(atleta),1,arq)==1){ if(m.altura > maior){ maior = m.altura; } } printf("%lf",maior); //apenas um teste pra ver se esta imprimindo o maior //imprimindo dados do atleta com maior altura printf("\n\t*** Atleta mais alto ***\n\n"); while(fread(&m,sizeof(atleta),1,arq)==1){ if( m.altura==maior){ printf("\nNOME: %s\n",m.nome); printf("ESPORTE: %s\n",m.esporte); printf("IDADE: %d\n",m.idade); printf("ALTURA: %lf\n",m.altura); printf("------------------------"); } } fclose(arq); printf("\n\n"); system("Pause"); system("cls"); } int maisVelho(){ } void menu(){ printf("\n\t*** CADASTRO ***\n"); printf("\n1 - cadastrar\n"); printf("2 - listar\n"); printf("3 - outros\n"); printf("0 - sair\n"); printf("\nDigite: "); } int main() { setlocale(LC_ALL,"Portuguese"); int n=5; //quantidade exigida de cadastros pelo exercício int opcao; atleta *m; //ponteiro recebendo o struct do atleta m = calloc(n,sizeof(atleta)); //abrindo para alocação dinamica if(m==NULL){ printf("\nErro para alocar arquivo!\n"); exit(1); } //loop do menu com opções do{ menu(); scanf("%d",&opcao); system("cls"); switch(opcao) { case 1: cadastrar(m,n); break; case 2: listar(); break; case 3: maisAlto(n); break; case 0: break; default: printf("\nOpção inválida\n"); Sleep(2000); system("cls"); break; } }while(opcao!=0); free(m); //liberando a memória alocada no final do programa return 0; }
  2. ATENÇÃO: Estou com um sério problema, estou fazendo um CADASTRO com um menu de opções e não sei como fazer a opção REMOVER e ALTERAR ! Estou usando ARQUIVO e STRUCTS. *** ALGUÉM PODE ME AJUDAR ? *** SEGUE ABAIXO O CÓDIGO: //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ /* ***Programa saude*** Este programa deve conter funções para: # Cadastrar pacientes # Listar pacientes # Encontrar um paciente e seus dados # Remover um paciente # Alterar dados de um paciente # Calcular mmc de um paciente; OBS: O programa deve gravar tudo em um arquivo. */ #include<stdio.h> #include<stdlib.h> #include<locale.h> #include<math.h> #include<windows.h> #include<string.h> #define tam 20 struct data{ int dia; int mes; int ano; }; typedef struct data data; struct saude{ char nome[31]; data nasc; int idade; double peso; double altura; int ativo; }; typedef struct saude saude; //prototipo das funções void cadastrar(); void listar(); void encontrar(); void remover(); void alterar(); void imc(); void menu(); int main() { setlocale(LC_ALL,"Portuguese"); int esc; do{ menu(); scanf("%d",&esc); system("cls"); switch(esc) { case 1: cadastrar(); break; case 2: listar(); break; case 3: encontrar(); break; case 4: //remover(); break; case 5: alterar(); break; case 6: imc(); break; case 0: break; default: esc=0; break; } }while(esc!=0); return 0; } void cadastrar(){ saude a[tam]; FILE *arq; arq = fopen("grava.txt","ab"); if(arq==NULL){ printf("\nERRO PARA ESCREVER NO ARQUIVO!\n"); exit(0); } int i,qnt; printf("\n\tDigite a quantidade de cadastro: "); scanf("%d",&qnt); system("cls"); //recebendo dados para as variaveis que serão gravadas logo em seguida for(i=0;i<qnt;i++) { printf("\n\t\t\t\t\t\t*** CADASTRO %d ***\n",i+1); printf("\nNOME: "); fflush(stdin); scanf("%[^\n]s",&a.nome); printf("DATA DE NASCIMENTO - FORMATO 11/22/33: "); scanf("%d/%d/%d",&a.nasc.dia,&a.nasc.mes,&a.nasc.ano); printf("IDADE: "); scanf("%d",&a.idade); printf("PESO: "); scanf("%lf",&a.peso); printf("ALTURA: "); scanf("%lf",&a.altura); a.ativo=1; system("cls"); } //escrevendo no arquivo if(fwrite(&a,sizeof(saude),qnt,arq)==qnt){ printf("\n\t*** GRAVADO COM SUCESSO ***\n"); } puts("\n\n"); system("Pause"); system("cls"); //fechando arquivo fclose(arq); } void listar(){ saude a; //como não ira vetor, apenas while, pode colocar a variavel normal. ex "a" //abrindo arquivo para leitura FILE *arqler; arqler = fopen("grava.txt","rb"); if(arqler==NULL){ printf("\nERRO DE LEITURA!\n"); exit(1); } //abrindo arquivo para leitura while(fread(&a,sizeof(saude),1,arqler)==1){ //essa parte quer dizer que enquanto ele estiver retornando 1 significa que tem coisas pra ler printf("\nNOME: %s\n",a.nome); printf("DATA DE NASCIMENTO: %d/%d/%d\n",a.nasc.dia,a.nasc.mes,a.nasc.ano); printf("IDADE: %d\n",a.idade); printf("PESO: %.2lf\n",a.peso); printf("ALTURA: %.2lf\n",a.altura); printf("\n"); } printf("\n\n\n"); system("Pause"); system("cls"); //fechando arquivo de leitura fclose(arqler); } void encontrar(){ saude a; //abrindo arquivo FILE *pega; pega = fopen("grava.txt","rb"); if(pega==NULL){ printf("\nERRO PARA ENCONTRAR CADASTROS\n"); exit(2); } char acha[31]; printf("\nNOME DO PACIENTE: "); fflush(stdin); scanf("%[^\n]s",&acha); system("cls"); //percorrendo struct a procura do nome digitado anteriormente, e caso encontre, imprimir os dados desse paciente while(fread(&a,sizeof(saude),1,pega)==1){ if(strcmp(acha,a.nome)==0){ printf("\nNOME: %s\n",a.nome); printf("DATA DE NASCIMENTO: %d/%d/%d\n",a.nasc.dia,a.nasc.mes,a.nasc.ano); printf("IDADE: %d\n",a.idade); printf("PESO: %.2lf\n",a.peso); printf("ALTURA: %.2lf\n",a.altura); } } printf("\n\n"); system("Pause"); system("cls"); //fechando arquivo fclose(pega); }/* void remover(){ saude a[tam]; int cad,i; printf("Qual cadastro deseja excluir: "); scanf("%d",&cad); system("cls"); a[cad].ativo=0; }*/ void alterar(){ saude a; //abrindo arquivo para leitura e escrita FILE *arq; arq = fopen("grava.txt","r+b"); if(arq==NULL){ printf("\nERRO PARA ALTERAR ARQUIVO\n"); exit(4); } //alterar atraves do nome do paciente char pessoa[31]; printf("Digite o nome do paciente para alteração: "); fflush(stdin); scanf("%[^\n]s",&pessoa); system("cls"); //lendo arquivo e encontrando while(fread(&a,sizeof(saude),1,arq)==1){ if(pessoa,a.nome==0){ printf("\nNOME: "); fflush(stdin); scanf("%[^\n]s",&a.nome); printf("DATA DE NASCIMENTO - FORMATO 11/22/33: "); scanf("%d/%d/%d",&a.nasc.dia,&a.nasc.mes,&a.nasc.ano); printf("IDADE: "); scanf("%d",&a.idade); printf("PESO: "); scanf("%lf",&a.peso); printf("ALTURA: "); scanf("%lf",&a.altura); a.ativo=1; fwrite(&a,sizeof(saude),1,arq); } } printf("\n\n\t*** Dados Alterado com Sucesso ***\n\n"); system("Pause"); system("cls"); //fechando arquivo fclose(arq); } void imc(){ saude a; //abrindo arquivo FILE *pega; pega = fopen("grava.txt","rb"); if(pega==NULL){ printf("\nERRO PARA ENCONTRAR IMC\n"); exit(3); } char acha[31]; printf("\nNOME DO PACIENTE: "); fflush(stdin); scanf("%[^\n]s",&acha); system("cls"); double imc; //percorrendo struct a procura do nome digitado anteriormente, e caso encontre, imprimir os dados desse paciente while(fread(&a,sizeof(saude),1,pega)==1){ if(strcmpi(acha,a.nome)==0){ imc = a.peso/(pow(a.altura,2)); printf("\n\t%s seu imc é %.2lf\n",a.nome,imc); //caso em que se encontra o cadastrado if(imc<18.5){ printf("\n\tPaciente %s esta abaixo do peso!\n",a.nome); } else if(imc >= 18.5 && imc <= 24.9){ printf("\n\tPaciente %s esta no peso ideal!\n",a.nome); } else if(imc >= 25 && imc <= 29.9){ printf("\n\tPaciente %s esta com sobrepeso!\n",a.nome); } else if(imc>30){ printf("\n\tPaciente %s esta com obesidade!\n",a.nome); } } } printf("\n\n"); system("Pause"); system("cls"); //fechando arquivo fclose(pega); } void menu(){ printf("\n\t\t\t\t\t\t*** SAÚDE TOTAL ***\n\n"); printf("\t\t\t\t\t\t1 - CADASTRAR\n"); printf("\t\t\t\t\t\t2 - LISTAR\n"); printf("\t\t\t\t\t\t3 - ENCONTRAR\n"); printf("\t\t\t\t\t\t4 - REMOVER\n"); printf("\t\t\t\t\t\t5 - ALTERAR\n"); printf("\t\t\t\t\t\t6 - IMC\n"); printf("\t\t\t\t\t\t0 - SAIR\n"); printf("\n\t\t\t\t\t\tEscolha uma opção: "); }
  3. @arfneto aa sim, obrigado...vou tentar aqui.
  4. /* DÚVIDA: QUANDO PEÇO PARA O USUÁRIO DIGITAR A QUANTIDADE DE CADASTROS A SER FEITO, ACONTECE ALGO ESTRANHO. EX; Se desejo fazer dois cadastros ele intende 3 cadastros e depois imprime apenas os dois últimos. Ja olhei os indices e todos iniciam em zero, se alguém puder me ajudar..agradeço. */ #include <stdio.h> #include <stdlib.h> #include <locale.h> struct mercado{ char nome[30]; char marca[30]; float valor; int estoque; }; typedef struct mercado mercado; void Leproduto(mercado *v) { printf("Nome do Produto: "); fflush(stdin); scanf("%[^\n]s",&(*v).nome); printf("Marca do Produto: "); fflush(stdin); scanf("%[^\n]s",&(*v).marca); printf("Valor do Produto: "); scanf("%f",&(*v).valor); printf("Quantidade em Estoque: "); scanf("%d",&(*v).estoque); system("cls"); } void Leprodutos(mercado *v, int n) { int i; for(i=0;i<n;i++) { Leproduto(&v); } } void imprime(mercado v) { printf("Nome: %s\n",v.nome); printf("Marca: %s\n",v.marca); printf("Valor: %.2f\n",v.valor); printf("Estoque: %d\n",v.estoque); } int main() { setlocale(LC_ALL,"Portuguese"); mercado *P; int quant,i; printf("Quantidade de cadastros: "); scanf("%d",&quant); //system("cls"); P=(mercado*)malloc(quant*sizeof(mercado)); if(P==NULL) { printf("Alocação indisponível\n"); return 1; } puts(""); Leproduto(P); Leprodutos(P,quant); for(i=0;i<quant;i++) { imprime(P); } return 0; }
  5. #include <stdio.h> #include <stdlib.h> int main() { int i,j; int vet[3][3]; for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf("[%d][%d] ",i,j); scanf("%d",&vet[j]); } } printf("\n\t\t\t\t\tMatriz Normal\n\n"); for(i=0;i<3;i++) { printf("\n"); for(j=0;j<3;j++) { printf("[%d]",vet[j]); } } //Essa Parte esta ERRADA! Não sei como imprimir como TRANSPOSTA. printf("\n\t\t\t\t\tMatriz Transposta\n\n"); for(i=0;i<3;i--) { printf("\n"); for(j=0;j>0;j--) { printf("[%d]",vet[j]); } } }

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