Programación Estructurada Codificada Unidad 1 ... · Programación Estructurada Codificada 1...

20
Programación Estructurada Codificada 1 Aurelio López Ovando http://aureliux.wordpress.com Unidad 1 Introducción a la programación I Componentes de programación Algoritmo Un algoritmo se puede ver como cualquier procedimiento computacional bien definido el cual toma uno o varios valores de entrada y produce uno o varios valores de salida. o Propiedades a) Carácter finito. "Un algoritmo siempre debe terminar después de un número finito de pasos". b) Precisión. "Cada paso de un algoritmo debe estar precisamente definido; las operaciones a llevar a cabo deben ser especificadas de manera rigurosa y no ambigua para cada caso". c) Entrada. "Un algoritmo tiene cero o más entradas: cantidades que le son dadas antes de que el algoritmo comience, o dinámicamente mientras el algoritmo se ejecuta. Estas entradas son tomadas de conjuntos específicos de objetos". d) Salida. "Un algoritmo tiene una o más salidas: cantidades que tienen una relación específica con las entradas". e) Eficacia. "También se espera que un algoritmo sea eficaz, en el sentido de que todas las operaciones a realizar en un algoritmo deben ser suficientemente básicas como para que en principio puedan ser hechas de manera exacta y en un tiempo finito por un hombre usando lápiz y papel". o Historia En 1834 Charles Babbage concibió de forma mecánica el concepto de un algoritmo mediante su “Máquina Analítica”, esta máquina sería programable mediante tarjetas perforadas, cada tarjeta representaría un paso en la solución de un problema, de tal manera que el conjunto de tarjetas para resolver dicho problema representaría un algoritmo computacional. El concepto matemático formal de algoritmo, fue formulado hasta 1930, antes de la llegada de las computadoras. La mayor influencia sobre el desarrollo de las teorías algorítmicas vino del matemático inglés Alan Turing, quien describió un modelo llamado la Máquina de Turing, en el cual estableció el mecanismo mediante el cual las computadoras podrían resolver problemas matemáticos. Además de esto, también describió de forma teórica el paradigma de los programas almacenados, el cual representa la base para las computadoras de propósito general de hoy en día, sin embargo, John von Neumann fue quien demostró formalmente la practicidad de introducir las instrucciones y los datos que estas procesan en la memoria de una computadora. o ¿Para qué y por qué? Los problemas alguna vez imposibles hoy se pueden resolver mediante el uso de los algoritmos correctos, ejemplo de esto son la robótica y la inteligencia artificial que implica, el cómputo gráfico, la solución a grandes problemas mediante sistemas computacionales, incluso la comunicación mediante redes implica el uso de los algoritmos correctos. Se requiere saber analizar los problemas para poder identificar el algoritmo correcto en cada situación, ya que la mayoría de las veces podremos resolver el problema de más de una forma; si podemos analizar estos algoritmos, podremos mejorarlos y en el mejor de los casos elegir el que resuelva nuestro problema. o Ejemplo 1: Un virus informático llamado “AcertijoMathse adueñaba de las computadoras de una empresa mostrando un molesto mensaje en pantalla que decía:

Transcript of Programación Estructurada Codificada Unidad 1 ... · Programación Estructurada Codificada 1...

Programación Estructurada Codificada

1 Aurelio López Ovando http://aureliux.wordpress.com

Unidad 1 Introducción a la programación

I Componentes de programación

Algoritmo

Un algoritmo se puede ver como cualquier procedimiento computacional bien definido el

cual toma uno o varios valores de entrada y produce uno o varios valores de salida.

o Propiedades

a) Carácter finito. "Un algoritmo siempre debe terminar después de un número finito de pasos".

b) Precisión. "Cada paso de un algoritmo debe estar precisamente definido; las operaciones a llevar a cabo

deben ser especificadas de manera rigurosa y no ambigua para cada caso".

c) Entrada. "Un algoritmo tiene cero o más entradas: cantidades que le son dadas antes de que el algoritmo

comience, o dinámicamente mientras el algoritmo se ejecuta. Estas entradas son tomadas de conjuntos

específicos de objetos".

d) Salida. "Un algoritmo tiene una o más salidas: cantidades que tienen una relación específica con las

entradas".

e) Eficacia. "También se espera que un algoritmo sea eficaz, en el sentido de que todas las operaciones a

realizar en un algoritmo deben ser suficientemente básicas como para que en principio puedan ser hechas

de manera exacta y en un tiempo finito por un hombre usando lápiz y papel".

o Historia

En 1834 Charles Babbage concibió de forma mecánica el concepto de un algoritmo mediante su “Máquina

Analítica”, esta máquina sería programable mediante tarjetas perforadas, cada tarjeta representaría un paso en la

solución de un problema, de tal manera que el conjunto de tarjetas para resolver dicho problema representaría un

algoritmo computacional. El concepto matemático formal de algoritmo, fue formulado hasta 1930, antes de la

llegada de las computadoras. La mayor influencia sobre el desarrollo de las teorías algorítmicas vino del

matemático inglés Alan Turing, quien describió un modelo llamado la Máquina de Turing, en el cual estableció el

mecanismo mediante el cual las computadoras podrían resolver problemas matemáticos. Además de esto, también

describió de forma teórica el paradigma de los programas almacenados, el cual representa la base para las

computadoras de propósito general de hoy en día, sin embargo, John von Neumann fue quien demostró

formalmente la practicidad de introducir las instrucciones y los datos que estas procesan en la memoria de una

computadora.

o ¿Para qué y por qué?

Los problemas alguna vez imposibles hoy se pueden resolver mediante el uso de los algoritmos

correctos, ejemplo de esto son la robótica y la inteligencia artificial que implica, el cómputo gráfico, la

solución a grandes problemas mediante sistemas computacionales, incluso la comunicación mediante

redes implica el uso de los algoritmos correctos.

