16/11/2022 ; 6:15 PM

This commit is contained in:
2022-11-16 18:20:49 -04:00
parent c0fecc3536
commit 77bcc9e8f9
21 changed files with 1317 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
#include <stdio.h>
/* Archivos y caracteres.
El programa escribe caracteres en un archivo. */
void main(void)
{
char p1;
FILE *ar;
ar = fopen("arc.txt", "w"); /* Se abre el archivo arc.txt para escritura. */
if (ar != NULL)
{
while ((p1 = getchar()) != '\n')
/* Se escriben caracteres en el archivo mientras no se detecte el caracter
➥que indica el fin de la línea. */
fputc(p1, ar);
fclose(ar); /* Se cierra el archivo. */
}
else
printf("No se puede abrir el archivo");
}

View File

@@ -0,0 +1,68 @@
#include <stdio.h>
/* Alumnos.
El programa pregunta al usuario el número de registro que desea
➥modificar, obtiene el nuevo promedio del alumno y modifica tanto el
➥registro como el archivo correspondiente. */
typedef struct /* Declaración de la estructura alumno. */
{
int matricula;
char nombre[20];
int carrera;
float promedio;
} alumno;
void modifica(FILE *); /* Prototipo de función. */
void main(void)
{
FILE *ar;
if ((ar = fopen("ad1.dat", "r+")) != NULL)
modifica(ar);
else
printf("\nEl archivo no se puede abrir");
fclose(ar);
}
void modifica(FILE *ap)
/* Esta función se utiliza para modificar el promedio de un alumno. */
{
int d;
alumno alu;
printf("\nIngrese el número de registro que desea modificar: ");
/* Observa que el lenguaje C almacena el primer registro en la
➥posición cero. Por lo tanto, si desea modificar el registro n, debe buscarlo en la posición n-1. */
scanf("%d", &d);
fseek(ap, (d-1) * sizeof(alumno), 0);
/* Observa que la instrucción fseek tiene tres argumentos. El primero
➥indica que el apuntador se debe posicionar al inicio del FILE.
➥El segundo señala el número de bloques que debe moverse, en términos
➥de bytes, para llegar al registro correspondiente. Nota que el
➥primer registro ocupa la posición 0. Finalmente, el tercer argumento
➥muestra a partir de qué posición se debe mover el bloque de bytes:
➥se utiliza el 0 para indicar el inicio del archivo, 1 para expresar
➥que se debe mover a partir de la posición en la que actualmente se
➥encuentra y 2 para indicar que el movimiento es a partir del fin del archivo. */
fread(&alu, sizeof(alumno), 1, ap);
/* Luego de posicionarnos en el registro que nos interesa, lo leemos. */
printf("\nIngrese el promedio correcto del alumno: ");
scanf("%f", &alu.promedio); /* Modificamos el registro con el nuevo promedio. */
fseek(ap, (d-1) * sizeof(alumno), 0);
/* Nos tenemos que posicionar nuevamente en el lugar correcto para
➥escribir el registro modificado. Observa que si no hacemos este
➥reposicionamiento escribiríamos el registro actualizado en la
➥siguiente posición. */
fwrite(&alu, sizeof(alumno), 1, ap);
}

View File

@@ -0,0 +1,82 @@
#include <stdio.h>
/* Incrementa salarios.
El programa incrementa el salario de los empleados de una empresa
—actualiza el archivo correspondiente— si sus ventas son superiores
al millón de pesos anuales. */
typedef struct /* Declaración de la estructura empleado. */
{
int clave;
int departamento;
float salario;
float ventas[12];
}empleado;
void incrementa(FILE *); /* Prototipo de función. */
void main(void)
{
FILE *ar;
if ((ar = fopen("ad5.dat", "r+")) != NULL) /* El archivo se abre en la modalidad para leer y escribir. */
incrementa(ar);
else
printf("\nEl archivo no se puede abrir");
rewind(ar);
/* La función rewind se utiliza para posicionarnos en el inicio del
➥archivo cada vez que sea necesario. En este programa no tiene ninguna
➥utilidad, sólo se escribió para explicar su uso. */
fclose(ar);
}
void incrementa(FILE *ap)
/* Esta función se utiliza para incrementar el salario de todos aquellos
➥empleados que hayan tenido ventas anuales por más de $1,000,000.
➥Actualiza además el archivo correspondiente. */
{
int i, j, t;
float sum;
empleado emple;
t = sizeof(empleado);
/* La función sizeof se utiliza para conocer el tamaño de la estructura empleado. */
fread(&emple, sizeof(empleado), 1, ap); /* Se lee el primer registro del archivo. */
while (!feof(ap))
{
i = ftell(ap) / t;
/* La función ftell se utiliza para conocer la posición de nuestro
➥apuntador en el archivo. La variable i nos proporciona en este caso
➥el tamaño de todos los bloques que existen debajo de nuestra
➥posición. Si conocemos el tamaño de cada bloque, entonces podemos
➥obtener el número de bloques que hay exactamente debajo de nuestra posición. */
sum = 0;
for (j = 0; j < 12; j++)
sum += emple.ventas[j]; /* Se calculan las ventas de cada vendedor. */
if (sum > 1000000)
{
emple.salario = emple.salario * 1.10; /* Se incrementa el salario. */
fseek(ap, (i - 1) * sizeof(empleado), 0);
/* Nos posicionamos para escribir el registro actualizado. */
fwrite(&emple, sizeof(empleado), 1, ap);
fseek(ap, i * sizeof(empleado), 0);
/* Nos posicionamos nuevamente para leer el siguiente registro.
➥Esta instrucción no debería ser necesaria, pero la función
➥fwrite se comporta a veces de manera inestable en algunos
➥compiladores de C. Para asegurarnos que siempre funcione
➥correctamente, realizamos este nuevo reposicionamiento. */
}
fread(&emple, sizeof(empleado), 1, ap);
}
}

