Universidade Federal da Grande Dourados

Sistemas de Informação

Laboratório de Programação II

Programa de Monitoria

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);
}

Voltar