Teoría 8: Segunda Parte Estructuras de Datos y Funciones...
Transcript of Teoría 8: Segunda Parte Estructuras de Datos y Funciones...
Teoría 8: Segunda Parte
Estructuras de Datos y Funciones de Entrada en Lenguaje C
Segundo Cuatrimestre 2019
Int. a la Computación-Int. a la Programación – Fund. De la Informática
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.
Todos los elementos del arreglo son del mismo tipo primitivo por lo tanto es
una estructura homogénea.
Es una estructura lineal de acceso directo, es decir se accede a un dato
en forma directa con sólo indicar la posición o subíndice. El número que
indica la posición (subíndice) es un número natural.
Donde:
Es una estructura estática, es decir su tamaño (cantidad y tipo de elementos
del arreglo) se define en tiempo de compilación a partir de la declaración y no
cambia durante la ejecución del programa. (Es posible definir arreglos cuya dimensión se
modifique en tiempos de ejecución (estructuras dinámicas) pero este concepto no será abordado en
este curso) .
El número de elementos o dimensión, se define con la declaración junto
con el límite mínimo y límite máximo o rango.
Lenguaje de Diseño
float venta[100]
VENTA: arreglo[1..100] de real
Lenguaje “C”
VENTA578120 625 1230
0 1 2 98 99
Los subíndices siempre comienzan en ‘0’, por lo que el
último elemento se encontrará en la posición ‘n-1’
Declaración:
Declaración:
VENTA
578120 625 12301 2 3 99 100
Lenguaje “C” - Arreglos
Límite Superior
Límite Inferior
Dimesión
625
VENTA 3
Lenguaje “C”
Objetos de Datos Estructurados: ARREGLOS
120
VENTA 1
578
VENTA 2
. . . 1230
VENTA 100
VENTA
578120 625 12301 2 3 99 100
Dimensión = Cantidad total de elementos
Elemento
Formalmente:
<tipo> <nombre del arreglo>[<dimensión>]
Ejemplos:
a)
int numeros[3]; /* arreglo de 3 enteros */
float montos[5]; /* arreglo de 5 flotantes */
char letras[10]; /* arreglo de 10 caracteres */
Lenguaje “C” - Arreglos
<dimensión><tipo> <nombre del arreglo>
int, float, char
un nombre que lo identifica.
Deben comenzar con una letra o el signo subrayado”
(_) y luego seguir con cualquier combinación de letras
(mayúsculas, minúsculas),dígitos o signo de subrayado.
cantidad total de elementos
b)
#include <stdio.h>
int main() {
float data[5];
float total;
float average;
data[0] = 34.0;
data[1] = 27.0;
data[2] = 45.0;
data[3] = 82.0;
data[4] = 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);
}
printf(“Total %f Average %f\n”, total, average);
Lenguaje “C” - Arreglos
c) int main() {
char palabra[4];
palabra[0] = ‘c’;
palabra[1] = ‘a’;
palabra[2] = ‘s’;
palabra[3] = ‘a’;
return(0);
}
String: secuencia de caracteres
que conforman un texto.
Cómo los imprimo?
for (i=0; i <=3; i++) {
}
Lenguaje “C” - Arreglos
printf(“%s”, palabra);
Solamente se coloca el nombre
de la estructura arreglo.Indica que el texto a mostrar es
un string (arreglo de
caracteres).
printf(“%c”, palabra[i]);
Inconveniente:
no siempre el arreglo de caracteres estará lleno.
Un arreglo de caracteres es mostrado hasta el final o hasta
encontrar un marcador de finalización (\0).
Lenguaje “C” - Arreglos
int main() {
char palabra[10];
palabra[0] = ‘c’;
palabra[1] = ‘a’;
palabra[2] = ‘s’;
palabra[3] = ‘a’;
printf(“%s”, palabra);
return(0);
}
int main() {
char palabra[10];
palabra[0] = ‘c’;
palabra[1] = ‘a’;
palabra[2] = ‘s’;
palabra[3] = ‘a’;
palabra[4] = ‘\0’;
printf(“%s”, palabra);
return(0);
}
Lenguaje “C” - Arreglos
Solución:
El ingreso de información en “C” se realiza de una manera muy simple:
caracter a caracter, a través de una función denominada getchar.
Sintáxis
Uso
int c;
c = getchar(); /* en “c ” se encuentra el
valor ASCII de la tecla apretada */
“a” 97
“F” 70
“3” 51
“)” 41
Tecla apretada Contenido de “c”
Lenguaje “C” – Ingreso de Datos
getchar()Retorna el valor ASCII del carácter (tecla) que
se ingresó desde teclado.
#include <stdio.h>
int main() {
int c, i;
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:
Como interpretar información consistente
de más de un carácter (strings, números).
Ejemplos:
- La estrella es brillante
- 324
- 127,98
Ejemplo
Lenguaje “C” – Ingreso de Datos
stdio.h, que significa "standard input-output
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
Primer Solución:
t1 - Ingresar los caracteres en un arreglo.
t2 - Procesar el arreglo identificando lo que
se desee.
Hasta cuando se leen caracteres?
Se necesita una señal de finalización (delimitador) de
ingreso que le indique al programa cuando finalizar t1 y
comenzar con t2.
Tecla Carácter asociado
Return ó Enter ´\n´
Lenguaje “C” – Ingreso de Datos
Lenguaje “C” – Ingreso de Datos
Ejemplo
#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);
}
?
OJO!
scanf(<formato>, & <n_var1>, & <n_var2>, ...)
El lenguaje “C” provee una función que realiza esas dos tareas por nosotros
denominada scanf.
Segunda Solución
Sintáxis
Nombres de variables donde se
almacenarán los valores
interpretados desde teclado.
Formato de interpretación a dar
a los caracteres ingresados. Se
respeta la modalidad usada por
printf.
Lenguaje “C” – Ingreso de Datos
donde
Especificaciones de Formato
%d entero decimal
%f flotante
%c caracter
Ejemplos:
a)
int numero;
scanf(“%d”, &numero);
Variable donde quedará
almacenado el valor
interpretado.
Formato entero a dar a los
caracteres ingresados.
Lenguaje “C” – Ingreso de Datos
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:
¿Como se ingresan secuencias de caracteres (strings) mediante el uso de scanf ?.
Lenguaje “C” – Ingreso de Datos
#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);
}
Primer intento:
Ingrese el texto: monos
Lenguaje “C” – Ingreso de Información
Lo ingresado fue: m
(i=0) m
(i=1) o
(i=2) n
(i=3) o
(i=4) s
sono
A diferencia de los arreglos de tipos de datos numéricos
(enteros o reales), donde cada elemento del arreglo se debe
considerar como una variable independiente de los demás,
los arreglos de caracteres (o cadenas) se pueden manipular
de dos maneras: de forma separada o de forma conjunta.
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:
Que sucedió con el caracter correspondiente al Return que se apretó como
finalización de la secuencia?
Respuesta:
Quedó pendiente de ser almacenado en alguna variable. Por lo tanto será
almacenado la próxima vez que se ejecute scanf.
Lenguaje “C” – Ingreso de Datos
Forma Conjunta
Solución:Para solucionar este y otros casos se adopta la siguiente convención:
Colocar siempre luego de la sentencia scanf, la sentencia getchar().
#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);
}
Ejemplos:
a)
Borra el excedente de caracteres
no leídos.
Lenguaje “C” – Ingreso de Datos
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);
}
Lenguaje “C” – Ingreso de Datos