Se requiere saber analizar los problemas para poder identificar el algoritmo correcto en cada situación,

ya que la mayoría de las veces podremos resolver el problema de más de una forma; si podemos analizar estos

algoritmos, podremos mejorarlos y en el mejor de los casos elegir el que resuelva nuestro problema.

o Ejemplo 1:

Un virus informático llamado “AcertijoMath” se adueñaba de las computadoras de una empresa mostrando un

molesto mensaje en pantalla que decía:

Programación Estructurada Codificada

2 Aurelio López Ovando http://aureliux.wordpress.com

Llamaron al analista de sistemas de la empresa y le pidieron que desarrolle un algoritmo que resuelva el problema

para evitar que la información se pierda.

El analista revisó el problema y tras pensar un poco llegó a la siguiente conclusión:

Suponiendo que X=clave numérica, podemos establecer una ecuación algebraica para representar el caso y

plantear una solución.

Entonces la ecuación nos queda x + x + 1/2x + 1/4x + 1 = 100

x + x + 1/2x + 1/4x = 100 – 1

2x + 1/2x + 1/4x = 99

2x + 3/4x = 99

11/4x = 99

11x = 99 x 4

11x = 396

x = 396 / 11

x = 36

La clave para evitar que el disco duro se formatee es 36.

El principal error de la mayoría de los programadores es pensar que todo esté en su mente resuelto y

empezar a programar sin diseñar algoritmos que plateen soluciones confiables, pensando que los

algoritmos son pérdida de tiempo y no valen la pena…, tarde o temprano se encuentran situaciones que no

se esperaban y por lo mismo no saben como resolverlas dando a pie a programas poco confiables o que no

resuelven los problemas.

Existen dos tipos de algoritmos principalmente utilizados en la programación, el primero es el diagrama de flujo en

el cual mediante el uso de símbolos se muestra la secuencia de pasos para solucionar un problema, y el segundo es

el seudocódigo que es lo más cercano a los lenguajes de programación.

Diagrama de flujo

El Diagrama de Flujo es una representación gráfica de la secuencia de pasos que se realizan para llegar a resultado,

este puede ser un producto, un servicio, o bien una combinación de ambos.

“Tu computadora será formateada…, tienes 7 minutos para evitarlo deberás teclear la clave que detiene el

virus, la clave es un número al cual si le sumo la misma cantidad, mas la mitad, mas la cuarta parte mas 1 suma

100”… Iniciando cuenta regresiva…

x + x (La clave es un número al cual si le sumamos la misma cantidad…)

1/2x (… mas la mitad) = 100

1/4x (… mas la cuarta parte)

1 (… mas 1) (Toda esta suma es igual a 100)

Programación Estructurada Codificada

3 Aurelio López Ovando http://aureliux.wordpress.com

o Características principales

a) Capacidad de comunicación: Permite la puesta en común de conocimientos individuales sobre un proceso,

y facilita la mejor comprensión global del mismo.

b) Claridad Proporciona información sobre los procesos de forma clara, ordenada y concisa.

o Símbolología

Imágenes o figuras con la que se representa

los procesos. Algunos de los símbolos son:

Seudocódigo

Es una secuencia de instrucciones parecidas el lenguaje humano y aplicable a cualquier lenguaje de programación

en la que se plantean soluciones a determinadas situaciones programables.

Ejemplo 2: Se necesita una rutina que muestre como se obtiene la potencia de un número.

Los diagramas de flujo pueden ser traducidos a

seudocódigo y viceversa, sin embargo lo más

recomendables es que al tener planteada una

solución confiable con cualquier algoritmo, este sea

traducido directamente a un lenguaje de

programación.

Terminal: Marca el inicio y final de un diagrama.

Proceso: Realiza alguna actividad.

Definición: Realiza alguna actividad predefinida.

Decisión: Análisis de situación y toma de decisiones.

Documentación

Archivo

Conector entre partes de un diagrama.

Flujo

i desde 1 hasta x

residuo residuo * y

Entero residuo, x,y

y

X=0

x

La potencia es 1

La potencia es residuo

Inicio entero residuo, x, y, i; Leer y Leer x si (x == 0) Escribir "La potencia es 1" De lo contrario residuo y for i = desde 0 hasta x residuo residuo * y fin for Escribir "La potencia es " residuo Fin si Fin

si no

Programación Estructurada Codificada

4 Aurelio López Ovando http://aureliux.wordpress.com

Ejercicios 1:

Realiza para cada problema (del A al C) su diagrama de flujo y su seudocódigo correspondiente que plantee una

solución a los problemas:

A) Se necesita saber el promedio de un alumno en una materia en la que se califican tres cosas:

Examen escrito.

Entrega de proyecto.

Participación en clase. Se debe pedir el valor correspondiente a cada calificación y dar como salida el promedio de estas calificaciones.

B) En un casa de apuestas los jugadores tienen bonos los cuales pueden apostar, cada bono se cotiza en $10,000, en una jornada participan 5 jugadores, cada uno de ellos puede apostar una determinada cantidad de bonos, al finalizar la jornada se debe saber quien de ellos apostó mas y quien apostó menos. Como dato de entrada se pide el número de bonos que apuesta cada jugador.

C) Los usuarios de una página web, al momento de registrarse, se les pide registrar también una clave numérica para poder ingresar posteriormente a la página. La clave de acceso debe tener exactamente tres cifras. Hacer un programa que valide que la clave que teclea el usuario realmente tenga tres cifras, si el número tecleado no es de tres cifras marcar el error y volver a pedirlo hasta que tenga tres cifras.

D) ¿Encuentra el número debe reemplazar al signo de interrogación y explica porque crees que es ese

número?

6, 9, 19, 73 9, 6, 13, 67 7, 8, ?, 71

E) ¿Cuál es la respuesta si, de los números de abajo, multiplicas por cinco el número de números pares que

