Programación en C: Estructuras, Punteros y Manejo de Archivos con Ejemplos Prácticos
Enviado por cristian y clasificado en Informática
Escrito el en
español con un tamaño de 6,25 KB
Programación en C: estructuras, punteros y manejo de archivos
A continuación se presentan varios ejemplos en lenguaje C que ilustran el uso de estructuras (struct), punteros y manejo de archivos.
1. Estructuras y punteros
1.1 Punto en el plano
Se define una estructura s_Punto que representa un punto con coordenadas X e Y. Se calcula la distancia entre dos puntos mediante la fórmula euclidiana.
struct s_Punto{
float punX;
float punY;
};
typedef struct s_Punto Punto;
typedef struct s_Punto *pPunto;
void LeerPunto(pPunto p) {
float x,y;
printf("Ingrese la coordenada x:");scanf("%f",&x);
printf("Ingrese la coordenada y:");scanf("%f",&y);
p->punX=x;
p->punY=y;
}
void PresentarPunto(Punto p) {
printf("Las coordenadas son (%f;%f)",p.punX,p.punY);
}
float DistanciaPuntos(Punto p, Punto q){
float distancia;
distancia=sqrt((p.punX-q.punX)*(p.punX-q.punX)+(p.punY-q.punY)*(p.punY-q.punY));
return distancia;
}
int main(int argc, char *argv[]){
Punto asd;
Punto asd2;
printf("Indique cuales son las coordenadas x,y del punto 1\n");
LeerPunto(&asd);
printf("Indique cuales son las coordenadas x,y del punto 2\n");
LeerPunto(&asd2);
printf("El punto ordenado es");
PresentarPunto(asd);
PresentarPunto(asd2);
float x = DistanciaPuntos(asd,asd2);
printf("La distancia entre los puntos es: %5.2f",x);
printf("\n");
system("PAUSE");
return 0;
}1.2 Fracción
Ejemplo de una estructura Fraccion con numerador y denominador, con lectura y presentación de sus valores.
struct s_Fraccion{
float denominador;
float numerador;
};
typedef struct s_Fraccion Fraccion;
typedef struct s_Fraccion *pFraccion;
void LeerFraccion(pFraccion f) {
float d,n;
printf("Ingrese el numero del denominador:");scanf("%f",&d);
printf("Ingrese el numero del numerador:");scanf("%f",&n);
f->denominador=d;
f->numerador=n;
}
void PresentarFraccion(Fraccion f) {
printf("La fraccion es (%5.2f/%5.2f)",f.numerador,f.denominador);
}
int main(int argc, char *argv[]) {
Fraccion asdasd;
printf("Indique cuales son los valores de la fraccion (numerador y denominador)\n");
LeerFraccion(&asdasd);
printf("La fraccion es\n\n");
PresentarFraccion(asdasd);
system("PAUSE");
return 0;
}1.3 Persona con fecha de nacimiento
Estructuras anidadas: Persona contiene una Fecha de nacimiento.
struct s_Fecha {
int day;
int month;
int year;
};
typedef struct s_Fecha Fecha;
typedef struct s_Fecha *pFecha;
struct s_Persona {
char nombre[30];
Fecha nacimiento;
};
typedef struct s_Persona Persona;
typedef struct s_Persona *pPersona;
void LeerFecha(pFecha fecha) {
int d,m,y;
printf("Ingrese dia:");scanf("%d",&d);
printf("Ingrese mes:");scanf("%d",&m);
printf("Ingrese año:");scanf("%d",&y);
fecha->day = d;
fecha->month = m;
fecha->year = y;
}
void PresentarFecha(pFecha f) {
printf("%d/%d/%d",f->day,f->month,f->year);
}
void LeerPersona(pPersona p) {
char nombre[30];
Fecha cumple;
printf("Ingrese nombre:");
gets(nombre);
printf("Ingrese nacimiento\n");
LeerFecha(&cumple);
strcpy(p->nombre,nombre);
p->nacimiento.day = cumple.day;
p->nacimiento.month = cumple.month;
p->nacimiento.year = cumple.year;
}
void PresentarPersona(Persona p) {
printf("%s nació el ",p.nombre);
printf("%d/%d/%d",p.nacimiento.day,p.nacimiento.month,p.nacimiento.year);
}
int main(int argc, char *argv[]) {
Persona alumno;
printf("Indique los datos solicitados\n");
LeerPersona(&alumno);
printf("El alumno leído es:");
PresentarPersona(alumno);
printf("\n");
system("PAUSE");
return 0;
}2. Manejo de archivos
2.1 Crear un archivo de texto
Crea el archivo datos.txt en modo escritura ("w") y lo cierra.
int main (int argc,char *argv[]){
FILE *archivo;
char nombre[10]="datos.txt";
archivo=fopen(nombre,"w");
printf("Creando archivo: %s\n",nombre);
if(archivo){
printf("Creado\n");
fclose(archivo);
printf("Cerrado\n");
}
else{
printf("Error");
return 0;
}
system("pause");
}2.2 Escribir líneas en un archivo
Se leen líneas desde teclado y se graban en datos.txt hasta introducir una línea vacía.
int main(int argc,char *argv[]){
FILE *archivo;
char linea[80];
char nombre[10]="datos.txt";
archivo=fopen(nombre,"w");
printf("Creando y grabando");
printf("Termine pulsando ENTER");
if(archivo){
gets(linea);
while(strlen(linea)!=0){
fprintf(archivo,linea);
fprintf(archivo,"\n");
gets(linea);
}
fclose(archivo);
printf("Archivo cerrado\n");
} else{
printf("Error");
return 0;
}
system("pause");
}2.3 Leer un archivo carácter a carácter
int main(){
FILE *archivo;
int c;
archivo=fopen("datos.txt","r");
printf("Leyendo");
do{
c=fgetc(archivo);
printf("%c",c);
}
while(!feof(archivo));
fclose(archivo);
system("pause");
}2.4 Leer un archivo línea a línea
Lectura por líneas con fgets, método más eficiente y legible para archivos de texto.
int main(){
FILE *archivo;
char linea[80];
archivo=fopen("datos.txt","r");
printf("Leyendo");
fgets(linea,80,archivo);
while(!feof(archivo)){
printf("%s",linea);
fgets(linea,80,archivo);
}
fclose(archivo);
system("pause");
}Conceptos clave
struct: agrupa variables de distintos tipos bajo un mismo nombre. typedef: crea alias para tipos. Puntero: almacena una dirección de memoria, permitiendo el paso por referencia. FILE: tipo que representa un flujo de archivo. fopen / fclose: abren y cierran archivos. fprintf / fgets / fgetc: operaciones de escritura y lectura.