lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR



Comments



Description

Universidad de El SalvadorFacultad 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 ) Grupo de laboratorio N° 2 Integrantes: Carnet: Hernández Nieto, Jairo Alejandro HN14001 Sorto Castillo, Jairo Josué SC14009 Vargas Rosa, Sergio Manuel VR14003 Roque Vidal, José Arnoldo (No se ha presentado a las ultimas 3 practicas) Ciudad Universitaria, Viernes 19 de junio de 2015 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 obtiene un 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: Objetivos:  Utilizar los arreglos estructuras y funciones en programas de ANSI C para la resolución de problemas.  puedan implementar propios tipos de datos utilizando struct y typedef.  Desarrollar programas modulares a través de funciones hechas por nuestros propios medios así como también usar y crear librerías. Página 2 de 20 IIE-115 Ciclo 1-2015 int edad.3fy se le puede contactar al telefono %s .altura ). fflush( stdout ). char telefono[10]. } #include <stdio. printf("INTRO edad y altura: ").nombre). int main(int argc. &amigo. return 0. gets(amigo[num_amigo]. char *argv[ ] ) { struct estructura_amigo amigo = { "Armando Esteba". amigo. int main(int argc. num_amigo++ ) { printf( "\nDatos del amigo numero %i:\n". "244-4444". num_amigo+1 ).telefono). apellido[40]. float altura.nombre.altura . char telefono[10]. printf( "%s %s tiene el %d años tiene una altura de %. for( num_amigo=0. printf( "Apellido: " ). float altura. }. 25. "Quito Parado". Página 3 de 20 IIE-115 Ciclo 1-2015 .75 }. int edad. num_amigo<ELEMENTOS. printf( "Nombre: " ). char *argv[ ] ) { int num_amigo. apellido[40]. printf( "Teléfono: " ).Procedimiento: Problema 1: #include <stdio.amigo.edad.apellido. amigo. fflush( stdout ). gets(amigo[num_amigo]. scanf("%d %f". }.edad. struct estructura_amigo amigo[ ELEMENTOS ].\n". amigo.apellido).h> struct estructura_amigo {char nombre[30].h> #define ELEMENTOS 3 Problema 2 struct estructura_amigo { char nombre[30]. fflush( stdout ). &amigo.amigo. 1. char nombre[ 25 ]. amigo[num_amigo]. amigo[num_amigo].h> #include <string. amigo[num_amigo]. scanf( "%i".apellido ). void leer_desde_archivo( CUENTA *. num_amigo++ ) { printf( "El amigo %s ". &amigo[num_amigo].telefono). printf( "%s tiene ".\n" . } Problema 3 #include <stdio.edad ).h> typedef struct { char codigo[ 15 ].edad ). fflush( stdout ). int main ( void )ñ { CUENTA juan. printf( "Edad: " ). float saldo.gets(amigo[num_amigo].nombre ). printf( "%i anos ". deuda. } return 0. char apellido[ 25 ]. return 0. imprimir( juan ). } /* Ahora imprimimos sus datos */ for( num_amigo=0.telefono ). amigo[num_amigo]. void linea ( void ). printf( "y su teléfono es el %s. } // fin main Página 4 de 20 IIE-115 Ciclo 1-2015 . void leer_desde_teclado( CUENTA * ). } CUENTA. while( getchar()!='\n' ). leer_desde_teclado( &juan ). void imprimir ( CUENTA ). char * ). num_amigo<ELEMENTOS. } // fin leer_desde_archivo void imprimir ( CUENTA A ) { linea( ).void leer_desde_teclado( CUENTA * A ) { printf( "INTRO nombres : " ).deuda ). k<45. } // fin leer_desde_teclado void leer_desde_archivo( CUENTA *A . printf("\n"). char *archivo ) { /*Debe ser implementada en el laboratorio. apellido. k++ )//aró aquí (primer uso en esta funci printf("="). printf( "Apellidos // Nombres : %s%s \n" . gets( A -> codigo ). printf( "INTRO codigo : " ). A . por lo que cada estudiante deberá llevar su propia versión*/ printf("\n\nQue da como tarea \n\n"). linea( ). A . A . printf( "INTRO apellidos : " ). fflush( stdout ).2f ". printf( "INTRO saldo y deuda : " ). A . fflush( stdout ). &A-> saldo . saldo . } // fin linea Problema 4: Página 5 de 20 IIE-115 Ciclo 1-2015 . scanf( "%f%f".2f // Deuda : %0. fflush( stdout ). nombre ). gets( A -> apellido ). fflush( stdout ). printf( "Saldo: %0. for ( k=0. printf("\n"). &A-> deuda ). } // fin imprimir void linea ( void ) { int k. gets( A-> nombre ). while( getchar()!='\n' ). Página 6 de 20 IIE-115 Ciclo 1-2015 . char * ). void imprimirtodas ( CUENTA [ ] ). int main ( void ) { CUENTA microempresa [ DIM ] = { { "XXTd". int ascendente ( const void * . "Barrango Esquina". return 0. { }. void linea ( void ).#include <stdio.3 } }. 12. 32. // Tres cuentas vacias { "XDEr3". 498.}. "Rossy Quina".. printf("\n\nFin de unidad\n\n"). { }.. { }. 653. imprimirtodas( microempresa ). char apellido[ 25 ]. const void * ). printf( "Estado inicial del arreglo\n" ). void cuentas_a_cero ( CUENTA [ ] ).h> #include <string. void cuenta_a_cero( CUENTA * ). }CUENTA. float saldo. ordena_por_codigo ( microempresa ). imprimirtodas( microempresa ). "Quimera Artica". deuda. printf( "\n\nEstado final del arreglo\n" ).{ }.. void imprimir ( CUENTA ). int descendente( const void * . 309.h> #define DIM 200 int k.2 }. void ordena_por_codigo ( CUENTA * ). { }. const void * ). "Del Palomar". char nombre[ 25 ]. typedef struct { char codigo[ 15 ]. void leer_desde_teclado( CUENTA * ). { }. "Rosita Linda".{ }. // Cinco cuentas vacias { "AZDEWd". { }. "Artura Luis". 234. void leer_desde_archivo( CUENTA *. saldo == 0. const void *b ) // A . const void *a ) // Z – A { return strcmp( (char *) a. }// fin cuentas_a_cero //Imprime todas las cuentas void imprimirtodas ( CUENTA A [ ] ) { for ( k = 0. A -> deuda = 0. else Página 7 de 20 IIE-115 Ciclo 1-2015 . k < DIM. deuda + A[k] . } int descendente( const void *b. k < DIM. strcpy( A -> codigo . " " ). " " ). (char *) b). }// fin cuentas_a_cero //Esta funcion borra los datos de las cuentas void cuentas_a_cero( CUENTA A[ ] ) { for ( k = 0. k++ ) cuenta_a_cero( & A[ k ] ). ) continue .Z { return strcmp( (char *) a.. // 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 . //Cantidad de elementos sizeof ( CUENTA ). A -> saldo = 0. (char *) b)..} // fin main int ascendente( const void *a. strcpy( A -> apellido. k++ ) { if ( A [k] . } //En esta funcion se hace ordena el arreglo de estructuras void ordena_por_codigo ( CUENTA *A ) { qsort( A . " " ). // Direccion de inicio DIM. A. codigo ). &A -> deuda ). gets( A -> nombre ). } } } // fin imprimirtodas void leer_desde_teclado( CUENTA * A ) { printf( "INTRO nombres : " ). imprimir ( A [ k ] ). k++ ) printf("="). } // fin leer_desde_teclado void leer_desde_archivo( CUENTA * A .2f // Deuda : %0. printf( "Apellidos // Nombres : %s %s \n" . A. fflush( stdout ). gets( A -> codigo ). printf( "INTRO codigo : " ). } // fin leer_desde_archivo void imprimir ( CUENTA A ) { linea( ). while( getchar()!='\n' ).saldo . fflush( stdout ).{ printf("\n\nCuenta #%d\t\tCodigo: %s\n". gets( A -> apellido ).2f\n".nombre ). printf( "Saldo: %0.apellido. fflush( stdout ). &A -> saldo . A. k<60. scanf( "%f%f". k + 1. char * archivo ) { printf("\n\nQue da como tarea\n\n"). linea( ). printf( "INTRO apellidos : " ). } // fin imprimir void linea ( void ) { int k. fflush( stdout ). A [k] . printf( "INTRO saldo y deuda : " ). for ( k=0. } // fin linea Página 8 de 20 IIE-115 Ciclo 1-2015 . A. printf("\n").deuda ). j++){ printf(“%d\t”.j<col. }} for(i=0. for(i=0.i<fil.i<fil. float C[MAX][MAX].fil.j++){ C[i][j]=A[i][j]-B[i][j].j++){ printf(“%d\t”.float B[][MAX]){ int i.fil.j.i<fil.i++){ for(j=0. printf(“\n”).j. 7. y Cálculo de matriz inversa. for(i=0. Hacer funciones que puedan realizar las siguientes operaciones con matrices: 1.j<col. } } return C[i][j].i<fil.col. resta: void suma(float A[][MAX].float B[][MAX]){ int i. Multiplicación por un escalar. Suma: void suma(float A[][MAX].col.j<col. float C[MAX][MAX]. }}//solo cambia este signo for(i=0. 2. Suma.i++){ for(j=0. printf(“\n”). Multiplicación.C[i][j]). Cálculo de transpuesta. 4.i++){ for(j=0. 6. } Página 9 de 20 IIE-115 Ciclo 1-2015 . 5. 1.Asignación: 1. } } } 2.j++){ C[i][j]=A[i][j]+B[i][j].i++){ for(j=0.C[i][j]). Resta. 3.j<col. Cálculo del determinante para una matriz de nxn. bf.i++){ for( j=0. Calculo de determinante de una matriz de nxn Float determiante(float A[][max]){ int i.j++){ C[i][j]=0. i.j.j++){ printf("%f ". return sum. } for(p=0.k = 0. k = 0. int af. for(k=0. ac.b[i][j]).k<ac.i<af. c[h][k] = b[i][j]. Multiplicación Void multiplicacion(float A[af][ac]. k.j++){ if(j==p) continue. for(i=1.i<af.p<m.i<m. j.j<bc.j<m. if(k == m-1) { h++.k++){ C[i][j]=(C[i][j]+(A[i][k]*B[k][j])). bc.3. sum = b[0][0]*b[1][1] . } } } } 4. } } } for(i=0. } } } m=m-1.i++){ printf("\n\t\t"). } printf("\n").i++){ for(j=0.j++){ printf(" %6d ". float B[bf][bc]){ int C[af][bc]. int p. for(i=0. float C[m][m]. float sum = 0.j<bc. for(j=0.i<m. Página 10 de 20 IIE-115 Ciclo 1-2015 .p++){ int h = 0.j<m.b[0][1]*b[1][0]. } if(m==2){ printf("Determinant for m=2").i++){ for(j=0. C[i][j]). k++. for(i=0. j++){ for(i=0. } 7.p) * determinant(c). void main() { float A[DIM][DIM].i. printf("Introduce la dimensión de la matriz:")."w").h> #define DIM 100 fl oat determinante(float A[][DIM].i<fil.A_inv[DIM][DIM].&n).fil. Calculo de la transpuesta: void trans(float A[][MAX]){ int i.i++){ for(j=0. fsal=fopen("datos.j++){ printf(“%d\t”. for(i=0. for(j=0.col.i<fil.j++) A[i][j]=n*A[i][j].j<col.h> #include <math. } } 6. for(i=0. printf("Introduce los elementos de la matriz por columnas\n").j++) B[i][j]=A[j][i]. int n. FILE* fsal.sum = sum + b[0][p]*pow(-1. scanf("%d".i<fil.j.j. } } 5. int n).j.B[i][j]). } return sum. float A_inv[][DIM]). return A[i][j[. int n.i++) for(j=0.i++){ Página 11 de 20 IIE-115 Ciclo 1-2015 .i++) for(j=0.fil. Cálculo de matriz inversa #include <stdio. for(i=0.col. printf(“\n”). void inversa(float A[][DIM]. int B[MAX][MAX].i<n. Multiplicación por un escalar float esc(float A[][MAX].txt".j<n.float n){ int i.j<col.j<col. for(i=0."%f ". } } Página 12 de 20 IIE-115 Ciclo 1-2015 .j++) { fprintf(fsal. for(t=j+1.j<n.scanf("%f".k<n. fprintf(fsal.n.k++) { for(t=0.t<j."\n"). int n.A_inv).i<n.t++){ X[k-1][t-1]=A_trasp[k][t]. /*cálculo de la traspuesta*/ for(i=0."La matriz inversa es:\n").i<n. for(t=j+1. float A_inv[][DIM]) { float A_trasp[DIM][DIM].k++) { for(t=0.j. float X[DIM][DIM].t<n.j++) { for(k=0.j<n. } A_inv[i][j]=(float)(pow(-1.i++) { for(j=0.i<n.i++) { for(j=0. for(i=0.t++){ X[k][t-1]=A_trasp[k][t].n). } for(k=i+1.&A[i][j]). } void inversa(float A[][DIM].n -1)/determinante(A. int i.t++){ X[k][t]=A_trasp[k][t].A_inv[i][j]). fprintf(fsal. } fclose(fsal).i++)[ for(j=0.k<i. /*llamada a la función inversa*/ inversa(A.k.t<j.(i+j+2)))*determinante(X.j<n.t<n.j++) { A_trasp[i][j]=A[j][i].t++){ X[k-1][t]=A_trasp[k][t].t. } Página 13 de 20 IIE-115 Ciclo 1-2015 .fact. Hacer una función que calcule el factorial de un número. k=k-1. int fatorial(int n){ int k.2. k=n-1.fact). while(k>=1){ fact*=k. fact=n.n. } printf(“El factorial de %d es %d\n”. return fact. k++. float raiz(float n){ float r0. int k=1.3. double fact. }while(k<20).n. return 0. r0=n/2. do{ fact=0. printf(“La raiz cuadrada de %f es %. r0=fact.8lf\n”. } Página 14 de 20 IIE-115 Ciclo 1-2015 .raiz). Hacer una función que calcule la raíz cuadrada utilizando el método de Newton.5*(r0+n/r0). h> #include <string. int x). y al momento de cargar el programa. 04-xx cocinero) y salario dependiendo el código. 01-xx es ordenanza. número de DUI. que despliegue en pantalla: Introducir empleado. nom=0. void menu (char* nombreArchivo). número de ISSS. salir\n"). char num_emp[20]. void mostrar(char* nombreArchivo. se debe de crear la estructura respectiva. mostrar todos #include <conio.h> #include <math. char dui[20]. Los datos se deben de mantener en un archivo binario. void modificar (char* nombreArchivo). printf("Ingrese una opcion:\n1.bin". NUP. mostrar datos de empleado (Código. } void menu(char* nombreArchivo){ int opcion. char* nombreArchivo).Problema 4: Hacer una Base de Datos para una empresa de 100 empleados. borrar empleado\n4. número de NUP. ISSS. char nit[20]. void guardarnombre(datos nombre.h> #include <stdio. void pausar(). borrar empleado. DUI. void tipo(int x). char nup[20]. claro se debe usar memoria dinámica para agregar empleados o despedir. }datos. número de empleado (código: 00-xx es jefe. char isss[20]. do { system("cls"). Página 15 de 20 IIE-115 Ciclo 1-2015 .h> typedef struct { char nombreEmp[40]. datos crearnombre(). donde están categorizados por: nombre completo. 03-xx vigilante. return 0. calculo de salario con el detalle de descuentos). Introducir empleado\n2. float salario. NIT. menu(nombreArchivo). Nombre completo. 02-xx es operario. mostrar datos de los empleados\n3. También se debe de tener un MENU. int main (){ char nombreArchivo[12]="lista.h> #include <stdlib. printf("\ningrese el Nombre del trabajador: ").dui). fflush(stdin). fflush(stdin). gets(nombre. break. nombreArchivo). gets(nombre. if (opcion>0&&opcion<=4){ switch(opcion){ case 1: guardarnombre(crearnombre(). mostrar(nombreArchivo.isss). case 3: break. fflush(stdin). } } else { printf("Opcion no valida\n").nit).nombreEmp). printf("\ningrese el ISSS: "). break. break. case 2: system("cls").&opcion). } } while (!(opcion==4)). Página 16 de 20 IIE-115 Ciclo 1-2015 . case 4: printf("Fin del programa\n"). printf("\ningrese el NIT: "). gets(nombre. gets(nombre. nom). pausar(). } datos crearnombre(){ datos nombre.scanf("%i". return . pausar(). printf("\ningrese el DUI: "). fflush(stdin). nom++. int cod. if(file==NULL){ system("cls"). pausar()."). printf("Error al intentar acceder al archivo").nombre. fflush(stdin). } void guardarnombre(datos nombre. } else { fwrite(&nombre. printf("\ningrese el salario neto del empleado: "). } else{ datos nombre. gets(nombre. } } void mostrar(char* nombreArchivo. printf("\ningrese el NUP: ").nombre. printf("Error al intentar acceder al archivo. if(file==NULL){ system("cls")."rb").nombreEmp). printf("codigo de empleado: %s\n".1. printf("Trabajador añadido\n"). pausar().nombre.1. int x){ char codigo[4].nup). fclose(file).nup). file)){ printf("Empleado: %s\n".salario). gets(nombre.isss). pausar().num_emp).sizeof(datos). printf("NUP: %s\n".file). scanf("%f". char* nombreArchivo){ FILE* file=fopen(nombreArchivo. printf("\ningrese el codigo de empleado: ").sizeof(datos).&nombre.nombre. "ab").nombre. FILE* file=fopen(nombreArchivo. Página 17 de 20 IIE-115 Ciclo 1-2015 .nit).dui). printf("ISSS: %s\n".num_emp). printf("DUI: %s\n". while(fread(&nombre. printf("NIT: %s\n".fflush(stdin). fflush(stdin). return nombre.nombre. salario).nombre. break. } } void tipo(int x){ switch (x){ case 0: printf("Cargo: JEFE\n").strncpy(codigo. default: printf("Cargo: DESCONOCIDO\n"). pausar().num_emp. case 4: printf("Cargo: COCINERO\n"). break. } void pausar(){ printf("Presione ENTER para continuar"). } return. break. } Página 18 de 20 IIE-115 Ciclo 1-2015 . tipo(cod). break. getchar(). cod=atoi(codigo). printf("salario neto del empleado %0.2). break. while (getchar() != '\n'). } fclose(file). case 3: printf("Cargo: VIGILANTE\n").nombre. case 1: printf("Cargo: ORDENANZA\n").2f\n\n". printf("\n\n"). org/wiki/Programaci%C3%B3n_en_C/Uso_de_funciones Página 19 de 20 IIE-115 Ciclo 1-2015 . 147 al 167. - La estructuras nos ayudan a agilizar una base de datos o operaciones como la aritmética de complejos.slideshare. Sitios de Internet:  https://es. optimizarlo para ser más versátil y con menos código.Conclusiones: - Las estructuras y funciones nos ayudan para ordenar y agilizar un programa.conclase.wikibooks.slideshare.org/wiki/Programaci%C3%B3n_en_C/Instrucciones_de_control http://www. W. Imprenta Universitaria UES.wikibooks.com. Ed.wikibooks.net/javi2401/funciones-en-c-presentation%20%20 https://es.pablin.ar/computer/cursos/c2/manc5.net/curso/?cap=011%20 http://es. pág. Bibliografía: Zelaya. - Quizá el mayor reto en la utilización de estructuras es el poner los símbolos propios de esta función.htm%20 http://es. (2012) Introducción a la Informática. San Salvador..org/wiki/Programaci%C3%B3n_en_C/Estructuras_y_Uniones       http://c.net/carolina00/estructuras-en-c%20 https://es. Anexos: Memes sobre la programacion .
Copyright © 2024 DOKUMEN.SITE Inc.