lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR

download lab 9 de IIE115 UNIVERSIDAD DE EL SALVADOR

of 20

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