View File

@@ -0,0 +1,23 @@
#include <stdio.h>
/* Incorpora caracteres.
El programa agrega caracteres al archivo libro.txt. */
void main(void)
{
char p1;
FILE *ar;
ar = fopen("libro.txt", "a");
/* Se abre el archivo con la opci<63>n para incorporar caracteres. */
if (ar != NULL)
{
while ((p1 = getchar()) != '\n')
fputc(p1, ar);
fclose(ar);
}
else
printf("No se puede abrir el archivo");
}

View File

@@ -0,0 +1,51 @@
#include <stdio.h>
/* Cuenta caracteres.
El programa, al recibir como dato un archivo de texto y un caracter, cuenta
➥el número de veces que se encuentra el caracter en el archivo. */
int cuenta(char); /* Prototipo de función. */
void main(void)
{
int res;
char car;
printf("\nIngrese el caracter que se va a buscar en el archivo: ");
car = getchar();
res = cuenta(car);
if (res != -1)
printf("\n\nEl caracter %c se encuentra en el archivo %d veces", car, res);
else
printf("No se pudo abrir el archivo");
}
int cuenta(char car)
/* Esta función determina cuántas veces se encuentra el caracter en el
➥archivo. */
{
int res, con = 0;
char p;
FILE *ar;
if ((ar = fopen("arc.txt", "r")) != NULL) /* Se abre el archivo para lectura. */
{
while (!feof(ar)) /* Se trabaja con el archivo mientras no se llegue al fin de éste. */
{
p = getc(ar);
if (p == car) /* Se realiza la comparación de los caracteres. */
con++;
}
fclose(ar);
res = con;
}
else
res = -1;
return (res);
}

View File

@@ -0,0 +1,46 @@
#include <stdio.h>
#include <ctype.h>
/* Letras minúsculas y mayúsculas.
El programa, al recibir como dato un archivo formado por cadenas de caracteres,
➥determina el número de letras minúsculas y mayúsculas que hay en el archivo. */
void minymay(FILE *); /* Prototipo de función. */
/* Observa que esta función va a recibir un archivo como parámetro. */
void main(void)
{
char p;
FILE *ar;
if ((ar = fopen("arc5.txt", "r")) != NULL)
{
minymay(ar);
/* Se llama a la función minymay. Se pasa el archivo ar como parámetro. */
fclose(ar);
}
else
printf("No se pudo abrir el archivo");
}
void minymay(FILE *arc)
/* Esta función cuenta el número de minúsculas y mayúsculas que hay en el
➥archivo arc. */
{
int min = 0, may = 0;
char p;
while (!feof(arc))
{
p = fgetc(arc); /* Se utiliza la función fgetc() para leer caracteres del archivo. */
if (islower(p))
min++;
else
if (isupper(p))
may++;
}
printf("\nNumero de minusculas: %d", min);
printf("\nNumero de mayusculas: %d", may);
}

View File

