Teoría 8: Segunda Parte Estructuras de Datos y Funciones...

21
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

Transcript of Teoría 8: Segunda Parte Estructuras de Datos y Funciones...

Page 1: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

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

Page 2: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

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.

Page 3: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

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

Page 4: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

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

Page 5: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

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

Page 6: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

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

Page 7: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

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]);

Page 8: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

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);

}

Page 9: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

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:

Page 10: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

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.

Page 11: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

#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

Page 12: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

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

Page 13: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

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);

}

?

Page 14: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

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

Page 15: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

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

Page 16: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

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

Page 17: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

#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.

Page 18: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

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

Page 19: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

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

Page 20: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard

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

Page 21: Teoría 8: Segunda Parte Estructuras de Datos y Funciones ...dirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · Lenguaje “C” –Ingreso de Datos stdio.h, que significa "standard