Programación c++forcsma

38
- 1 - Por: Ing. Carlos Alberto Ávila Ruiz ([email protected]) Introducción El comité para el estándar ANSI C fue formado en 1983 con el objetivo de crear un lenguaje uniforme a partir del C original, desarrollado por Kernighan y Ritchie en 1972, en la ATT. Hasta entonces el estándar lo marcaba el libro escrito en 1978 por estos dos autores. El lenguaje C++ se comenzó a desarrollar en 1980. Su autor fue B. Stroustrup, también de la ATT. Al comienzo era una extensión del lenguaje C que fue denominada C with classes. Este nuevo lenguaje comenzó a ser utilizado fuera de la ATT en 1983. El nombre C++ es también de ese año, y hace referencia al carácter del operador incremento de C (++). Ante la gran difusión y éxito que iba obteniendo en el mundo de los programadores, la ATT comenzó a estandarizarlo internamente en 1987. En 1989 se formó un comité ANSI (seguido algún tiempo después por un comité ISO) para estandarizarlo a nivel americano e internacional. En la actualidad, el C++ es un lenguaje versátil, potente y general. Su éxito entre los programadores profesionales le ha llevado a ocupar el primer puesto como herramienta de desarrollo de aplicaciones. El C++ mantiene las ventajas del C en cuanto a riqueza de operadores y expresiones, flexibilidad, concisión y eficiencia. Además, ha eliminado algunas de las dificultades y limitaciones del C original. La evolución de C++ ha continuado con la aparición de Java, un lenguaje creado simplificando algunas cosas de C++ y añadiendo otras, que se utiliza para realizar aplicaciones en Internet. Hay que señalar que el C++ ha influido en algunos puntos muy importantes del ANSI C, como por ejemplo en la forma de declarar las funciones, en los punteros a void, etc. En efecto, aunque el C++ es posterior al C, sus primeras versiones son anteriores al ANSI C, y algunas de las mejoras de éste fueron tomadas del C++ 1 . Cabe destacar que la generalidad del lenguaje descrito aquí es para un nivel básico en el cual se pretende dominar las estructuras clásicas de cualquier lenguaje de programación, con ejercicios aplicables en cualquier plataforma. Para aquellos interesados en desarrollar a profundidad sus conocimientos en C++, pueden referirse a Internet y consultar los métodos de programación para Borland C++. En esta serie de documentos se explicará la sintaxis básica del lenguaje, en el entorno gratuito de programación DevC++, con énfasis exclusivo para el desarrollo del currículo de informática del colegio san mateo apóstol. 1 Párrafo adaptado del Manual de C++ con clase (URL: http//:www.cconclase.com)

Transcript of Programación c++forcsma

- 1 -

Por: Ing. Carlos Alberto Ávila Ruiz

([email protected])

Introducción El comité para el estándar ANSI C fue formado en 1983 con el objetivo de crear un lenguaje uniforme a partir del C original, desarrollado por Kernighan y Ritchie en 1972, en la ATT. Hasta entonces el estándar lo marcaba el libro escrito en 1978 por estos dos autores. El lenguaje C++ se comenzó a desarrollar en 1980. Su autor fue B. Stroustrup, también de la ATT. Al comienzo era una extensión del lenguaje C que fue denominada C with classes. Este nuevo lenguaje comenzó a ser utilizado fuera de la ATT en 1983. El nombre C++ es también de ese año, y hace referencia al carácter del operador incremento de C (++). Ante la gran difusión y éxito que iba obteniendo en el mundo de los programadores, la ATT comenzó a estandarizarlo internamente en 1987. En 1989 se formó un comité ANSI (seguido algún tiempo después por un comité ISO) para estandarizarlo a nivel americano e internacional. En la actualidad, el C++ es un lenguaje versátil, potente y general. Su éxito entre los programadores profesionales le ha llevado a ocupar el primer puesto como herramienta de desarrollo de aplicaciones. El C++ mantiene las ventajas del C en cuanto a riqueza de operadores y expresiones, flexibilidad, concisión y eficiencia. Además, ha eliminado algunas de las dificultades y limitaciones del C original. La evolución de C++ ha continuado con la aparición de Java, un lenguaje creado simplificando algunas cosas de C++ y añadiendo otras, que se utiliza para realizar aplicaciones en Internet. Hay que señalar que el C++ ha influido en algunos puntos muy importantes del ANSI C, como por ejemplo en la forma de declarar las funciones, en los punteros a void, etc. En efecto, aunque el C++ es posterior al C, sus primeras versiones son anteriores al ANSI C, y algunas de las mejoras de éste fueron tomadas del C++1. Cabe destacar que la generalidad del lenguaje descrito aquí es para un nivel básico en el cual se pretende dominar las estructuras clásicas de cualquier lenguaje de programación, con ejercicios aplicables en cualquier plataforma. Para aquellos interesados en desarrollar a profundidad sus conocimientos en C++, pueden referirse a Internet y consultar los métodos de programación para Borland C++. En esta serie de documentos se explicará la sintaxis básica del lenguaje, en el entorno gratuito de programación DevC++, con énfasis exclusivo para el desarrollo del currículo de informática del colegio san mateo apóstol.

1 Párrafo adaptado del Manual de C++ con clase (URL: http//:www.cconclase.com)

- 2 -

INDICE DE CONTENIDO CAPITULO I

Diagramas de Flujo y Estructura Principal 3 CAPITULO II

Entrada y Salida de Información 5 CAPITULO III

Operaciones Básicas 12 CAPITULO IV

Operaciones y Librería Math 13 CAPITULO V

Bifurcaciones 15 Sentencia IF 15 Operadores en C++ 19 Sentencia Switch 21

CAPITULO VI

Bucles 23 Sentencia FOR 23 Sentencia WHILE 24 CAPITULO VII

Manejo de Caracteres 25 Tabla Ascii 26 Arreglos 29

CAPITULO VIII

Ejercicios de Aplicación 32

APENDICE 1 34

- 3 -

I. Diagramas de Flujo y Estructura Principal

Los diagramas de flujo muestran la forma en cómo evoluciona un programa y pretenden mostrar de manera gráfica la lógica de cada estructura contenida en él. Para muchas personas les resulta fácil inferir un concepto gráfico a un concepto textual, por ejemplo:

Gráfico Concepto

Cortar

Silencio

Duda

Cualquiera que sea el gráfico, se puede asociar a una idea. Este es el fin de los diagramas de flujo mediante los siguientes iconos básicos:

Gráfico Concepto

Comenzar o Terminar

Proceso

Entrada Manual

Pantalla

Decisión

Veamos un ejemplo de un diagrama de flujo simple.

INICIO

FIN

NO SONÓ EL DESPERTADOR

SÉ QUE VOY TARDE

¿ME BAÑO?

ESTARÉ ASEADO PERO LLEGARÉ TARDE

ESTARÉ SUCIO PERO LLEGARÉ A TIEMPO

SI

NO

- 4 -

Con este punto de referencia, se dice entonces que todos los programas tienen un comienzo y un fin, dentro del cual ocurren diferentes cosas como procesos, y decisiones. En C++ la estructura principal es la que se describe a continuación y que tiene una semejanza a un diagrama de flujo que no contiene un propósito específico.

Estructura Principal en C++ Diagrama de Flujo Correspondiente

#include <iostream> using namespace std main() { return 0; }

En la estructura principal se definen 4 aspectos que el sistema operativo requiere para ejecutar una aplicación.

1. #include Define la librería(s) a utilizar, estas contienen información acerca de las sentencias usadas durante el programa

2. using namespace std Define rutinas de iniciación en el compilador en el cual se realiza y ejecuta el programa, esta instrucción puede colocarse o no en la estructura principal dependiendo del compilador, para DevC++ es obligatorio.

3. main(){ Determina el comienzo del programa realizado, así como es el nombre de la función del programa ante el sistema operativo.

4. return 0;} Culmina el programa y finaliza la aplicación ante el sistema operativo.

En todos los programas se debe colocar esta estructura principal, y el contenido de esta debe ser escrito en minúsculas dado que c++ es susceptible a que sus sentencias sean escritas de otra forma. Ejercicios.

1. Realiza un diagrama de flujo acerca de la forma en como tomas las decisiones para preparar un examen.

2. Memoriza la estructura principal de c++.

INICIO

CONFIGURACION INICIAL

PROGRAMA

FIN

PROGRAMA

- 5 -

II. Entrada y Salida de Información En los programas que se desarrollarán en este documento la información que ingresará al programa se realizará por medio del teclado, y la información resultante del procedimiento del programa se mostrará en pantalla.

Las sentencias CIN y COUT que se utilizan para ingresar ó sacar información del programa pertenecen a la librería IOSTREAM. Salida de Información. La sentencia COUT utiliza el operador << para delimitar parámetros. Por ejemplo si deseo mostrar el mensaje Hola mundo se debe escribir lo siguiente:

cout<<”hola mundo”;

Los textos se deben escribir entre comillas y al concluir una sentencia se coloca punto y coma (;). Para mostrar varios mensajes en diferentes líneas se usa la sentencia ENDL para realizar el salto de renglón, ejemplo: cout<<”hola mundo”<<endl; cout<<”soy”<<endl; cout<<”CARLOS”; Ó también se puede escribir todo esto en una sola línea de programa así:

cout<<”hola mundo”<<endl<<”soy”<<endl<<”CARLOS”; Al colocar esta línea de programa en la estructura principal el programa quedaría como sigue:

#include <iostream> using namespace std main() {

cout<<”hola mundo”<<endl<<”soy”<<endl<<”CARLOS”; return 0; }

- 6 -

Y con este primer ejemplo de programa es hora de observar como se compila2 y ejecuta en DevC++ Aquí no se indicará la descarga ni la instalación de DevC++ dado que el paquete instalador viene con instrucciones para hacerlo. Una vez instalado el software, y abierto el programa se debe crear un nuevo archivo fuente así:

De tal forma que en él escribiremos el programa y a media que colocamos las palabras DevC++ reconocerá por medio de colores, negrillas y demás, cada comando que se escribe en el archivo fuente.

Luego deberá guardar el programa y asignar un nombre.

2 Procedimiento con el cual se analiza e interpretan los códigos de un programa para indicar errores al usuario ó en su

defecto que todo se ha escrito correctamente.

- 7 -

Luego de guardar, notará que el archivo tiene en el icono la palabra CPP lo cual indica la extensión del archivo y lo identificará así para que usted sepa que este es el código fuente del programa.

Ahora debe COMPILAR y verificar que el programa le indique los errores en el código escrito, si no los tiene aparecerá: DONE

Para probar el programa el primer modo regular de ejecución que veremos es DEBUG, que permite el funcionamiento del programa hasta la línea de código deseada, para ello se debe seguir los siguientes pasos:

1. Colocar el cursor de texto entes de la palabra return 0; 2. Clic en Depuración y luego en “Ejecutar hasta el cursor” 3. Aparece el programa en una ventana de DOS 4. Para terminar el programa NO debe cerrar la ventana de DOS puesto

que aparecerá un cierre forzado de Windows, para ello debe dar click en “Detener Ejecución”

Forma de ejecutar programas de C++ en DevC++

- 8 -

Forma de detener programas de C++ en DevC++

Otro ejemplo para salida de información:

Realice un programa que muestre la siguiente figura:

Entrada de Información. El ingreso de datos por teclado se realiza mediante la instrucción CIN y el operador >>. Para esto debe tenerse muy en cuenta el tipo de dato que se

- 9 -

ingresará al programa para procesarlo como tal, en este curso empezaremos con tres tipos de datos básicos:

Tipo Descripción Ejemplo

INT Número entero int a DOUBLE Numero con decimales double a

CHAR Carácter (letra, numero ó símbolo) char a

Los datos se manipulan por medio de variables que son apartados de memoria del ordenador para almacenar y procesar información de determinado tipo, y al crear una variable se debe asignar un nombre coherente con el programa ó una letra, nunca se deben asignar nombres a las variables que sean instrucciones propias del lenguaje, por ejemplo cin ó cout y demás. Ejemplo Correcto: int valor cout<<”Escriba un numero: ”; cin>>valor; Ejemplo Incorrecto: Este ejemplo provocará un error en el compilador. int cin cout<<”Escriba un numero: ”; cin>>cin; Para comprobar el funcionamiento de los tipos de datos y de la entrada de información veremos tres ejemplos que ilustran los detalles de cada tipo. Ejemplo de tipo de dato INT.

También es posible obtener resultados negativos con este tipo de dato.

- 10 -

Ejemplo de tipo de dato DOUBLE.

Este tipo se utiliza cuando se esperan resultados que manejen cifras decimales ó en caso de manejos porcentuales. Ejemplo de tipo de dato CHAR.

En el ejemplo anterior se escribió la letra A mayúscula y se le agregó una b minúscula. Es posible capturar varias variables al mismo tiempo que la persona escribe los datos, para cada variable distinta se coloca un operador de más en el ingreso por CIN.

- 11 -

Ejercicios. 1. Realizar un programa que al escribir una letra y un numero, el programa

muestre un mensaje indicando que la letra es la fila y el numero la columna.

2. Un programa que al escribir un símbolo, letra ó numero digito cualquiera me muestre un cuadrado de 3x3 elaborado con dicha información ingresada.

III. Operaciones Básicas

Las operaciones aritméticas básicas como suma, resta multiplicación y división, están representadas por símbolos que efectúan la acción matemática, los cuales son:

Símbolo Acción

+ Suma - Resta * Multiplicación / División

Estas operaciones suelen usarse mediante el uso de paréntesis con el fin de agrupar notaciones en un solo renglón. Ejemplo:

𝑥 =3𝑦

5−

8

5 + 𝑧

Equivale a: x= ((3*y)/ (5))-((8)/ (5+z))

- 12 -

Un ejemplo de aplicación para las operaciones básicas puede ser la conversión de unidades térmicas como los son: Centígrados, Fahrenheit y Kelvin. Para este ejemplo se debe tener en cuenta la forma en como se realizan estas conversiones bajo las siguientes fórmulas: Para convertir °C a °F se realiza:

(℃ × 9

5) + 32 = ℉

Para convertir °C a °K se realiza:

273.15 +℃ = °𝐾 Realizaremos entonces un programa en C++ que reciba como entrada el valor en grados Centígrados y entregue como resultado el equivalente en Kelvin y Fahrenheit.

Ejercicios.

1. Realizar un programa que reciba como entrada de información, un valor dado en Metros, y los convierta en Yardas, Pies y Millas.

2. Realizar un programa que reciba como entrada de información, un valor dado en Horas, y los convierta en Minutos y Segundos.

3. Un Programa que reciba un valor en grados angulares y devuelva su valor en radianes.

- 13 -

IV. Operaciones y Librería MATH

Cuando la matemática utilizada en un programa requiere operaciones más complejas como funciones trigonométricas y demás se utiliza la librería MATH.H la cual indica al compilador de C++ como se comportan las siguientes funciones:

Función Descripción

acos Arco coseno asin Arco seno atan Arco tangente cos Coseno cosh Coseno hiperbólico fabs Valor absoluto log Logaritmo natural log10 Logaritmo en base 10 pow(x,y) Potenciación de x elevado a la y sin Seno sinh Seno hiperbólico sqrt Raíz cuadrada tan Tangente tanh Tangente hiperbólica fmod(x,y) Residuo x/y

Estas son algunas de las muchas otras funciones en la librería MATH.H, en este apartado solo nos concentraremos en potenciación y radicación, y para ello debemos tener en cuenta que los tipos de datos deben manejar valores decimales, por lo que deben ser del tipo DOUBLE. CONSIDERACIONES:

1. Colocar la librería al comenzar el código del programa 2. Las variables a usar en las funciones deben ser de tipo “double”. 3. También es posible utilizar valores fijos ó constantes.

Para el caso práctico de este capítulo realizaremos un programa que dado el radio de un círculo determine su área. Y por otro lado realizaremos otros programa que dada el área de un círculo determine su radio. Consideremos que la fórmula geométrica para hallar el área de un círculo está dada por:

𝐴 = 𝜋𝑟2

Entonces pi=3.1416, y para manejar los valores en esta ecuación necesitamos manipular valores decimales, por lo que utilizaremos variables de tipo DOUBLE.

- 14 -

Si consideramos ahora que el valor de entrada es el área del círculo, entonces para determinar su radio tendremos en cuenta la siguiente fórmula geométrica.

𝑟 = √A

π

Por lo cual tendremos el programa como sigue:

Ejercicios. 1. Hacer un programa que determine el perímetro de una elipse sabiendo

que la formula es:

𝑃 = 2𝜋√𝑏2 + ℎ2

2

- 15 -

V. Bifurcaciones (Sentencias IF y SWITCH)

En el primer capitulo vimos el tema de diagramas de flujo, en donde uno de ellos era una decisión, la cual tiene dos posibilidades únicamente, que el resultado de la pregunta sea falso ó verdadero. A esta sentencia se le llama IF que viene del inglés “SI…”, esta sentencia tiene varias formas:

IF

IF ELSE

IF ELSEIF ELSE La primera forma, IF es la siguiente:

if(condición) { Acciones en caso verdadero; }

La segunda forma, IF ELSE es la siguiente:

if(condición) { Acciones en caso verdadero; } else { Acciones en caso falso; }

La tercera forma, IF ELSEIF ELSE es la siguiente:

if(condición1) { Acciones en caso verdadero de condición1; } elseif(condición2) { Acciones en caso verdadero de condición2; } else { Acciones en caso falso de condiciones anteriores; }

En este último caso las condiciones se pueden extender indefinidamente. Así como el uso de los corchetes se aplica cuando el grupo de instrucciones consecuentes de falso ó verdadero implique más de una línea de

- 16 -

programación, si esta es mayor de una línea es obligatorio el uso de los corchetes, para el correcto funcionamiento del programa, de lo contrario el compilador mostrará un error de sintaxis en el uso de estas sentencias. A continuación un ejemplo de programa que muestra el uso de la sentencia IF en su forma más simple:

Pero en el caso de que se ingresara un valor mayor a 18 ¿Qué pasaría? Nada, no ocurriría ninguna acción en el programa a menos que programáramos de la siguiente manera usando IF ELSE.

- 17 -

De las formas anteriores se puede evaluar un parámetro desde uno ó dos puntos de vista como lo son falso ó verdadero, sin embargo el la forma IF ELSEIF ELSE puede ampliar las posibilidades de avaluar una variable a un rango más amplio. Veamos un ejemplo de un programa que determina la etapa de la vida de una persona de acuerdo a su edad, la siguiente información no proviene de ninguna fuente mas allá de la imaginación de este su autor.

Años de Edad Etapa

0-4 Bebé 4-10 Niño 10-15 Preadolescente 15-21 Adolescente 21-30 Joven 30-45 Adulto 45-55 Adulto Mayor 55-100 Anciano

Cuando en el programa alguna de las condiciones resulta ser verdadera la acción siguiente se ejecuta y todo el bloque subsecuente de ELSEIF y ELSE es obviado por lo que el programa termina, en el ejemplo de ejecución que se muestra en el gráfico, la edad ingresada (27) está contemplada en un ELSEIF de la mitad.

- 18 -

Lo anterior infiere que las preguntas ejecutadas fueron:

Edad>55 Falso Edad>45 Falso Edad>30 Falso Edad>21 Verdadero

En adelante no fueron contempladas ninguna de las interrogantes, por ello salió el mensaje “JOVEN”…y yo dije…gracias. Operadores en C++ En los últimos ejemplos vimos solo una forma de comparación que era <. A este símbolo en c++ se le llama operador, y pertenece a la categoría de comparaciones. Los operadores sirven para establecer una relación entre variables que puede ser de diferente índole, he aquí alguno de los más utilizados operadores en C++.

Aritméticos Relacionales

Suma + Igual a ==

Resta - Diferente de !=

Multiplicación * Mayor >

División / Menor <

Lógicos Mayor ó igual que >=

Y lógica && Menor ó igual que <=

Ó lógica || Incrementación y Decrementación

++ Aumento en 1

-- Disminución en1

Para ejemplificar el uso de estos operadores, veamos el ejemplo de un operador relacional para comparar igualdad:

- 19 -

Así mismo podemos escribir el código del programa de las “etapas de la vida” que realizamos anteriormente de la siguiente forma:

De esta otra forma se analiza un rango específico y no importa el orden ascendente o descendente que se tenga igual se evalúa el rango, el operador && (Y) conocido como AND discrimina las dos condiciones de la forma en que solo cuando las dos son verdaderas el resultado del IF, así mismo lo será. En este mismo ejemplo se ingreso la edad de 27, para evaluar alguna condición intermedia, cuyo resultado fue “Joven”…de nuevo dije gracias. Igualmente las condiciones se evaluaron así para la edad de 27:

Verdadero Falso Resultado: Falso (edad>0)&&(edad<=4) Verdadero Falso Resultado: Falso (edad>4)&&(edad<=10) Verdadero Falso Resultado: Falso (edad>10)&&(edad<=15) Verdadero Falso Resultado: Falso (edad>15)&&(edad<=21) Verdadero Verdadero Resultado: Verdadero (edad>21)&&(edad<=30)

- 20 -

Sentencia Switch Otra sentencia de bifurcación es llamada Switch, que evalúa de manera independiente las posibilidades de una variable, y no de un rango de la misma. La sintaxis de esta sentencia es la siguiente: switch(variable) { case valor 1: acciones para el caso; break; case valor 2: acciones para el caso; break; case valor n: acciones para el caso; break; default: acciones; break;

} De esta manera se analizan los posibles casos resultantes de una variable, pero mejor veamos un ejemplo de programa que de acuerdo a un número ingresado de una lista de inventos, nos muestra el país en que fueron creados.

Inventos Latinos

Radiografía pulmonar (abreugrafía) Brasil Píldora Anticonceptiva México Vacuna contra la Malaria Colombia Bolígrafo Argentina Motor de Plasma Costa Rica

- 21 -

Al momento de evaluar un valor entero (INTEGER) se coloca el numero al frente de la palabra case. La palabra default, es para aquellos valores no contemplados en los casos del switch. Otro ejemplo del uso de la sentencia switch es para variables de tipo carácter también llamadas CHAR. En este programa muestra una frase de acuerdo con una letra que debe corresponder a la inicial del nombre de la persona frente al teclado.

Nótese que al frente de la palabra case (caso), se encuentra la letra que se va a analizar entre comillas simples (apóstrofes), esto se hace cuando la variable a analizar es un carácter y no un numero. EJERCICIOS.

1. Usando la sentencia IF realizar un programa que al ingresar la clave 3425 muestre el mensaje “CORRECTO”, en el caso contrario muestre “CLAVE ERRONEA”

2. Dado el método de calificación numérica, escriba un programa que reciba una calificación de un examen cualquiera, y este determine la letra correspondiente a esta nota.

3. Por medio de la sentencia Switch escriba un programa en C++ que dado un numero entero de entrada entre 2 y 6, grafique un cuadrado de esa

longitud por lado, usando el carácter “*”

- 22 -

VI. Bucles Se le llama bucle a las repeticiones en un programa, estas tienen diferentes usos en programación, generalmente para hacer tareas repetitivas, búsquedas y algoritmos autónomos. Bucle FOR Este bucle cuanta con tres aspectos: inicialización, condición de permanencia y acción. Su sintaxis es la siguiente:

for (inicialización;condición;acción) { Instrucciones; }

Veamos por medio de un ejemplo una aplicación, en el cual se mostrará un mensaje en pantalla 10 veces.

El bucle usa una variable tipo entero, la cual inicia en 1, las repeticiones se efectúan gracias a que el resultado de la condición es verdadero, así mismo como el incremento en la variable, el cual se realiza de forma muy particular usando dos veces el símbolo +, de esta forma es que i=i+1 es lo mismo que i++.

- 23 -

Otro ejemplo es resolver la siguiente serie:

nnnn nx ...321

En el anterior código, se usa la librería math.h, la cual contiene funciones trigonométricas como SENO, COSENO, y demás, así como potenciación y radicación. Luego se crearon tres variables tipo doublé, con manejo de decimales. El bucle está definido para comenzar desde 1 y terminar en el valor n ingresado por usuario, de tal forma que cuando i y n son iguales el bucle termina. En cada repetición se ejecuta la formula: x=x+pow(i,n), en la cual se sabe de antemano que el valor inicial de X es cero. Y que cada vez se aumenta en pow(i,n) veces. POW es exponer un número base a una potencia de tal forma que aquí se está elevando i a la n. Para comprobar el funcionamiento de este algoritmo realicemos la siguiente prueba llamada, prueba de escritorio. Supongamos que el usuario escribió 4.

Repetición x i n

1 1 1 4 2 17 2 4 3 98 3 4 4 354 4 4

Bucle WHILE El bucle While es más sencillo, pues este siempre ejecuta una ó un grupo de instrucciones siempre y cuando el resultado de la condición sea verdadero. La sintaxis es la siguiente: while(condición) { grupo de instrucciones;

}

- 24 -

En este ejemplo simple de aplicación, el programa siempre mostrará el mensaje “presione una tecla para salir” a menos que dicha tecla sea la “e”.

EJERCICIOS.

1. Realice un programa que muestre los números pares desde el 100 al 200.

2. Un programa que resuelva la siguiente sucesión:

𝑥 = 𝑛√1 + 𝑛√2 + 𝑛√3 +⋯+ 𝑛√𝑛

3. A los programas anteriores agrégueles un WHILE para solo se terminen si oprimen la tecla “x”

VII. Manejo de Caracteres Los textos que escribimos en el computador están conformados por un conjunto de caracteres que pueden ser:

Numéricos

Alfabéticos

Simbólicos

En la frase: “Hola [email protected]” se escribieron 23 caracteres, en los que se incluye el espacio, los números, el arroba y el punto. Estos caracteres se encuentran contemplados en la tabla ASCII

- 25 -

“El código ASCII (acrónimo inglés de American Standard Code for Information Interchange — Código Estadounidense Estándar para el Intercambio de Información), pronunciado generalmente [áski], es un código de caracteres basado en el alfabeto latino tal como se usa en inglés moderno y en otras lenguas occidentales. Fue creado en 1963 por el Comité Estadounidense de Estándares (ASA, conocido desde 1969 como el Instituto Estadounidense de Estándares Nacionales, o ANSI) como una refundición o evolución de los conjuntos de códigos utilizados entonces en telegrafía. Más tarde, en 1967, se incluyeron las minúsculas, y se redefinieron algunos códigos de control para formar el código conocido como US-ASCII. El código ASCII utiliza 7 bits para representar los caracteres”3 Los caracteres numerados desde el 0 al 127 hacen parte de la tabla Ascii básica, y en ella los 32 primero son caracteres NO IMPRIMIBLES esto quiere decir que se usan para el control de la comunicación entre las máquinas, de allí en adelante comienzan los simbólicos, numéricos y alfabéticos.

3 Tomado de es.wikipedia.org

- 26 -

Los caracteres del 128 al 255 son considerados entre ascii extendido y varían de acuerdo al ordenador y programa utilizado. Una forma de comprobar la tabla ascii en un computador es utilizando cualquier parte de cualquier programa en donde se pueda escribir y utilizar el método abreviado CTRL + valor.

Por ejemplo CTRL + 64 dá como resultado @

La primera forma de ver los valores decimales de los caracteres es haciendo conversión de tipos, esta consiste en que una variable de un tipo determinado pueda cambiar a otro diferente. El ejemplo que veremos a continuación consiste en cambiar una variable tipo char, por una tipo int, con el propósito de obtener el valor decimal de un carácter ascii.

En el anterior programa al ingresar un carácter, el resultado es el valor decimal ascii correspondiente. El siguiente ejercicio muestra como cambiar un tipo de ascii a otro, por ejemplo una MAYUSCULA a una minúscula.

- 27 -

Al combinar un ciclo FOR con la conversión de tipos es posible mostrar toda la tabla ascii, teniendo en cuenta que para cada repetición se debe hacer la conversión de tipos y mostrar un mensaje que muestre el valor decimal y el carácter ascii. En el gráfico que sigue se muestra un fragmento de la ventana en la que se observa la tabla del carácter 51=3 hasta 128=Ç, por motivos de gráficos no se observan los demás, pero es obvio que al deslizar la barra a la derecha se puede revirar toda la tabla.

- 28 -

ARREGLOS

Los arreglos son agrupaciones de elementos contenidos en una misma variable, estos se pueden aplicar a cualquier tipo de dato, con el propósito de reducir la cantidad de variables en un programa y facilitar el procesamiento de las mismas. Un ejemplo de la primera utilidad de un arreglo es la siguiente:

Int edad0, edad1, edad2, edad3, edad4, edad5, edad6; Crear todas las anteriores variables se puede reducir por lo siguiente:

Int edad[6];

Esto quiere decir que se ha creado una variable entera llamada edad que contiene 7 “subvariables”, que simbólicamente se pueden apreciar como una agrupación de partes en un todo:

edad

edad [0] edad[1] edad [2] edad [3] edad [4] edad [5] edad [6]

Veamos una utilidad del uso de esta forma de uso de datos:

- 29 -

Explicación:

El programa determina la cantidad de letras del nombre de una persona, cada caracter del nombre es analizado en un ciclo FOR para determinar si su valor ascii es diferente de cero, esto quiere decir que una persona para este programa se puede llamar RJ45, sin inconveniente alguno.

Lo curioso en este programa es las siguiente dos líneas:

¿Por qué colocar el valor decimal cero para cada parte de la variable palabra? “Cuando se crea un arreglo, cada una de las partes puede empezar con

cualquier valor.”

Esto quiere decir que inicialmente la memoria puede contener información “basura” ó indeseada.

palabra

# ‘ / * { ~ s û ¢ ▓ g ▀ ╚

Por ello en este programa, antes de ingresar el nombre de la persona, nos aseguramos de que todo el arreglo esta en:

palabra

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Un último ejemplo de lo que se puede hacer con un arreglo es un programa que al escribir una palabra, convierta las mayúsculas en minúsculas y viceversa.

- 30 -

Explicación: El programa analiza cada parte del arreglo es decir cada letra. En este FOR se encuentra un tipo IF y ELSE IF el cual discrimina si la letra está en el rango de mayúsculas y le suma 32 ó si está en minúscula para restarle 32. EJERCICIOS.

1. Realizar un programa que al escribir un número de 0 a 127 muestre el carácter correspondiente ascii.

2. Un programa que el escribir un numero digito del 0 al 9 lo convierta en una letra de la J a la S

3. Un programa que valide una clave secreta siempre y cuando la segunda y cuarta letra sean “x”.

4. Un programa que determine la cantidad de vocales de una palabra.

- 31 -

VIII. Ejercicios de Aplicación

Los ejercicios que a continuación se plantean aquí son diseñados por la Universidad Antonio Nariño para las olimpiadas de programación en educación media vocacional en colegios de Bogotá. NOTA: Si usted desea tener el real ánimo de aprender la lógica abstracta de programación es muy recomendable que lea el enunciado y trate primero por sus propios métodos llegar a la solución del mismo, luego puede comparar su solución con la respuesta, y probablemente llegará a un código diferente pero igual de útil, no se desanime por no lograr resolver algún ejercicio.

#1 // TIEMPO PARA RECORRER

DADOS DOS VALORES ENTEROS DE ENTRADA UNO SIGNIFICA UNA DISTANCIA A RECORRER EN KILÓMETROS POR HORA Y EL OTRO LA VELOCIDAD PROMEDIO DEL VEHICULO EN EL RECORRIDO, EL PROGRAMA DEBE MOSTRAR EL TIEMPO QUE TARDARÁ EL VEHÍCULO EN LLEGAR, EN EL FORMATO DE HORAS Y MINUTOS hh:mm. SI LA CANTIDAD DE MINUTOS NO ES EXACTA APROXÍMELA.

ENTRADA EJEMPLO: 60 40 SALIDA EJEMPLO: 1:30

#2 // PROMEDIO

RECIBA COMO ENTRADA TRES NÚMEROS REALES Y QUE DETERMINE SI ALGUNO DE ELLOS ES EL PROMEDIO DE LOS OTROS DOS. SI LA RESPUESTA ES AFIRMATIVA DEBE IMPRIMIR COMO SALIDA EL NÚMERO QUE CUMPLE CON ESTA PROPIEDAD, EN CASO CONTRARIO DEBE REPORTAR “NINGUNO” ENTRADA EJEMPLO: 8.0 7.0 7.5 SALIDA EJEMPLO: 7.5 ENTRADA EJEMPLO: 8.0 10.22 25.15 SALIDA EJEMPLO: NINGUNO

#3 // SUMA DE VALORES ABSOLUTOS

RECIBA UN NUMERO n (1 ≤ n ≤10) Y A CONTINUACIÓN n NÚMEROS E IMPRIMA LA SUMA DE LOS VALORES ABSOLUTOS DE LOS n NUMEROS. ENTRADA EJEMPLO: 3 -2 3 -4 SALIDA EJEMPLO: 9

#4 // CAMBIO DE TIPOS

RECIBA COMO ENTRADA UNA PALABRA Y QUE IMPRIMA EN LA SALIDA LA PALABRA CAMBIANDO LAS LETRAS QUE VIENEN EN MINÚSCULA POR MAYÚSCULA Y LAS MAYÚSCULAS EN MINÚSCULAS. ENTRADA EJEMPLO: aBEcedARio SALIDA EJEMPLO: AbeCEDarIO

- 32 -

#5 // SEGURIDAD POR VOCAL

UNA FORMA MUY SENCILLA AUNQUE INSEGURA DE CODIFICAR UNA PALABRA ES REEMPLAZANDO CADA VOCAL POR LA SIGUIENTE VOCAL EN ORDEN ALFABÉTICO (CIRCULAR), ASÍ LA “A” SE REEMPLAZA POR “E” Y LA “U” SE REEMPLAZA POR “A”. CODIFIQUE UNA PALABRA EN MAYÚSCULAS DADA COMO ENTRADA USANDO EL PROCEDIMIENTO ANTES MOSTRADO ENTRADA EJEMPLO: SEGURIDAD SALIDA EJEMPLO: SIGARODED

#6 // PALABRA INVERSA

A UNA PALABRA DE ENTRADA, INVERTIRLE CADA UNA DE SUS LETRAS DE LA PRIMERA A LA ÚLTIMA. ENTRADA EJEMPLO: SEGURIDAD SALIDA EJEMPLO: DADIRUGES #7 // PALINDROMO

UN PALINDROMO ES UNA PALABRA QUE AL ESCRIBIRLA AL DERECHO Ó AL REVÉS ES IGUAL. HACER UN PROGRAMA QUE INDIQUE SI UNA PALABRA ES Ó NO UN PALINDROMO. ENTRADA EJEMPLO: BOB SALIDA EJEMPLO: SI ES UN PALINDROMO ENTRADA EJEMPLO: SOL SALIDA EJEMPLO: NO ES UN PALINDROMO ENTRADA EJEMPLO: ANITALAVALATINA SALIDA EJEMPLO: SI ES UN PALINDROMO

#8 // UNIDADES DE LONGITUD

REALICE UN PROGRAMA QUE PERMITA CONVERTIR METROS, PULGADAS, PIES Y YARDAS ENTRE SI. EJEMPLO DE PROGRAMA:

- 33 -

APENDICE 1 soluciones a ejercicios de aplicación

SOLUCIÓN #1 // TIEMPO PARA RECORRER

#include <iostream>

using namespace std;

main()

{

double distancia,velocidad;

int horas;

double minutos;

cout << "Ingrese la distancia a Recorrer en Km: ";

cin >> distancia;

cout << "Ingrese la velocidad del vehiculo en Km/h: ";

cin >> velocidad;

horas=distancia/velocidad;//redondeo las horas por el formato INTEGER

minutos=(distancia/velocidad)-horas; //Obtengo solamente los DECIMALES.

minutos=minutos*60; //Cambio el formato a minutos reales

cout << "El tiempo que tardara es: " << horas << ":" << minutos<<endl;

return 0;

}

SOLUCIÓN #2 // PROMEDIO

#include <iostream>

using namespace std;

main()

{

double valor1,valor2,valor3;

double promedio1,promedio2,promedio3;

cout << "Ingrese tres numeros: ";

cin >> valor1 >> valor2 >> valor3;

promedio1=(valor1+valor2)/2;

promedio2=(valor2+valor3)/2;

promedio3=(valor1+valor3)/2;

if (valor1==promedio2)

cout << promedio2;

else

{

if(valor2==promedio3)

cout << promedio3;

else

{

if(valor3==promedio1)

cout << promedio1;

else

cout << "NINGUNO"<<endl;

}

}

return 0;

}

- 34 -

SOLUCIÓN #3 // SUMA DE VALORES ABSOLUTOS

#include <iostream>

using namespace std;

int main()

{

int valor1,valor2,valor3,valor4;

cout << "Ingrese los 4 valores: ";

cin >> valor1 >> valor2 >> valor3 >> valor4;

if (valor2<0) valor2=valor2*-1;

if (valor3<0) valor3=valor3*-1;

if (valor4<0) valor4=valor4*-1;

cout << valor2+valor3+valor4<<endl;

return 0;

}

SOLUCIÓN #4 // CAMBIO DE TIPOS

#include <iostream>

using namespace std;

main()

{

int i;

char palabra[20];

cout << "Ingrese una Palabra: ";

cin >> palabra;

for (i=0; i < 21; i++)

{

if ((palabra[i]>96)&&(palabra[i]<123)) //para minusculas

palabra[i]=palabra[i]-32;

else if ((palabra[i]>64)&&(palabra[i]<91)) //para MAYUSCULAS

palabra[i]=palabra[i]+32;

}

cout << palabra <<endl;

return 0;

}

- 35 -

SOLUCIÓN #5 // SEGURIDAD POR VOCAL

//solo mayusculas

#include <iostream>

using namespace std;

main()

{

int i;

char palabra[20];

cout << "Ingrese una Palabra: ";

cin >> palabra;

for (i=0; i < 21; i++)

{

switch (palabra[i])

{

case ('A'):

palabra[i]='E';

break;

case ('E'):

palabra[i]='I';

break;

case ('I'):

palabra[i]='O';

break;

case ('O'):

palabra[i]='U';

break;

case ('U'):

palabra[i]='A';

break;

}

}

cout << palabra <<endl;

return 0;

}

- 36 -

SOLUCIÓN #6 // PALABRA INVERSA

#include <iostream>

using namespace std;

main()

{

int i,cantidad=0;

char palabra[20],palabra2[20];

//Iniciar los dos arreglos en cero ó "vacios"

for (i=0; i < 21; i++)

{

palabra[i] =0;

palabra2[i] =0;

}

//El usuario ingresa la palabra a invertir

cout << "Ingrese una Palabra: ";

cin >> palabra;

//Este for con este if determina la cantidad de letras de la palabra

for (i=0; i < 21; i++)

{

if ((palabra[i]>64)&&(palabra[i]<123))

cantidad++;

}

//Este iguala las palabras

for (i=0; i <= cantidad; i++)

{

palabra2[i]=palabra[i];

}

//se intercambian letras

int valor;

valor = cantidad-1;

for (i=0; i < cantidad; i++)

{

palabra2[valor]=palabra[i];

valor--;

}

cout<<palabra<<" y "<<palabra2<<endl;

return 0;

}

- 37 -

SOLUCIÓN #7 // PALINDROMO

#include <iostream>

using namespace std;

main()

{

int i,cantidad;

char palabra[20],palindromo[20];

//Iniciar los dos arreglos en cero ó "vacios"

for (i=0; i < 21; i++)

{

palabra[i] =0;

palindromo[i] =0;

}

//El usuario ingresa la palalabra

cout << "Ingrese una Palabra: ";

cin >> palabra;

cantidad=0;

//Este for con este if determina la cantidad de letras de la palabra

for (i=0; i < 21; i++)

{

if ((palabra[i]>64)&&(palabra[i]<123))

cantidad++;

}

//Este iguala las palabras

for (i=0; i <= cantidad; i++)

{

palindromo[i]=palabra[i];

}

//se intercambian letras

int valor;

valor=cantidad-1;

for (i=0; i < cantidad; i++)

{

palindromo[valor]=palabra[i];

valor--;

}

cout<<palabra<<" y "<<palindromo<<endl;

//se determina si es palíndromo

int ok;

ok=0;

for (i=0; i < cantidad; i++)

{

if(palindromo[i]==palabra[i])

ok++;

}

if (ok==cantidad)

cout <<"SI ES UN PALINDROMO"<<endl;

else

cout <<"NO ES UN PALINDROMO"<<endl;

return 0;

}

- 38 -

SOLUCIÓN #8 // UNIDADES DE LONGITUD

#include <iostream>

using namespace std;

main()

{

char code;

double metros,pulgas,pies,yarda;

cout<<"UNIDAD CODIGO"<<endl<<endl;

cout<<"Metros 1"<<endl;

cout<<"Pulgadas 2"<<endl;

cout<<"Pies 3"<<endl;

cout<<"Yardas 4"<<endl<<endl;

cout<<"Ingrese la Codigo de Unidades: ";

cin>>code;

switch(code)

{

case '1':

cout<<"Ingrese El numero de Metros: ";

cin>>metros;

pulgas=metros*39.37;

pies=metros*3.28;

yarda=metros*1.093;

cout << metros <<" Metros Equivale a:" << endl<< endl;

cout << pulgas <<" Pulgadas" << endl;

cout << pies <<" Pies" << endl;

cout << yarda <<" Yardas" << endl;

break;

case '2':

cout<<"Ingrese El numero de Pulgadas: ";

cin>>pulgas;

metros=pulgas*0.0254;

pies=pulgas*0.083;

yarda=pulgas*0.027;

cout << pulgas <<" Pulgadas Equivale a:" << endl<< endl;

cout << metros <<" Metros" << endl;

cout << pies <<" Pies" << endl;

cout << yarda <<" Yardas" << endl;

break;

case '3':

cout<<"Ingrese El numero de Pies: ";

cin>>pies;

metros=pies*0.3048;

pulgas=pies*12;

yarda=pies*0.333;

cout << pies <<" Pies Equivale a:" << endl<< endl;

cout << metros <<" Metros" << endl;

cout << pulgas <<" Pulgadas" << endl;

cout << yarda <<" Yardas" << endl;

break;

case '4':

cout<<"Ingrese El numero de Yardas: ";

cin>>yarda;

metros=yarda*0.9144;

pulgas=yarda*36;

pies=yarda*3;

cout << yarda <<" Yardas Equivale a:" << endl<< endl;

cout << metros <<" Metros" << endl;

cout << pulgas <<" Pulgadas" << endl;

cout << pies <<" Pies" << endl;

break;

default:

cout<<"ERROR"<<endl;

}

return 0;

}