@@ -0,0 +1,52 @@
#include <stdio.h>
#include <ctype.h>
/* Letras minúsculas y mayúsculas.
El programa, al recibir como dato un archivo formado por cadenas de
➥caracteres, determina el número de letras minúsculas y mayúsculas que hay
➥en el archivo. */
void minymay(FILE *); /* Prototipo de función. */
void main(void)
{
FILE *ap;
if ((ap = fopen("arc.txt", "r")) != NULL)
{
minymay(ap);
fclose(ap);
}
else
printf("No se puede abrir el archivo");
}
void minymay(FILE *ap1)
/* Esta función se utiliza para leer cadenas de caracteres de un archivo
➥y contar el número de letras minúsculas y mayúsculas que existen en el
➥archivo. */
{
char cad[30];
int i, mi = 0, ma = 0;
while (!feof(ap1))
{
fgets(cad, 30, ap1);
/* Se utiliza la función fgets() para leer cadenas de caracteres del
➥archivo. */
i = 0;
while (cad[i] != '\0')
{
if (islower(cad[i]))
mi++;
else
if (isupper(cad[i]))
ma++;
i++;
}
}
printf("\n\nNumero de letras minusculas: %d", mi);
printf("\nNmero de letras mayusculas: %d", ma);
}

View File

@@ -0,0 +1,52 @@
#include <stdio.h>
#include <stdlib.h>
/* Suma reales.
El programa lee cadenas de caracteres de un archivo, detecta aquellas que
➥comienzan con números, los suma y calcula el promedio de los mismos. */
void sumypro(FILE *); /* Prototipo de función. */
void main(void)
{
FILE *ap;
if ((ap = fopen("arc2.txt", "r")) != NULL)
{
sumypro(ap);
/* Se llama a la función sumypro. Se pasa el archivo ap como parámetro. */
fclose(ap);
}
else
printf("No se puede abrir el archivo");
}
void sumypro(FILE *ap1)
/* Esta función lee cadenas de caracteres de un archivo, detecta aquellas
➥que comienzan con números, y obtiene la suma y el promedio de dichos números. */
{
char cad[30];
int i = 0;
float sum = 0.0, r;
while (!feof(ap1))
{
fgets(cad, 30, ap1); /* Se lee la cadena del archivo. */
r = atof(cad);
/* Recuerda que la función atof convierte una cadena de caracteres que
➥contiene números reales a un valor de tipo double. Si la cadena comienza
➥con otro caracter o no contiene números, regresa 0 o el valor queda
➥indefinido. */
if (r)
{
i++;
sum += r;
}
}
printf("\nSuma: %.2f", sum);
if (i) /* Si el valor de i es distinto de cero, calcula el promedio. */
printf("\nPromedio: %.2f", sum / i);
}

View File

@@ -0,0 +1,68 @@
#include <stdio.h>
#include <ctype.h>
#include <string.h>
/* Reemplaza palabras.
El programa lee cadenas de caracteres de un archivo y cada que vez que
➥encuentra la palabra México escrita en forma incorrecta —la primera con
➥minúscula— la reemplaza por su forma correcta y escribe la cadena en otro archivo. */
void cambia(FILE *, FILE *);
/* Prototipo de función. Se pasan dos archivos como parámetros. */
void main(void)
{
FILE *ar;
FILE *ap;
ar = fopen("arc.txt", "r"); /* Se abre el archivo arc.txt para lectura. */
ap = fopen("arc1.txt", "w"); /* Se abre el archivo arc1.txt para escritura. */
if ((ar != NULL) && (ap != NULL))
{
cambia(ar, ap);
fclose(ar);
fclose(ap);
}
else
printf("No se pueden abrir los archivos");
}
void cambia(FILE *ap1, FILE *ap2)
{
/* Esta función reemplaza en la cadena de caracteres la palabra méxico escrita
➥con minúsculas —la primera letra— por su forma correcta y escribe la cadena
➥de caracteres en un nuevo archivo. */
int i, j, k;
char cad[30], *cad1 = "", *cad2 = "", aux[30];
while (!feof(ap1))
{
fgets(cad, 30, ap1);
strcpy(cad1, cad);
cad2 = strstr(cad1, "mexico"); /* Localiza la subcadena méxico en cad1. */
while (cad2 != NULL)
{
cad2[0] = 'M'; /* Reemplaza la letra minúscula por la mayúscula. */
i = strlen(cad1);
j = strlen(cad2);
k = i - j; /* En k se almacena la diferencia de las longitudes de las cadenas cad1 y cad2. */
if (k)
{
strncpy(aux, cad1, k);
/* Se copia la subcadena de k caracteres de cad1 a aux —desde el
➥inicio de cad1 hasta el caracter anterior a méxico. */
aux[k] = '\0';
strcat(aux, cad2);
strcpy(cad1, aux);
}
else
strcpy(cad1, cad2);
cad2 = strstr(cad1, "mexico");
}
fputs(cad1, ap2); /* Se escribe la cadena correcta en el archivo ap2. */
}
}