tienen un número impar junto a su derecha?

4 7 8 5 3 1 9 7 8 4 4 7 8 9 2 3

Programación Estructurada Codificada

5 Aurelio López Ovando http://aureliux.wordpress.com

II Introducción a C++

C++ es un lenguaje de programación orientado a objetos inventado a principios de los años 80 por Bjarne

Stroustrup en los laboratorios de AT&T en Nueva Jersey (EE.UU.), famosos por ser donde trabajaban los inventores

del lenguaje C y del sistema operativo UNIX, Dennis Ritchie y Brian Kernighan. La idea original de Stroustrup era

desarrollar un lenguaje para uso interno en el laboratorio, que fuera una mejora al C, una especie de “C con clases”.

Debido a ello, C++ incorporó características de diversos lenguajes como Ada, Simula67 o Algol68. Sin embargo, el

lenguaje no se redujo a estas incorporaciones, y además de conservar la versatilidad y potencia de C, ha crecido

con las necesidades de sus usuarios hasta convertirse en uno de los lenguajes de programación más utilizados en la

actualidad. En general, podemos decir que C++ es un lenguaje de programación de propósito general con cierta

desviación hacia la programación de sistemas.

La herencia de C es vista por muchos puristas como una debilidad del lenguaje. Sin embargo, el hecho de que C++

conserve una compatibilidad total con C, le dota de una potencia que no tienen otros lenguajes orientados a

objetos como Java o Smalltalk, y además no fuerza ningún estilo de programación.

Código fuente.

Los programas en C++ se escriben con la ayuda de un editor de textos del mismo modo que cualquier texto

corriente, los archivos que contiene programas en C++ en forma de texto se conocen como archivos fuente y tienen

la extensión “.cpp”, el texto del programa que contiene se conoce como código fuente.

Código objeto y compilación

Los archivos fuente no pueden ejecutarse porque es texto pensados para que los comprendan los seres humanos,

pero incomprensibles para las computadoras, esto genera la necesidad de traducirlo a un lenguaje que sea

reconocido por la computadora. A esta traducción le llamaremos compilación, consiste en obtener un archivo

equivalente a nuestro archivo fuente comprensible para la computadora, este archivo se conoce como fichero

objeto, y su contenido como código objeto.

Figura 2.1 El programador escribe un archivo de texto llamado archivo fuente con código entendible para las personas y que tiene la extensión .cpp

Figura 2.2 El código fuente no es entendido por la computadora, asi que se debe traducir a un lenguaje binario que pueda ser leído por la computadora

Programación Estructurada Codificada

6 Aurelio López Ovando http://aureliux.wordpress.com

El código objeto no tiene ningún significado para los seres humanos, al menos no directamente, además es

diferente para cada computadora y para cada sistema operativo, por lo tanto existen diferentes compiladores para

diferentes sistemas operativos y para cada tipo de procesador.

Archivos ejecutables y enlazadores

Cuando obtenemos el archivo objeto, aún no hemos terminado el proceso, el archivo objeto, a pesar de ser

comprensible para el ordenador, no puede ser ejecutado. Nuestros programas usaran, en general, funciones que

estarán incluidas en archivos externos de manera que se deben combinar todos estos archivos, aparte el

procesador debe cargar en memoria el programa y los datos así que falta organizar la memoria de modo que se

disponga de una pila de tamaño adecuado. Existe un programa que hace todas estas cosas, se trata del "link", o

enlazador el cual se encarga de rellenar todos los huecos que aún pudieran existir de la traducción. Una vez

terminada la fase de enlazado, ya podremos ejecutar nuestro programa.

Errores Somos humanos y nos equivocamos, en la etapa para obtener un programa ejecutable detectan los errores los

cuales pueden clasificarse en varios tipos, dependiendo de la fase en que se presenten.

o Errores de sintaxis: Son errores en el archivo fuente, pueden deberse a palabras mal escritas, expresiones

erróneas o incompletas, variables que no existen, etc. Se detectan en la fase de compilación, si el

compilador detecta errores de sintaxis nos dará una lista de ellos, si hay errores no es posible generar el

código objeto.

o Avisos: Además de errores, el compilador puede dar también avisos (warnings), los avisos son errores, pero

no lo suficientemente graves como para impedir la generación del código objeto. No obstante, es

importante corregirlos ya que el compilador tiene que decidir entre varias opciones, y sus decisiones no

tienen por qué coincidir con lo que nosotros pretendemos, se basan en las directivas que los creadores del

compilador decidieron durante su creación.

o Errores de enlazado: El programa enlazador también puede encontrar errores, normalmente se refieren a

funciones que no están definidas en ninguno de las archivos objetos ni en las librerías. Puede que hayamos

Figura 2.3 La compilación del archivo fuente genera un archivo objeto el cual es reconocido por la computadora

Figura 2.4 El Linker hace el trabajo final para poder obtener un programa ejecutable

Programación Estructurada Codificada

7 Aurelio López Ovando http://aureliux.wordpress.com

olvidado incluir alguna librería, o algún archivo objeto, o puede que hayamos olvidado definir alguna

función o variable, o lo hayamos hecho mal.

o Errores de ejecución: Incluso después de obtener un archivo ejecutable, es posible que se produzcan

errores. En el caso de los errores de ejecución normalmente no obtendremos mensajes de error, sino que

simplemente el programa terminará bruscamente, estos errores son más difíciles de detectar y corregir,

existen programas auxiliares para buscar estos errores, son los llamados depuradores (debuggers), estos

programas permiten detener la ejecución de nuestros programas, inspeccionar variables y ejecutar nuestro

programa paso a paso, esto resulta útil para detectar excepciones, errores sutiles, y fallos que se presentan

dependiendo de circunstancias distintas.

o Errores de diseño o de lógica: Finalmente los errores más difíciles de corregir y prevenir. Si nos hemos

