Logo Passei Direto
Buscar
Material

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Nome: Cauê Lopes Costa 
RA: R056244 Turma: DS2R18 
 
Lista de exercícios 08 
• Quando vamos trabalhar com arquivo na linguagem C, utilizamos a função fopen, que 
recebe dois parâmetros, o primeiro é o path (caminho) e nome do arquivo e o segundo 
é o que vai informar ao S.O. qual o modo de abertura é pretendido. Responda como 
será o modo de abertura para as seguintes opções: 
• r: Leitura. 
• w: Escrita (sobrescreve). 
• a: Anexar (escrever no final). 
• rb: Leitura em binário. 
• wb: Escrita em binário (sobrescreve). 
• ab: Anexar em binário (escrever no final). 
 
• Analise o código a seguir e em seguida responda 
 
 
 
• O que este código faz? 
O código recebe um argumento da linha de comando (a nota) e converte-o em 
um número inteiro. Ele exibe uma mensagem com a nota no stdout (saída 
padrão) e uma mensagem no stderr (saída de erro). 
 
• O primeiro parâmetro da função fprintf, está diferente na linha 6 e 7, isso é um 
erro? Justifique. 
Não é um erro. Na linha 6, fprintf está usando stdout para enviar a mensagem 
para a saída padrão, enquanto na linha 7 usa stderr para enviar a mensagem 
para a saída de erro. Isso é proposital e serve para diferenciar as saídas. 
 
• Ao executar o programa com o seguinte comando: 
“questao.exe 10 >> arquivo1.txt”, o que será exibido na tela? 
Apenas a mensagem do stderr: Foi muito divertido aprender a programar 
 
• Ao executar o programa com o seguinte comando: 
“questao.exe 10 2> arquivo1.txt”. Qual será o conteúdo do arquivo1.txt 
Será: Foi muito divertido aprender a programar 
 
• Ao executar o programa com o seguinte comando: 
“questao.exe 10 > arquivo1.txt 2> arquivo2.txt”. 
Qual será o conteúdo do arquivo2.txt 
O conteúdo do arquivo2.txt será: Foi muito divertido aprender a programar 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
• O código a seguir ao ser executado cria um arquivo com um número nele. 
Escreva o código em C para um programa capaz de ler o número gravado neste 
arquivo e exibir o mesmo na tela. 
 
 
RESPOSTA: 
#include 
 
int main() { 
 FILE *arquivo; 
 int numero; 
 
 arquivo = fopen("c:\\tmp\\numero.txt", "r"); 
 if (arquivo == NULL) { 
 fprintf(stderr, "\nNao foi possivel abrir o arquivo"); 
 return 1; 
 } 
 
 fscanf(arquivo, "%d", &numero); // Lê o número do arquivo 
 printf("O numero lido do arquivo e: %d\n", numero); 
 
 fclose(arquivo); 
 return 0; 
} 
 
• Analise o código a seguir e diga o que ele faz? 
 
#include 
#include 
#include 
 
typedef struct aluno{ 
 char nome[21]; 
 char ra[7]; 
 float nb1; 
 float nb2; 
 float pim; 
 float exame; 
} Aluno; 
 
void menuSair(); 
void menuInvalido(); 
void menuCadastrar(); 
void menuListar(); 
void menuPesquisar(); 
 
float calcMedia(Aluno aluno); 
float calcMediaSemExame(Aluno aluno); 
int aprovado(Aluno aluno); 
int aprovadoSemExame(Aluno aluno); 
 
void exibirAluno(Aluno aluno); 
Aluno alunoReceber(); 
void alunoAdicionar(Aluno aluno); 
 
void alunoRemover(Aluno alunoRemover); 
void menuAlunoEditar(Aluno aluno); 
 
 
 
int main(){ 
 int op; 
 do{ 
 printf("\n\n*** Menu ***"); 
 printf("\n 0 - Sair"); 
 printf("\n 1 - Cadastrar"); 
 printf("\n 2 - Listar"); 
 printf("\n 3 - Pesquisar"); 
 printf("\nEntre com a opção desejada: "); 
 scanf("%d", &op); 
 fflush(stdin); 
 switch (op) 
 { 
 case 0: 
 menuSair(); 
 break; 
 case 1: 
 menuCadastrar(); 
 break; 
 case 2: 
 menuListar(); 
 break; 
 case 3: 
 menuPesquisar(); 
 break; 
 default: 
 menuInvalido(); 
 break; 
 } 
 } while(op != 0 ); 
 return 0; 
} 
 
void menuSair(){ 
 printf("\nBye...\n\n\n"); 
} 
 
void menuInvalido(){ 
 printf("\nOps, opção inválida.\n\n\n"); 
} 
 
void menuCadastrar(){ 
 printf("\n *** Cadastrar novo aluno ***"); 
 Aluno aluno = alunoReceber(); 
 alunoAdicionar(aluno); 
 
 
} 
 
void menuListar(){ 
 Aluno aluno; 
 FILE *arq; 
 arq = fopen("aluno.dat", "rb"); 
 if (arq == NULL){ 
 printf("Problemas ao abrir o arquivo.\n"); 
 } 
 printf("\n\n *** Listagem de alunos ***\n"); 
 printf("\n%-20s %-6s %-5s %-5s %-5s %-5s %-5s %s", 
 "NOME", "RA", "NB1", "NB2", "PIM", "Exame", "Media", "Situação"); 
 while (fread(&aluno, sizeof(Aluno), 1, arq) == 1) { 
 printf("\n%-20s %-6s %5.2f %5.2f %5.2f %5.2f %5.2f %s", 
 aluno.nome, aluno.ra, aluno.nb1, aluno.nb2, aluno.pim, 
 aluno.exame, calcMedia(aluno), 
 (aprovado(aluno)? "Aprovado" : "Reprovado") ); 
 } 
 fclose(arq); 
} 
 