View File

@@ -0,0 +1,126 @@
#include <stdio.h>
/* Mezcla.
El programa mezcla, respetando el orden, dos archivos que se encuentran
➥ordenados en forma ascendente considerando la matrícula de los alumnos. */
void mezcla(FILE *, FILE *, FILE *); /* Prototipo de función. */
void main(void)
{
FILE *ar, *ar1, *ar2;
ar = fopen("arc9.dat", "r");
ar1 = fopen("arc10.dat", "r");
ar2 = fopen("arc11.dat", "w");
if (((ar != NULL) && (ar1 != NULL)) && (ar2 != NULL))
{
mezcla(ar, ar1, ar2);
fclose(ar);
fclose(ar1);
fclose(ar2);
}
else
printf("No se pueden abrir los archivos");
}
void mezcla(FILE *ar, FILE *ar1, FILE *ar2)
/* Esta función mezcla, respetando el orden, dos archivos que se encuentran
➥ordenados en función de la matrícula. */
{
int i, mat, mat1, b = 1, b1 = 1;
float ca[3], ca1[3], cal;
while (((!feof(ar)) || !b) && ((!feof(ar1)) || !b1))
{
if (b) /* Si la bandera b está encendida, se lee del archivo ar la
➥matrícula y las tres calificaciones del alumno. */
{
fscanf(ar, "%d", &mat);
for (i = 0; i < 3; i++)
fscanf(ar, "%f", &ca[i]);
b = 0;
}
if (b1) /* Si la bandera b1 está encendida, se lee del archivo ar
➥la matrícula y las tres calificaciones del alumno. */
{
fscanf(ar1, "%d", &mat1);
for (i = 0; i < 3; i++)
fscanf(ar1, "%f", &ca1[i]);
b1 = 0;
}
if (mat < mat1)
{
fprintf(ar2, "% d\t", mat);
for (i = 0; i < 3; i++)
fprintf(ar2, "% f\t", ca[i]);
fputs("\n", ar2);
b = 1;
}
else
{
fprintf(ar2, "%d\t", mat1);
for (i = 0; i < 3; i++)
fprintf(ar2, "%f\t", ca1[i]);
fputs("\n", ar2);
b1 = 1;
}
}
if(!b)
{
fprintf(ar2, "%d\t", mat);
for (i = 0; i < 3; i++)
fprintf(ar2, "%f\t", ca[i]);
fputs("\n", ar2);
while (!feof(ar))
{
fscanf(ar, "%d", &mat);
fprintf(ar2, "%d\t", mat);
for (i = 0; i < 3; i++)
{
fscanf(ar, "%f", &cal);
fprintf(ar2, "%f\t", cal);
}
fputs("\n", ar2);
}
}
if(!b1)
{
fprintf(ar2, "%d\t", mat1);
for (i = 0; i < 3; i++)
fprintf(ar2, "%f\t", ca1[i]);
fputs("\n", ar2);
while (!feof(ar1))
{
fscanf(ar1, "%d", &mat1);
fprintf(ar2, "%d\t", mat1);
for (i = 0; i < 3; i++)
{
fscanf(ar1, "%f", &cal);
fprintf(ar2, "%f\t", cal);
}
fputs("\n", ar2);
}
}
}

View File

@@ -0,0 +1,58 @@
#include <stdio.h>
/* Ordena de menor a mayor.
El programa ordena de menor a mayor en función de la matrícula, creando un
➥nuevo archivo, un archivo de acceso directo compuesto por estructuras y
➥ordenado de mayor a menor. */
typedef struct /* Declaración de la estructura alumno. */
{
int matricula;
char nombre[20];
int carrera;
float promedio;
} alumno;
void ordena(FILE *, FILE *); /* Prototipo de función. */
void main(void)
{
FILE *ar1, *ar2;
ar1 = fopen("ad5.dat", "r");
ar2 = fopen("ad6.dat", "w");
if ((ar1 != NULL) && (ar2 != NULL))
ordena(ar1, ar2);
else
printf("\nEl o los archivos no se pudieron abrir");
fclose(ar1);
fclose(ar2);
}
void ordena(FILE *ap1, FILE *ap2)
/* Esta función ordena de menor a mayor un archivo compuesto por estructuras,
➥en función de su matrícula, y genera un nuevo archivo. */
{
alumno alu;
int t, n, i;
t = sizeof(alumno);
fseek(ap1, sizeof(alumno), 2);
n = (ftell(ap1) / t) - 1;
/* Se obtiene el número de registros que componen el archivo. El valor de n,
➥a su vez, se utilizará para posicionarnos en el archivo. */
rewind(ap1);
for (i = (n-1); i >= 0; i--) /* Se utiliza un ciclo descendente. */
{
fseek(ap1, i * sizeof(alumno), 0);
fread(&alu, sizeof(alumno), 1, ap1);
fwrite(&alu, sizeof(alumno), 1, ap2);
}
}

