Lenguaje C Estructuración de Datos: Arreglos Funciones de Entrada y de Salida Segundo Cuatrimestre 2015 Int. a la Computación-Int. a la Programación-Fund. de la Informática (TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) 1 FCFMyN - UNSL Lenguaje “C” Objetos de Datos Estructurados: ARREGLOS Un arreglo es un conjunto de posiciones de memoria consecutivas usados para almacenar datos todos del mismo tipo. Elemento VENTA 120 578 625 1 2 3 1230 99 100 Dimensión = Cantidad total de elementos Int. a la Computación-Int. a la Programación-Fund. de la Informática (TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015 2 FCFMyN - UNSL Lenguaje de diseño VENTA 120 578 625 1 2 3 1230 100 99 Declaración: VENTA: arreglo[1..100] de real Lenguaje “C” Los subíndices siempre comienzan en ‘0’, por lo que el último elemento se encontrará en la posición ‘n-1’ VENTA 120 578 625 0 1 2 1230 98 99 Declaración: float venta[100] Int. a la Computación-Int. a la Programación-Fund. de la Informática (TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015 3 FCFMyN - UNSL Formalmente: <tipo> <nombre del arreglo>[<dimension>] Ejemplos: a) int numeros[3]; float montos[5]; char letras[10]; /* arreglo de 3 enteros */ /* arreglo de 5 flotantes */ /* arreglo de 10 caracteres */ b) #include <stdio.h> int main() { float data[5]; float total; float average; data[0] data[1] data[2] data[3] data[4] = = = = = 34.0; 27.0; 45.0; 82.0; 22.0; total = data[0]+data[1]+data[2]+data[3]+data[4]; average = total / 5.0; printf(“Total %f Average %f\n”, total, average); return(0); } Int. a la Computación-Int. a la Programación-Fund. de la Informática (TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015 4 FCFMyN - UNSL c) int main() { char palabra[4]; palabra[0] palabra[1] palabra[2] palabra[3] = = = = ‘c’; ‘a’; ‘s’; ‘a’; String: secuencia de caracteres que conforman un texto. return(0); } Cómo los imprimo? for (i=0; i <=3; i++) { printf(“%c”, palabra[i]); } printf(“%s”, palabra); Indica que el texto a mostrar es un string (arreglo de caracteres). Solamente se coloca el nombre de la estructura arreglo. Int. a la Computación-Int. a la Programación-Fund. de la Informática (TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015 5 FCFMyN - UNSL Inconveniente: 4 no siempre el arreglo de caracteres estará lleno. int main() { char palabra[10]; palabra[0] palabra[1] palabra[2] palabra[3] = = = = ‘c’; ‘a’; ‘s’; ‘a’; printf(“%s”, palabra); return(0); Qué muestra? - solo “casa”? - todo el arreglo? } Un arreglo de caracteres es mostrado hasta el final o hasta encontrar un marcador de finalización (\0). int main() { char palabra[10]; palabra[0] palabra[1] palabra[2] palabra[3] palabra[4] = = = = = ‘c’; ‘a’; ‘s’; ‘a’; ‘\0’; printf(“%s”, palabra); return(0); } Int. a la Computación-Int. a la Programación-Fund. de la Informática (TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015 6 FCFMyN - UNSL Lenguaje “C” - Ingreso de Información Función getchar() El ingreso de información en “C” se realiza de una manera muy simple: carácter a carácter, a través de una función denominada getchar. Sintáxis getchar() Retorna el valor ASCII del carácter (tecla) que se ingresó desde teclado. Uso int c; c = getchar(); Tecla apretada 4 “a” 4 “F” 4 “3” 4 “)” /* en “c ” se encuentra el valor ASCII de la tecla apretada */ Contenido de “c” 97 70 51 41 Int. a la Computación-Int. a la Programación-Fund. de la Informática (TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015 7 Lenguaje “C” - Ingreso de Información Función getchar() Ejemplo #include <stdio.h> int main() { int c, i; FCFMyN - UNSL stdio.h, que significa "standard inputoutput header" (cabecera estandar E/S), es la biblioteca estándar del lenguaje C. El archivo de cabecera contiene las definiciones de macros, las constantes, las declaraciones de funciones y la definición de tipos usados por varias operaciones estándar de entrada y salida i = 1; while (i != 0) { c = getchar(); if (c >= 97 && c <= 122){ printf(“Es letra minúscula \n”); } if (c >= 48 && c <= 57){ printf(“Es dígito numérico \n”); } } return(0); } Inconveniente: 4 Como interpretar información consistente de más de un carácter (strings, números). Ejemplos: - La estrella es brillante - 324 - 127,98 Int. a la Computación-Int. a la Programación-Fund. de la Informática (TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015 8 Lenguaje “C” - Ingreso de Información FCFMyN - UNSL Función getchar() Primer Solución: t1 - Ingresar los caracteres en un arreglo. t2 - Procesar el arreglo identificando lo que se desee. Hasta cuando se leen caracteres? 4 Se necesita una señal de finalización (delimitador) de ingreso que le indique al programa cuando finalizar t1 y comenzar con t2. Tecla Return ó Enter Carácter asociado ´\n´ #include <stdio.h> int main() { int c[100], j; /* Ingreso los caracteres */ j = 1; c[j] = getchar(); while (c[j] != ´\n´) { j = j+1; c[j] = getchar(); } ? /* Debo procesar el arreglo*/ return(0); } Int. a la Computación-Int. a la Programación-Fund. de la Informática (TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015 9 Lenguaje “C” - Ingreso de Información Función scanf() Segunda Solución El lenguaje “C” provee una función que realiza esas dos tareas por nosotros denominada scanf. OJO! Sintáxis scanf(<formato>, &<n_var1>, &<n_var2>, ...) Formato de interpretación a dar a los caracteres ingresados. Se respeta la modalidad usada por printf. Nombres de variables donde se almacenarán los valores interpretados desde teclado. Ejemplos: a) int numero; scanf(“%d”, &numero); Formato entero a dar a los caracteres ingresados. Variable donde quedará almacenado el valor interpretado. Int. a la Computación-Int. a la Programación-Fund. de la Informática (TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015 10 FCFMyN - UNSL Lenguaje “C” - Ingreso de Información Función scanf() b) #include <stdio.h> int main() { float data[5]; float total, average; int i; for (i =0; i <=4; i++) { scanf(“%f”, &data[i]); } total = data[0]+data[1]+data[2]+data[3]+data[4]; average = total / 5.0; printf(“Total %f Average %f\n”, total, average); return(0); } Observación: 4 ¿Como se ingresan secuencias de caracteres (strings) mediante el uso de scanf ?. Int. a la Computación-Int. a la Programación-Fund. de la Informática (TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015 11 FCFMyN - UNSL Lenguaje “C” - Ingreso de Información Función scanf() Primer intento: #include <stdio.h> int main() { char letras[5]; int i; printf(“Ingrese el texto: ”); for (i =0; i <=4; i++) { scanf(“%c”, &letras[i]); } printf(“\nLo ingresado fue: ”); for (i =0; i <=4; i++) { printf(“%c”, letras[i]); } return(0); } Ingrese el texto: monos Lo ingresado fue: monos Int. a la Computación-Int. a la Programación-Fund. de la Informática (TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015 12 FCFMyN - UNSL Lenguaje “C” - Ingreso de Información Función scanf() Segundo intento: #include <stdio.h> int main() { char letras[5]; int i; printf(“Ingrese el texto: ”); scanf(“%s”, letras); printf(“\nLo ingresado fue: ”); printf(“%s”, letras); return(0); } Sólo se coloca el nombre del arreglo. No se coloca el símbolo & (ampersand) Pregunta: 4 Que sucedió con el caracter correspondiente al Return que se apretó como finalización de la secuencia? Respuesta: 4 Quedó pendiente de ser almacenado en alguna variable. Por lo tanto será almacenado la próxima vez que se ejecute scanf. Int. a la Computación-Int. a la Programación-Fund. de la Informática (TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015 13 FCFMyN - UNSL Lenguaje “C” - Ingreso de Información Función scanf() Solución: Para solucionar este y otros casos se adopta la siguiente convención: Colocar siempre luego de la sentencia scanf, la sentencia getchar(). Ejemplos: a) #include <stdio.h> int main() { char letras[5]; int i; printf(“Ingrese el texto: ”); scanf(“%s”, letras); getchar(); printf(“\nLo ingresado fue: ”); printf(“%s”, letras); return(0); } Borra el excedente de caracteres no leídos. Int. a la Computación-Int. a la Programación-Fund. de la Informática (TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015 14 Lenguaje “C” - Ingreso de Información FCFMyN - UNSL Función scanf() b) #include <stdio.h> int main() { float data[5]; float total, average; int i; for (i =0; i <=4; i++) { scanf(“%f”, &data[i]); getchar(); } total = data[0]+data[1]+data[2]+data[3]+data[4]; average = total / 5.0; printf(“Total %f Average %f\n”, total, average); return(0); } Int. a la Computación-Int. a la Programación-Fund. de la Informática (TUR, TUW, TUG, TUM, TUE, Ing. Electrónica) - 2015 15