equivocado al diseñar nuestro algoritmo, no habrá ningún programa que nos pueda ayudar a corregir los

nuestros. Contra estos errores sólo cabe practicar y pensar.

Ejercicios 2:

Contesta las siguientes preguntas:

A) ¿Cuál crees que se la diferencia entre un programa y un algoritmo?

B) ¿Qué es un lenguaje de programación?

C) ¿Qué lenguaje reconoce la computadora?

D) ¿Cuál es la diferencia entre un archivo fuente, un archivo objeto y uno ejecutable?

E) ¿Cuál es la diferencia entre un compilador y un intérprete?

F) ¿C++ es compilado o interpretado?

G) Si en un proceso hago la siguiente instrucción para calcular el área de un triangulo:

A = b * h/2

¿Qué tipo de error es?

Programación Estructurada Codificada

8 Aurelio López Ovando http://aureliux.wordpress.com

II Programación en C++

Desde los tiempos en que Kernighan y Ritchie publicaron su famoso “The C Programming Language”, es tradicional

que todos los libros y cursos de programación comiencen con su versión del programa “Hola Mundo”, pero antes

de adentrarnos en esos detalles, vamos a mencionar la principal y más reciente incorporación de C++.

La Biblioteca Estándar de C++ STL, (Standard Template Library)

La biblioteca o librería estándar de C++, conocida como STL (Standard Template Library) es una adición

relativamente reciente al C++ (Data de su último proceso de estandarización en 1998). Tras la introducción de la

STL, C++ ha alcanzado una gran madurez, ya que facilita al programador un conjunto de tipos de datos y algoritmos

de gran potencia.

o Codificación

Con este programa mostramos la estructura mínima que debe tener un programa. Tenemos en el siguiente

ejemplo un programa básico que solamente tiene la declaración de bibliotecas y el cuerpo principal del programa.

.

El editor que se muestra en la figura es Dev C++, es un editor que incluye un compilador y lo mejor de todo es que

es Freeware o sea que se puede conseguir gratis desde internet gratuitamente, nos permite programar

aplicaciones de consola o Windows.

Consta de un sistema de menús y barras de herramientas, para poder compilar y ejecutar un programa podemos

utilizar combinaciones de teclas o las herramientas que están en la parte superior, son unos íconos como estos:

Bibliotecas o archivos de cabecera Cuerpo principal del programa

Programación Estructurada Codificada

9 Aurelio López Ovando http://aureliux.wordpress.com

Compilar Busca errores, o bien presiona ctrl. + f9

Ejecutar Ejecuta el programa si no tiene errores, puedes presionar ctrl. + f10

Compilar y

ejecutar Primero compila y luego ejecuta el programa, puedes presionar f9

o Visión general del lenguaje

Cada programa ejecutable de C++ debe tener una función main, el programa comienza ejecutando esta

función, el valor entero (int) devuelto por main es capturado por el sistema operativo, si no se devuelve

ningún valor o se devuelve 0, el sistema interpreta que el programa se ha ejecutado con éxito.

Las llaves { ... } indican agrupamiento de segmentos de código, cada llave abierta debe tener su

correspondiente llave cerrada.

La línea #include <archivo> indica al compilador que incluya la biblioteca, denominados también archivos

de encabezado (bibliotecas), que incluyen las declaraciones de funciones predefinidas, en C++ la biblioteca

estándar no suele incluir extensión en los nombres de los archivos, aunque es tradicional que los archivos

creados por el usuario sí la lleven, el nombre de la biblioteca está rodeado de los signos <...>.

Cada sentencia es terminada por un punto y coma ";"

Se hace distinción entre mayúsculas y minúsculas, así que si tenemos una variable que se llame “Alumno”

no es lo mismo que “alumno”.

El primer carácter de una variable no puede ser un número y el resto sólo acepta letras, números y guión

bajo, no se acepta la “ñ” ni caracteres especiales como vocales con acentos, @, #,/ etc.

Es importante documentar el código fuente, // indican un comentario hasta el final de la línea; los

comentarios multi-línea se marcan con /* .... */.

1. Programa que muestre en pantalla un saludo de bienvenida el curso de programación

Incluimos la biblioteca estándar la cual nos sirve para introducir

datos al programa y mostrar resultados en pantalla.

En este caso, std define el espacio de nombres (namespace) de

esta biblioteca, los namespaces son una técnica de C++ para

agrupar interfaces y elementos con ciertos aspectos comunes.

En la función principal escribimos dos líneas de código utilizando cout y system. Si compilamos y ejecutamos el

programa tendremos un resultado como este:

Los archivos generados serían estos: un archivo fuente

(bienvenida.cpp) y un archivo ejecutable

(bienvenida.exe)

#include<iostream>

using namespace std;

int main()

{

cout<<"Hola bienvenido al curso de C++"<<endl;

system("PAUSE");

}

Programación Estructurada Codificada

10 Aurelio López Ovando http://aureliux.wordpress.com

o La salida por pantalla Como ya hemos visto en nuestro primer ejemplo, la salida por pantalla o consola se realiza a través del elemento

“cout” el cual convierte cualquier parámetro que se le envíe en una cadena apta para ser visualizada en la pantalla.

2.- Modificando el ejemplo anterior agregamos otras líneas de código que se mostrarán en pantalla.

Cada línea en la que utilizamos “cout” es mostrada en

la consola de salida, la palabra cout es abreviación de

“console output” que significa algo así como “salida en

consola”.

system(“pause”)

System es una instrucción que hace un llamado a algún comando de MS-DOS, en este caso llama al

comando “pause” el cual se encarga de detener el programa hasta que presione una tecla, esto con el fin de

que el programa no corra tan rápido y no nos de tiempo de ver correctamente lo que se ha programado.

endl Se lee “end line” y eso es precisamente lo que significa un” fin de línea”, cuando el compilador encuentra un