View File

@@ -0,0 +1,29 @@
#include <stdio.h>
/* Archivos y caracteres.
El programa lee caracteres de un archivo. */
void main(void)
{
char p1;
FILE ar;
if ((ar = fopen("arc.txt", "r")) != NULL) /* Se abre el archivo para lectura. */
/* Observa que las dos instrucciones del programa 9.1 necesarias para abrir un
➥archivo y verificar que éste en realidad se haya abierto, se pueden agrupar
➥en una sola instrucción. */
{
while (!feof(ar))
/* Se leen caracteres del archivo mientras no se detecte el fin del
➥archivo. */
{
p1 = fgetc(ar); /* Lee el caracter del archivo. */
putchar(p1); /* Despliega el caracter en la pantalla. */
}
fclose(ar);
}
else
printf("No se puede abrir el archivo");
}

View File

@@ -0,0 +1,109 @@
#include <stdio.h>
/* Escuela.
El programa, al recibir como dato un archivo de acceso directo que contiene
➥información de los alumnos de una escuela, genera información estadística importante. */
typedef struct /* Declaración de la estructura matcal. */
{
char materia[20];
int calificacion;
} matcal;
typedef struct /* Declaración de la estructura alumno. */
{
int matricula;
char nombre[20];
matcal cal[5];
/* Observa que un campo de esta estructura es a su vez estructura. */
} alumno;
void F1(FILE *);
void F2(FILE *); /* Prototipos de funciones. */
float F3(FILE *);
void main(void)
{
float pro;
FILE *ap;
if ((ap = fopen("esc.dat", "r")) != NULL)
{
F1(ap);
F2(ap);
pro = F3(ap);
printf("\n\nPROMEDIO GENERAL MATERIA 4: %f", pro);
}
else
printf("\nEl archivo no se puede abrir");
fclose(ap);
}
void F1(FILE *ap)
/* La función escribe la matrícula y el promedio general de cada alumno. */
{
alumno alu;
int j;
float sum, pro;
printf("\nMATRICULA y PROMEDIOS");
fread(&alu, sizeof(alumno), 1, ap);
while (!feof(ap))
{
printf("\nMatricula: %d", alu.matricula);
sum = 0.0;
for (j = 0; j < 5; j++)
sum += alu.cal[j].calificacion;
pro = sum / 5;
printf("\tPromedio: %f", pro);
fread(&alu, sizeof(alumno), 1, ap);
}
}
void F2(FILE *ap)
/* La función escribe la matrícula de los alumnos cuya calificación en la
➥tercera materia es mayor a 9. */
{
alumno alu;
int j;
rewind(ap);
printf("\n\nALUMNOS CON CALIFICACIÓN > 9 EN MATERIA 3");
fread(&alu, sizeof(alumno), 1, ap);
while (!feof(ap))
{
if (alu.cal[2].calificacion > 9)
printf("\nMatricula del alumno: %d", alu.matricula);
fread(&alu, sizeof(alumno), 1, ap);
}
}
float F3(FILE *ap)
/* Esta función obtiene el promedio general de la materia 4. */
{
alumno alu;
int i = 0;
float sum = 0, pro;
rewind(ap);
fread(&alu, sizeof(alumno), 1, ap);
while (!feof(ap))
{
i++;
sum += alu.cal[3].calificacion;
fread(&alu, sizeof(alumno), 1, ap);
}
pro = (float)sum / i;
return (pro);
}

View File

