Descargar la presentación
La descarga está en progreso. Por favor, espere
1
INTRODUCCION AL LENGUAJE C
2
ORACIONES ANTES DE EMPEZAR
Creo en un solo lenguaje de programación, “C” Todopoderoso Creador de UNIX y de Windows Creo en un solo “C++”, hijo único de “C” Nacido de “C” antes de “Visual C++” “C” de “C”, Compilador de Compilador, “C”© copyrighted, Compilado, no interpretado, de los mismos programadores que el Padre por quien todo es programado, que por nosotros los hombres y nuestros servidores fue desarrollado y por obra del Lenguaje Binario se encarnó en ensamblador y se hizo Lenguaje y por nuestra causa es ampliamente aceptado en tiempos de Bill Gates. Decayó y fue olvidado y se renovó al tercer día, según los usuarios. Y subieron las ventas, y esta ubicado dentro de todo UNIX Por quien todo es programado Y de nuevo vendrá mejorado para juzgar a virus y programas Y su dominio no tendrá fin. Creo en el lenguaje binario, código y base del sistema Que precede al padre y al hijo. Que con el padre y el hijo recibe una misma aplicación y memoria y que habló por los procesadores… Creo en la arquitectura IBM, que es una, sólida, compacta y compatible. Confieso que no hay ni un solo “undo” para la corrección de los errores Espero la resurrección de las Macs y la vida en un mundo con Internet… Enter C Nuestro, que estas en la Memoria, Compilado sea tu código, venga a nosotros tu software, carguense tus punteros. así en la RAM como en el Disco Duro, Danos hoy nuestro Array de cada día, Perdona nuestros Warnings, así como nosotros también los eliminamos, no nos dejes caer en Bucles, y libranos del Windows, Enter.
3
MENU DEL DIA Pseudocódigo, diagramas de flujo y algo de C.
Introducción al lenguaje C. programa. Manejo de variables. Entrada y salida en C. Ejemplos.
4
PSEUDOCODIGO, DIAGRAMAS DE FLUJO Y ALGO DE C
5
PSEUDOCODIGO, DIAGRAMAS DE FLUJO Y ALGO DE C
Problema Realizar un algoritmo que solicite al usuario dos números enteros, realice su suma y la imprima en pantalla.
6
PSEUDOCODIGO, DIAGRAMAS DE FLUJO Y ALGO DE C
Solución a punta de parlacho: Datos de entrada: Los dos números (necesito dos variables para llevarlos. Bauticémoslas como a y b). Datos de salida: Variable en la cual se almacena el resultado de la suma (c). Proceso: ¿Que es lo que tengo que hacer? Solicitar al usuario los datos de entrada. Sumar los dos datos de entrada. Desplegar el resultado.
7
PSEUDOCODIGO, DIAGRAMAS DE FLUJO Y ALGO DE C
Solución a punta de pseudocódigo: Algoritmo(sumar) Variables: entero: a, b, c INICIO ESCRIBA(“Digite el primer numero (entero)”) LEA(a) ESCRIBA(“Digite el segundo numero (entero)”) LEA(b) c a + b ESCRIBA(“La suma es: ”,c) FIN_INICIO Fin(sumar)
8
PSEUDOCODIGO, DIAGRAMAS DE FLUJO Y ALGO DE C
Solución en diagrama de flujo:
9
PSEUDOCODIGO, DIAGRAMAS DE FLUJO Y ALGO DE C
Todo lo anterior esta bien, pero a la hora de la verdad eso no entiende el computador como llevarlo a cabo. Lenguajes de alto nivel (Lenguaje C). Computadora mata a Flanders ???????
10
PSEUDOCODIGO, DIAGRAMAS DE FLUJO Y ALGO DE C
¿Qué es eso del C?, ¿Con que se come? Básicamente el primer paso es familizarnos con la sintaxis (expresiones, reglas, etc.). Formulación del algoritmo en termino de esa nueva sintaxis.
11
PSEUDOCODIGO, DIAGRAMAS DE FLUJO Y ALGO DE C
Algoritmo(sumar) Variables: entero: a, b, c INICIO ESCRIBA(“Digite el primer numero (entero)”) LEA(a) ESCRIBA(“Digite el segundo numero (entero)”) LEA(b) c a + b ESCRIBA(“La suma es: ”,c) FIN_INICIO Fin(sumar) #include<stdio.h> int main(){ int a, b, c = 0; printf(“Digite el primer numero (entero): ”); scanf(“%d”,&a); printf(“Digite el segundo numero (entero): ”); scanf(“%d”,&b); c = a + b; printf(“El resultado de la suma es: %d\n”,c); return 0; }
12
INTRODUCCION AL LENGUAJE C
ANATOMIA DE UN PROGRAMA EN C Instrucciones del preprocesador (uso de directivas del preprocesador) #include<stdio.h> int main(){ int a, b, c = 0; printf(“Digite el primer numero: ”); scanf(“%d”,&a); printf(“Digite el segundo numero: ”); scanf(“%d”,&b); c = a + b; printf(“El resultado de la suma es: %d\n”,c); return 0; } Declaración de variables (las variables son locales en este caso). Instrucciones (Expresiones aritméticas y lógicas, condicionales (SI), ciclos (HAGA, MIENTRAS)). Programa principal
13
INTRUCCION AL LENGUAJE C
Plantilla básica de un programa en C
14
INTRUCCION AL LENGUAJE C
Esto nos lleva a la siguiente conclusion algoritmo (nombre_algoritmo) variables: tipo_1: lista_variables_1 tipo_2: lista_variables_2 tipo_N: lista_variables_N constantes: lista_identificadores = valor INICIO sentencia_1 sentencia_2 sentencia_N FIN_INICIO fin(nombre_algoritmo) #include <librerias_del_sistema> #include “librerias_propias” variables_globales; int main() { variables_locales; sentencia_1; sentencia_2; sentencia_N; Return 0; }
15
MANEJO DE VARIABLES Variables: Existen tres tipos de datos básicos; los enteros, los números de coma flotante (reales) y caracteres. C cuenta con varias clases de tipos de datos fundamentales: enteros, caracteres y datos de coma flotante. float double int char alfanuméricas Enteras Reales Variables en C (Tipos de datos) Variables Pseudocódigo
16
MANEJO DE VARIABLES Declaración: consiste en definir cada una de las variables que van a ser usadas en el programa. Sigue la siguiente Sintaxis: tipo nom_var1 <,nom_var2,nom_var3,<=val_inicial>,nom_varN>; En C Toda variable debe ser declarada antes de ser usada. Cosa que no se declara cosa que no existe y error!!!. La inicialización de esta es opcional TABLA SENCILLA DE EQUIVALENCIAS C-PSEUDOCODIGO Pseudocódigo Lenguaje C entera int real float double alfanumérica char variables: entero: num_estudiantes real: prom_grupo, estatura, peso entero: num_clases = 0 int num_estudiantes; float prom_grupo, estatura, peso; int num_clases = 0;
17
PARENTESIS (Bit, Byte, Word)
Definición: Unidades usadas para describir unidades de datos o memoria en el computador Bit: Unidad mas pequeña de memoria usada para mantener uno de dos posibles valores, ‘1’ o ‘0’. 1 Byte: Unidad de memoria equivalente a 8 bits. Ojo colocar un dibujo de un IBM PC. Word: Unidad de memoria que depende de la arquitectura del computador.
18
VARIABLES ENTERAS (TIPO int)
Declaración: int nom_var1<,nom_var2,nom_var3,<=v_inicial3>,…,nom_varN>; Tamaño de almacenamiento: Depende de la arquitectura puede ser 2 o 4 bytes. Rango de la variable: Depende del tamaño de almacenamiento 2 bytes: a 32767 4 bytes: a Archivos cabecera relacionados: limits.h (En el cual se definen un numero de identificadores útiles para definir los limites de datos de tipo entero) entero: num_vacas entero: num_perros, num_gatos , num_gallos entero: num_est = 45, num_prof = 3 entero: num_x = -9, num_y, num_z entero: num_deudas = int num_vacas; int num_perros, num_gatos , num_gallos; int num_est = 45, num_prof = 3; int num_x = -9, num_y, num_z; int num_deudas = ;
19
VARIABLES DE REALES (TIPO float o double)
Declaración: Se manejan dos tipos de datos para las variables reales, por un lado están los datos tipo float empleadas para variables con precisión simple por el otro están los datos tipo double para variables con doble precisión. La sintaxis para declarar este tipo de variables se muestra a continuación: float nom_var1 <,nom_var2,nom_var3,<=v_inicial3>,…,nom_varN>; double nom_var1 <,nom_var2,nom_var3,<= v_inicial3>,…,nom_varN>; Tamaño de almacenamiento: Depende de la precisión del tipo de dato: float: 4 bytes. (Precisión de 6 dígitos). double: 8 bytes (Precisión de 15 dígitos). Rango de la variable: float: -3.4e38 a 3.4e38. (Siendo 1.2e-38 el valor positivo mas pequeño posible) double: -1.7e308 a 1.7e308 . (Siendo 2.3e-308 el valor positivo mas pequeño posible) Archivos cabecera relacionados: float.h real: x real: y real: a = 4.5, b = 3.0 real: c = -9., d, e = 1.5e-15 real: f = 4.03e19, g =.03 float x; double y; float a = 4.5, b = 3.0; float c = -9., d, e = 1.5e-15; double f = 4.03e19, g =.03;
20
VARIABLES TIPO CARACTER (TIPO char)
Declaración: Estas variables son empleadas para el manejo de datos alfanuméricos tales como letras del alfabeto y otros caracteres tales como #, $, % y * entre otros, también pueden ser usadas para la representación de números enteros: char nom_var1 <,nom_var2,nom_var3,<= v_inicial3>,…,nom_varN>; Tamaño de almacenamiento: 1 byte Rango de la variable: a 127 Los caracteres representados se hallan en la tabla ASCII la cual asocia un valor entero positivo a un carácter determinado. Nota: Es de anotar que solo hablamos de un solo carácter. El caso de las cadenas alfanuméricas después lo trataremos. alfanumerico: sexo = ‘F’ alfanumerico: grado = ‘A’, caracter = 64 alfanumerico: letra char sexo = ‘F’; char grado = ‘A’, caracter = 64; char letra
21
VARIABLES TIPO CARACTER (TIPO char)
22
MANEJO DE VARIABLES EN C
TIPOS DE DATOS EN C char int float long (1 byte) Usado para caracteres o variables enteras. (2 bytes o 4 bytes) Usado para valores enteros. (4 bytes) Números de punto flotante. (8 bytes) Números de punto flotante.
23
SOBRE LOS NOMBRES DE LAS VARIABLES
Identificadores: Nombres que se le dan a las constantes o variables. Reglas a seguir en el momento de nombrar una variable: Los identificadores no pueden tener el mismo nombre de las palabras reservadas. Elegir nombres significativos (es decir, relacionados con aquello a lo que esta haciendo referencia la variable). El primer carácter del nombre de una variable puede ser un letra (mayúscula o minúscula) o una raya baja (_). Un nombre de una variable puede tener como caracteres letras (mayúsculas y minúsculas), dígitos y el carácter raya baja (_). Declaración errónea de las variables Declaración correcta de las variables
24
PALABRAS RESERVADAS
25
RECORDERIS TIPOS FUNDAMENTALES DE DATOS
Cuando declaro una variable la elección del tipo de dato depende del propósito para el cual voy a usar la variable. Tipo Ejemplo Tamaño en bytes Rango (minimo-maximo) char ´c´ 1 0,…,255 int 1024 2 (o 4, depende de la arquitectura) -32768,…,32767 (si el tamaño en bytes es 2) float 10.5 4 3.4E-38 ,….,3.4E38 double 1e-8 8 1.7E-308,…,1.7E308 Declaración e inicialización de variables tipo nom_var1 <, nom_var2, nom_var3 <= valor_inicial>, nom_varN>;
26
RECORDERIS TIPOS FUNDAMENTALES DE DATOS (2)
Una variable no puede ser usada antes no ha sido previamente declarada.
27
MODIFICADORES Hemos visto que las variables tienen un rango ¿Pero que pasa si una variable determinada se pasa del rango? Respuesta: Sucede un overflow de la variable. Hay un conjunto de calificadores que pueden ser aplicados a los tipos básicos (int, char, double y float). Modificador Descripción long Fuerza a un tipo int a ser de 4 bytes, y fuerza a un tipo double a ser mas largo que double. No puede ser usado con short short Fuerza a un tipo int a ser de 2 bytes de longitud. No puede ser usado con long. unsigned Causa que el compilador (y CPU) para tratar el numero como positivo solamente. (para un entero de 16 bit: a 0 a 65535).
28
MODIFICADORES Además de los tipos de datos simples.
Un modificador es una palabra clave que antepuesta al tipo afecta las características de este. unsigned short long modificador tipo nom_var1<,nom_var2,nom_var3,<=v_inicial3>,…,nom_varN>; char int float double long int a = ; short int b = 16, c; unsigned int d; unsigned long int e; Unsigned short f;
29
MANEJO DE VARIABLES sizeof(tipo_dato) sizeof(nombre_variable) sizeof
30
MANEJO DE VARIABLES
31
MANEJO DE VARIABLES Algunas veces usted podria desear que el compilador almacene un pequeño numero como un entero long. Para hacer que una constante pequeña sea tratada como un tipo long, se añada l o L como sufijo. Asi un sistema con int de 16 bit y con long de 32 bit tratara el entero 7 como un entero de 16 bits y el entero 7L como un entero de 32 bits. Tipo Sufijo Ejemplo long L long a = -5L long long LL long long b = 0xALL unsigned long UL unsigned long c = 3UL Unsigned long long ULL Unsigned long long d = 9ULL
32
ENTRADA Y SALIDA EN C
33
SALIDA EN C Como hemos visto ya hemos trabajado con algunos de los diferentes tipos de datos que C nos brinda; sin embargo aun no tenemos manera de ver que valor tienen pues no las hemos desplegado en pantalla.
34
FUNCION PRINTF C cuenta con diferentes implementaciones de la funcion ESCRIBA, entre ellas se resaltan: putc, puts y prinft entre otras. La funcion printf es actualmente una funcion en C usada para imprimir variables y texto. Sintaxis: printf(“cadena_de_control_y_formato”, <dato1,dato2,. . .,datoN>); Cadena de control: Contiene los datos y la forma de mostrarlos. Es lo que va entre comillas. Datos (dato1, dato2,…,datoN): Variables, constantes o en general expresiones de salida.
35
ESPECIFICADORES DE FORMATO Y CONTROL
Especificador de formato y control: Hace alusión a las variables y a la forma como estas se despliegan a la salida. Especificador Significado %d Entero en decimal %c Caracteres sencillos %s Cadenas de caracteres %f Datos tipo float %lf Datos tipo double
36
IMPRIMIENDO VARIABLES TIPO INT, FLOAT Y DOUBLE
ESCRIBA(‘cadena1’,…,’cadenaN’,var1,var2,…,varN); Variables: entera: ai = 3, bi = 4, ci reales: ar = 2.5, br = -0.5 . . . ci= ai+bi ESCRIBA(“ai + bi = ”,ai,” + ”,bi,” = “,ci) ESCRIBA(“Hola ”,ai) ESCRIBA(“ar=”,ar,“, br–1=” ,br-1) printf(“cadena_de_control_y_formato”, <dato1,dato2,. . .,datoN>); int ai = 3, bi = 4, ci; float ar = 2.5; double br = -0.5; . . . ci= ai+bi; printf(“ai + bi = %d + %d = %d”,ai,bi,ci); printf(“Hola %d”,ai); printf(“ar=%f, br-1=%lf”,ar,br-1); Especificador Significado %c Caracteres sencillos %s Cadenas de caracteres %d Entero en decimal %f Datos tipo float %lf Datos tipo double ai + bi = = 7 Hola 3 ar=2.5, br-1=-1.5
37
IMPRIMIENDO VARIABLES TIPO CHAR
ESCRIBA(‘cadena1’,…,’cadenaN’,var1,var2,…,varN); Variables: alfanumérico: ac = ESCRIBA(“ac=”,ac) printf(“cadena_de_control_y_formato”, <dato1,dato2,. . .,datoN>); char ac = printf(“ac=%c”,ac); printf(“ac=%d”,ac); Especificador Significado %c Caracteres sencillos %s Cadenas de caracteres %d Entero en decimal %f Datos tipo float %lf Datos tipo double ac=64 %c %d
38
CADENAS DE CARACTERES EN C
C trata las cadenas de caracteres como arreglos compuestos por datos tipo char (‘c’). “Zing went the strings of muy heart!” Para poder hacer uso de una cadena de caracteres esta debe ser declarada primero, la declaración es llevada de la manera como convencionalmente se hace (recordar tipo_de_dato nombre_variable) con la diferencia que se debe especificar además el tamaño de la cadena de caracteres entre corchetes (esto luego sabremos porque); por ejemplo: Declaración de variables char s[20]; char nombre[30]=“Ramon”; char cedula[10]=“ ”; char apellido[]=“Valdez”;
39
IMPRESICION DE CADENAS DE CARACTERES
ESCRIBA(‘cadena1’,…,’cadenaN’,var1,var2,…,varN); variables: alfanumerico: nom = “Ramon”, apell = “Valdez” ESCRIBA(“Actor: ”,nom,” ”,apell,” como Don “,nom) printf(“cadena_de_control_y_formato”, <dato1,dato2,. . .,datoN>); char nom[6] = “Ramon”; char apell[] = “Valdez”; printf(“Actor: %s %s como don %s”,nom,apell,nom); Actor: Ramon Valdez como Don Ramon Especificador Significado %c Caracteres sencillos %s Cadenas de caracteres %d Entero en decimal %f Datos tipo float %lf Datos tipo double
40
IMPRESIÓN DE LOS OTROS TIPOS DE DATOS (ENTEROS CON MODIFICADORES)
Hasta el momento se ha visto como imprimir los tipos de datos básicos (char, int, float y double), pero entonces cuando una variable es declarada usando un modificador. La siguiente tabla muestra modificadores usados para el caso de expresiones entera. Especificador Significado %u Imprime variables tipo unsigned %ld Imprime variables tipo long %hd Imprime variables tipo short %lld Imprime datos tipo long long %lf Imprime datos tipo double %lu Imprime datos tipo unsigned long %llu Imprime datos tipo unsigned long long %hu Unsigned short
41
IMPRESIÓN DE LOS OTROS TIPOS DE DATOS (ENTEROS EN OTRAS BASES)
La siguiente tabla muestra modificadores usados para imprimir datos enteros en otras bases. Al igual que en base decimal se puede hacer uso de estos especificadores para la impresión de datos con modificadores. Especificador Significado %x (%X) Imprime variables tipo int en notación hexadecimal %o Imprime variables enteras en formato octal %hx (%hX) Imprime variables tipo short en formato hexadecimal %ho Imprime datos tipo short en notación octal. %#o Imprime variables enteras en formato octal mostrando los prefijo octal (0) %#x (%#x) Imprime variables enteras en formato octal mostrando los prefijo hexadecimal (0x)
42
IMPRESIÓN DE LOS OTROS TIPOS DE DATOS (SECUENCIAS DE ESCAPE)
Las secuencias de escape son utilizadas para dar formato a la salida. Van antecedidas por el simbolo \. Especificador Significado \a Alerta \b Backspace \f Form feed \n New line \r Carriage return \t Horizontal tab \v Vertical tab \' Comilla simple \" Comilla doble \? Signo de interrogacion \\ Signo de backslash \0 Carácter nulo \ddd Define un carácter por los digitos octales \xdd Define un carácter por los digitos hexadecimales
43
PARENTESIS (SISTEMAS NUMERICOS)
Por sistema numérico nos referimos a la forma como un dato numérico es representado. Este consiste básicamente de un conjunto ordenado de símbolos llamados dígitos, con relaciones definidas para la suma (+), resta (-), multiplicación (x) y división (÷) BASE SISTEMA NÚMERICO DIGITOS 2 Binario 0, 1 8 Octal 0, 1, 2, 3, 4, 5, 6, 7 10 Decimal 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 16 Hexadecimal 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F Se emplean dos tipos de notaciones, la notación posicional y la notación polinomial. Ojo colocar un dibujo de un IBM PC. Parte Entera Parte Fraccionaria
44
PARENTESIS (SISTEMAS NUMERICOS - 3)
Relación entre las bases mas comunes BASE 16 BASE 10 BASE 8 BASE 2 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 10 1000 9 11 1001 A 12 1010 B 13 1011 C 14 1100 D 15 1101 E 16 1110 F 17 1111 Realizar algunos ejercicios de conversión de bases BASE 16 BASE 10 BASE 8 BASE 2 ? 234 417 4AF Ojo colocar un dibujo de un IBM PC.
45
IMPRIMIENDO VARIABLES EN PANTALLA - ASPECTOS BASICOS (4)
Mas información sobre printf:
46
ENTRADA EN C Ya hemos visto como desplegar diferentes datos en pantalla, pero como es el caso cuando deseemos ingresar datos por teclado?
47
FUNCION SCANF &variable
C cuenta con diferentes implementaciones de la función LEA, entre ellas se resaltan: getc, gets y scanf entre otras. La función scanf es actualmente una función en C usada obtener variables y texto desde el teclado. Sintaxis: Datos (var_1, var_2,…,var_N): Variables en las cuales serán almacenados los datos ingresados por teclado. scanf(“cadena_de_control_y_formato”, <<&>var_1,<&>var_2,...,<&>var_N>); Cadena de control: Contiene caracteres de control asociados a las variables a las cuales serán llevados los datos. &variable Nombre de la variable Operador dirección
48
ESPECIFICADORES DE FORMATO Y CONTROL Y LA FUNCION SCANF
La función scanf maneja los mismos especificadores de formato y control usados en la función printf. Especificador Significado %d Entero en decimal %c Caracteres sencillos %s Cadenas de caracteres %f Datos tipo float %lf Datos tipo double Especificador Significado %x (%X) Imprime variables tipo int en notación hexadecimal %o Imprime variables enteras en formato octal %hx (%hX) Imprime variables tipo short en formato hexadecimal %ho Imprime datos tipo short en notación octal. %#o Imprime variables enteras en formato octal mostrando los prefijo octal (0) %#x (%#x) Imprime variables enteras en formato octal mostrando los prefijo hexadecimal (0x) Especificador Significado %u Imprime variables tipo unsigned %ld Imprime variables tipo long %hd Imprime variables tipo short %lld Imprime datos tipo long long %lf Imprime datos tipo double %lu Imprime datos tipo unsigned long %llu Imprime datos tipo unsigned long long %hu Unsigned short
49
LEYENDO VARIABLES TIPO INT, FLOAT Y DOUBLE
LEA(var1,var2,…,varN); Variables: entera: ai = 3, bi = 4, ci reales: ar = 2.5, br = -0.5 LEA(ai,bi,ci) LEA(ar,br) scanf(“cadena_de_control_y_formato”,<<&>var1,<&>var2,...,<&>varN>); int ai, bi, ci; float ar; double br; scanf(“%d%d%d”,&ai,&bi,&ci); scanf(“%f%lf”,&ar,&br); Ojo: Cuando se leen este tipo de variables con el scanf se debe usar el & antes del nombre de la variable. Especificador Significado %c Caracteres sencillos %s Cadenas de caracteres %d Entero en decimal %f Datos tipo float %lf Datos tipo double
50
LEYENDO VARIABLES TIPO CHAR
LEA(var1,var2,…,varN); Variables: alfanumérico: ac LEA(ac) scanf(“cadena_de_control_y_formato”,<<&>var1,<&>var2,...,<&>varN>); char ac; scanf(“%c”,&ac); Especificador Significado %c Caracteres sencillos %s Cadenas de caracteres %d Entero en decimal %f Datos tipo float %lf Datos tipo double Ojo: Cuando se leen este tipo de variables con el scanf se debe usar el & antes del nombre de la variable.
51
LEYENDO CADENAS DE CARACTERES CON SCANF
LEA(var1,var2,…,varN); variables: alfanumerico: nom,apell LEA(nom,apell) scanf(“cadena_de_control_y_formato”,<<&>var1,<&>var2,...,<&>varN>); char nom[6]; char *apell; printf(“%s%s”,nom,apell); Ojo: A diferencia que en los casos anteriormente vistos cuando se leen cadenas de caracteres no es necesario usar el & en la función scanf, eso si se debe declarar previamente la cadena de caracterea. Especificador Significado %c Caracteres sencillos %s Cadenas de caracteres %d Entero en decimal %f Datos tipo float %lf Datos tipo double
52
ASPECTOS BASICOS DE LA ENTRADA EN C
53
ASPECTOS BASICOS DE LA ENTRADA EN C
54
Y COMO DICE UN VIEJO AMIGO!!!
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.