endl lo que hace es que en ese momento coloca un salto de línea y retorno de carro, es decir es como

cuando en Word presionamos “enter” que el cursor se pasa a la siguiente línea y regresa el principio de la

misma.

3.- Modificamos nuevamente el programa y veremos como queda sin utilizar endl.

Cuando no utilizamos endl el cursor continua en la

misma línea.

No existe una regla de cuando se deba utilizar endl,

esto queda a criterio del programador cuando

necesite hacerlo y cuando no.

Es como cuando escribes un documento en Word y

tienes la necesidad de dar un enter.

#include<iostream>

using namespace std;

int main()

{

cout<<"Hola bienvenido al curso de C++"<<endl;

cout<<"Estamos en el CONALEP plantel Dzitbalche"<<endl;

cout<<"Hoy aprendreremos a utilizar cout"<<endl;

system("PAUSE");

}

#include<iostream>

using namespace std;

int main()

{

cout<<"Hola bienvenido al curso de C++";

cout<<"Estamos en el CONALEP plantel Dzitbalche"<<endl;

cout<<"Hoy aprendreremos a utilizar cout"<<endl;

system("PAUSE");

}

Programación Estructurada Codificada

11 Aurelio López Ovando http://aureliux.wordpress.com

Variables Una variable es un espacio reservado en el procesador para contener valores que pueden cambiar durante la

ejecución de un programa, los tipos determinan cómo se manipulará la información contenida en esas variables. El

tipo nos dice a nosotros y al compilador cómo debe interpretarse y manipularse la información almacenada en la

memoria.

o Tipos de datos

"char" o carácter: En C++ este tipo siempre contiene un único carácter del código ASCII.

Tipo "int" o entero: Las variables enteras almacenan números enteros dentro de los límites de su tamaño, a su vez, ese tamaño

depende de la plataforma del compilador, y del número de bits que use por palabra de memoria: 8, 16,

32... No hay reglas fijas para saber el mayor número que podemos almacenar en cada tipo: int, long int o

short int; depende en gran medida del compilador y del procesador. Sólo podemos estar seguros de que

ese número en short int es menor o igual que en int, y éste a su vez es menor o igual que en long int y que

long long int es mayor o igual a long int.

Tipo "float" o coma flotante: Las variables de este tipo almacenan números con decimales, son aptos para variables de tipo real, o para

números muy grandes, como la producción mundial de trigo, contada en granos. El fuerte de estos

números no es la precisión, sino el orden de magnitud, es decir lo grande o pequeño que es el número que

contiene.

Tipo "bool" o Booleana: Las variables de este tipo sólo pueden tomar dos valores "true" o "false", sirven para evaluar expresiones

lógicas.

Tipo "double" o coma flotante de doble precisión: Las variables de este tipo almacenan números en formato de punto decimal, mantisa y exponente, al igual

que float, pero usan mayor precisión, usaremos estas variables cuando trabajemos con números grandes,

pero también necesitemos gran precisión. ¿Por qué no usar siempre double o long double y olvidarnos de

float? porque C siempre ha estado orientado a la economía de recursos, tanto en cuanto al uso de memoria

como al uso de procesador. Si tu problema no requiere la precisión de un double o long double, ¿Por qué

derrochar recursos? C++ nos dan un gran control sobre estas características, es nuestra responsabilidad

aprender a usarlos como es debido.

Tipo "void" o sin tipo:

Es un tipo especial que indica la ausencia de tipo, se usa en funciones que no devuelven ningún valor, las

funciones que no devuelven valores simplemente hacen su trabajo, y no devuelven valores.

Necesito guardar el

nombre, la edad y el

promedio de un

alumno ¿Qué tipos

de datos debo

utilizar?

Programación Estructurada Codificada

12 Aurelio López Ovando http://aureliux.wordpress.com

4.- Programa muestre la suma de dos números. Declaramos 3 variables de tipo entero. Las inicializamos con valores Realizamos la suma Mostramos el resultado

En este ejemplo vemos el uso de operadores.

Operadores Son elementos que disparan ciertos cálculos cuando son aplicados a variables o a otros objetos en una expresión.

Expresión: es cualquier conjunto de operadores y operandos, que dan como resultado una cantidad.

Operando: cada una de las cantidades, constantes, variables o expresiones que intervienen en una

expresión.

Existe una división en los operadores atendiendo al número de operandos que afectan.

Según esta clasificación pueden ser unitarios, binarios o ternarios, los primeros afectan a un solo operando, los

segundos a dos y los ternarios a tres.

Tipos de operadores o Operadores aritméticos

Son usados para crear expresiones matemáticas, que admiten enteros y de punto flotante.

Evidentemente se trata de las conocidísimas operaciones aritméticas de suma, resta, multiplicación y división,

el operador de módulo '%', devuelve el resto de la división entera del primer operando entre el segundo. Por

esta razón no puede ser aplicado a operandos en punto flotante.

o Operadores de asignación Existen varios operadores de asignación, el más evidente y el más usado es el "=", pero no es el único, aquí hay

una lista: "=", "*=", "/=", "%=", "+=", "-=", "<<=", ">>=", "&=", " ^=" y "|=".

Y la sintaxis es:

<variable> <operador de asignación> <expresión>

En general, el funcionamiento es siempre el mismo, primero se evalúa la expresión de la derecha, se aplica el

operador mixto, si existe y se asigna el valor obtenido a la variable de la izquierda.

+ SUMA

- RESTA * MULTIPLICACION

/ DIVISIÓN ENTERA

% RESIDUO DE LA DIVISIÓN (MODULO)

#include<iostream> using namespace std; int main() { int n1,n2,suma; n1=10; n2=5; suma=n1+n2; cout<<"La suma es: "<< suma<<endl; system("PAUSE"); }

n1=10, n2=5, suma