@@ -0,0 +1,212 @@
#include <stdio.h>
/* Examen de admisión.
El programa, al recibir como dato un archivo de acceso directo que contiene
➥información sobre los alumnos que presentaron el examen de admisión a una
➥universidad, genera información importante para el Departamento de Control
➥Escolar. */
typedef struct /* Declaración de la estructura alumno. */
{
int clave;
char nombre[20];
int carrera;
float promedio;
float examen;
char telefono[12];
} alumno;
float F1(FILE *);
void F2(FILE *, FILE *, FILE *, FILE *, FILE *, FILE *);
void F3(FILE *, FILE *, FILE *, FILE *, FILE *); /* Prototipos de funciones. */
void main(void)
{
float pro;
FILE *ap, *c1, *c2, *c3, *c4, *c5;
ap = fopen("alu1.dat", "r");
/* Observa que los archivos car1.dat, car2.dat, car3.dat, car4.dat y car5.dat
➥se abren en la modalidad para escribir y leer. */
c1 = fopen("car1.dat", "w+");
c2 = fopen("car2.dat", "w+");
c3 = fopen("car3.dat", "w+");
c4 = fopen("car4.dat", "w+");
c5 = fopen("car5.dat", "w+");
if ((ap != NULL) && (c1 != NULL) && (c2 != NULL) && (c3 != NULL) && (c4 != NULL) && (c5 != NULL))
{
pro = F1(ap);
printf("\nPROMEDIO EXAMEN DE ADMISION: %.2f", pro);
F2(ap, c1, c2, c3, c4, c5);
F3(c1, c2, c3, c4, c5);
}
else
printf("\nEl o los archivos no se pudieron abrir");
fclose(ap);
fclose(c1);
fclose(c2);
fclose(c3);
fclose(c4);
fclose(c5);
}
float F1(FILE *ap)
/* Esta función obtiene el promedio del examen de admisión. */
{
alumno alu;
float sum = 0, pro;
int i = 0;
fread(&alu, sizeof(alumno), 1, ap);
while (!feof(ap))
{
i++;
sum += alu.examen;
fread(&alu, sizeof(alumno), 1, ap);
}
pro = sum / i;
return (pro);
}
void F2(FILE *ap, FILE *c1, FILE *c2, FILE *c3, FILE *c4, FILE *c5)
/* Esta función genera un archivo de los alumnos admitidos en cada una de
➥las carreras de la universidad. */
{
alumno alu;
rewind(ap);
fread(&alu, sizeof(alumno), 1, ap);
while (!feof(ap))
{
/* Se analiza si el candidato es admitido a la universidad. */
if (((alu.examen >= 1300) && (alu.promedio >= 8)) || ((alu.examen >= 1400) && (alu.promedio >= 7)))
{
switch (alu.carrera)
{
case 1: fwrite(&alu, sizeof(alumno), 1, c1);
break;
case 2: fwrite(&alu, sizeof(alumno), 1, c2);
break;
case 3: fwrite(&alu, sizeof(alumno), 1, c3);
break;
case 4: fwrite(&alu, sizeof(alumno), 1, c4);
break;
case 5: fwrite(&alu, sizeof(alumno), 1, c5);
break;
}
}
fread(&alu, sizeof(alumno), 1, ap);
}
}
void F3(FILE *c1, FILE *c2, FILE *c3, FILE *c4, FILE *c5)
/* Esta función se utiliza para obtener el promedio que consiguieron los
➥alumnos admitidos en cada una de las carreras. */
{
alumno alu;
float cal[5], sum;
int i, j;
i = 0;
sum = 0;
rewind(c1); /* Es importante posicionarse al inicio del archivo, pues
➥de lo contrario se generaría un error al ejecutar el programa. */
fread(&alu, sizeof(alumno), 1, c1);
while (!feof(c1))
{
i++;
sum += alu.examen;
fread(&alu, sizeof(alumno), 1, c1);
}
if (i)
cal[0] = (sum / i);
else
cal[0] = 0;
rewind(c2);
sum = 0;
i = 0;
fread(&alu, sizeof(alumno), 1, c2);
while (!feof(c2))
{
i++;
sum += alu.examen;
fread(&alu, sizeof(alumno), 1, c2);
}
if (i)
cal[1] = (sum / i);
else
cal[1] = 0;
rewind(c3);
sum = 0;
i = 0;
fread(&alu, sizeof(alumno), 1, c3);
while (!feof(c3))
{
i++;
sum += alu.examen;
fread(&alu, sizeof(alumno), 1, c3);
}
if (i)
cal[2] = (sum / i);
else
cal[2] = 0;
rewind(c4);
sum = 0;
i = 0;
fread(&alu, sizeof(alumno), 1, c4);
while (!feof(c4))
{
i++;
sum += alu.examen;
fread(&alu, sizeof(alumno), 1, c4);
}
if (i)
cal[3] = (sum / i);
else
cal[3] = 0;
rewind(c5);
sum = 0;
i = 0;
fread(&alu, sizeof(alumno), 1, c5);
while (!feof(c5))
{
i++;
sum += alu.examen;
fread(&alu, sizeof(alumno), 1, c5);
}
if (i)
cal[4] = (sum / i);
else
cal[4] = 0;
/* Se imprimen los promedios de los alumnos admitidos en cada carrera. */
for (i = 0; i < 5; i++)
printf("\nPromedio carrera %d: %.2f", i + 1, cal[i]);
}

