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.