suma=n1+n2

suma

Programación Estructurada Codificada

13 Aurelio López Ovando http://aureliux.wordpress.com

o Operadores de igualdad Se utiliza para hacer comparaciones mediante ==, si nos equivocamos al escribir estas expresiones, y ponemos

sólo un signo '=', podemos obtener un error del compilador, ya que estaremos intentando cambiar un valor, lo

cual podría no ser posible, en otro caso, el valor de alguna variable cambiaría, y el resultado de evaluar la

expresión no dependerá de una comparación, sino de una asignación, y siempre será "true", salvo que el valor

asignado sea 0.

o Operadores lógicos Los operadores "&&", "||" y "!" relacionan expresiones lógicas, formando a su vez nuevas expresiones lógicas.

El operador "&&" equivale al "AND" o "Y"; devuelve "true" sólo si las dos expresiones evaluadas son "true" o

distintas de cero, en caso contrario devuelve "false" o cero. Si la primera expresión evaluada es "false", la

segunda no se evalúa. Generalizando, con expresiones AND con más de dos expresiones, la primera expresión

falsa interrumpe el proceso e impide que se continúe la evaluación del resto de las expresiones. Esto es lo que

se conoce como "cortocircuito".

El operador "||" equivale al "OR" u "O inclusivo"; devuelve "true" si cualquiera de las expresiones evaluadas es

"true" o distinta de cero, en caso contrario devuelve "false" o cero. Si la primera expresión evaluada es "true",

la segunda no se evalúa. El operador "!" es equivalente al "NOT", o "NO", y devuelve "true" sólo si la expresión

evaluada es "false" o cero, en caso contrario devuelve "false".

o Operadores relacionales Sirven para comparar, los operadores son:

> mayor que

< menor que

>= mayor o igual que

<= menor o igual que

Entrada por teclado Las clases “iostream” proporcionan la habilidad de leer datos desde el teclado, el objeto usado para la entrada

estándar es “cin” abreviación de “console input”, cin normalmente espera la entrada de la consola, pero esta

entrada se puede redirigir desde otras fuentes, el operador que usa iostream con el objeto cin es” >>”. Este

operador espera como parámetro algún tipo de entrada.

5.- Modificando el programa anterior demos como datos de entrada los valores de los números que se van a sumar.

Los valores de las variables ahora son dados como datos de entrada desde el teclado con cin.

#include<iostream> using namespace std; int main() { int n1,n2,suma; cout<<"Teclee el valor del primer numero: "; cin>>n1; cout<<"Teclee el valor del segundo numero: "; cin>>n2; suma=n1+n2; cout<<"La suma es: "<< suma<<endl; system("PAUSE"); }

Programación Estructurada Codificada

14 Aurelio López Ovando http://aureliux.wordpress.com

Ejercicios propuestos 1) Suponiendo los siguientes valores iniciales para las variables: x = 2; y = 6; z = 9; r = 100; s = 10; a = 15; b = 3; ¿Cuáles son los valores correctos en cada expresión? a) x += 10; 12 10 11 b) s *= b; 9 13 30 c) r /= 0; infinito 1 error d) y += x + 10; 8 12 18 e) z -= a*b; -36 -18 36 2) Marca la expresión equivalente usando operadores mixtos. a) x = 10 + x - y;

b) r = 100*r;

r *= 100*r r *= 100 r += 100

c) y = y/(10+x);

y /= 10*x y /= 10 + y/x y /= 10+x

d) z = 3 * x + 6;

3) Evaluar las siguientes expresiones y marca la correcta, siendo: x= 10; y = 20; z = 30;

a) z = x - y, t = z - y;

z=10, t=-30 t=10 z=30, t=-30

b) (x < 10) && (y > 15)

true false

c) (x <= z) || (z <= y)

true false

d) !(x+y < z)

true false

e) (x+y != z) && (1/(z-x-y) != 1)

true false error

x += 10-y x += 10+y x -= y+10

z += 6 z *= 3 no es posible

Programación Estructurada Codificada

15 Aurelio López Ovando http://aureliux.wordpress.com

III Clases y objetos El poderío de C++ radica en el uso de objetos, en tratar a cada programa como una interacción de objetos del mundo real y no como simples variables y constantes independientes y solitarias que guardan cierta información, primero entendamos un poco acerca de la programación orientada a objeto.

Programación orientada a objetos La idea básica de este tipo de programación es agrupar los datos y los procedimientos para manejarlos en una

única entidad: el objeto. Un programa es un objeto, que a su vez está formado de objetos, la idea de la

programación estructurada no desaparece sino más bien se refuerza.

o Objeto es cualquier persona, animal, cosa o acción que exista en la vida real, que tiene existencia propia y

que interviene de alguna manera en nuestro programa.

Por ejemplo pensemos en un programa que controle las cuestiones escolares de una escuela. Los objetos que intervienen son:

Cada uno de ellos engloba datos y procedimientos, es decir cada

uno realiza diferentes actividades en el programa y tiene

diferentes datos que se necesitan controlar, a estas actividades le

llamaremos métodos y a los datos atributos.

Es muy importante tener claro cual es la participación de cada

objeto en el programa ya que éstos se verán reflejados en el

código fuente que se va a realizar y no es poner atributos y

métodos nada mas porque si sin justificación alguna, porque

estaríamos creando un programa con muchas líneas de código

inútiles.

Para reflejar estos objetos en el código haremos uso de clases.

o Clase es un modelo en el que los objetos se representan mediante código.

La diferencia entre clase y objeto es que el objeto es el que existe en el mundo real y la clase es la representación

de ese objeto dentro del programa con sus atributos y sus métodos.

Creación de una clase

Primeramente veamos como se define una clase dentro de un programa en C++.

Su sintaxis es :

class nombreClase { };

En medio de las llaves se deben definir todos los atributos y métodos de la clase.

