domingo, 12 de abril de 2020

EJERCICIO para manejo de archivos .DAT en c con fscanf

El ejercicio solucionado es:
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
Primero se crea el archivo:
notas.dat
6 – 7 – 8 – 5 – 6 – 4 – 7 – 8 – 7 – 10 – 0 – 5 – 6 – 7 – 6 – 5 – 0 – 7 – 8 – 10 – 2 – 3 – 4 – 5 – 6 – 7 – 6 – 5 – 4 – 10 – 4– 3 – 2 – 3 – 4
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
Luego se crea el archivo:
notas.c

#include <stdio.h>
#include <stdlib.h>
#define NumeroAlumnos 35

int main() {
    double nota[NumeroAlumnos]; //35 elementos numerados de 0 a 34
    double aprobados;
    double suspensos;
    int dieces = 0;
    int ceros = 0;
    int i=0;

    puts ("Programa Notas de clase \n");
    //Extracción de datos de archivo
    FILE* fichero;
    fichero = fopen("notas.dat", "r+");
    for (i=0; i<=NumeroAlumnos-1; i++) {
        fscanf (fichero, "%lf – ", &nota[i] );
        printf("%d\t%lf\n",i,nota[i]);
        if (nota[i] >= 5) { aprobados = aprobados + 1; }
        else { suspensos = suspensos + 1; }
        if (nota[i] == 10) { dieces = dieces + 1; }
        if (nota[i] == 0) {  ceros = ceros + 1; }
    }
    fclose(fichero);

    printf ("Porcentaje de aprobados es %lf %% \n", (aprobados/NumeroAlumnos)*100);
    printf ("Porcentaje de suspensos es %lf %% \n", (suspensos/NumeroAlumnos)*100);
    printf ("Obtienen un 10 un total de %d alumnos \n", dieces);
    printf ("Obtienen un 0 un total de %d alumnos \n", ceros);

    return 0; // Ejercicios resueltos programacion C aprenderaprogramar.com
}

-----------------------------------------------------------------------------
-----------------------------------------------------------------------------

Se compila el archivo
gcc notas.c -o notas

-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
Se ejecuta el archivo:
./notas

El resultado es:

nbuser@nbserver:~$ ./notas
Programa Notas de clase

0       6.000000
1       7.000000
2       8.000000
3       5.000000
4       6.000000
5       4.000000
6       7.000000
7       8.000000
8       7.000000
9       10.000000
10      0.000000
11      5.000000
12      6.000000
13      7.000000
14      6.000000
15      5.000000
16      0.000000
17      7.000000
18      8.000000
19      10.000000
20      2.000000
21      3.000000
22      4.000000
23      5.000000
24      6.000000
25      7.000000
26      6.000000
27      5.000000
28      4.000000
29      10.000000
30      4.000000
31      3.000000
32      2.000000
33      3.000000
34      4.000000
Porcentaje de aprobados es 65.714286 %
Porcentaje de suspensos es 34.285714 %
Obtienen un 10 un total de 3 alumnos
Obtienen un 0 un total de 2 alumnos

-----------------------------------------------------------------------------
-----------------------------------------------------------------------------

La idea del trabajo final es hacer los 5 ejercicios de la página:


https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=939:programacion-en-lenguaje-c-ejercicios-resueltos-arrays-o-arreglos-ciclos-for-while-scanf-if-else-cu00540f&catid=82&Itemid=210

EJERCICIO para manejo de archivos .DAT en c con fscanf
Vamos a considerar un archivo que contenga los siguientes datos (nosotros usaremos un fichero donde habrá un dato en cada línea. Aquí los ponemos separados por guiones por motivos de espacio):
6 – 7 – 8 – 5 – 6 – 4 – 7 – 8 – 7 – 10 – 0 – 5 – 6 – 7 – 6 – 5 – 0 – 7 – 8 – 10 – 2 – 3 – 4 – 5 – 6 – 7 – 6 – 5 – 4 – 10 – 4 – 3 – 2 – 3 – 4

El código sería el siguiente:
#include <stdio.h>
#include <stdlib.h>
#define NumeroAlumnos 35

int main() {
    double nota[NumeroAlumnos]; //35 elementos numerados de 0 a 34
    double aprobados;
    double suspensos;
    int dieces = 0;
    int ceros = 0;
    int i=0;

    puts ("Programa Notas de clase \n");
    //Extracción de datos de archivo
    FILE* fichero;
    fichero = fopen("c:\\notas.dat", "rt");
    for (i=0; i<=NumeroAlumnos-1; i++) {
        fscanf (fichero, "%lf", &nota[i] );
        if (nota[i] >= 5) { aprobados = aprobados + 1; }
        else { suspensos = suspensos + 1; }
        if (nota[i] == 10) { dieces = dieces + 1; }
        if (nota[i] == 0) {  ceros = ceros + 1; }
    }
    fclose(fichero);

    printf ("Porcentaje de aprobados es %lf %% \n", (aprobados/NumeroAlumnos)*100);
    printf ("Porcentaje de suspensos es %lf %% \n", (suspensos/NumeroAlumnos)*100);
    printf ("Obtienen un 10 un total de %d alumnos \n", dieces);
    printf ("Obtienen un 0 un total de %d alumnos \n", ceros);

    return 0; // Ejercicios resueltos programacion C aprenderaprogramar.com
}


El resultado de ejecución del programa para los datos indicados como ejemplo sería:
Programa Notas
Porcentaje de aprobados es 65.714286 %
Porcentaje de suspensos es 34.285714 %
Obtienen un 10 un total de 3 alumnos
Obtienen un 0 un total de 2 alumnos


El bucle se puede plantear igualmente con un do … while (condición). Este sería el código del bucle (el resto del código se mantendría igual):
do {
fscanf (fichero, "%lf", &nota[i] );
printf ("Nota %d extraida: %lf \n", i, nota[i]);
if (nota[i] >= 5) { aprobados = aprobados + 1; }
else { suspensos = suspensos + 1; }
if (nota[i] == 10) { dieces = dieces + 1; }
if (nota[i] == 0) {  ceros = ceros + 1; }
i++; //Ejemplo aprenderaprogramar.com
while (i<=34); // También válido i<35

No hay comentarios:

Publicar un comentario