Respostas Lista 4 - Arquivos
1.
#include <stdio.h>
int main() {
FILE *entrada;
FILE *saida;
int numero;
int soma = 0;
entrada = fopen("entrada.txt", "r");
saida = fopen("saida.txt", "w");
if (saida == NULL || entrada == NULL) {
printf("Erro ao acessar arquivos");
return -1;
}
do {
fscanf(entrada, " %d", &numero);
soma += numero;
} while (!feof(entrada));
fprintf(saida, "%d\n", soma);
fclose(entrada);
fclose(saida);
return 0;
}
2.
#include &stdio.h>
int fibonacci(int n) {
if (n == 0) {
return 0;
}
if (n == 1 || n == 2) {
return 1;
}
else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
int main() {
FILE *saida;
int n;
int i;
saida = fopen("fibonacci.txt", "w");
if (saida == NULL) {
printf("Não foi possível criar o arquivo");
}
printf("Informe até qual termo da sequência deseja inserir no arquivo: ");
scanf("%d", &n);
for (i = 0; i <= n; i++) {
fprintf(saida, "%d\n", fibonacci(i));
}
fclose(saida);
return 0;
}
3.
#include <stdio.h>
#include <ctype.h>
char cap(char c) {
if (isalpha(c)) {
return toupper(c);
}
else {
return c;
}
}
int main() {
FILE *arquivo;
char caractere[1000];
int i, j;
arquivo = fopen("texto.txt", "r+");
if (arquivo == NULL) {
printf("Não foi possível ler o arquivo");
}
i = 0;
do {
fscanf(arquivo, "%c", &caractere[i]);
caractere[i] = cap(caractere[i]);
i++;
} while (!feof(arquivo));
rewind(arquivo);
for (j = 0; j < i - 1; j++) {
printf("%c", caractere[j]);
fprintf(arquivo, "%c", caractere[j]);
}
fclose(arquivo);
return 0;
}
4.
#include <stdio.h>
#include <string.h>
int main() {
FILE *arquivo;
char nome[50];
float nota1, nota2;
arquivo = fopen("notas.txt", "w");
if (arquivo == NULL) {
printf("Erro ao abrir o arquivo");
return 1;
}
while (1) {
scanf(" %s", nome);
if (strcmp(nome, "0") == 0) {
break;
}
scanf(" %f %f", &nota1, &nota2);
if (nota1 < 0 || nota1 > 10 || nota2 < 0 || nota2 > 10) {
break;
}
fprintf(arquivo, "%s %.2f %.2f %.2f\n", nome, nota1, nota2, (nota1 + nota2) / 2);
fflush(stdin);
}
fclose(arquivo);
return 0;
}
5.
#include <stdio.h>
#include <string.h>
int main() {
FILE *arquivo;
long size; // Posição do cursor no arquivo
char nome[50];
float nota1;
float nota2;
char nome_p[50];
float nota1_p;
float nota2_p;
float media_p;
arquivo = fopen("notas.txt", "r+");
if (arquivo == NULL) {
printf("Erro ao abrir o arquivo\n");
return 1;
}
while (1) {
rewind(arquivo); // Retorna a posição do cursor para o início do arquivo
printf("Informe o nome do aluno que deseja atualizar a nota: ");
scanf(" %s", nome);
if (strcmp(nome, "0") == 0) {
break;
}
do {
size = ftell(arquivo); // Guarda a posição do cursor no arquivo antes da leitura
fscanf(arquivo, "%s %f %f %f", nome_p, &nota1_p, &nota2_p, &media_p);
// Se aluno foi econtrado
if(strcmp(nome_p, nome) == 0) {
printf("\nAluno %s encontrado!\n");
printf("Nota 1: %.2f, Nota 2: %.2f, Media: %.2f\n", nota1_p, nota2_p, media_p);
printf("Informe as novas notas para atualizar: ");
scanf(" %f %f", &nota1, &nota2);
fseek(arquivo, size+2, SEEK_SET); // size+2 devido à quebra de linha
fprintf(arquivo, "%s %.2f %.2f %.2f", nome, nota1, nota2, (nota1 + nota2) / 2);
printf("\nNotas atualizadas com sucesso!\n\n");
break;
}
} while (!feof(arquivo));
if(feof(arquivo)) {
printf("\nO aluno nao foi encontrado!\n\n");
}
}
fclose(arquivo);
return 0;
}
6.
#include <stdio.h>
#include <string.h>
struct Contato {
char nome[50];
char telefone[20];
char email[50];
char aniversario[11];
};
void inserirContato(FILE *);
void apagarContato(FILE *);
void pesquisarContato(FILE *);
void listarContatos(FILE *);
int main() {
FILE *arquivo;
int opcao;
arquivo = fopen("contatos.dat", "ab");
if (arquivo == NULL) {
printf("Erro ao abrir arquivo\n");
return 1;
}
do {
printf("\n1 - Inserir novo contato\n");
printf("2 - Apagar contato\n");
printf("3 - Pesquisar contato\n");
printf("4 - Exibir contatos\n");
printf("5 - Sair\n");
printf("Opcao: ");
scanf(" %d", &opcao);
switch(opcao) {
case 1:
inserirContato(arquivo);
break;
case 2:
apagarContato(arquivo);
break;
case 3:
pesquisarContato(arquivo);
break;
case 4:
listarContatos(arquivo);
break;
}
} while (opcao != 5);
fclose(arquivo);
return 0;
}
void inserirContato(FILE *arquivo) {
struct Contato contato;
freopen("contatos.dat", "ab", arquivo);
if(arquivo == NULL) {
printf("Erro ao abrir o arquivo\n");
return;
}
printf("\nInserindo novo contato:\n");
printf("Nome: ");
scanf(" %[^\n]s", contato.nome);
printf("Telefone: ");
scanf(" %s", contato.telefone);
printf("Email: ");
scanf(" %s", contato.email);
printf("Aniversario: ");
scanf(" %s", contato.aniversario);
fwrite(&contato, sizeof(struct Contato), 1, arquivo);
fclose(arquivo);
}
void apagarContato(FILE *arquivo) {
struct Contato contato;
char nome[50];
int flag = 1;
FILE *arquivo_temporario;
freopen("contatos.dat", "rb", arquivo);
arquivo_temporario = fopen("tmp.dat", "wb");
if(arquivo_temporario == NULL || arquivo == NULL) {
printf("Erro ao abrir arquivo\n");
return;
}
printf("\nInsira o nome do contato que deseja remover: ");
scanf(" %[^\n]s", nome);
while (fread(&contato, sizeof(struct Contato), 1, arquivo) != 0) {
if (strcmp(contato.nome, nome) == 0) {
printf("\nContato encontrado e removido\n");
flag = 0;
}
else {
fwrite(&contato, sizeof(struct Contato), 1, arquivo_temporario);
}
}
if(flag)
printf("\nContato nao foi encontrado\n");
fclose(arquivo);
fclose(arquivo_temporario);
remove("contatos.dat");
rename("tmp.dat", "contatos.dat");
}
void pesquisarContato(FILE *arquivo) {
struct Contato contato;
char nome[50];
int flag = 1;
freopen("contatos.dat", "rb", arquivo);
if(arquivo == NULL) {
printf("Erro ao abrir o arquivo\n");
return;
}
printf("\nInsira o nome a pesquisar: ");
scanf(" %[^\n]s", nome);
while (fread(&contato, sizeof(struct Contato), 1, arquivo) != 0) {
if (strcmp(contato.nome, nome) == 0) {
printf("\nContato %s encontrado:\n", nome);
printf("\tNome: %s\n", contato.nome);
printf("\tTelefone: %s\n", contato.telefone);
printf("\tEmail: %s\n", contato.email);
printf("\tAniversario: %s\n", contato.aniversario);
flag = 0;
break;
}
}
if(flag)
printf("\nContato nao foi encontrado\n");
fclose(arquivo);
}
void listarContatos(FILE *arquivo) {
struct Contato contato;
int i = 1;
freopen("contatos.dat", "rb", arquivo);
if(arquivo == NULL) {
printf("Erro ao abrir o arquivo\n");
return;
}
while (fread(&contato, sizeof(struct Contato), 1, arquivo) != 0) {
printf("\nContato %d:\n", i);
printf("\tNome: %s\n", contato.nome);
printf("\tTelefone: %s\n", contato.telefone);
printf("\tEmail: %s\n", contato.email);
printf("\tAniversario: %s\n", contato.aniversario);
i++;
} ;
fclose(arquivo);
}