void menuPesquisar(){ 
 int encontrou = 0; 
 Aluno aluno; 
 char ra[7]; 
 FILE *arq; 
 printf("\n\n\n*** Pesquisar *** "); 
 printf("\nEntre com o RA: "); 
 scanf("%s", ra); 
 arq = fopen("aluno.dat", "rb"); 
 if (arq == NULL){ 
 printf("Problemas ao abrir o arquivo.\n"); 
 } 
 while (fread(&aluno, sizeof(Aluno), 1, arq) == 1) { 
 encontrou=(strcmp(ra, aluno.ra) == 0); 
 if(encontrou) 
 break; 
 } 
 fclose(arq); 
 
 if(encontrou){ 
 int op; 
 printf("\nEntrado..."); 
 exibirAluno(aluno); 
 printf("\n\n\n***Menu Aluno ***"); 
 printf("\n 0 - voltar"); 
 printf("\n 1 - remover"); 
 printf("\n 2 - Editar"); 
 printf("\nEntre com a opção desejada: "); 
 scanf("%d", &op); 
 switch (op) 
 { 
 case 0: 
 printf("\n voltando ao menu inicial"); 
 break; 
 case 1: 
 printf("\n\n\n*** Removendo *** "); 
 alunoRemover(aluno); 
 break; 
 case 2: 
 menuAlunoEditar(aluno); 
 break;; 
 default: 
 menuInvalido(); 
 break; 
 } 
 
 }else{ 
 printf("\nRA não cadastrado."); 
 } 
 
 
} 
 
 
 
void alunoRemover(Aluno alunoRemover){ 
 rename("aluno.dat", "aluno.old"); 
 Aluno aluno; 
 FILE *arqOrigem, *arqDestino; 
 arqOrigem = fopen("aluno.old", "rb"); 
 arqDestino = fopen("aluno.dat", "wb"); 
 
 if (arqOrigem == NULL){ 
 printf("Problemas ao abrir o arquivo.\n"); 
 } 
 while (fread(&aluno, sizeof(Aluno), 1, arqOrigem) == 1) { 
 if(!strcmp(alunoRemover.ra, aluno.ra) == 0){ 
 fwrite(&aluno, sizeof(Aluno), 1, arqDestino); 
 } 
 } 
 fclose(arqOrigem); 
 fclose(arqDestino); 
 
} 
 
void menuAlunoEditar(Aluno aluno){ 
 exibirAluno(aluno); 
 Aluno novoAluno = alunoReceber(); 
 alunoRemover(aluno); 
 alunoAdicionar(novoAluno); 
 
} 
 
float calcMediaSemExame(Aluno aluno){ 
 return ((aluno.nb1 + aluno.nb2) * .4) + (aluno.pim * .2); 
} 
 
float calcMedia(Aluno aluno){ 
 float media = calcMediaSemExame(aluno); 
 if (media = 7; 
} 
 
 
int aprovado(Aluno aluno){ 
 return calcMedia(aluno) >=5; 
} 
 
 
void exibirAluno(Aluno aluno){ 
 printf("\nNome: %s", aluno.nome); 
 printf("\nNota B1: %.2f", aluno.nb1); 
 printf("\nNota B2: %.2f", aluno.nb2); 
 printf("\nNota Pim: %.2f", aluno.pim); 
 if(!aprovadoSemExame(aluno)) 
 printf("\nNota Exame: %.2f", aluno.exame); 
 printf("\nSituacao: %s", (aprovado(aluno)? "Aprovado" : "Reprovado")); 
} 
 
 
Aluno alunoReceber(){ 
 Aluno aluno; 
 printf("\nEntre com o nome:"); 
 scanf("%s", aluno.nome); 
 printf("Entre com o RA: "); 
 scanf("%s", aluno.ra); 
 printf("Entre com a nota B1: "); 
 scanf("%f", &aluno.nb1); 
 printf("Entre com a nota B2: "); 
 scanf("%f", &aluno.nb2); 
 printf("Entre com a nota do PIM: "); 
 scanf("%f", &aluno.pim); 
 if(!aprovadoSemExame(aluno)){ 
 printf("Entre com a nota do Exame: "); 
 scanf("%f", &aluno.exame); 
 } 
 return aluno; 
} 
 
void alunoAdicionar(Aluno aluno){ 
 FILE *arq; 
 arq = fopen("aluno.dat", "ab"); 
 if (arq == NULL){ 
 printf("Problemas ao abrir o arquivo.\n"); 
 } 
 int result = fwrite(&aluno, sizeof(Aluno), 1, arq); 
 printf("Nro de elementos gravados: %d", result); 
 fclose(arq);
} 
 
 
RESPOSTA: O software acima gerencia um sistema de alunos, permitindo adicionar, listar, 
pesquisar, editar e remover registros. Cada aluno tem notas que são usadas para calcular a 
média, e o sistema determina a situação de aprovação ou reprovação. Todos os dados são 
salvos em um arquivo binário para persistência.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Mais conteúdos dessa disciplina