lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
-
Upload
jairosorto -
Category
Documents
-
view
217 -
download
0
Transcript of lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
1/20
Universidad de El Salvador
Facultad de Ingeniería y Arquitectura
Escuela de Ingeniería Eléctrica
Introducción a la informática IIE-115
Reporte del Laboratorio N° 9:
ANSI C: Estructuras y funciones
Instructor: Arturo Posada (Gracias por atendernos en los labs este ciclo)
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
2/20
Introducción:
La presente guía está dedicada a explotar las virtudes de las estructuras y funciones en ANSI C lo
cual facilita y simplifica los programas ordenándolo de una forma más estética y entendible para las
personas externas que lo reutilicen.
Cabe destacar que esta guía consta claramente de dos partes, la primera está concentrada en él
trabaja de estructuras y typedef y, la segunda se dedica a funciones.
Con relación a las estructuras se llega al clímax de los tipos de datos ya que con ellas se logra
integrar muchas características en un solo tipo nuevo de dato y, mejor aun con estos nuevos tipos
de datos se puede hacer arreglos unidimensionales y pluridimensionales, proporcionando así
varios grados de libertad para la explotación de inmensurables cantidades de datos. Para
complementar se abordan las funciones que son la unidad básica de programación en ANSI C,
con las funciones se logra un código modular y reutilizable, con estás dos características se obtieneun código fácil de corregir y depurar en el futuro así como también, velocidad en el desarrollo de
nuevas aplicaciones ya que se puede reutilizar las funciones previamente implementadas. Así es
que con esta guía (que quizás es la más importante que se ha desarrollado hasta ahora) se espera
que los alumnos exploren sus nuevas habilidades de ANSI C y las pongan en marcha y, que
también, vean sus limitaciones informáticas y que las superen con sus propios códigos.
A continuación se presenta la asignación y procedimiento del laboratorio N° 8:
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
3/20
Procedimiento:
Problema :
#include
struct estructura_amigo
{char nombre[30], apellido[40];
char telefono[10];
int edad; float altura;
};int main(int argc, char *argv[ ] )
{
struct estructura_amigo
amigo = { "Armando Esteba",
"Quito Parado",
"2444444", 25, 1.75 };
printf("INTRO edad y altura: ");scanf("%d %f", &amigo.edad, &amigo.altura );
printf( "%s %s tiene el %d años tiene una altura de %.3fy se le puede contactar al
telefono %s .\n", amigo.nombre, amigo.apellido, amigo.edad,amigo.altura ,amigo.telefono);
return 0;
}
Problema
#include #define ELEMENTOS 3
struct estructura amigo {
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
4/20
gets(amigo[num_amigo].telefono);
printf( "Edad: " ); fflush( stdout );
scanf( "%i", &amigo[num_amigo].edad );while( getchar()!='\n' );
}
/* Ahora imprimimos sus datos */
for( num_amigo=0; num_amigo
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
5/20
void leer_desde_teclado( CUENTA * A )
{
printf( "INTRO nombres : " ); fflush( stdout );
gets( A-> nombre );
printf( "INTRO apellidos : " ); fflush( stdout );
gets( A -> apellido );
printf( "INTRO codigo : " ); fflush( stdout );
gets( A -> codigo );
printf( "INTRO saldo y deuda : " ); fflush( stdout );
scanf( "%f%f", &A-> saldo , &A-> deuda );
while( getchar()!='\n' );
} // fin leer_desde_teclado
void leer_desde_archivo( CUENTA *A , char *archivo )
{
/*Debe ser implementada en el laboratorio, por lo que cada estudiante deberá llevar su propia
versión*/
printf("\n\nQue da como tarea \n\n");
} // fin leer_desde_archivo
void imprimir ( CUENTA A )
{linea( );
printf( "Apellidos // Nombres : %s%s \n" , A . apellido, A . nombre );
printf( "Saldo: %0 2f // Deuda : %0 2f " A saldo A deuda );
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
6/20
#include
#include
#define DIM 200
int k;
typedef struct {
char codigo[ 15 ];
char nombre[ 25 ];
char apellido[ 25 ];
float saldo, deuda;
}CUENTA;
void ordena_por_codigo ( CUENTA * );
int ascendente ( const void * , const void * );
int descendente( const void * , const void * );
void leer_desde_teclado( CUENTA * );
void leer_desde_archivo( CUENTA *, char * );void cuenta_a_cero( CUENTA * );
void cuentas_a_cero ( CUENTA [ ] );
void imprimir ( CUENTA );
void imprimirtodas ( CUENTA [ ] );
void linea ( void );
int main ( void )
{
CUENTA microempresa [ DIM ] = {
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
7/20
} // fin main
int ascendente( const void *a, const void *b ) // A - Z{ return strcmp( (char *) a, (char *) b); }
int descendente( const void *b, const void *a ) // Z – A
{ return strcmp( (char *) a, (char *) b); }
//En esta funcion se hace ordena el arreglo de estructuras
void ordena_por_codigo ( CUENTA *A )
{qsort( A , // Direccion de inicio
DIM, //Cantidad de elementos
sizeof ( CUENTA ), // Tamango de un elemento
ascendente ); //En que orden
}// fin ordena_por_codigo
/*Borra e inicializa una cuenta*/
void cuenta_a_cero( CUENTA * A ) {
strcpy( A -> nombre , " " );
strcpy( A -> apellido, " " );
strcpy( A -> codigo , " " );
A -> saldo = 0.;
A -> deuda = 0.;
}// fin cuentas_a_cero
//Esta funcion borra los datos de las cuentas
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
8/20
{
printf("\n\nCuenta #%d\t\tCodigo: %s\n", k + 1, A [k] . codigo );
imprimir ( A [ k ] );
}
}
} // fin imprimirtodas
void leer_desde_teclado( CUENTA * A )
{
printf( "INTRO nombres : " ); fflush( stdout );
gets( A -> nombre );
printf( "INTRO apellidos : " ); fflush( stdout );
gets( A -> apellido );
printf( "INTRO codigo : " ); fflush( stdout );
gets( A -> codigo );printf( "INTRO saldo y deuda : " ); fflush( stdout );
scanf( "%f%f", &A -> saldo , &A -> deuda );
while( getchar()!='\n' );
} // fin leer_desde_teclado
void leer_desde_archivo( CUENTA * A , char * archivo )
{
printf("\n\nQue da como tarea\n\n");
} // fin leer_desde_archivo
void imprimir ( CUENTA A )
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
9/20
Asignación:
1.
Hacer funciones que puedan realizar las siguientes operaciones conmatrices:
1. Suma,
2. Resta,
3. Multiplicación,
4. Cálculo del determinante para una matriz de nxn,
5. Cálculo de transpuesta,6. Multiplicación por un escalar,
7. y Cálculo de matriz inversa.
1. Suma:
void suma(float A[][MAX],float B[][MAX]){
int i,j,fil,col;
float C[MAX][MAX];for(i=0;i
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
10/20
3. Multiplicación
Void multiplicacion(float A[af][ac], float B[bf][bc]){int C[af][bc];
int af, ac, bf, bc, i, j, k;
for(i=0;i
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
11/20
sum = sum + b[0][p]*pow(-1,p) * determinant(c); }
return sum; }
}
5. Calculo de la transpuesta:
void trans(float A[][MAX]){
int i,j,fil,col; int B[MAX][MAX];
for(i=0;i
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
12/20
scanf("%f",&A[i][j]); /*llamada a la función inversa*/
inversa(A,n,A_inv);
fprintf(fsal,"La matriz inversa es:\n");for(i=0;i
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
13/20
2. Hacer una función que calcule el factorial de un número.
int fatorial(int n){
int k,fact;
fact=n;
k=n-1;
while(k>=1){
fact*=k; k=k-1;
}
printf(“El factorial de %d es %d\n”,n,fact); return fact; }
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
14/20
3. Hacer una función que calcule la raíz cuadrada utilizando el método de Newton.
float raiz(float n){float r0;
double fact;
int k=1;
r0=n/2;
do{
fact=0.5*(r0+n/r0);
r0=fact;
k++;
}while(k
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
15/20
Problema 4:
Hacer una Base de Datos para una empresa de 100 empleados, donde están categorizados por:
nombre completo, ISSS, NIT, DUI, NUP, número de empleado (código: 00xx es jefe, 01xx esordenanza, 02xx es operario, 03xx vigilante, 04xx cocinero) y salario dependiendo el código. Los
datos se deben de mantener en un archivo binario, y al momento de cargar el programa, se debe
de crear la estructura respectiva, claro se debe usar memoria dinámica para agregar empleados o
despedir. También se debe de tener un MENU, que despliegue en pantalla: Introducir empleado,
borrar empleado, mostrar datos de empleado (Código, Nombre completo, número de ISSS,
número de NUP, número de DUI, calculo de salario con el detalle de descuentos), mostrar todos
#include
#include
#include
#include
#include
typedef struct {
char nombreEmp[40];char dui[20];
char isss[20];
char nit[20];
char nup[20];
char num_emp[20];
float salario;
}datos;
void menu (char* nombreArchivo);
datos crearnombre();
void guardarnombre(datos nombre, char* nombreArchivo);
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
16/20
scanf("%i",&opcion);
fflush(stdin);
if (opcion>0&&opcion
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
17/20
fflush(stdin);
printf("\ningrese el NUP: ");
gets(nombre.nup);fflush(stdin);
printf("\ningrese el codigo de empleado: ");
gets(nombre.num_emp);
fflush(stdin);
printf("\ningrese el salario neto del empleado: ");
scanf("%f",&nombre.salario);
return nombre;
}
void guardarnombre(datos nombre, char* nombreArchivo){
FILE* file=fopen(nombreArchivo, "ab");
if(file==NULL){
system("cls");
printf("Error al intentar acceder al archivo");
pausar();}
else {
fwrite(&nombre,sizeof(datos),1,file);
printf("Trabajador añadido\n");
pausar();
fclose(file);
}
}
void mostrar(char* nombreArchivo int x){
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
18/20
strncpy(codigo,nombre.num_emp,2);
cod=atoi(codigo);
tipo(cod);printf("salario neto del empleado %0.2f\n\n",nombre.salario);
}
fclose(file);
printf("\n\n");
pausar();
}
}
void tipo(int x){
switch (x){
case 0:
printf("Cargo: JEFE\n");
break;
case 1:
printf("Cargo: ORDENANZA\n");break;
case 3:
printf("Cargo: VIGILANTE\n");
break;
case 4:
printf("Cargo: COCINERO\n");
break;
default:
printf("Cargo: DESCONOCIDO\n");
break;
}
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
19/20
Conclusiones:
-
Las estructuras y funciones nos ayudan para ordenar y agilizar un programa, optimizarlo para
ser más versátil y con menos código.
- Quizá el mayor reto en la utilización de estructuras es el poner los símbolos propios de esta
función.
-
La estructuras nos ayudan a agilizar una base de datos o operaciones como la aritmética de
complejos.
Bibliografía:
Zelaya, W. (2012) Introducción a la Informática. Ed. Imprenta Universitaria UES. San Salvador, pág., 147
al 167.
Sitios de Internet:
https://es wikibooks org/wiki/Programaci%C3%B3n en C/Estructuras y Uniones
https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Estructuras_y_Unioneshttps://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Estructuras_y_Uniones
-
8/18/2019 lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR
20/20
Anexos:
Memes sobre la programacion