View File

@@ -0,0 +1,42 @@
#include <stdio.h>
/* Archivos y cadenas de caracteres.
El programa escribe cadenas de caracteres en un archivo. */
void main(void)
{
char cad[50];
int res;
FILE *ar;
if ((ar = fopen("arc.txt", "w")) != NULL)
/* Se abre el archivo para escritura. En la misma instrucción se verifica si se pudo abrir. */
{
printf("\n¿Desea ingresar una cadena de caracteres? Si-1 No-0: ");
scanf("%d", &res);
while (res)
{
fflush(stdin);
printf("Ingrese la cadena: ");
gets(cad);
fputs(cad, ar); /* Observa la forma como se escribe la cadena en el archivo.*/
printf("\n¿Desea ingresar otra cadena de caracteres? Si-1 No-0: ");
scanf("%d", &res);
if (res)
fputs("\n", ar);
/* Se indica un salto de línea, excepto en la última cadena. Si no
➥se hiciera esta indicación, la función fputs pegaría las cadenas y
➥luego tendríamos dificultades en el momento de leerlas. Por otra
➥parte, si realizáramos este salto de línea al final de la última
➥cadena, en la escritura se repetiría la última cadena. */
}
fclose(ar);
}
else
printf("No se puede abrir el archivo");
}

View File

@@ -0,0 +1,25 @@
#include <stdio.h>
/* Archivos y cadenas de caracteres.
El programa lee cadenas de caracteres de un archivo. */
void main(void)
{
char cad[50];
FILE *ap;
if ((ap = fopen("arc.txt", "r")) != NULL)
/* Se abre el archivo para lectura y se verifica si se abri<72> correctamente. */
{
while (!feof(ap))
/* Mientras no se detecte el fin de archivo se siguen leyendo cadenas de caracteres. */
{
fgets(cad, 50, ap);
/* Observa que la instrucci<63>n para leer cadenas requiere de tres argumentos. */
puts(cad); /* Despliega la cadena en la pantalla. */
}
fclose(ap);
}
else
printf("No se puede abrir el archivo");
}

View File

@@ -0,0 +1,40 @@
#include <stdio.h>
/* Archivos con variables enteras y reales.
El programa almacena datos de un grupo de alumnos en un archivo. */
void main(void)
{
int i, j, n, mat;
float cal;
FILE *ar;
printf("\nIngrese el numero de alumnos: ");
scanf("%d", &n);
/* Se asume que el valor que ingresa el usuario est<73> comprendido entre 1 y 35. */
if ((ar = fopen("arc8.txt", "w")) != NULL)
{
fprintf(ar, "%d", n); /* Se escribe el n<>mero de alumnos en el archivo. */
for (i = 0; i < n; i++)
{
printf("\nIngrese la matricula del alumno %d: ", i + 1);
scanf("%d", &mat);
fprintf(ar, " \n%d ", mat); /* Se escribe la matr<74>cula en el archivo. */
for (j = 0; j < 5; j++)
{
printf("\nCalificacion %d: ", j + 1);
scanf("%f", &cal);
fprintf(ar, "%.2f ", cal); /* Se escriben las calificaciones en el archivo. */
}
}
fclose(ar);
}
else
printf("No se puede abrir el archivo");
}

View File

@@ -0,0 +1,38 @@
#include <stdio.h>
/* Archivos con variables enteras y reales.
El programa lee datos de alumnos almacenados en un archivo y escribe la
➥matrícula y el promedio de cada alumno. */
void main(void)
{
int i, j, n, mat;
float cal, pro;
FILE *ar;
if ((ar = fopen("arc9.txt", "r")) != NULL)
{
fscanf(ar, "%d", &n); /* Se lee el valor de n. */
for (i = 0; i < n; i++)
{
fscanf(ar, "%d", &mat); /* Se lee la matrícula de cada alumno. */
printf("%d\t", mat);
pro = 0;
for (j = 0; j < 5; j++)
{
fscanf(ar, "%f", &cal); /* Se leen las cinco calificaciones del alumno. */
pro += cal;
}
printf("\t %.2f ", pro / 5); /* Se escribe el promedio de cada alumno. */
printf("\n");
}
fclose(ar);
}
else
printf("No se puede abrir el archivo");
}

View File

