Introduccion a la Programacion
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Introduccion a la Programacion

  • 1,951 views
Uploaded on

Para entrar al estudio de la Programacion debemos conocer algunos conceptos basicos y generailades sobre el computador

Para entrar al estudio de la Programacion debemos conocer algunos conceptos basicos y generailades sobre el computador

More in: Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,951
On Slideshare
1,923
From Embeds
28
Number of Embeds
3

Actions

Shares
Downloads
75
Comments
0
Likes
2

Embeds 28

http://www.slideshare.net 22
http://informaticayeducacion2011.blogspot.com 4
http://www.informaticayeducacion2011.blogspot.com 2

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Introducción a la Programación Lic. Eduard o UvidiaTema 1 Introducción a la computación 1. Computadora 2. Componentes de un Computadora 3. HARDWARE 4. Partes del Hardware de una computadora 5. SOFTWARE 6. Programa 7. Código Fuente 8. Sistema Operativo 9. Lenguajes de alto nivel y lenguajes de bajo nivel 1. Lenguaje máquina 2. Lenguajes de bajo nivel (ensamblador) 3. Lenguajes de alto nivel 10. Ambientes de Programación 11. Traductor de lenguajes de programación COMPILADOR INTERPRETE DIFERENCIA ENTRE COMPILADOR E INTERPRETE¿QUÉ ES UNA COMPUTADORA?Una computadora es un dispositivo capaz de realizar cálculos y tomar decisioneslógicas a velocidades hasta miles de millones de veces más rápidas que las alcanzablespor los seres humanos. Por ejemplo, muchas de las computadoras personales actualespueden realizar decenas de millones de sumas por segundo, y los más sorprendente esque puede hacer todo eso sin cometer errores, se imaginan a una persona provista deuna calculadora cuánto tiempo le tomaría realizar el mismo cálculo
  • 2. Introducción a la Programación Lic. Eduard o UvidiaComponentes de unacomputadoraUna computadora de cualquier forma que se vea tiene dos tipos de componentes: ElHardware (Parte Física) y el Software (Parte Lógica).HardwareLlamamos Hardware a la parte física de la computadora, pues vienen a ser las partesque podamos percibir con el sentido del tacto. El hardware que compone a unacomputadora es muy complejo, pues una pequeña pieza puede contener millones detransistores. Ejemplo de Hardware podría ser la Tarjeta Madre, Memoria Principal, CPU,etc.Partes del Hardware de una computadoraEl Hardware esta compuesto por seis unidades o secciones básicas y son lassiguientes:1. Unidad de entrada. Que es la sección de recepción de la computadora: obtieneinformación (datos y programas de computadora) y lo coloca a disposición de lasdemás unidades para que sea procesada. La información se introduce por medio delteclado o del Mouse (ratón). Otros dispositivos pueden ser los escáneres, los lápicesópticos, las pantallas touch screen, cámaras, etc.2. Unidad de salida. La computadora muestra las respuestas a través de esta unidad,estas respuestas son el resultado del procesamiento que realiza la computadora conlos datos que hemos introducido. Por ejemplo mediante un dispositivo de entradacomo el teclado, podemos escribir palabras la cuales las podremos observar por undispositivo de salida como el monitor o la pantalla.Otros dispositivos de salida son también la impresora, los parlantes, tarjetas de video.
  • 3. Introducción a la Programación Lic. Eduard o Uvidia3. Unidad de memoria. También se la conoce como memoria RAM, es el almacénprimario de la computadora por lo que es relativamente de baja capacidad. Estamemoria es la más importante de la computadora, porque guarda informaciónnecesaria para que la computadora pueda arrancar y funcionar, en otras palabrasguarda información de todos los programas que se ejecutan en una computadoraincluyendo al Sistema Operativo.4. Unidad aritmética y lógica (ALU). Esta es la parte de la computadora en dondese realizan los cálculos. sumas o restas. Aquí están también los mecanismos dedecisión que permiten a la computadora, por ejemplo, comparar dos elementos de launidad de memoria para determinar si son iguales o no.5. Unidad central de procesamiento (CPU). Es el cerebro de la computadora, pueses el coordinador de la máquina y la parte encargada de supervisar el funcionamientode las otras secciones. La CPU le dice a la unidad de entrada cuándo debe leerseinformación para introducirla en la unidad de memoria, le dice a la ALU cuando lainformación de la unidad de memoria debe utilizarse en los cálculos y le dice la unidadde salida cuando debe enviar la información que está es la unidad de memoria aciertos dispositivos de salida.6. Unidad de almacenamiento secundario. Esta es el almacén de largo plazo y dealta capacidad de la computadora. Los programas y datos que nos están siendoutilizados por las otras unidades normalmente se colocan en dispositivos dealmacenamiento secundario hasta que necesiten, posiblemente horas, días, meses oincluso años después. El acceso es más lento comparado con el de la memoria primariao memoria RAM.SoftwareNos referimos con software a la parte lógica de la computadora a los procedimientosque el hardware realiza inducidos por el software y este a su vez por nosotros. Elsoftware es como un traductor que hace que nuestras órdenes se conviertan enrealidad, manipulando el hardware o la parte física.El software esta compuesto por programas de computadora.ProgramaUn programa es un conjunto de instrucciones lógicas que le dicen a la computadoraque debe hacer, además un programa debe satisfacer la necesidades de los usuarios
  • 4. Introducción a la Programación Lic. Eduard o Uvidiautilizando eficientemente los recursos disponibles. Los programas de tratan con mayorprofundidad en el Tema 3.Los programas que escribiremos más adelante serán utilizando un lenguaje deprogramación muy popular como lo es el C++.Código FuenteLe daremos el nombre de código fuente a los programas que escribamos en undeterminado lenguaje de programación, que simplemente estará compuesto porinstrucciones escritas por un programador. El código fuente no constituye softwarepropiamente dicho pero es una instancia mediante la cual se llega al SoftwareSistema OperativoEs el programa más importante que se ejecuta en una computadora. Cualquiercomputadora de propósito general debe operar con un sistema operativo para lograrejecutar otros programas. El sistema operativo ejecuta las tareas básicas, como dereconocer entradas desde el teclado, enviar mensajes a pantalla, manteniendo rastrode los archivos y directorios en el disco, y controlar los dispositivos periféricos comolas impresoras.Para grandes sistemas, el sistema operativo tiene una gran responsabilidad ycualidades. Es como un policía de transito, quien se asegura de que los diferentesprogramas que se ejecutan al mismo tiempo no interfieran unos con otros.También es responsable de la seguridad, asegurando que usuarios no autorizadosaccedan al sistema.El sistema operativo provee de una plataforma de software por encima de la cual otrosprogramas, llamados aplicaciones, pueden ejecutarse. Los programas de aplicacióntienen que crearse de acuerdo a la plataforma en donde se van a ejecutar. La elecciónde sistema operativo, entonces, determina el tipo de uso que se le va ha dar a la PCcomo también el tipo de aplicaciones que se puedan ejecutar.Para las PCs (computadoras personales) los más populares sistemas operativos son elDOS, OS/2, y Windows, además de otros de libre distribución como el Linux.
  • 5. Introducción a la Programación Lic. Eduard o UvidiaLenguajes de alto nivel ylenguajes de bajo nivelLos programadores escriben instrucciones en diversos lenguajes de programación. Lacomputadora puede entender directamente algunos de ellos, pero otros requierenpasos de traducción intermedios. Hoy día se utilizan cientos de lenguajes decomputadora, los cuales pueden dividirse en tres tipos generales:1. Lenguaje máquinaUna computadora sólo puede entender el lenguaje máquina. El lenguaje de máquinaordena a la computadora realizar sus operaciones fundamentales una por una. Dicholenguaje es difícil de usar para lar persona porque trabajar con números no es muycómodo además estos números están en formato binario.2. Lenguajes de bajo nivel (ensamblador)Para facilitar y agilizar su labor a los programadores, se buscaron nuevos lenguajes. Ellenguaje ensamblador consiste en pequeñas abreviaturas de palabras en ingles. Secrearon los programar traductores para convertir los programas escritos en lenguajeensamblador a lenguaje máquina a velocidades de computadora. Estos lenguajes aunrequerían muchas instrucciones para realizar simples operaciones.3. Lenguajes de alto nivelPara acelerar, aún más, el proceso de programación se desarrollan los lenguajes dealto nivel en los que se podía escribir un enunciado para realizar tareas sustanciales.Los lenguajes de alto nivel permiten a los programadores escribir instrucciones queasemejan el ingles cotidiano y contiene notaciones matemáticas de uso común.Ambientes de ProgramaciónLos programadores necesitan un ambiente de programación, es decir, una lugar endonde puedan plasmar sus ideas, un lugar en donde puedan escribir sus programas,en otras palabras donde puedan programar. Los ambientes de programación vienen aser los diferentes leguajes de programación que existen, son muy variados, conmuchas cualidades propias pero se puede realizar una misma tarea, muchas veces,con cualquiera de ellos. Existen lenguajes de programación de Alto y Bajo nivel; entrelos más conocidos de Alto nivel podemos mencionar a C, C++, JAVA, Fortran, T.Pascal, etc.
  • 6. Introducción a la Programación Lic. Eduard o UvidiaTraductor de lenguajes deprogramaciónLos traductores son programas que traducen los programas en código fuente, escritosen lenguajes de alto nivel, a programas escritos en lenguaje máquina. Los traductorespueden ser de dos tipos: compiladores e interpretesCompiladorUn compilador es un programa que lee el código escrito en un lenguaje (lenguajeorigen), y lo traduce o traduce en un programa equivalente escrito en otro lenguaje(lenguaje objetivo). Como una parte fundamental de este proceso de traducción, elcompilador le hace notar al usuario la presencia de errores en el código fuente delprograma. Vea la figura de abajo.El C++ es un lenguaje que utiliza un compilador y su trabajo es el de llevar el códigofuente escrito en C++ a un programa escrito en lenguaje máquina.Entrando en más detalle un programa en código fuente es compilado obteniendo un archivoparcial (un objeto) que tiene extensión obj luego el compilador invoca al linker que convierte alarchivo objeto en un ejecutable con extensión exe que como ya sabemos es un archivo que estaen formato binario (ceros y unos) y que puede funcionar por si solo.Además el compilador de C++ al realizar su tarea realiza una comprobación de erroresen el programa, es decir, revisa que todo este en orden por ejemplo variables yfunciones bien definidas, revisa todo lo referente a cuestiones sintácticas, esta fueradel alcance del compilador que por ejemplo el algoritmo utilizado en el problemafuncione bien.
  • 7. Introducción a la Programación Lic. Eduard o UvidiaLa siguiente figura muestra los pasos para tener un programa ejecutable desde elcódigo fuente:InterpreteLos interpretes en lugar de producir un Lenguaje objetivo, como en los compiladores,lo que hacen es realizar la operación que debería realizar el Lenguaje origen. Uninterprete lee el código como esta escrito y luego lo convierte en acciones, es decir, loejecuta en ese instante.Existen lenguajes que utilizan un Interprete, como por ejemplo JAVA, y su interpretetraduce en el instante mismo de lectura, el código en lenguaje máquina para quepueda ser ejecutado.La siguiente figura muestra el funcionamiento de un interprete.
  • 8. Introducción a la Programación Lic. Eduard o UvidiaDiferencia entre Compilador e InterpreteLos compiladores difieren de los interpretes en varios aspectos:Un programa que ha sido compilado puede correr por si solo, pues en el proceso de compilaciónse lo transformo en otro lenguaje (lenguaje máquina).Un interprete traduce el programa cuando lo lee, convirtiendo el código del programadirectamente en acciones.La ventaja del interprete es que dado cualquier programa se puede interpretarlo en cualquierplataforma (sistema operativo), en cambio el archivo generado por el compilador solo funciona enla plataforma en donde se lo ha creado.Pero por otro lado un archivo compilado puede ser distribuido fácilmente conociendo laplataforma, mientras que un archivo interpretado no funciona si no se tiene el interprete.Hablando de la velocidad de ejecución una archivo compilado es de 10 a 20 veces más rápido queun archivo interpretado.Tema 2 Algoritmos 1. ALGORITMOS ROBUSTEZ DE UN ALGORITMO CORRECTITUD DE UN ALGORITMO COMPLETITUD DE UN ALGORITMO EFICIENCIA Y EFICACIA DE UN ALGORITMO 2. RESOLUCIÓN DE PROBLEMAS 3. RESOLUCIÓN DE PROBLEMAS UTILIZANDO ALGORITMOS 4. PSEUDOCÓDIGO 5. DIAGRAMAS DE FLUJO 6. EJERCICIOS RESUELTOSAlgoritmosUn algoritmo es un procedimiento a seguir, para resolver un problema en términos de:1. Las acciones por ejecutar y el2. El orden en que dichas acciones deben ejecutarse
  • 9. Introducción a la Programación Lic. Eduard o UvidiaUn algoritmo nace en respuesta a la aparición de un determinado problema. Unaalgoritmo esta compuesto de una serie finita de pasos que convergen en la solución deun problema, pero además estos pasos tienen un orden específico.Entenderemos como problema a cualquier acción o evento que necesite cierto grado deanálisis, desde la simpleza de cepillarse los dientes hasta la complejidad delensamblado de un automóvil. En general, cualquier problema puede ser solucionadoutilizando un algoritmo, en este sentido podemos utilizar los algoritmos para resolverproblemas de computo.Un algoritmo para un programador es una herramienta que le permite resaltar losaspectos más importantes de una situación y descartar los menos relevantes. Todoproblema de cómputo se puede resolver ejecutando una serie de acciones en un ordenespecífico.Por ejemplo considere el algoritmo que se elaboraría para el problema o situación delevantarse todas las mañanas para ir al trabajo: 1. Salir de la cama 2. quitarse el pijama 3. ducharse 4. vestirse 5. desayunar 6. arrancar el automóvil para ir al trabajo o tomar transporte.Nótese que en el algoritmo anterior se ha llegado a la solución del problema en 6pasos, y no se resaltan aspectos como: colocarse los zapatos después de salir de lacama, o abrir la llave de la regadera antes de ducharse. Estos aspectos han sidodescartados, pues no tienen mayor trascendencia, en otras palabras los estamossuponiendo, en cambio existen aspectos que no podemos obviarlos o suponerlos, de locontrario nuestro algoritmo perdería lógica, un buen programador deberá reconoceresos aspectos importantes y tratar de simplificar al mínimo su problema.Es importante recalcar que los pasos de un algoritmo no son conmutativos pues, nodaría solución al mismo problema a tratar.ROBUSTEZ DE UN ALGORITMOQuiere decir que un algoritmo debe contemplar todas las posibles facetas del problemaque queremos resolver, al elaborar un algoritmo no se nos debe escapar ningún detalleque provoque un funcionamiento malo nuestro algoritmo. Si logramos construir unalgoritmo robusto, cualquier giro inesperado del problema será controlado por elalgoritmo, es decir, debe ser flexible a cambios.
  • 10. Introducción a la Programación Lic. Eduard o UvidiaCORRECTITUD DE UN ALGORITMOEs correcto cuando da una solución al problema a tratar y cumple con todos lorequerimientos especificados tal que cumplamos con los objetivos planteados.COMPLETITUD DE UN ALGORITMOCuando un algoritmo cuenta con todos los recursos para poder llegar a una soluciónsatisfactoriaEFICIENCIA Y EFICACIA DE UNALGORITMOUn algoritmo es eficiente cuando logra llegar a sus objetivos planteados utilizando lamenor cantidad de recursos posibles, es decir, minimizando el uso memoria, de pasosy de esfuerzo humano.Un algoritmo es eficaz cuando alcanza el objetivo primordial, el análisis de resolucióndel problema se lo realiza prioritariamente.Puede darse el caso de que exista un algoritmo eficaz pero no eficiente, en lo posibledebemos de manejar estos dos conceptos conjuntamente.Resolución de ProblemasPara lograr resolver cualquier problema se deben seguir básicamente los siguientespasos:Análisis del Problema. en este paso se define el problema, se lo comprende y se loanaliza con todo detalle.Diseño del Algoritmo. se debe elaborar una algoritmo que refleje paso a paso laresolución del problema.Resolución del Algoritmo en la computadora. se debe codificar el algoritmo.
  • 11. Introducción a la Programación Lic. Eduard o UvidiaRESOLUCIÓN DE PROBLEMAS UTILIZANDO ALGORITMOSEjemplo 2.1Una universidad ofrece un curso que prepara a los estudiantes para el examen deobtención de licencia de corredor de bienes raíces. El año anterior, varios de losestudiantes que completaron el curso presentaron el examen para obtener la licencia.Naturalmente la Universidad desea saber que resultados obtuvieron sus estudiantes enel examen. Se nos ha pedido escribir un programa que resuma los resultados recibidosde una lista de 10 estudiantes. Junto a cada nombre se anoto un 1 si el estudianteaprobó el examen y un 2 si reprobó. Exhiba un resumen de los resultados de la pruebaindicando el número de estudiantes que aprobaron y el número de estudiantes quereprobaron . Si más de Ocho estudiantes aprueban el examen la Universidad serácapaz de aumentar la colegiatura.Exhibir el mensaje "Teclee resultado" en la pantalla cada vez que el programa soliciteotro resultado de examen.SoluciónAlgoritmoA grandes rasgos:Analizar los resultados del examen y decidir si se debe aumentar o no la colegiatura.Se puede refinar como sigue:Inicializar variablesIntroducir las primeras 10 calificaciones y contar los aprobados y los reprobados.Imprimir un resumen de los resultados de exámenes y decidir si se debe aumentar ono la colegiatura.PseudocódigoPseudocódigo Es un lenguaje artificial e informal que ayuda a los programadores adesarrollar algoritmos. El Pseudocódigo es similar al lenguaje cotidiano; es cómodo yamable con el usuario, aunque no es realmente in verdadero lenguaje decomputadora. No se ejecutan en las computadoras mas bien sirven para ayudar alprogramadora razonar un programa antes de intentar escribirlo en algún lenguaje. Unprograma ejecutado en Pseudocódigo puede ser fácilmente convertido en un programa
  • 12. Introducción a la Programación Lic. Eduard o Uvidiaen C++, si es que esta bien elaborado. Por ejemplo supongamos que la nota paraaprobar un examen es de 60. El enunciado en Pseudocódigo sería: Si calificación >= 60 entonces Mostrar "Aprobado" FinSiEl mismo enunciado se puede escribir en C++ como: if ( calif >= 60 ) cout << "Aprobado";Nótese que la operación de trasladar el Pseudocódigo a código fuente, se lo realiza conel mínimo esfuerzo, no se necesita de un mayor análisis.Llevando el Ejemlo2.1 a Pseudocódigo.Se puede refinar más aun el algoritmo:Inicializar variables.Inicializar los aprobados (aprobados) en 0Inicializar los reprobados (reprobados) en 0Inicializar el número de estudiantes (estudiantes) en 0Introducir las primeras 10 calificaciones y contar los aprobados y los reprobados.Mientras (while) el contador estuantes es menor o igual que 10 entonces Introducir el siguiente resultado de examen Si el estudiante aprobó Sumar 1 a aprobados Si no Sumar 1 a reprobados FinSi Sumar 1 al contador estudiantesFinMientrasImprimir un resumen de los resultados de exámenes y decidir si se debe aumentar o nola colegiatura.Imprimir el número de aprobadosImprimir el número de reprobadosSi estudiantes es más 8 entonces Imprimir "Aumentar la colegiatura".FinSiSimplificando el problema queda escrito en Pseudocódigo de la siguiente forma:
  • 13. Introducción a la Programación Lic. Eduard o UvidiaEl problema anterior escrito en C++Diagramas de flujoUn diagrama de flujo es una representación gráfica de un algoritmo o de una parte delmismo. Los diagramas de flujo ayudan en la comprensión de la operación de lasestructuras de control (Si, Mientras).La ventaja de utilizar un algoritmo es que se lo puede construir independiente mentede un lenguaje de programación, pues al momento de llevarlo a código se lo puedehacer en cualquier lenguaje.Dichos diagramas se construyen utilizando ciertos símbolos de uso especial como sonrectángulos, diamantes, óvalos, y pequeños círculos, estos símbolos están conectadosentre sí por flechas, conocidas como líneas de flujo. A continuación se detallarán estossímbolos. Terminal. Representa el inicio y fin de un programa. Proceso. Son acciones que el programa tiene que realizar
  • 14. Introducción a la Programación Lic. Eduard o Uvidia Decisión. Indica operaciones lógicas o de comparación, así comoexpresiones Entrada / Salida. Nos permite ingresar datos, de un periférico, así comomostrarlos Salida. Es usado para mostrar datos o resultados Conector. Se coloca al principio y fin de un pedazo de programa, enlaza dospartes cualquiera de un programa Línea de flujo o indicador de dirección.Representaremos el correspondiente diagrama de flujo del ejemplo 2.1
  • 15. Introducción a la Programación Lic. Eduard o UvidiaEjercicios Resueltos
  • 16. Introducción a la Programación Lic. Eduard o UvidiaTema 3 Programas 1. PROGRAMA ESTRUCTURA DE UN PROGRAMA 2. Cabecera 3. Cuerpo 4. MECANISMOS DE SALIDA 5. MECANISMOS DE ENTRADA 6. VARIABLES DEFINICIÓN DE VARIABLE RESERVANDO MEMORIA DEFINIR UNA VARIABLE INICIALIZAR UNA VARIABLE ASIGNACIÓN DE UN VALOR PALABRAS RESERVADAS O CLAVES 7. CONSTANTES 8. EXPRESIONESProgramaUn programa de computadora es una serie de instrucciones, órdenes a la máquina,que producirán la ejecución de una determinada tarea. Es un medio para satisfaceruna necesidad o cumplir un objetivo de una manera automatizada.Comúnmente, la palabra programa es usada de dos maneras: para describirinstrucciones individuales, código fuente, creado por el programador y tambiéndescribe una pieza entera de software ejecutable. Esta distinción puede causarconfusión, por lo que vamos a tratar de distinguir entre el código fuente por un lado yun ejecutable por otro.Para tener un programa ejecutable primero tenemos que tener su código fuente, esdecir, del código fuente se deriva el programa ejecutable.El Código fuente puede ser convertido en un programa ejecutable de dos formas:Interpretes convierten el código fuente en instrucciones de computadora (lenguajemáquina), y la computadora actúa con esas instrucciones inmediatamente. El JAVA esun lenguaje interpretado.
  • 17. Introducción a la Programación Lic. Eduard o UvidiaAlternativamente, los compiladores trasladan el código fuente en programas, loscuales pueden ejecutarse tiempo después.A pesar de que se puede trabajar fácilmente con los intérpretes, la mayor parte de laprogramación es hecha con compiladores porque el código compilado se ejecuta másrápido. C++ es un lenguaje de compilación.Estructura de un ProgramaUn programa esta formado por la cabecera y el cuerpo del programa.CabeceraEn la cabecera se incluyen a nuestro programa algunas rutinas predefinidas que hacena la programación más sencilla, pues no tenemos que crear todo desde cero o "tratarde inventar la rueda", es muy bueno que conozcamos la mayor cantidad de libreríasdisponibles para que tengamos un trabajo más que sencillo y estandarizado. Unprograma puede no tener cabecera pero sería demasiado simple, he aquí un ejemplode una cabecera para un programa sencillo.#include <iostream.h>CuerpoEl cuerpo del programa contiene la función principal, las funciones adicionales y lasclases que se necesiten en el programa.La mejor forma de aprender un lenguaje es programando con él. El programa mássencillo que se puede escribir en C++ es el siguiente: void main() { }Como nos podemos imaginar, este programa no hace nada, pero contiene la parte másimportante de cualquier programa C++ y además, es el más pequeño que se puedeescribir y que se compile correctamente. En el se define la función void main, que es laque ejecuta el sistema operativo al llamar a un programa C++. La función principal(void main) o cualquier otra función siempre va seguida de paréntesis.
  • 18. Introducción a la Programación Lic. Eduard o UvidiaLa definición del cuerpo de la función está formada por un bloque de sentencias oinstrucciones, que esta encerrado entre llaves {}.Un programa C++ puede estar formado por diferentes módulos de código fuente. Esconveniente mantener los código fuente de un tamaño no muy grande, para que lacompilación sea rápida. También, al dividirse un programa en partes, puede facilitar lalegibilidad del programa y su estructuración. Los diferentes códigos fuentes soncompilados de forma separada, únicamente el código fuente que han sido modificadosdesde la última compilación, y después combinados con las librerías necesarias paraformar el programa en su versión ejecutable.Mecanismos de SalidaLos mecanismos de Salida son aquellos mensajes que el programa utiliza paracomunicarse con el mundo exterior o con el usuario. Por ejemplo yo quiero unprograma que me salude cordialmente: 1: #include <stdio.h> 2: void main() 3: { 4: printf("Hola amigo!n") ; 5: }El mismo resultado se obtiene con: 1: #include <iostream.h> 2: void main() 3: { 4: cout<<" Hola amigo! n" ; 5: }Con el visualizamos el mensaje Hola amigo! en la ventana del MS-DOS. Analizando elsegundo ejemplo, en la primera línea 1 se indica que se tengan en cuenta las funcionesy tipos definidos en la librería iostream (standard input/output) que es la cabecera.Estas definiciones se encuentran en el archivo iostream.h. Ahora, en la función main seincluye una única sentencia que llama a la función cout en la línea 4. La funcion coutes usada para desplegar flujos de salida de datos, en pocas palabras, muestra lo quequeramos por pantalla, pueden ser datos, nombre, resultados, etc.Para usar cout se debe colocar esta palabra seguida del operador < que se lo colocados veces, luego entre comillas dobles "" se coloca el texto que se quiere mostrar porpantalla. El símbolo n, colocado al final del texto, indica un cambio de línea.
  • 19. Introducción a la Programación Lic. Eduard o UvidiaCaracteres especiales ASCIIHay un grupo de símbolos, que son tratados como caracteres individuales, queespecifican algunos caracteres especiales del código ASCII. Los más importantes son: a alerta b backspace f Suministro de Papel n cambio de línea r carácter de regreso t tabulación horizontal v tabulación vertical barra inversa comilla simple " comilla doble OOO visualiza un carácter cuyo código ASCII es OOO en octal. xHHH visualiza un carácter cuyo código ASCII es HHH en hexadecimal.Las funciones de entrada y salida y los formatos utilizados losexplicaremos con más detalle en otro capítulo.Mecanismos de EntradaLos mecanismos de Entrada nos permiten interacción entre el mundo exterior (Usuarios) y elprograma, así el programa puede recabar información necesaria para cumplir con su meta.Ejemplo:Un ejemplo sencillo sería que el programa nos pregunte nuestra edad: 1: #include <iostream.h> 2: void main() 3: { 4: int edad; 5: cout<<" ¿Qué edad tienes? n" ; 6: cin>>edad; 7: cout<<"Tienes "<<edad<<" años"; 8: }En este ejemplo estamos usando la función cin que pertenece a la librería iostream.h,cuya función es crear un flujo de entrada de datos. Puede leer enteros, cadenas, etc.En nuestro ejemplo en la línea 4 se declara una variable de tipo entero nombradaedad.
  • 20. Introducción a la Programación Lic. Eduard o UvidiaEn la línea 5 se muestra el mensaje: ¿Qué edad tienes?.En la línea 6 se espera recibir un flujo de entrada, es decir, que el usuario escriba unvalor (en este caso su edad) y al presionar ENTER este valor se almacenará en lavariable edad.Finalmente en la línea 7 el programa muestra un mensaje: tienes x años. En donde xes la edad que se introdujo desde teclado. en donde se almacena el dato ingresado por teclado.VariablesUn programa necesita un medio de grabar los datos que usa. Las variables yConstantes ofrecen varias maneras para representar y manipular los datos.Definición de variableUna variable es un espacio para guardar información. Entrando más a detalle unavariable es una ubicación en la memoria de la computadora en la cual se puede grabarun valor y por la cual se puede recuperar ese valor más tarde.La memoria RAM de la computadora puede ser vista como una serie de pequeñascasillas, cada una de las casillas esta numerada secuencialmente, este número que sele asigna representa su dirección de memoria y su objetivo es identificarla.Una variable reserva uno o más casillas en las cuales es posible grabar datos.LOS NOMBRES DE LAS VARIABLES (POR EJEMPLO, MYVARIABLE) ES UNA ETIQUETA EN UNA SOLA CASILLA,PARA QUE SE PUEDA ENCONTRARLA FÁCILMENTE SIN SABER SU ACTUAL DIRECCIÓN DE MEMORIA. RAM es la memoria de acceso aleatorio. Una programa cuando es ejecutado o esta corriendo, es grabadotemporalmente en la memoria RAM. Todas las variables, son también, creadas en la memoria RAM. Cuando losprogramadores hablan de memoria, generalmente se están refiriendo a la memoria RAM.Reservando MemoriaSe reserva memoria en el momento de definición de las variables, en este momento esdonde se debe de especificar al compilador que clase de variable es: un entero (int),un caracter (char), etc. Esta información le dice al compilador cuanto de espacio debeseparar o reservar, y que tipo de valor se va ha guardar en la variable.
  • 21. Introducción a la Programación Lic. Eduard o UvidiaCada casilla de memoria tiene un byte de capacidad. Si el tipo de variable que se creaes de dos bytes te tamaño, este necesita de dos bytes de memoria, o de dos casillas.El tipo de variable (por ejemplo, entero) le dice al compilador cuanta memoria (ocuantas casillas) tiene que reservar para la variable.Porque las computadores usan los bits y los bytes para representar los valores, yporque la memoria es medida en bytes, es importante entender y sentirse cómodo coneste concepto.Definir una VariablePara crear una variable es preciso definirla. En la definición de unavariable se manifestando su tipo, seguida de uno o más espacios, luegose escribe el nombre de la variable y para finalizar punto y coma.El nombre de la variable puede ser cualquier combinación de letras, claro que sinespacios. Nombres de variables aceptadas son: x, jap007, miedad.Importante. Los nombre buenos de variables nos dice para que la variable esutilizada, usando buenos nombres se nos hace más fácil la compresión del programa.La siguiente sentencia define una variable entera llamada miedad.int miedad;Como practica general de programación, se debe evitar los nombres horroríficos comoj23qrs o xxx y restringir los nombres de variables de una sola letra como x ó y, paravalores que sean de uso rápido y no perduren en todo el programa. Se debe tratar deusar nombres extensos como miedad o contador. Algunos nombres son fáciles deentender tres semanas después en lugar de romperse la cabeza imaginándose quesignifican nombres cortos.Inicializar una variableUna vez definida una variable se debe proceder a darle un valor, es cierto que estevalor puede cambiar a lo largo del programa, pero es bueno acostumbrarse a darsiempre un valor inicial a nuestras variables. Por ejemplo:miedad = 0;notaFinal = 0;Asignación de un Valor
  • 22. Introducción a la Programación Lic. Eduard o UvidiaSE LE PUEDE ASIGNAR VALORES A UNA VARIABLE CUANTAS VECES SE QUIERA DURANTE EL PROGRAMA, SE LEASIGNA UN VALOR UTILIZANDO EL OPERADOR DE IGUALDAD “=”.Palabras Reservadas o ClavesExisten en todos los lenguajes nombres o palabras que ya están siendo usadas, y poreso se les da el nombre de palabras reservadas o claves.Por ejemplo en el caso de C++ palabras reservadas son: int, if, const, main ...., etc.No podemos nombrar por ejemplo una variable definida por nosotros con ningunapalabra reservada porque el compilador encontraría un error.ConstantesLas constantes son variables que contienen un valor que no cambia durante todo elprograma. Una constante simbólica al igual que cualquier variable tiene un tipo y unnombre. Existen dos formas de declarar constantes en C++.La primera es utilizando una instrucción, generalmente en la cabecera, que es comosigue:#define Estudiantes 50Es la forma tradicional de definir constantes, pero nótese que Estudiantes no tiene untipo de dato. Lo que hace #define es simplemente sustituir 50 en todas las ocurrenciasdel programa donde aparezca Estudiantes.La segunda forma es mucho más específica y mucho más útil y es así:const int Estudiantes = 50;Esta forma es mucho más ventajosa porque la constante Estudiantes tiene un tipo dedato lo que hace al código mucho más mantenible y lo previene de errores.ExpresionesUna expresión es todo aquello que se evalúa y devuelve un valor. Existen varios tiposde expresiones de acuerdo lo que contienen.Las expresiones aritméticas consisten de una secuencia de operadores y operandosque especifican una operación determinada. Los operandos pueden ser variables,
  • 23. Introducción a la Programación Lic. Eduard o Uvidiaconstantes y los operadores aritméticos son (+ - * / %).Es más sencillo pensar que una expresión aritmética es como una ecuación o unafórmula matemática.Una expresión aritmética sencilla es:area = base * altura ;En la anterior línea de código, el resultado de la expresión base * altura se guarda enarea.Las expresiones lógicas también conocidas como expresiones booleanas. Estáncompuestas por operadores y operandos, los operadores en este caso son operadoresrelacionales y operadores lógicos.Este tipo de expresiones es evaluado y devuelve un valor, la diferencia esta en queeste valor sólo puede ser verdadero o falso.Los operadores relacionales son(< > == <= >= ...).Los operadores lógicos son (&& || & |).Un ejemplo de expresiones lógicas es el siguiente:if ( (nota > 70) && (nota < 90) )En la anterior instrucción el segmento (nota > 70) && (nota < 90) devolverá 1(verdadero) ó 0 (falso).TEMA 4 ESTRUCTURAS DE PROGRAMACIÓN 1. ESTRUCTURAS DE CONTROL 2. PARTES DE UNA ESTRUCTURA DE CONTROL 3. SENTENCIAS O INSTRUCCIONES
  • 24. Introducción a la Programación Lic. Eduard o UvidiaEstructuras de ControlExisten tres clases de estructuras de control: 1. Secuenciales 2. Condicionales 3. IterativasLos programas que escribamos pueden definirse en base a las tres estructuras decontrol ya mencionadas.Las estructuras condicionales que C++ nos ofrece son: if, if / else, switch.Las estructuras iterativas son: for, while, Do / while.Partes de una estructura deControlDiferenciaremos dos partes en una estructura de control:1. La definición de dicha estructura2. El cuerpo de la estructura.En la definición es donde se coloca el nombre de la estructura que se va ha utilizar yen el cuerpo de la misma se ubican todas las sentencias o instrucciones quepertenecen o hacen referencia a dicha estructura. Si es cuerpo de tiene más de unainstrucción va entre llaves ( {} ).Sentencias o InstruccionesUna sentencia es la unidad ejecutable más pequeña de un programa en C++, enotras palabras una línea de código escrita es una sentencia. Las sentencias controlan elflujo y orden de ejecución. Una sentencia de C++ consta de palabras clave oreservadas como (for, while, if ... else,etc.), expresiones, declaraciones, o llamadas afunciones.Toda sentencia simple termina con un punto y coma (;).Dos o más sentencias pueden aparecer en una sola línea separadas por el punto ycoma.Una sentencia nula es simplemente un punto y coma.
  • 25. Introducción a la Programación Lic. Eduard o UvidiaTema 5 Estructuras de programación condicionales 1. ESTRUCTURAS DE SELECCIÓN 2. La Estructura de Selección if 3. Estructura de Selección if / else 4. Estructuras Condicionales AnidadasEstructuras de SelecciónLA ESTRUCTURA DE SELECCIÓN IFLa sentencia if se la conoce como estructura de selección simple y su función esrealizar o no una determinada acción o sentencia, basándose en el resultado de laevaluación de una expresión (verdadero o falso), en caso de ser verdadero se ejecutala sentencia. Fig. 5.1La estructura de selección if (que se muestra en la figura 5.1) trabaja de la siguientemanera: si la evaluación de la expresión o expresiones es verdadera ( 1 ) entonces seejecuta la sentencia a la cual se refiere la estructura de control if.Si fueran varias sentencias a las que se refiere la estructura if (como se muestra en lafigura 5.2) se tiene que encerrar todas las sentencias entre llaves ( { } ) y si laevaluación de la expresión es correcta entonces se ejecuta todas las sentenciascontenidas entre las llaves.Fig. 5.2Si la evaluación de la expresión o expresiones resultaría falsa (0), entonces no seejecuta las sentencias.
  • 26. Introducción a la Programación Lic. Eduard o UvidiaPor ejemplo si dada la edad de una persona quiero dar un mensaje de que es o nomayor de edad, suponiendo que una persona mayor de edad tiene por lo menos 21años, el procedimiento será el siguiente. #include <iostream.h> void main() { cout<<"¿Qué edad tienes? n"; cin>>edad if ( edad > 20 ) cout<<"Eres mayor de edad" ; } #include <iostream.h> void main() { cout<<"¿Qué edad tienes? n"; cin>>edad if ( edad > 20 ) { cout<<"Eres mayor de edad"; cout<<"Te estas volviendo viejo "; } }En Pseudocódigo el anterior ejemplo se vería de la siguiente forma: Inicio Mostrar “¿Qué edad tienes?” Leer edad Si Edad > 20 Entonces Mostrar “Eres mayor de Edad” Fin Si FinEl diagrama de flujo de la estructura if se muestra en la Fig. 5.3, este diagramacontiene el símbolo diamante que es llamado el símbolo de decisión, que indica quedecisión se debe tomar. El símbolo de decisión contiene una expresión, y la evaluaciónde ésta será verdadera o falsa. Las flechas nos indican los dos posibles caminos que sepueden tomar.
  • 27. Introducción a la Programación Lic. Eduard o Uvidia fig 5.3El anterior diagrama de flujo funciona de la siguiente manera:1. Si Edad es mayor que 20 (verdadero) entonces se muestra “Eres mayor de Edad”2. Si no entonces no hace nadaImportante. Para mantener el código legible es bueno dejar espacios o sangrías entodas las líneas de código que están dentro de una estructura if / else o if, estasinstrucciones se las alinean un poco más a la derecha y así podemos notar claramenteque forman parte de las sentencias que componen a la estructura if.Esta práctica se puede aplicar a cualquier estructura de control.ESTRUCTURA DE SELECCIÓN IF / ELSELa estructura if / else lo que hace es ejecutar una acción si el resultado de laevaluación de la expresión es verdadera y otra acción si el resultado de la evaluaciónes falsa.La diferencia con utilizar sólo la estructura if es que si la expresión evaluada es verdadera sólo enese caso se ejecuta una acción de otro modo se pasa de largo. En cambio en la estructura if / elsesi la expresión es falsa entonces se ejecuta otra acción. Fig. 5.4
  • 28. Introducción a la Programación Lic. Eduard o UvidiaEn síntesis lo que hace esta estructura es realizar una acción si la expresión esverdadera y otra si es falsa.Aquí tenemos un ejemplo para ilustrar la estructura if / else. #include <iostream.h> void main() { if ( edad > 20 ) cout<<"Eres mayor de edad" ; else cout<<"No eres mayor de edad"; }El diagrama de flujo correspondiente a esta estructura es el siguiente: fig. 5.5El anterior diagrama de flujo funciona de la siguiente manera:1. Si Edad es mayor que 20 (verdadero) entonces se muestra: “Eres mayor de Edad”.2. Si no entonces se muestra: “NO eres mayor de Edad”.ESTRUCTURAS CONDICIONALES ANIDADASExiste el caso de estructuras if, if/else anidadas, que no es más que una estructura ifo if/else dentro de otra.Por ejemplo se desea conocer cuál es el mayor de tres números A, B ,C. 1: #include <iostream.h> 2: void main() 3: { 4: int A=0, B=0, C=0;
  • 29. Introducción a la Programación Lic. Eduard o Uvidia 5: cout<<"Ingrese 3 números"; 6: cin>>A>>B>>C; //Lectura de valores por teclado 7: if ( A > B ) 8: { if (A > C ) 9: cout<<"A es el número mayor"; 10: else 11: cout<<"C es el número mayor"; 12: } 13: else 14: { if ( B > C ) 15: cout<<"B es el número mayor"; 16: else 17: cout<<"C es el número mayor"; 18: } 19: }Para explicar el funcionamiento del problema anterior se han enumerado todas laslíneas de tal programa.Suponiendo que los valores ingresados por teclado fueran: A=2, B=1, C=5. Elprograma actuaría de la siguiente manera.El programa se ejecuta secuencialmente hasta la línea 7 donde encuentra unaexpresión. Cuando se evalúe la expresión (A > B) línea 7, el resultado es verdadero(2 > 1), por lo tanto el programa ejecuta la línea 8, en dicha línea encuentra otraexpresión (A > C) y el resultado de evaluar dicha expresión es falso (2 > 5) por lo queel programa salta hasta la línea 11 y muestra "C es el número mayor". Luego va a lalínea 12 y verifica el cierre de llaves y finalmente salta hasta la línea 19 siendo laúltima línea de ejecución.Resolución de ProblemasTema 6Estructuras de programación iterativas o repetitivas 1. ESTRUCTURA DE REPETICIÓN WHILE EJEMPLO 6.1 EJEMPLO 6.2 2. LA ESTRUCTURA DE REPETICIÓN FOR EJEMPLO 6.3 3. ESTRUCTURA DE REPETICIÓN DO WHILE EJEMPLO 6.4
  • 30. Introducción a la Programación Lic. Eduard o UvidiaEstructura de repetición whileDicha estructura repite una serie de acciones mientras se cumpla una condición.while ( expresión ){sentencia (s);}La estructura while trabaja de la siguiente manera:1. Evalúa la expresión o condición2. Si el resultado de esta evaluación es verdadero la sentencia o sentencias seejecutan, es decir, se ejecuta el cuerpo de la estructura.Luego se vuelve a evaluar la expresión3. Si el resultado de esta evaluación es falso no se ejecuta la sentencia o sentencias ysale del ciclo while.Por ejemplo tengo que apagar 10 velas cuando cumpla 10 años, es decir, tengo quesoplar 10 veces, entonces el problema escrito en Pseudocódigo sería: Inicio edad <- 0 mientras edad != 10 años soplar vela edad = edad + 1 Fin Mientras FinEjemplo 6.1Otro ejemplo que nos demostrará iteraciones con límite conocido es:Tengo que mostrar la tabla de multiplicar del 9 por pantalla #include <iostream.h> void main() { int nro=1; while(nro <= 10 ) { cout<<"9 * "<<nro<<" = "<<nro*9;
  • 31. Introducción a la Programación Lic. Eduard o Uvidia nro++; } }Este programa nos mostrará lo siguiente: 9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81 9 * 10 = 90Se dice que tiene un límite conocido porque nunca irá más allá del 10, realizaráexactamente 10 iteraciones.Ejemplo 6.2Un ejemplo con límite desconocido sería invertir un número entero ingresado porteclado. #include <iostream.h> void main() { int nro=0, aux=0, rpta=0; cout<<"Ingrese un numero entero"; cin>>nro; while(nro > 0) { aux = nro % 10; nro = nro / 10; rpta = (rpta * 10) + aux; } cout<<"El numero invertido es: "<<rpta; }Este problema tiene un límite desconocido porque no puedo decir con exactitud elnúmero de iteraciones que hará, eso depende del número de cifras que tenga elnúmero ingresado por teclado. Si el número ingresado tiene 3 cifras se harán 3iteraciones y si tiene 6 se harán 6 iteraciones. En otras palabras el límite depende de laexpresión que se evalúa.La Estructura de Repetición for
  • 32. Introducción a la Programación Lic. Eduard o UvidiaEsta estructura de repetición es más utilizada cuando sabemos el número derepeticiones que deseamos ejecutar, es parecido al caso de la estructura while en elcaso de límite conocido.La notación de esta estructura es sencilla y se detalla a continuaciónfor ( condición de inicio ; expresión ; acción después de cada iteración ) { sentencia (s); }La condición de inicio quiere decir que podemos inicializar una variable que vayamosa utilizar dentro el cuerpo de la estructura for.La expresión nos indica que se seguirá iterando mientras la condición sea verdadera.La acción después de cada iteración viene a ser lo que queremos hacer variardespués de cada iteración, esta variación podría ser un incremento en la variabledefinida en la condición de inicio.Al igual que las demás estructuras de control el cuerpo de la estructura for lleva llavessi este contiene más de una sentencia o instrucción.Ejemplo 6.3Un ejemplo sencillo puede ser que quiero cantar 10 veces la canción del elefante, elcódigo sería algo así: #include <iostream.h> void main() { int i; for( i = 1 ; i<=10 ; i++) { cout<<i<<" elefante(s) se balanceaba sobre la tela de una arañan”; cout<<”como veía(n) que resistía fueron a llamar a otro elefanten "; } }El código anterior emitirá por pantalla 10 veces el mensaje de 1 elefante ....... hasta10 elefantes......El ejemplo anterior es muy sencillo pero nos muestra el funcionamiento de laestructura for.Un ejemplo algo más complejo sería el siguiente problema.mas ejercicios.
  • 33. Introducción a la Programación Lic. Eduard o UvidiaEstructura de repetición do whileEsta estructura de control es muy parecida a la estructura while lo que la hacediferente es que siempre ejecuta por lo menos una ves el cuerpo de la estructura, poreso el do, y luego valida una expresión y en función a este resultado vuelve a iterar ono.La notación de esta estructura es como sigue: do { sentencias o instrucciones } while ( expresión );Las estructura do/while lleva punto y coma a diferencia de la estructura while.Ejemplo 6.4Un ejemplo para este caso es el siguiente:Se desea ingresar por lo menos un nombre de un estudiante por teclado hasta que elusuario presione 0 para salir o cualquier otro número para continuar. #include <iostream.h> void main() { char nom[20]; //Cadena que puede contener 20 caracteres int rpta=0; do { cout<<"Ingrese el nombre de un estudiante n"; cin>>nom; cout<<"Desea continuar ingresando nombres: para salir 0"; cin>>rpta; } while(rpta != 0); }Tema 7 Arreglos 1. ESTRUCTURAS DE DATOS
  • 34. Introducción a la Programación Lic. Eduard o Uvidia 2. ARREGLO DECLARACIÓN DE UN ARREGLO INICIALIZAR UN ARREGLO ACCESO A LOS ELEMENTOS DE UN ARREGLO EJEMPLO 7.1 3. MÉTODOS DE ORDENAMIENTO 4. MÉTODOS DE BÚSQUEDAEstructuras de DatosUna estructura de datos es un colección de datos que se caracterizan por su forma deorganización y las operaciones que se pueden definir de dicha estructura.Nosotros ya estamos familiarizados con los datos simples, como enteros (int),caracteres (char), etc. Una estructura de datos es una colección de datos simples,como por ejemplo un vector o arreglo.La clasificación de las estructuras de datos se la puede hacer de la siguiente forma:ArregloUn arreglo es un conjunto o colección finita de datos de un mismo tipo. Los elementosde un arreglo pueden ser accedidos por medio de un subíndice i.Podemos considerar a un arreglo desde el punto de vista matemático como un vector,y a un arreglo bidimensional una matriz.DECLARACIÓN DE UN ARREGLO
  • 35. Introducción a la Programación Lic. Eduard o UvidiaUn arreglo se define indicando el tipo de arreglo, es decir, el tipo de datos de todos loselementos del arreglo, luego se le da un nombre al arreglo y finalmente se le da untamaño.<tipo> nombreArreglo[Tamamaño]Por ejemplo tengo un arreglo de números enteros:int arreglo[4];En el caso anterior el tipo del arreglo es entero (int).Se le da una dimensión al arreglo que va entre los caracteres [ y ] , en el casoanterior la dimensión es 4, esto quiere decir que en la memoria se reservaron 4posiciones para almacenar 4 valores enteros.INICIALIZAR UN ARREGLOExisten varias maneras de inicializar un arreglo, una manera muy sencilla es ponerentre llaves ({ }), los elementos del arreglo separados por comas.arreglo = {51, 60, 70, 95};También podemos utilizar la estructura de control for para inicializar los elementos delarreglo como se ve en el Ejemplo 7.1ACCESO A LOS ELEMENTOS DE UNARREGLOPuedo acceder a un elemento por medio de un subíndice, por ejemplo si yo quieroacceder al primer elemento tendré que hacerlo de esta manera int nro = arreglo[0];En la variable nro se almacenara el valor de 51, para acceder al segundo valor: nro = arreglo[1];En la variable nro se almacenará el valor de 60, y así sucesivamente con los demáselementos. arreglo[0] 51 arreglo[1] 60 arreglo[2] 70 arreglo[3] 95Si nos damos cuenta tener un arreglo es mucho más ventajoso que tener definidas 4variables.
  • 36. Introducción a la Programación Lic. Eduard o UvidiaDesventajas. En ocasiones, no podemos predecir con precisión el tamaño que unarreglo tendrá por lo que podemos definir un arreglo muy grande, lo que nos lleva adesperdiciar memoria, por ejemplo si defino un arreglo de 100 elemento(arreglo[100]), y sólo utilizo 5 posiciones de memoria, las demás 95 estarándesperdiciadas, la solución a este problema la veremos más adelante en lo que sedenomina punteros.EJEMPLO 7.1Se desea ingresar las notas finales de 10 alumnos de la materia de Introducción a laprogramación, para luego emitir un reporte del promedio de todas las notas. #include <iostream.h> void main() { const int TAM = 10; int i, promedio=0; int arreglo[TAM]; for(i=0; i < TAM ; i++) { cout<<"Ingrese la nota del estudiante #"<<i+1<<" :n"; cin>>arreglo[i]; } for(i=0; i < TAM ; i++) promedio = promedio + arreglo[i]; promedio = promedio / TAM ; cout<<"El promedio de las notas es: "<<promedio; }No hubiera sido muy práctico manejar 10 variables diferentes para guardar las notas de los 10alumnos, utilizando un arreglo se nos simplifican mucho las cosas.Nota: Se puede declarar un arreglo dándole la dimensión o tamaño por un valorconstante
  • 37. Introducción a la Programación Lic. Eduard o Uvidiaconst int TAM=10;int arreglo[TAM];si TAM no fuera constante el programa devolvería mensaje de error.Métodos de Ordenamiento 1. Ordenación por lección Este método es muy sencillo y se trata de buscar el elemento más pequeño del arreglo y llevarlo a la primera posición, luego se avanza a la siguiente posición, segunda, y se coloca el elemento más pequeño del arreglo y así sucesivamente. solución 2. Ordenación por Inserción Este método es capaz de mantener un arreglo ordenado insertando elementos en su correspondiente posición, por ejemplo si mi arreglo contiene los valores {1,3,4} y quiero insertar un nuevo elemento 2, el arreglo quedará de esta forma {1,2,3,4}. solución 3. Ordenación de Burbuja Este es un método de ordenación elemental, que hace todas las comparaciones necesarias para colocar un elemento en la posición que le corresponde. solución 4. Ordenación Shell 5. Ordenación QuicksortMétodos de Búsqueda 1. Búsqueda SecuencialEsta búsqueda realiza un recorrido lineal (uno por uno) por todos los elementos de unarreglo. Es útil cuando el tamaño del arreglo no es grande y no tiene a crecer sunúmero de elementos. solución 2. Búsqueda BinariaDicha búsqueda es aplicable en arreglos ordenados, pues su funcionamiento dependede este hecho.
  • 38. Introducción a la Programación Lic. Eduard o UvidiaTema 8 Arreglos Bidimensionales 1. ARREGLOS BIDIMENSIONALES DECLARACIÓN INICIALIZACIÓN EJEMPLO 8.1 2. ACCESO A LOS ELEMENTOS DE UN ARREGLO BIDIMENSIONAL 3. EJEMPLO 8.2 (MULTIPLICACIÓN DE MATRICES) 4. EJEMPLO 8.3 5. EJEMPLO 8.4 (CUADRADO PERFECTO)Arreglos BidimensionalesUn arreglos bidimensional esta compuesto, por un conjunto de elementos homogéneosy se puede acceder a los datos utilizando dos subíndices, este tipo de arreglo estambién conocido como matriz.DECLARACIÓNUn arreglo bidimensional se define así:int arreglo[10][10];float matriz[10][10];también podemos utilizar constantes para definir la dimensión del arreglo de dosdimensiones:const int N = 10;int arreglo[N][N];INICIALIZACIÓNUna matriz o arreglo bidimensional se puede inicializar de este modo:int matriz[3][3] = {{1,2,3},{4,5,6},{7,8,9}};Con la anterior asignación se crea en memoria una matriz igual a la de abajo
  • 39. Introducción a la Programación Lic. Eduard o Uvidia 0 1 2 0 1 2 3 1 4 5 6 2 7 8 9 Fig. 8.1También podemos utilizar una estructura for dentro de otra estructura for parainicializar los valores de un arreglo de dos dimensiones como se muestra acontinuación:EJEMPLO 8.1Leer desde teclado una matriz de números enteros de dimensión 3x3. #include <iostream.h> void main() { const int TAM=3; int matriz[TAM][TAM]; for( int i=0; i<TAM ; i++) { for( int j=0; j<TAM; j++) { cout<<”Ingrese el elemento [“<<i<<”,“<<j<<”] “; cin>>matriz[I][j]; } } }ACCESO A LOS ELEMENTOS DE UNARREGLO BIDIMENSIONALEn un arreglo de dos dimensiones necesitamos también dos índices para acceder a suselementos.Si utilizamos: matriz[i][j], entonces i se refiere a la fila y j a la columna.Para acceder al elemento de la segunda fila y segunda columna de la matriz de la Fig. 8.1 hacemos:int nro = matriz[1][1];
  • 40. Introducción a la Programación Lic. Eduard o UvidiaEn la variable nro se guardara el número 5.Las matrices o arreglos bidimensionales se suelen utilizar en cálculos matemáticos,operaciones con matrices, recorridos por matrices, y cualquier uso que nosotros lepodamos dar.Se pueden definir arreglos de más de 2 dimensiones, pero su manejo se dificultaríaenormemente.EJEMPLO 8.2 (MULTIPLICACIÓN DEMATRICES)Se requiere un programa que realice la multiplicación de dos matrices, para tal efectose deben ingresar las dos matrices por teclado teniendo el cuidado de controlar que laprimera matriz tenga una dimensión de N*M y la segunda de M*N para que se puedarealizar la multiplicación.Solucion...EJEMPLO 8.3Los alumnos de primer semestre de la carrera de Licenciatura en Química de laUniversidad Mayor de San Simon son 20. Todos los alumnos toman inicialmente 5materias lo que quiere decir que al final del semestre tendrán 5 notas cada alumno.Escribir un programa que pida las 5 notas de los 20 alumnos y luego devuelva elpromedio de todas las notas.Solución...EJEMPLO 8.4 (CUADRADO PERFECTO)Se debe imprimir un cuadrado mágico de tamaño N, donde N es un número impar comprendidoentre 3 y 11. Un cuadrado mágico esta compuesto de números enteros entre 1 y N, con lassiguientes características: la sumas de las filas, columnas, diagonales son iguales, como se ve en elsiguiente ejemplo: 816 357
  • 41. Introducción a la Programación Lic. Eduard o Uvidia 492El método de generación del cuadrado mágico consiste en situar el número 1 en lacasilla del centro de la primera fila, el siguiente número se debe situar en la casillaubicada en la fila anterior (por encima) y en la columna de la derecha. Este proceso serepite hasta colocar los N números.Es importante saber que el cuadrado mágico es cíclico, es decir, la fila anterior(encima) de la primera fila es la última fila y la columna a la derecha de la última es laprimera columna. En caso de que un número se debe colocar en una casilla que yaesta ocupada, entonces se elige la casilla que se encuentra debajo (en la siguiente fila,la misma columna) del número que acabamos de ubicar.Solución...Tema 9 Cadenas 1. CARÁCTER 2. CADENAS DECLARACIÓN INICIALIZACIÓN EJEMPLO 9.1 3. OPERACIONES CON CADENAS LONGITUD Ejemplo 9.2 COMPARACIÓN Ejemplo 9.3 COPIA Ejemplo 9.4 CONCATENACIÓN Ejemplo 9.5 EJEMPLO 9.6CarácterUn carácter es el átomo de los programas de computadora, un carácter es un símboloque puede ser una letra del alfabeto o un carácter especial.Un carácter ocupa 8 bits en memoria, y existen 256 caracteres diferentes. Cadacarácter se lo codifica en un número entero, es decir, que cada carácter tiene sucorrespondiente representación entera, el código ASCII es precisamente esto. Por
  • 42. Introducción a la Programación Lic. Eduard o Uvidiaejemplo el carácter ‘a’ tiene como código ASCII el entero 97. Para ver todos códigosASCII véase el anexo A.CadenasUna cadena o cadena de caracteres nos es más que una serie de caracteresmanipulados como una unidad. Si asemejamos una cadena al lenguaje castellano seríacomo una palabra, que es un conjunto de sílabas y vocales en donde cada una deestas viene a ser una carácter.Visto desde otro punto vendría a ser un arreglo de caracteres.Una cadena puede contener cualquier carácter, puede almacenar un nombre propiouna dirección, es decir, lo que nosotros precisemos.DECLARACIÓNUna cadena se la define de la siguiente manerachar cadena[20];La cadena anterior puede contener un máximo de 20 caracteres.INICIALIZACIÓNSe puede inicializar una cadena de la siguiente manera:cadena = "Hola" ;Cualquier valor que se le asigne a una cadena va entre comillas dobles " ", como en elejemplo anterior "Hola" esta entre comillas dobles.Una cadena siempre finaliza con el carácter de fin de cadena ‘0’, que siempre seañade al final automáticamente, en el ejemplo anterior se añade al final de “Hola” elcarácter de fin de cadena.También podemos considerar a una cadena como un arreglo de caracteres, y sepuede inicializar de la siguiente manera:cadena = { ‘H’, ‘o’, ‘l’, ‘a’ } ;El arreglo de caracteres se vería de esta forma:
  • 43. Introducción a la Programación Lic. Eduard o Uvidia ‘H’ ‘o’ ‘l’ ‘a’ ‘0’ 0 1 2 3 4Nótese que en la posición 4 se aumenta el fin de cadenaEJEMPLO 9.1Se desea tener un programa que sea amable con el usuario, el programa deberáconocer el nombre del usuario y responderle con un mensaje amigable. #include <iostream.h> void main() { char nombre[30]; cout<<"¿Cuál es tu nombre?"; cin>>nombre; cout<<"Que tengas un buen día "<<nombre; }En el ejemplo anterior el mensaje "¿Cuál es tu nombre?" es una cadena pues estaentre comillas. También es una cadena la variable nombre que recibirá un valor desdeteclado.Operaciones con CadenasExisten muchas operaciones que se pueden realizar utilizando cadenas, la mayoría dela operación que podemos requerir se encuentran ya a nuestra disposición dentro de lalibrería string.hLONGITUDLa longitud de una cadena la podemos conocer utilizando la función strlen.Sintaxisstrlen( cadena ) ;Ejemplo 9.2 #include <iostream.h>#include <string.h> void main() {
  • 44. Introducción a la Programación Lic. Eduard o Uvidia char nombre[30]; int tamano; cout<<"¿Cuál es tu nombre?n"; cin>>nombre; tamano = strlen( nombre ); cout<<"Tu nombre tiene "<<tamano<<”letras”; }COMPARACIÓNPara saber si dos cadenas son exactamente iguales utilizamos la función strcmp.Sintaxisstrcmp ( cadena1, cadena2 );Esta función devuelve un valor de acuerdo al resultado de la comparación.Devuelve: 0 si la dos cadenas son exactamenteiguales Mayor a 0 si la cadena1 es mayor a la cadena2 Menor a 0 si la cadena1 es menor que la cadena2Ejemplo 9.3 #include <iostream.h> #include <string.h> void main() { char contrasena[30], reContrasena[30]; int resultado; cout<<"Escribe tu contraseñan"; cin>>contrasena; cout<<"Re escribe tu contraseñan"; cin>>reContrasena; resultado = strcmp(contrasena, reContrasena); if ( resultado == 0 ) cout<<"La contraseña es aceptada"; else
  • 45. Introducción a la Programación Lic. Eduard o Uvidia cout<<"La contraseña no coincide"; }COPIAPodemos reflejar todo el contenido de una cadena a otra, en otras palabras lacopiamos tal cual, para esto utilizamos la función strcpy.Sintaxis strcpy( cadenaDestino, cadenaOrigen );Todo el contenido de la cadenaOrigen se copia a la cadenaDestino, si esta últimatuviera algún valor este se borra.Ejemplo 9.4 #include <iostream.h> #include <string.h> void main() { char nombre[30], apellido[30]; cout<<"¿Cuál es tu nombre? n"; cin>>nombre; cout<<”¿Cuál es tu apellido paternon”; cin>>apellido; strcat(nombre, “ “); //Se le añade un espacio en blanco strcat(nombre, apellido); cout<<”Tu nombre completo es “<<nombre; }CONCATENACIÓNPodemos juntar o concatenar dos cadenas una a continuación de la otra. Utilizamos lafunción strcat.Sintaxis strcat( cadenaDestino, cadenaOrigen );Todo el contenido de la cadenaOrigen se añade a continuación de la cadenaDestino, siesta última contiene algo entonces al final contendrá lo que contenía más el contenidode la cadenaOrigen.
  • 46. Introducción a la Programación Lic. Eduard o UvidiaEjemplo 9.5 #include <iostream.h> #include <string.h> void main() { char origen[30], copia[30]; cout<<"¿Qué día es hoy? n"; cin>>origen; strcpy(copia, origen); cout<<”Hoy es “<<copia; }EJEMPLO 9.6Escriba una función que permita conocer la longitud de una cadena. La función deberállamarse longitud #include <iostream.h> #include <string.h> int longitud(char cadena[]) { int acum = 0; while( cadena[acum] != 0 ) //mientras no sea fin de cadena acum++; return acum; } void main() { char nombre[30]; cout<<"¿Cuál es tu nombre?n"; cin>>nombre; cout<<"Tu nombre tiene "<<longitud(nombre)<<" letras"; }Tema 10 Punteros 1. DEFINICIÓN DE PUNTERO DECLARACIÓN DE UN PUNTERO
  • 47. Introducción a la Programación Lic. Eduard o Uvidia INICIALIZACIÓN EJEMPLO 10.1 (PUNTERO A UN ARREGLO DE ENTEROS) EJEMPLO101 10.2 (PUNTERO A UNA CADENA) 2. DIRECCIÓN Y VALOR DE UN PUNTERO EJEMPLO 10.3 3. PUNTEROS VS ARREGLOS ARREGLOS DE ENTEROS EJEMPLO 10.4 EJEMPLO 10.5 ARREGLOS DE CARACTERES (CADENAS) EJEMPLO 10.6 EJEMPLO 10.7 4. ¿POR QUÉ NO TRABAJAR CON PUNTEROS? 5. ¿POR QUÉ TRABAJAR CON PUNTEROS? 6. ASIGNACIÓN DINÁMICA DE MEMORIA EJEMPLO 10.8Definición de PunteroLos punteros son variables que contienen una dirección que hacen referencia a unvalor. Una variable común contiene o almacena un valor, mientras que un punteroalmacena la dirección que hace referencia a este valor.Para tener un mejor entendimiento de un puntero tenemos que saber que es lamemoria, a la que podemos considerar como una colección de casillas en las cuales sepuede guardar información, cada casilla esta enumera o tiene una dirección.Podríamos imaginarnos a la memoria como una gran biblioteca, la cual consta devarios estantes, supongamos que están divididos en casillas, en donde cada una puedecontener a un libro. En este ejemplo un puntero sería uno de los registros que seencuentren en el catálogo de la biblioteca, en donde cada registro contiene informaciónde la ubicación (dirección) del libro dentro de los estantes de la biblioteca. De estamanera es más fácil buscar directamente en el catálogo que estante por estante, sumanejo es más cómodo; lo mismo ocurre con los punteros.Una variable seria directamente la porción de estante o la casilla que contiene al libro.Declaración de un PunteroUn puntero puede ser de cualquier tipo y su declaración es de la siguiente forma:<tipo> * nombrePuntero ;
  • 48. Introducción a la Programación Lic. Eduard o UvidiaEsto quiere decir que un puntero tiene que tener un tipo de dato, luego le sigue eloperador de indirección (*) y luego un nombre cualquiera, el que le daremos alpuntero.Ejemplos de declaración de punteros son:int *puntero ; // es un puntero a un tipo de dato enterochar *nombre ; //es un puntero a una cadena de caracteresfloat *promedio; //es un puntero a un tipo de dato realInicializaciónPara inicializar un puntero debemos de hacerlo de acuerdo al tipo de dato al que pertenece elpuntero.EJEMPLO 10.1 (PUNTERO A UN ARREGLODE ENTEROS) #include <iostream.h> 1: 2: void main() 3: { 4: int arreglo[] = {3, 2, 1}; 5: 6: int *puntero; 7: puntero = arreglo; 8: cout<<*puntero; 9: cout<<*(puntero+0); 10: cout<<puntero[0]; 11: }En el anterior ejemplo en la línea 7 cuando se asigna puntero el arreglo, lo que se guarda enrealidad en el puntero es la dirección del primer elemento del arreglo, conociendo esta direcciónpodemos conocer los demás elementos.Entrando más en detalle las tres siguientes sentencias son iguales:cout<<*puntero;cout<<*(puntero+0);cout<<puntero[0];
  • 49. Introducción a la Programación Lic. Eduard o UvidiaTodas las anteriores sentencias muestran el primer elemento del arreglo al que apuntael puntero y es 3.Para acceder a los demás elementos se pude hacer de la siguiente manera:cout<<*(puntero+1);cout<<puntero[1];Las anteriores sentencias muestran el segundo elemento del puntero, y de estamanera se pueden mostrar todos los elementos siguientes colocando en vez de 1; 2, 3,4.... o sino utilizando un ciclo.Existe una forma más de recorrer a los elementos del arreglo:cout<<puntero[0]puntero++;cout<<puntero[0];En el primer cout se muestra el primer elemento del arreglo, es decir 3, luego seencuentra la instrucción puntero++; la cual no hace incrementar en 1 el valor delpuntero sino mas bien hace incrementar en 1 la posición a la que apunta el puntero.Entonces ahora el puntero apunta al segundo elemento.Entonces el segundo cout mostrará 2.EJEMPLO 10.2 (PUNTERO A UNA CADENA) 1: #include <iostream.h> 2: 3: void main() 4: { 5: char *cadena = “Universidad Mayor de San Simón”; 6: cout<<cadena; 7: }Dirección y Valor de un punteroComo habíamos mencionado que un puntero contiene una dirección que señala a unvalor, entonces como podríamos hacer para ver la dirección o para ver solamente elvalor. Existen dos operadores que nos permiten realizar estas operaciones, para ver
  • 50. Introducción a la Programación Lic. Eduard o Uvidiasolamente la dirección de un puntero se utiliza el operador &. Para obtener el valorque apunta nuestra variable se debe utilizar el operador *. Por ejemplo:EJEMPLO 10.3 1: #include <iostream.h> 2: void main() 3: { 4: int aux = 4 ; 5: int *puntero = &aux ; 6: cout<<"La direccion de memoria es: "<<&puntero<<endl; 7: cout<<"El valor es: "<<*puntero; 8: } Respuesta: La dirección de memoria es: 0xfff2 El valor es: 4En el ejemplo anterior en la línea 5 después de declarar un puntero se le asigna unadirección, para ser más específicos la dirección de la variable aux, esto se lograprecediendo el operador de dirección & a la variable.En la línea 6 se muestra primero la dirección del puntero y luego su valor.Punteros Vs ArreglosEs posible utilizar punteros para reemplazar a los arreglos normales, veremos comopodemos utilizar un puntero para reemplazar un arreglo de enteros y una arreglo decaracteres (cadena).ARREGLOS DE ENTEROSEsta parte la explicaremos utilizando un ejemplo escrito primero con arreglos y luegocon punteros.Programa resuelto utilizando un arreglo de enterosEJEMPLO 10.4 1: #include <iostream.h> 2: void main() 3: { 4: int notas[4]; 5: int i;
  • 51. Introducción a la Programación Lic. Eduard o Uvidia 6: for(i=0 ; i<4; i++) 7: cin>>notas[i]; 8: for(i=0; i<4; i++) 9: cout<<[i]; 10: }Programa resuelto utilizando un puntero a enterosEJEMPLO 10.5 1: #include <iostream.h> 2: void main() 3: { 4: int *notas; 5: int i; 6: for(i=0 ; i<4; i++) 7: cin>>*(notas+i); 8: for(i=0; i<4; i++) 9: cout<<*(notas+i); 10: }Esencialmente la diferencia en los ejemplos 10.4 y 10.5 esta en inicialmente en la línea4 donde se declara es arreglo con tamaño 4 en el ejemplo 10.4 y en el ejemplo 10.5en la línea 4 se declara un puntero a un entero y no se especifica tamaño alguno.Luego la forma de acceder a los datos en el ejemplo 10.4 en la línea 7 es por mediodel subíndice y corchetes "notas[i]" en el caso del ejemplo 10.5 en la línea 7, paraacceder al valor de una dato se lo hace de la siguiente manera: "*(notas+i)".Nota.- Es posible reemplazar en el ejemplo 10.5 la manera de acceder a un dato de laforma: "*(notas+i)" a la "notas[i]".ARREGLOS DE CARACTERES (CADENAS)Como habíamos visto en capítulos anteriores una cadena es un arreglo de caracteres, por lo tantopodemos utilizar punteros para representar cadenas. El siguiente ejemplo muestra como definir einicializar un puntero a una cadena.EJEMPLO 10.6 1: #include <iostream.h> 2: void main() 3: { 4: char *nombre; 5: 6: cout<<"Ingresa Tu Nombre Completon"; 7: cin>>nombre;
  • 52. Introducción a la Programación Lic. Eduard o Uvidia 8: 9: cout<<"Tu nombre es:"<<nombre; 10: }Porque es mejor usar un puntero a una cadena que solamente una cadena pues, porque con elpuntero no nos limita el tamaño que vaya a tomar la cadena.EJEMPLO 10.7En este ejemplo se hará lo mismo que en el ejemplo 9.6 utilizando un puntero a una cadena. Seescribirá una función que permita conocer la longitud de una cadena. int longitud(char *cadena) 1: { 2: char *ptr = cadena; 3: while( ptr[0] != 0 ) //mientras no sea 4: fin de cadena 5: ptr++; 6: return (int)(ptr-cadena); 7: }En la función anterior en la línea 2 se declara un puntero adicional ptr el cuál nos servirá pararealizar el cálculo. En la línea tres encontramos la siguiente expresión dentro de la estructurawhile: ptr[0]!=’0’ Esta expresión quiere decir que cuando la posición inicial del puntero seafin de cadena ‘0’ entonces el ciclo termina. En la línea 4 se encuentra la instrucción ptr++; Loque hace es que el puntero recorra un índice a la derecha, es decir apuntará al siguiente carácterde la cadena, de esta manera el ciclo recorrerá todas las posiciones de la cadena hasta encontrarel fin de cadena.Bien ahora la función tiene que devolver la longitud de la cadena, en la líne 5 podemos ver losiguiente: (ptr-cadena) esto quiere decir que se restará la última posición de la cadena menosla primera, dándonos la longitud de la cadena. Además en la línea 5 se muestra (int) que es uncasting, es decir que convierte en entero a las instrucciones que precede en este caso a lainstrucción (ptr-cadena).¿Por qué NO trabajar conpunteros?El error más común es que cuando trabajamos con punteros vamos apuntando a diferentesvalores de memoria, y cuando los dejamos de utilizar un error muy común es de no liberar el
  • 53. Introducción a la Programación Lic. Eduard o Uvidiaespacio de memoria a cual están apuntando lo que nos ocasionará una sobrecarga en la memoriacuando nuestros programas sean grandes.También por medio de los punteros es que se pueden tener acceso a valores privados, y podemosmodificar valores haciendo que nuestros programas caigan. Este hecho es muy común en loscrackers de programas, porque se valen de los punteros para cambiar valores en los programas yutilizarlos según su conveniencia.Una posibilidad que tenemos para reemplazar a los punteros es utilizar referencias.¿Por qué trabajar con punteros?Más de una vez hemos puesto en duda el uso de punteros, pues ya que trabajamos condirecciones de memoria nos pueden provocar errores más de una vez si no tenemos cuidado,además si tengo una variable y puedo obtener directamente su valor un puntero sería redundante.Bueno, de lo que tenemos que estar seguros es donde utilizar punteros, y estos son usados conmayor frecuencia en:- Asignación de Memoria Dinámica- Paso de variables por referencia en funciones- Para acceder a los atributos de una clase y a sus funcionesAsignación Dinámica deMemoriaAsignar dinámicamente memoria significa que personalicemos el espacio que ocuparánnuestras variables en memoria. Cuando reservamos memoria, esta permanece allíhasta que nosotros la liberemos. Reservar o asignar memoria es una buena técnicapara no desperdiciar memoria inútilmente, pues sólo reservaremos el espacionecesario, este detalle será muy significante en aplicaciones o programas grandes.Para reservar memoria utilizamos el operador new seguido del tipo de dato del cualqueremos reservar memoria.Por ejemplo:int *apuntador = new int ;La anterior instrucción reservará para el puntero apuntador 2 bytes que es el tamañode un tipo de dato int
  • 54. Introducción a la Programación Lic. Eduard o Uvidiachar *nombre;nombre = new char[10];La anterior instrucción reservar para el puntero a una cadena nombre 10 caracteresComo habiamos mencionado cuando reservamos memoria permenece allí hasta que laliberemos, esta operación la realizamos con el operador delete.delete apuntador;delete nombre;EJEMPLO 10.8Ingresar un nombre sin desperdicio de memoria #include <iostream.h> #include <string.h> void main() { char *nombre; char aux[30]; cout<<"Ingrese Su Nombren"; cin>>aux; nombre = new char[strlen(aux)+1]; strcpy(nombre, aux); cout<<nombre<<endl; //Le doy otros usos a mi puntero nombre delete nombre; //finalmente libero el espacio de memoria }Tema 11 Funciones 1. CONCEPTO DE UNA FUNCIÓN ¿CUÁNDO UTILIZAR FUNCIONES? DEFINICIÓN DE FUNCIONES EJEMPLO 11.1 CUERPO DE UNA FUNCIÓN 2. VALOR DE RETORNO Ejemplo 11.2
  • 55. Introducción a la Programación Lic. Eduard o Uvidia 3. ÁMBITO DE LA VARIABLES Variables locales Variables globales 4. LLAMADA O INVOCACIÓN A UNA FUNCIÓN 5. ¿CÓMO TRABAJA UNA FUNCIÓN? 6. LOS PARÁMETROS DE UNA FUNCIÓN PASO DE PARÁMETROS POR VALOR PASA DE PARÁMETROS POR REFERENCIA Ejemplo11.3 EJEMPLO 11.4Concepto de una FunciónUna función es un conjunto de instrucciones independientes cuyo objetivo es el deminimizar la complejidad de un problema, descomponiéndolo en subproblemas másfáciles de resolver. Una función debe realizar una tarea específica si le damos a unafunción más de una puede que no estemos analizando del todo el problema.Como resultado del conjunto de instrucciones de una función, se han tenido querealizar operaciones y talvez modificación de los datos que la función tenía adisposición, generalmente este resultado se devuelve en forma de valor.Estábamos familiarizados con el uso de la función principal void main(), que siempredebe de estar en cualquier programa, pero resulta que podemos crear las funcionesque nos parezcan necesarias para resolver de un manera más sencilla el problema queestemos tratando.¿CUÁNDO UTILIZAR FUNCIONES?Para saber que tareas tenemos que tratarlas como funciones se darán unas pautas acontinuación, pero las experiencia en programación será la pauta más exacta.- Cuando veamos que secciones o bloques de código se repiten varias vecespodemos llevar esta tarea a una función, lo que nos ahora esfuerzo y evita líneas decódigo repetidas.- Cuando necesitemos realizar una operación sobre algún tipo de dato y producto deello necesitemos un valor de respuesta. Como por ejemplo calcular el cuadrado de unnúmero entero.DEFINICIÓN DE FUNCIONES
  • 56. Introducción a la Programación Lic. Eduard o UvidiaUna función tiene la siguiente sintaxis:<tipo> nombreF (parámetros){ cuerpo return <expresión>}<tipo> Es el tipo de Dato que devuelve la función. Si se coloca main lafunción no devuelve ningún valor.nombreF Es el nombre que le damos a nuestra función puede ser elque queramos menos la palabras reservadas del lenguaje.Parámetros Es un conjunto de variables, las cuales se escriben con sutipo de dato y su nombre, separadas por comas, que vienen a constituirlos argumentos de la función.Cuerpo Es todo lo que se encuentra entre las llaves {} y contieneun conjunto de sentencias.return Esta sentencia se usa si el tipo de dato de retorno no esvoid. Return devuelve una expresión. Se pueden colocar varios returns alo largo de un programa y cuando la función encuentra a cualquieratermina.EJEMPLO 11.1En el siguiente ejemplo se definirá una función para que calcule el área de untriángulo1: #include <iostream.h>2: int areaTriangulo( int base, int altura)3: {4: int area;5: area = base * altura / 2;6: return area;7: }8:9: void main()10: {
  • 57. Introducción a la Programación Lic. Eduard o Uvidia11: int baseT = 3, alturaT = 4;12: cout<<"El area del triángolo es:13: "<<areaTriangulo(baseT,alturaT);14: }En la línea 3 podemos ver que el tipo de dato que devolverá la función es un entero(int) que el nombre de la función es areaTriangulo y tienen dos parámetros de tipoentero base y altura.El cuerpo de la función comprende todas las líneas de código desde la línea 4 hasta lalínea 8.CUERPO DE UNA FUNCIÓNEl cuerpo de una función contiene todas las instrucciones que le permiten realizar su tarea,podemos definir variables cuyo ámbito o vida tendrá duración sólo en el cuerpo de la función(variables locales).También se puede hacer llamada a otras funciones o declarar tipos de datos definidospor el usuario, en síntesis se puede trabajar en el cuerpo de una función con todas lasventajas que el lenguaje nos ofrece pero orientado a la resolución de un problemaespecífico.VALOR DE RETORNOUna función después de haber realizado operaciones con los datos que se leproporciona debe de devolver algo, ya sea en forma de un valor o sino haber efectuadoalguna modificación con los datos o sino mostrar algo por pantalla.El valor que devuelve la función se fija con la instrucción return, cuando la funciónencuentra esa palabra acaba e inmediatamente devuelve el valor que se indica. En elejemplo 11.1 en la línea 7 se devuelve el valor que contiene la variable area.Existen funciones que no devuelven ningún valor, estas llevan como tipo de dato deretorno void, pero no significan que no hacen nada, pueden realizar cálculos osimplemente mostrar algo por pantalla.Ejemplo 11.2 1: #include <iostream.h> 2: 3: void mostrar(char nombre[]) 4: 5:
  • 58. Introducción a la Programación Lic. Eduard o Uvidia { 6: cout<<nombre; 7: } 8: void main() 9: { 10: mostrar(“UMSS”); 11: }ÁMBITO DE LA VARIABLESVariables localesTodas la variables que se crean dentro de el cuerpo de una función tienen ámbito ovida sólo en el cuerpo mismo de la función, estas variables son llamadas locales. Estoquiere decir que podemos utilizar estas variables sólo en la función pues al terminaresta las variables se destruyen. En el ejemplo 11.1 en la línea 5 se define la variablearea, esta variable tiene ámbito sólo en el cuerpo de la función, no podríamos accedera esta variable desde la función principal o cualquier otra parte del programa.Variables globalesLas variables globales son definidas fuera de cualquier función, están definidas de unmanera parecida a las librerías, de estas forma estas variables tienen un alcance globala todo el programa, esto quiere decir que pueden ser accedidas de cualquier parte delprograma, es decir, de cualquier función. Más informaciónLlamada o Invocación a unafunciónUna vez escrita la función, podemos utilizarla escribiendo su nombre y luego dándolelos parámetros correspondientes:Sintaxis
  • 59. Introducción a la Programación Lic. Eduard o Uvidia NombreFuncion( parámetros )En el ejemplo 11.1 en la línea 13 se llama a la función areaTriangulo para que elvalor de retorno se muestre directamente por pantalla. En el ejemplo 11.2 se llama ala función mostrar en la línea 10.El valor que nos retorna una función podemos utilizarlo directamente o sinoalmacenarlo en alguna variable eso dependerá de nuestros requerimientos osimplemente de nuestra preferencia.¿Cómo trabaja una función?Una función es un conjunto de sentencias independientes que se ejecutan cada vezque se llama o invoca a una función. Cada vez que se encuentra una llamada a unafunción el control del programa se pasa a la función, es decir, la ejecuta y cuando estaacaba entonces el control vuelve a la sección del programa desde donde se hizo lallamada.En cuanto a los parámetros, en el caso que utilicemos variables, no se debe de pensarde que existe alguna relación entre las variables que se pasan y las que estándefinidas como parámetros en la función, a menos que las referenciemos. En elejemplo 11.1 cuando se hace la llamada a la función areaTriangulo se utiliza dosvariables baseT y alturaT, estas dos variables nada tienen que ver con las variablesque se definieron como parámetros de la función en la línea 13 base y altura, lo queocurre es que baseT es correspondiente a base al igual que alturaT y altura.Lo que es importante es que las variables que se pasen sean del mismo tipo que de losparámetros definidos en la función.Los parámetros de una funciónUna función puede tener de 0 a n parámetros y lo más común es que utilice los valoresque guardan los parámetros para realizar operación y luego devolver un resultado,este el caso del ejemplo 11.1 en el que la función areaTriangulo tiene dosparámetros enteros base y altura, estas variables contienen los valores a partir delos cuales se calculará el área del triángulo. Debemos tener en cuenta que losparámetros son variables locales, sólo las podemos utilizar dentro de la función.PASO DE PARÁMETROS POR VALOR
  • 60. Introducción a la Programación Lic. Eduard o UvidiaEsto significa que cuando hacemos la llamada a la función como parámetros le damosvalores, si es que colocamos variables como parámetros la función solo toma losvalores. En el ejemplo 11.1 en la línea 13 se llama a la función areaTriangulo así:areaTriangulo(baseT,alturaT)Cuando el paso de parámetros es por valor viene a ser como si sólo los valores de lasvariables baseT y alturaT se pasarán como parámetros a la función así:areaTriangulo(3,4)En conclusión lo más importante de esto es que después de que se ejecute la funciónlas variables que se le han pasado no sufren ningún cambio.En el ejemplo 11.1 después de la línea 13, cuando se ha hecho la llamada a la funciónlas variables baseT y alturaT no habrán cambiado en nada.PASA DE PARÁMETROS POR REFERENCIAEn este caso existe un forma de las variables después de haberlas pasado comoparámetros en una función sufran cambios, producto de las operaciones que serealizan dentro de la función, para mostrar como funciona esta parte se resolverá elmismo problema que en el ejemplo 11.1 utilizando paso de parámetros por referencia.Ejemplo11.3 #include <iostream.h> 1: 2: void areaTriangulo( int &base, int altura) 3: 4: 5: { 6: base= base * altura / 2; 7: } 8: void main() 9: { 10: int baseT = 3, alturaT = 4; 11: areaTriangulo(baseT,alturaT); 12: cout<<"El area del triángolo es: "<<baseT; 13: }
  • 61. Introducción a la Programación Lic. Eduard o UvidiaPara que los cambios de un parámetro se reflejen se debe de utilizar el operador dereferencia &, en el ejemplo anterior en la línea 3 en la definición de la función se utilizael operador & que va delante de la variable base, esto quiere decir que lodos loscambios que se hagan sobre esta variable en la función, tendrán efecto en la variableque se utilice al hacer la llamada, baseT en el anterior ejemplo. En la línea 11, se llamaa la función:areaTriangulo(baseT,alturaT);En este caso la variable baseT es la correspondiente a la variable base de la funciónareaTriangulo todos los cambios que se realicen en la variable base afectarán a lavariable baseT.Después de la línea 11 la variable baseT habrá cambiado conteniendo el área deltriángulo.¿Por qué ocurre esto?. Porque ya no se pasan simplemente valores sino de pasa undirección de memoria.EJEMPLO 11.4Escribir una función que calcule los primeros 10 números primos. #include <iostream.h>1: int esPrimo( int nro)2: {3: for(int i=2; i<= nro/2 ; i++)4: if (nro % i == 0)5: return 0;6: return 1;7: }8:9:10: void main()11: {12: int nroPrimo = 0, contador = 1;13: while( nroPrimo < 10)14: {15: if (esPrimo(contador))16:17: {18: nroPrimo++;19: cout<<"El "<<nroPrimo<<"º número primo es:20: "<<contador<<endl;21: }22: contador++;23: } }
  • 62. Introducción a la Programación Lic. Eduard o UvidiaTema 12 Programaciónorientada a objetos 1. PROGRAMACIÓN ORIENTADA A OBJETOS (POO) POR QUE UTILIZAR PROGRAMACIÓN ORIENTADA A OBJETOS 2. CONCEPTO DE CLASE DEFINICIÓN DE UNA CLASE ABSTRACCIÓN ENCAPSULACIÓN CONTROL DE ACCESO A LOS MIEMBROS ACCESO A LOS MIEMBROS DE UNA CLASE 3. CONCEPTO DE OBJETO DEFINICIÓN DE UN OBJETO CLASES VS OBJETOS 4. INICIALIZACIÓN DE OBJETOS DE CLASE (CONSTRUCTORES) 5. OBTENER ATRIBUTOS DE UNA CLASE 6. MODIFICAR ATRIBUTOS DE UNA CLASE 7. IMPLEMENTACIÓN DE UNA FUNCIÓN FUERA DE LA CLASE EJEMPLO 12.1 EJEMPLO 12.2Programación Orientada aObjetos (POO)La programación orientada a objetos es un técnica utilizada por los programadorespara adaptar el trabajo de programar a la Psicología y Filosofía humana. Es una formahumana de programar y plasmar en programas de computadora objetos de la vidareal, por ejemplo puedo modelar en un programa de computadora un mamífero comoun gato, suena algo complicado pero más adelante veremos que no es así.En la realidad podemos considerar a un objeto como todo aquello que ocupaun espacio, tiene volumen y además podemos percibirlo por nuestros sentidos,ya sea animado o inanimado. Un objeto puede ser una casa, un animal, unasilla, etc.
  • 63. Introducción a la Programación Lic. Eduard o UvidiaPara hacer un programa orientado a objetos debemos primero identificar queobjetos vamos a necesitar para resolver el problema que estemos tratando,para hacer esto nos guiaremos en como un objeto es en la vida real. Una vezque hagamos este análisis estaremos listos crear primero las clases y luego losobjetos en nuestro programa.Ahora entrando en más detalles de las características de la ProgramaciónOrientada a Objetos, esta encapsula datos (atributos) y funciones(comportamientos) en objetos, los datos y funciones están íntimamenterelacionados entre sí. Los objetos tienen la propiedad de ocultamiento deinformación, esto significa que si bien saben como comunicarse entre si através de interfaces bien definidas, normalmente no se permite que un objetosepa como están implementados otros objetos.POR QUE UTILIZAR PROGRAMACIÓNORIENTADA A OBJETOSPorque podemos hacer que el trabajo de programar sea más sencillo, nuestrosprogramas será serán más claros y ordenados.Por ejemplo si quiero almacenar la edad de una persona, tengo que hacerlo enuna variable de tipo entero (int), si quiero almacenar su nombre tendré queutilizar una cadena, y si quiero otros datos de la persona tendré que seguircreando variables. Porque no crear una variable de tipo persona directamenteque de una sola vez contenga todo lo que quiero saber de una persona, como
  • 64. Introducción a la Programación Lic. Eduard o Uvidiasu nombre, edad, sexo, etc. Esto es posible, precisamente es lo que nospermite hacer la programación orientada a objetos, podemos crear unavariable persona que contenga muchos datos de una sola vez, pero no lellamaremos variable sino clase, podemos crear clases en un programa ydespués las podemos utilizar.CONCEPTO DE CLASEUna clase es una agrupación de datos (atributos), generalmentecontenidos en variables, y de funciones, (comportamientos) queoperan sobre esos datos.DEFINICIÓN DE UNA CLASESintaxisclass nombreClase{ datos funciones};nombreClase Es cualquier nombre que elija para darle a mi clase,menos palabras reservadas del lenguaje.datos Son los datos o atributos que tendrá mi clase, como son generalmentevariables, se debe definir las variables en esta parte.funciones Se debe escribir la definición de las funcionesUna clase se la crea inspirada en un objeto de la vida real, por ejemplo quiero modelarun gato en un programa entonces tengo que escribir una clase que se llame gato.Como sigue: class gato {
  • 65. Introducción a la Programación Lic. Eduard o Uvidia };Al anterior ejemplo todavía no contiene ningún atributo ni tampoco ningunafunción pero la iremos refinando poco a poco.También podemos crear clases que en la realidad no se consideren como un objeto porejemplo una clase hora.ABSTRACCIÓNAbstracción significa considerar aisladamente las cualidades de un objeto, consiste enrescatar las características más importantes de algo y representarlo de una maneramás simplificada.En el ejemplo de la construcción de nuestra clase gato se debe de abstraer lascualidades más importantes de un gato y de esta forma podremos representarlo en unprograma de computadora. class gato { char color[20]; //atributo int vidas; //atributo void miau() //comportamiento { cout<<”Miiaaauu!!!“; } };Ahora la clase gato esta más completa porque se han identificado lascualidades más importante de un gato, en este caso hemos dicho que un gatotiene un color y tiene vidas como atributos y además de ello dice miau que esuna forma de comportase, esta es un forma muy simplificada de describir a ungato pero nos basta para crear la clase gato.A los datos dentro de una clase se les llama variables miembro y a las funciones se lesllama funciones miembro.ENCAPSULACIÓN
  • 66. Introducción a la Programación Lic. Eduard o UvidiaLa encapsulación es una característica de la POO que trata de mantener unidos losdatos y los comportamientos de una entidad u objeto.Una clase encapsula atributos y funciones lo que hace posible el ocultamiento deinformación, que quiere decir que cuando yo quiera usar una determinada clase,creando objetos de ella, no necesito conocer los detalles de su implementación. Sinuestra clase gato la utilizaría un extraño cuando utiliza la función miau() sólo tieneque saber que con esa función el gato maulla pero no como es que esta hecha lafunción.CONTROL DE ACCESO A LOS MIEMBROSEntendemos por miembros a todos los atributos y funciones, para controlar el acceso alos miembros de una clase se utilizan tres tipos de controladores: public (público),private (privado) y protected (protegido).Con estos controladores le damos ciertas restricciones de acceso a los miembros denuestra clase.Todos los miembros, tanto atributos como funciones, que sean declarados comoprivados sólo pueden ser accedidos desde funciones pertenecientes a la clase.Los miembros que sean declarados públicos pueden ser accedidos desde cualquierparte del programa.Refinando más nuestra clase gato quedaría de la siguiente manera: class gato { private: char color[20]; //atributo int vidas; //atributo public: void miau() //comportamiento { cout<<”Miiaaauu!!!“;
  • 67. Introducción a la Programación Lic. Eduard o Uvidia } };Generalmente los datos o atributos son privados porque no queremos que nadie losconozca y no tengan acceso a ellos. Las funciones en cambio son publicas para quepuedan ser accedidas y de esta manera manipular la clase.ACCESO A LOS MIEMBROS DE UNA CLASEPara tener acceso a los miembros de una clase podemos hacerlo desde dos partes delprograma:- Desde dentro de la clase, accedemos a cualquier miembro directamente por elnombre, si es una variable por el nombre que le dimos a la variable y si es una funciónde igual manera por su nombre.- Desde fuera de la clase, podría ser desde la función principal o cualquier otrasección del programa que no pertenezca a la clase. Para acceder a un miembro lohacemos de la siguiente maneraNombreObjeto.miembroUtilizamos un punto entre el nombre del Objeto, que pertenece a una clase, y elmiembro.Concepto de ObjetoUn objeto es un elemento declarado de una clase este se denomina objeto de la clase.Una vez definida e implementada una clase, es posible declarar o crear elementos deesta clase de modo similar a como se declaran las variables del lenguaje (int, double,char, …).De una única clase se pueden declarar o crear numerosos objetos. La clase es logenérico: es el patrón o modelo para crear objetos.DEFINICIÓN DE UN OBJETOSintaxis
  • 68. Introducción a la Programación Lic. Eduard o Uvidia nombreClase nombreObjeto;nombreClase Es el nombre de la clase que hemos creado y de lacual queremos crear un objeto o una instancia.nombreObjeto Cualquier nombre que queramos menos palabrasreservadas.Ahora vamos a crear objetos de nuestra clase gato en la función principal: void main() { gato Tom, Gardfield; Tom.miau(); Gardfield.miau(); }Cada objeto tiene sus propias copias de los miembros de la clase, con sus propiosvalores, en general distintos de los demás objetos de la clase.Para tener acceso a los miembros de un objeto desde fuera de la clase, se utiliza elpunto entre el nombre del objeto y el nombre del miembro, como se muestra en elejemplo anterior.CLASES VS OBJETOSLa relación entre clases y objetos en los programas de computadora esmuy similar al de las variables por ejemplo si tengoint nota; gato Tom;gato es a Tom como int es a nota, int es un tipo de dato, gato es un tipo de datodefinido por el usuario, ambos son tipos de datos, nota es el nombre de la variable, yTom es el nombre del objeto.nota es una variable entera en donde se almacenan sólo un dato entero.
  • 69. Introducción a la Programación Lic. Eduard o UvidiaTom es un objeto que puede almacenar varios tipos de datos y además tiene funcionespropias de su clase.Inicialización de Objetos deClase (CONSTRUCTORES)Cuando se crea un objeto de alguna manera tenemos que inicializar los valores de sus atributospara que no contengan un valor disparado o queramos fijarlos a un determinado valor inicial. Lainicialización de los atributos lo podemos hacer mediante el constructor de la clase.El constructor es una función que no tiene tipo y se llama de la misma forma que laclase, y es invocada cada vez que se crea un objeto de la clase automáticamente.En nuestro ejemplo de la clase gato sería así: class gato { private: char color[20]; //atributo int vidas; //atributo public: gato(char c[]) //constructor { strcpy(color,c); vidas = 9; } void miau() //comportamiento { cout<<"Miiaaauu!!!";
  • 70. Introducción a la Programación Lic. Eduard o Uvidia } }; void main() { gato Tom("blanco"), Gardfield("negro"); }Como dijimos que nuestro constructor es una función entonces puede tenerparámetros o no, depende de nuestros requerimientos, el constructor de la clase gatorecibe un parámetro que es el color, lo que quiere decir que al momento de crear unobjeto le daremos el color del que quiero que sea mi gato. Además en el constructor seinicializa el número de vidas en 9, es decir, que cada objeto de la clase gato que secree tendrá 9 vidas.Obtener atributos de una ClaseHabíamos mencionado que cuando un atributo es privado no se puede acceder desdefuera de la clase, entonces para poder obtener el valor de este atributo tenemos quecrear una función que nos haga este trabajo, y si quisiéramos cambiar este valortambién tendríamos que crear una función para este propósito.Veamos como podemos hacer esto en nuestra clase gato: class gato { private: char color[20]; //atributo int vidas; //atributo public: gato(char c[]) //constructor {
  • 71. Introducción a la Programación Lic. Eduard o Uvidia strcpy(color,c); vidas = 9; } void miau() //comportamiento { cout<<"Miiaaauu!!!"; } int devVidas() //función miembro { return vidas; } }; void main() { gato Tom("blanco"), Gardfield("negro"); cout<<”Tom tiene ”<<Tom.devVidas()<<” vidas”; }La función devVidas devuelve el valor de la variable vida que esta encapsulada dentrode la clase gato. Si hubiéramos utilizado en la función principal directamente lasiguiente función:cout<<”Tom tiene ”<<Tom.vidas<<”vidas”;Existiría un error porque estamos violando los controles de acceso a las variables, vidas es unvariable privada. Si vida fuera publica la anterior sentencia estaría correcta.Modificar atributos de una clasePara cambiar el valor de un atributo fuera de la clase debemos deconstruir una función que nos realice este trabajo.
  • 72. Introducción a la Programación Lic. Eduard o UvidiaEn la clase gato si queremos modificar el valor del atributo vidas será dela siguiente manera: class gato { private: char color[20]; //atributo int vidas; //atributo public: gato(char c[]) //constructor { strcpy(color,c); vidas = 9; } void miau() //comportamiento { cout<<"Miiaaauu!!!"; } int devVidas() //función miembro { return vidas; } void modVidas(int v) //función miembro { vidas = v; } }; void main() {
  • 73. Introducción a la Programación Lic. Eduard o Uvidia gato Tom("blanco"), Gardfield("negro"); cout<<"Tom tiene "<<Tom.devVidas()<<" vidas"; Tom.modVidas( Tom.devVidas() - 1 ); cout<<"Tom tiene "<<Tom.devVidas()<<" vidas"; }La función modVidas recibe un parámetro que es el nuevo valor que contendrá lavariables vidas.Con la sentencia: Tom.modVidas( Tom.devVidas() - 1 ); se disminuye en 1 el valordel atributo vidas.Podemos ver que dentro de la función modVidas para acceder a la variable vidas se lohace directamente, esto es porque lo estoy haciendo desde una función de la mismaclase.Implementación de una funciónfuera de la claseEs posible declarar una función dentro de la clase, e implementarla fuera de ella comose muestra a continuación: class gato { private: char color[20]; //atributo int vidas; //atributo public: gato(char[]); //declaración del constructor
  • 74. Introducción a la Programación Lic. Eduard o Uvidia void miau(); //declaración de la función }; gato::gato(char c[])//implementación del constructor { strcpy(color,c); vidas = 9; } void gato::miau()//implementación de la función { cout<<"Miiaaauu!!!"; }Para implementar una función fuera de la clase se debe de declararla tan solo dentrode la clase, y para implementarla fuera de la misma se debe de colocar primero el tipode la función luego la clase a la que pertenece junto se colocan 4 puntos (::) y elnombre de la función, luego se deben de declarar todos los parámetros que tiene lafunción. En la declaración de la función dentro de la clase no es necesario darle unnombre a las parámetros basta con el tipo, el nombre se les dará cuando seimplemente la función.Ejemplo 12.1Simular la pelea de dos gatos, crear dos objetos gato e implementar una función quele permita a un gato arañar a otro gato, cada arañazo que recibe un gato le quita unavida. El programa debe de decidir de forma aleatoria que gato es arañado, todo estomientras ninguno de los gatos tengan 0 vidas. Al final del programa deberá de decirque gato ganó. #include <iostream.h> #include <string.h>
  • 75. Introducción a la Programación Lic. Eduard o Uvidia#include <stdlib.h>class gato{private:char color[20]; //atributoint vidas; //atributopublic:gato(char c[]) //constructor{strcpy(color,c);vidas = 9;}void miau() //comportamiento { cout<<"Miiaaauu!!!n"; }int devVidas() //función miembro{ return vidas; }void modVidas(int v) //función miembro{ vidas = v; }void arania(gato &otroGato)
  • 76. Introducción a la Programación Lic. Eduard o Uvidia{otroGato.modVidas( otroGato.devVidas() - 1 ); otroGato.miau();}};void main(){gato Tom("blanco"), Gardfield("negro");int quienArania;randomize(); //para que se generen nros randomicosdistintoswhile( Tom.devVidas() > 0 || Gardfield.devVidas() > 0 ) { quienArania = random( 2 ); if ( quienArania ) Tom.arania( Gardfield ); else Gardfield.arania( Tom ); }if(Tom.devVidas() == 0)
  • 77. Introducción a la Programación Lic. Eduard o Uvidia cout<<"Ganó Gardfield"; else cout<<"Ganó Tom"; }Ejemplo 12.2Construir un tipo de dato que nos permita manejar fracciones, es decir, que este tipode dato tenga información del numerador y denominador.Cuando se cree un objeto de esta clase deberá tener valores iniciales de 0, tanto en elnumerador como en el denominador, y además debe de poder realizar las siguientesfunciones: mostrar. Muestra un quebradollenar. Llena los datos del quebrado sumar. Suma de dos quebrados multiplicación. Multiplica dos quebrados simplificar. Simplifica un quebrado #include <iostream.h> class fraccion { private: int nume; int deno; public: fraccion() //constructor
  • 78. Introducción a la Programación Lic. Eduard o Uvidia { nume=0; deno=0; } //muestra la fracción por pantalla void mostrar(); //llena con datos las variables de la fraccion void llenar(int,int); //la función sumar recibe como parámetro un tipo de dato fraccion // y devuelve el resultado como un tipo de datofraccion fraccion sumar(fraccion); //la función multiplicar recibe como parámetro untipo de dato fraccion // y devuelve el resultado como un tipo de datofraccion. fraccion multiplicar(fraccion); //simplifica una fraccion void simplificar(); //la funcion euclides calcular el mínimo común divisor dedos nros int euclides(int,int);};
  • 79. Introducción a la Programación Lic. Eduard o Uvidiavoid fraccion::mostrar(){ /* Si la fraccion tiene denominador 1 se mostrara soloel numerador ó Si la fraccion tiene como numerador 0 se mostrarasólo 0 */ if((deno == 1) || (nume == 0)) cout<<nume<<"t"; //Sino se muestra toda la fraccion else cout<<nume<<"/"<<deno<<"t";}void fraccion::llenar(int n, int d){ nume=n; deno=d;}int fraccion::euclides(int nro1, int nro2){ int aux;
  • 80. Introducción a la Programación Lic. Eduard o Uvidia while( nro1 > 0 ) { if(nro1 < nro2) { aux = nro1; nro1 = nro2; nro2 = aux; } nro1 = nro1 - nro2; } return nro2;}void fraccion::simplificar(){ int mcd; mcd = euclides(nume, deno); nume /= mcd; deno /= mcd;}fraccion fraccion::sumar(fraccion otraFracc){
  • 81. Introducción a la Programación Lic. Eduard o Uvidia fraccion aux; int mcm = deno * otraFracc.deno; aux.nume=(mcm/deno)*nume + (mcm/otraFracc.deno)*otraFracc.nume; aux.deno=mcm; return aux; } fraccion fraccion::multiplicar(fraccion otraFracc) { fraccion aux; aux.nume=nume * otraFracc.nume; aux.deno=deno * otraFracc.deno; return aux; }En el anterior ejemplo se muestra como esta implementada la clase fracción, ahoraveamos cómo se usa: void main() { fraccion A,B,C; A.llenar(1,2); B.llenar(2,2); A.mostrar(); B.mostrar();
  • 82. Introducción a la Programación Lic. Eduard o UvidiaC = A.sumar(B);C.simplificar();C.mostrar();C = A.multiplicar(B);C.simplificar();C.mostrar();}