Al final de la clase se debe colocar un punto y coma. La clase debe tener un nombre (nombreClass) el cual se

recomienda empiece siempre con mayúscula.

class La palabra clave “class” es una manera elaborada de describir un tipo de dato nuevo, la utilizamos para representar un “objeto”

Programación Estructurada Codificada

16 Aurelio López Ovando http://aureliux.wordpress.com

La sintaxis de un método sencillo que no retorna ningún valor ni tampoco recibe parámetro es:

6.- Programa que muestre un saludo en pantalla utilizando clases.

Se define una clase que se llama Saludar.

Dentro de esta clase se crea un método público llamado saludo,

a su vez dentro de saludo mostramos mediante cout el mensaje

en pantalla.

A pesar que se ha definido la clase aún no se ha creado, eso debe hacerse dentro de main, a través del operador new. Una vez creada la clase podemos acceder a los métodos públicos que existen en ella mediante el operador”-> “

Hemos creado una pequeña clase para irnos adentrando en la manera de programar orientada a objetos. Los atributos y métodos que estén dentro de la clase se llaman miembros de la clase, existe otra manera de

trabajar con clases, pero esta es mejor porque trabajamos con clases dinámicas, es decir trabajamos directamente

con la memoria, ese * que utilizamos es precisamente el que se encarga de crear el espacio necesario para la clase.

Es importante indicar el especificador de ámbito, en este caso el que utilizamos es público, pero ¿Que hubiera

pasado si en lugar de public hubiéramos utilizado prívate? La respuesta es simple, nos hubiera generado un error

porque como ya mencioné entes los atributos y métodos privados sólo se reconocen dentro de la misma clase

#include<iostream> using namespace std; class Saludar { public: void saludo() { cout<<"Hola bienvenido al curso de C++"<<endl; } }; int main() { Saludar *saludar = new Saludar(); saludar->saludo(); system("PAUSE"); }

void nombreMetodo() { }

En medio de las llaves se debe codificar las operaciones necesarias que se esperan del método.

Un método debe tener paréntesis después del nombre El método debe tener un nombre (nombreMetodo) el cual se

recomienda empiece siempre con minúscula

public:

Para poder crear la clase dentro de main debe tener por menos un método público, a esto se le llama

especificador de ámbito, es decir un método puede ser público y que sea reconocido en todo el programa

o privado y solo sea reconocido dentro de la clase, esto se especifica con la palabra “public”.

new

Este operador nos permite crear la clase, la función que en realidad hace es acceder y reservar la memoria que la clase va a necesitar, esta memoria es imprescindible liberarla con el operador “delete”.

Métodos

Los métodos son funciones, es decir son rutinas de código las cuales pueden retornar algún valor o no, cuando no retorna ningún valor se utiliza la palabra reservada void que significa nulo.

Programación Estructurada Codificada

17 Aurelio López Ovando http://aureliux.wordpress.com

Esto es un error ya que le estaríamos pidiendo al compilador

que ejecute un método llamado saludar.

La respuesta del compilador es que ese método no lo puede

ejecutar porque es privado y no lo reconoce.

Por eso es necesario que una clase tenga por lo menos un

método público.

Otra duda que puede surgir es ¿Qué pasa si no pongo ni público

ni privado? La respuesta es que cuando no se especifica su

especificador de ámbito, se toma como si fuera privado.

7.- Se necesita guardar los datos de los libros de una librería.

En este ejemplo se puede apreciar el uso de ambos especificadores de ámbito

(public y private).

Se han declarado 4 atributos, es decir que de cada libro obtendremos el título, el

nombre del autor, cuantas unidades del libro están entrando y el precio al que se

va a vender cada uno, estos atributos son privados y solo pueden ser accedidos

dentro de la clase.

Cada atributo es un dato del objeto (en este caso nuestro objeto es un libro) y

podemos leerlo con la instrucción cin, es recomendable que cada nombre que le

pongamos a los atributos tenga relación o ilustre el dato que se va aguardar, evitar

poner nombres que puedan causar confusiones.

Sin embargo nuestro programa a pesar de haber evolucionado con respecto a los

anteriores ejemplos, aún tiene algunos errores que deben corregirse.

o getline

Por ejemplo el primero de estos errores y que seguramente salta a la vista de

inmediato es que al leer el titulo y el nombre del autor solo podemos teclear una

palabra, por ejemplo, supongamos que nuestro libro se llama “Don Quijote de la

Marcha” y su autor es “Diego Cervantes de Saavedra”, cin solo nos permitiría leer

“Don” y “Diego” respectivamente es decir solo acepta una palabra (la primera),

para resolver este problema y poder leer toda la cadena completa debemos

#include<iostream> using namespace std; class Saludar { prívate: void saludo() { cout<<"Hola bienvenido al curso de C++"<<endl; } }; int main() { Saludar *saludar = new Saludar(); saludar->saludo(); system("PAUSE"); }

#include<iostream> using namespace std; class Libros { private: string titulo, autor; int unidades; float precio; public: void datosLibro() { cout<<"Titulo del libro: "; cin>>titulo; cout<<"Autor: "; cin>>autor; cout<<"Unidades: "; cin>>unidades; cout<<"Precio: "; cin>>precio; } }; int main() { Libros *libro = new Libros(); libro->datosLibro(); system("PAUSE"); }

Se debe proteger al máximo los datos de una clase, así que lo recomendable es utilizar hasta donde sea

posible el especificador prívate.

Atributos Son datos pertenecientes a la clase, estos datos se declaran, pero no se inicializan, funcionan de manera similar a una variable.

Programación Estructurada Codificada

18 Aurelio López Ovando http://aureliux.wordpress.com

utilizar getline que funciona similar a cin, pero con la ventaja de que permite leer toda una línea de caracteres

hasta que se presione enter.

Entonces nuestro programa quedaría de esta manera:

La instrucción getline recibe dos parámetros, el primero es el medio de entrada y

el segundo la variable donde se va aguardar la línea leída, esta variable debe ser

string.

Entonces queda claro que hay una diferencia entre utilizar cin y getline cada uno diseñado para una situación especifica.

o Declaración e implementación de métodos

El segundo error que se debe corregir de este programa es que hasta ahora se han

estado utilizando funciones inline es decir, funciones que se implementan dentro

de la misma clase, y eso no es recomendable

porque retarda la ejecución del programa, lo

correcto es hacer la declaración en la clase y la

implementación aparte utilizando el operador de

ámbito :: .

En este ejemplo vemos que en la clase solo

declaramos los atributos y los métodos, esa es la

parte de la definición, y su implementación se hace fuera de la clase, inclusive se

podría hacer en otro archivo, pero por ahora nos quedamos con este método.

La implementación debe llevar primero el nombre de la clase seguido del

operador de ámbito y por último el nombre del método.

Hasta ahora solamente se ha utilizado un método público en cada clase, sin

embargo puede hacerse combinaciones y podemos utilizar a nuestro antojo según

necesitemos que sean public o prívate, como veremos en el siguiente ejemplo.

8.- Una tienda necesitan implementar un programa que controle la venta de sus

artículo, lo curioso de esta tienda es que todos los artículos los da a mitad de

precio (50% descuento del precio original) por eso la política es que en cada venta

solo puede venderse un solo artículo, al finalizar la venta se debe mostrar el

#include<iostream>

using namespace std;

class Libros

{

private:

string titulo, autor;

int unidades;

float precio;

public:

void datosLibro()

{

cout<<"Titulo del libro: ";

getline(cin,titulo);

cout<<"Autor: ";

getline(cin,autor);

cout<<"Unidades: ";

cin>>unidades;

cout<<"Precio: ";

cin>>precio;

}

};

int main()

{

Libros *libro = new Libros();

libro->datosLibro();

system("PAUSE");

}

#include<iostream> using namespace std; class Libros { private: string titulo, autor; int unidades; float precio; public: void datosLibro(); }; void Libros::datosLibro() { cout<<"Titulo del libro: "; getline(cin,titulo); cout<<"Autor: "; getline(cin,autor); cout<<"Unidades: "; cin>>unidades; cout<<"Precio: "; cin>>precio; } int main() { Libros *libro = new Libros(); libro->datosLibro(); system("PAUSE"); }

La definición de los métodos va dentro de la clase y la implementación va fuera de ella

Programación Estructurada Codificada

19 Aurelio López Ovando http://aureliux.wordpress.com

descuento realizado, cuanto se recibe de efectivo y cuanto hay que dar de cambio al cliente.

En este ejemplo tenemos dos métodos uno es para pedir los

datos de la venta y el otro para poder realizar el cobro.

Si somos observadores podemos descubrir algunos puntos

débiles de nuestro programa, como por ejemplo que la cantida

recibida sea menor a la que necesita cobrarse, pero eso son

aspectos de validaciones que poco a poco se van a ir

fortaleciendo..

Es importante ver la manera en que primero se definieron los

métodos dentro de la clase.

Para luego ser implementados fuera de ella, no se utilizaron

funciones inline.

o Variables locales y globales

Las variables dependiendo de su alcance pueden ser globales o

locales, es algo similar a los atributos públicos y privados.

Es decir todas aquellas variables que se declaren dentro de un

método (función) serán locales, porque solo existirán dentro de

ese método.

Por el contrario las variables globales que se declaran dentro de

la función main pueden ser reconocidos en cualquier parte del

programa.

En este ejemplo las variables recibido y cambio son locales

porque están definidas dentro del método venta.

La variable que representa al objeto es una tipo de variable

global porque fue definido dentro de la función principal main.

De estos dos tipos de variables la que mas vamos a utilizar en

programación orientada a objetos son las locales, ya que en

determinados momentos necesitaremos guardar algunos datos

que no son tan importantes como para ser considerados atributos, así que lo correcto sería crearlos

temporalmente en variables locales que desaperecen cuando el método termina de hacer su trabajo.

Con esto tenemos lo elemental para comenzar a trabajar con programación orientada a objetos en C++, queda

mucho todavía por recorrer, pero este tema es básico para poder entender los que siguen.

#include<iostream> using namespace std; class Articulo { private: string articulo; float precio, totalPagar; void cobrar(); public: void venta(); }; void Articulo::venta() { cout<<"Articulo: "; getline(cin,articulo); cout<<"Precio normal: "; cin>>precio; cobrar(); } void Articulo::cobrar() { float recibido, cambio; totalPagar = precio * 0.50; cout<<"Total a pagar: "<< totalPagar<<endl; cout<<"Cantidad recibida: "; cin>>recibido; cambio=recibido - totalPagar; cout<<"Cambio:"<<cambio<<endl; } int main() { Articulo *articulo = new Articulo(); articulo->venta(); system("pause"); }

Programación Estructurada Codificada

20 Aurelio López Ovando http://aureliux.wordpress.com

Ejercicios propuestos

1.- Coloca el nombre correcto en la línea correspondiente, los datos son: objeto, clase, atributos, métodos.

2.- Del ejemplo anterior, programa la función main si quiero llamar a los métodos capturaDatos e imprimeDatos. 3.- Explica del ejemplo anterior cual es la diferencia entre la clase y el objeto. 4.- ¿Que es una función inline? 5.- ¿Cual es la principal diferencia entre cin y getline? 6.- ¿Para que sirve endl? 7.- Crea un programa que mediante una clase controle tus datos como alumno de la materia de programación, no debe tener funciones inline. Los datos que se necesitan controlar son matricula, nombre, promedio, faltas.

class Casa { public: void capturaDatos(); void imprimeDatos(); prívate: string direccion; float precio; int numeroCuartos; };