@@ -0,0 +1,49 @@
#include <stdio.h>
/* Archivos con variables enteras y reales.
El programa lee información de los alumnos de una escuela, almacenada en un
➥archivo. Utiliza una función para realizar la lectura, pero el archivo se abre
➥y cierra desde el programa principal. */
void promedio(FILE *);
/* Prototipo de función. Se pasa un archivo como parámetro. */
void main(void)
{
FILE *ar;
if ((ar = fopen("arc9.txt", "r")) != NULL)
{
promedio(ar); /* Se llama a la función promedio. Observe la forma como se pasa el archivo como parámetro. */
fclose(ar);
}
else
printf("No se puede abrir el archivo");
}
void promedio(FILE *ar1) /* Observa la forma como se recibe el archivo. */
/* Esta función lee los datos de los alumnos desde un archivo, e imprime tanto
➥la matrícula como el promedio de cada alumno. */
{
int i, j, n, mat;
float pro, cal;
fscanf(ar1, "%d”", &n);
for (i = 0; i < n; i++)
{
fscanf(ar1, "%d", &mat);
printf("%d\t", mat);
pro = 0;
for (j = 0; j < 5; j++)
{
fscanf(ar1, "%f", &cal);
pro += cal;
}
printf("\t%.2f", pro / 5);
printf("\n");
}
}

View File

@@ -0,0 +1,67 @@
#include <stdio.h>
/* Alumnos.
El programa almacena variables de tipo estructura alumno en un archivo. */
typedef struct /* Declaración de la estructura alumno. */
{
int matricula;
char nombre[20];
int carrera;
float promedio;
}alumno;
void escribe(FILE *); /* Prototipo de función. */
void main(void)
{
FILE *ar;
if ((ar = fopen("ad1.dat", "w")) != NULL)
escribe(ar);
else
printf("\nEl archivo no se puede abrir");
fclose(ar);
}
void escribe(FILE *ap)
/* Esta función sirve para leer los datos de los alumnos utilizando una
➥estructura tipo alumno, que se almacenará posteriormente en un archivo. */
{
alumno alu;
int i = 0, r;
printf("\n¿Desea ingresar informacion sobre alumnos? (Si-1 No-0): ");
scanf("%d", &r);
while (r)
{
i++;
printf("Matricula del alumno %d: ", i);
scanf("%d", &alu.matricula);
printf("Nombre del alumno %d: ", i);
fflush(stdin);
gets(alu.nombre);
printf("Carrera del alumno %d: ", i);
scanf("%d", &alu.carrera);
printf("Promedio del alumno %d: ", i);
scanf("%f", &alu.promedio);
fwrite(&alu, sizeof(alumno), 1, ap);
/* Observa que la función fwrite tiene cuatro argumentos. El primero se
➥utiliza para indicar la variable tipo estructura que se desea almacenar; el
➥segundo muestra el tamaño de esa variable en términos de bytes; el tercero
➥señala el número de variables que se leerán o almacenarán en el dispositivo
➥de almacenamiento secundario, y el último representa el apuntador al inicio de
➥la estructura FILE. */
printf("\n¿Desea ingresar informacion sobre mas alumnos? (Si-1 No-0): ");
scanf("%d", &r);
}
}

View File

@@ -0,0 +1,53 @@
#include <stdio.h>
/* Alumnos.
El programa lee bloques —variables de tipo estructura alumno— de un archivo de acceso directo. */
typedef struct { /* Declaración de la estructura alumno. */
int matricula;
char nombre[20];
int carrera;
float promedio;
} alumno;
void lee(FILE *); /* Prototipo de función. */
void main(void)
{
FILE *ar;
if ((ar = fopen("ad1.dat", "r")) != NULL)
lee(ar);
else
printf("\nEl archivo no se puede abrir");
fclose(ar);
}
void lee(FILE *ap)
/* Esta función se utiliza para leer bloques de un archivo de acceso directo. */
{
alumno alu;
fread(&alu, sizeof(alumno), 1, ap);
/* Observa que la función fread tiene los mismos argumentos que la función
➥fwrite del programa anterior. También es importante tomar nota de que cuando
➥tenemos que leer los registros de un archivo utilizando una estructura
➥repetitiva como el while, debemos realizar una primera lectura antes de
➥ingresar al ciclo y luego las siguientes dentro del ciclo, pero como última
➥instrucción del mismo. Esto se debe a que la lógica que siguen las
➥instrucciones fwrite y fread es moverse y leer o escribir, según sea el caso.
➥Si no lo hiciéramos de esta forma, terminaríamos escribiendo la información
➥del último registro dos veces. Vamos a realizar un ejemplo sencillo para
➥comprobar esto. */
while (!feof(ap))
{
printf("\nMatricula: %d", alu.matricula);
printf("\tCarrera: %d", alu.carrera);
printf("\tPromedio: %f\t", alu.promedio);
puts(alu.nombre);
fread(&alu, sizeof(alumno), 1, ap);
}
}