SlideShare ist ein Scribd-Unternehmen logo
1 von 82
Introducción a la Programación                            Lic.
                                                                        Eduard
                                                                        o Uvidia


Tema 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 decisiones
lógicas a velocidades hasta miles de millones de veces más rápidas que las alcanzables
por los seres humanos. Por ejemplo, muchas de las computadoras personales actuales
pueden realizar decenas de millones de sumas por segundo, y los más sorprendente es
que puede hacer todo eso sin cometer errores, se imaginan a una persona provista de
una calculadora cuánto tiempo le tomaría realizar el mismo cálculo
Introducción a la Programación                              Lic.
                                                                           Eduard
                                                                           o Uvidia



Componentes de una
computadora
Una computadora de cualquier forma que se vea tiene dos tipos de componentes: El
Hardware (Parte Física) y el Software (Parte Lógica).


Hardware
Llamamos Hardware a la parte física de la computadora, pues vienen a ser las partes
que podamos percibir con el sentido del tacto. El hardware que compone a una
computadora es muy complejo, pues una pequeña pieza puede contener millones de
transistores. Ejemplo de Hardware podría ser la Tarjeta Madre, Memoria Principal, CPU,
etc.

Partes del Hardware de una computadora

El Hardware esta compuesto por seis unidades o secciones básicas y son las
siguientes:

1. Unidad de entrada. Que es la sección de recepción de la computadora: obtiene
información (datos y programas de computadora) y lo coloca a disposición de las
demás unidades para que sea procesada. La información se introduce por medio del
teclado 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 con
los datos que hemos introducido. Por ejemplo mediante un dispositivo de entrada
como el teclado, podemos escribir palabras la cuales las podremos observar por un
dispositivo de salida como el monitor o la pantalla.

Otros dispositivos de salida son también la impresora, los parlantes, tarjetas de video.
Introducción a la Programación                              Lic.
                                                                          Eduard
                                                                          o Uvidia

3. Unidad de memoria. También se la conoce como memoria RAM, es el almacén
primario de la computadora por lo que es relativamente de baja capacidad. Esta
memoria es la más importante de la computadora, porque guarda información
necesaria para que la computadora pueda arrancar y funcionar, en otras palabras
guarda información de todos los programas que se ejecutan en una computadora
incluyendo al Sistema Operativo.




4. Unidad aritmética y lógica (ALU). Esta es la parte de la computadora en donde
se realizan los cálculos. sumas o restas. Aquí están también los mecanismos de
decisión que permiten a la computadora, por ejemplo, comparar dos elementos de la
unidad de memoria para determinar si son iguales o no.

5. Unidad central de procesamiento (CPU). Es el cerebro de la computadora, pues
es el coordinador de la máquina y la parte encargada de supervisar el funcionamiento
de las otras secciones. La CPU le dice a la unidad de entrada cuándo debe leerse
información para introducirla en la unidad de memoria, le dice a la ALU cuando la
información de la unidad de memoria debe utilizarse en los cálculos y le dice la unidad
de salida cuando debe enviar la información que está es la unidad de memoria a
ciertos dispositivos de salida.

6. Unidad de almacenamiento secundario. Esta es el almacén de largo plazo y de
alta capacidad de la computadora. Los programas y datos que nos están siendo
utilizados por las otras unidades normalmente se colocan en dispositivos de
almacenamiento secundario hasta que necesiten, posiblemente horas, días, meses o
incluso años después. El acceso es más lento comparado con el de la memoria primaria
o memoria RAM.




Software
Nos referimos con software a la parte lógica de la computadora a los procedimientos
que el hardware realiza inducidos por el software y este a su vez por nosotros. El
software es como un traductor que hace que nuestras órdenes se conviertan en
realidad, manipulando el hardware o la parte física.

El software esta compuesto por programas de computadora.

Programa

Un programa es un conjunto de instrucciones lógicas que le dicen a la computadora
que debe hacer, además un programa debe satisfacer la necesidades de los usuarios
Introducción a la Programación                               Lic.
                                                                            Eduard
                                                                            o Uvidia

utilizando eficientemente los recursos disponibles. Los programas de tratan con mayor
profundidad en el Tema 3.

Los programas que escribiremos más adelante serán utilizando un lenguaje de
programación muy popular como lo es el C++.

Código Fuente

Le daremos el nombre de código fuente a los programas que escribamos en un
determinado lenguaje de programación, que simplemente estará compuesto por
instrucciones escritas por un programador. El código fuente no constituye software
propiamente dicho pero es una instancia mediante la cual se llega al Software

Sistema Operativo

Es el programa más importante que se ejecuta en una computadora. Cualquier
computadora de propósito general debe operar con un sistema operativo para lograr
ejecutar otros programas. El sistema operativo ejecuta las tareas básicas, como de
reconocer entradas desde el teclado, enviar mensajes a pantalla, manteniendo rastro
de los archivos y directorios en el disco, y controlar los dispositivos periféricos como
las impresoras.

Para grandes sistemas, el sistema operativo tiene una gran responsabilidad y
cualidades. Es como un policía de transito, quien se asegura de que los diferentes
programas que se ejecutan al mismo tiempo no interfieran unos con otros.
También es responsable de la seguridad, asegurando que usuarios no autorizados
accedan al sistema.
El sistema operativo provee de una plataforma de software por encima de la cual otros
programas, llamados aplicaciones, pueden ejecutarse. Los programas de aplicación
tienen que crearse de acuerdo a la plataforma en donde se van a ejecutar. La elección
de sistema operativo, entonces, determina el tipo de uso que se le va ha dar a la PC
como también el tipo de aplicaciones que se puedan ejecutar.

Para las PCs (computadoras personales) los más populares sistemas operativos son el
DOS, OS/2, y Windows, además de otros de libre distribución como el Linux.
Introducción a la Programación                              Lic.
                                                                           Eduard
                                                                           o Uvidia



Lenguajes de alto nivel y
lenguajes de bajo nivel
Los programadores escriben instrucciones en diversos lenguajes de programación. La
computadora puede entender directamente algunos de ellos, pero otros requieren
pasos de traducción intermedios. Hoy día se utilizan cientos de lenguajes de
computadora, los cuales pueden dividirse en tres tipos generales:

1. Lenguaje máquina

Una computadora sólo puede entender el lenguaje máquina. El lenguaje de máquina
ordena a la computadora realizar sus operaciones fundamentales una por una. Dicho
lenguaje es difícil de usar para lar persona porque trabajar con números no es muy
có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. El
lenguaje ensamblador consiste en pequeñas abreviaturas de palabras en ingles. Se
crearon los programar traductores para convertir los programas escritos en lenguaje
ensamblador a lenguaje máquina a velocidades de computadora. Estos lenguajes aun
requerían muchas instrucciones para realizar simples operaciones.

3. Lenguajes de alto nivel

Para acelerar, aún más, el proceso de programación se desarrollan los lenguajes de
alto 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 que
asemejan el ingles cotidiano y contiene notaciones matemáticas de uso común.



Ambientes de Programación
Los programadores necesitan un ambiente de programación, es decir, una lugar en
donde puedan plasmar sus ideas, un lugar en donde puedan escribir sus programas,
en otras palabras donde puedan programar. Los ambientes de programación vienen a
ser los diferentes leguajes de programación que existen, son muy variados, con
muchas 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; entre
los más conocidos de Alto nivel podemos mencionar a C, C++, JAVA, Fortran, T.
Pascal, etc.
Introducción a la Programación                                     Lic.
                                                                                    Eduard
                                                                                    o Uvidia


Traductor de lenguajes de
programación
Los traductores son programas que traducen los programas en código fuente, escritos
en lenguajes de alto nivel, a programas escritos en lenguaje máquina. Los traductores
pueden ser de dos tipos: compiladores e interpretes


Compilador
Un compilador es un programa que lee el código escrito en un lenguaje (lenguaje
origen), 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, el
compilador le hace notar al usuario la presencia de errores en el código fuente del
programa. Vea la figura de abajo.




El C++ es un lenguaje que utiliza un compilador y su trabajo es el de llevar el código
fuente 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 archivo

parcial (un objeto) que tiene extensión obj luego el compilador invoca al linker que convierte al

archivo objeto en un ejecutable con extensión exe que como ya sabemos es un archivo que esta

en 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 errores
en el programa, es decir, revisa que todo este en orden por ejemplo variables y
funciones bien definidas, revisa todo lo referente a cuestiones sintácticas, esta fuera
del alcance del compilador que por ejemplo el algoritmo utilizado en el problema
funcione bien.
Introducción a la Programación                               Lic.
                                                                            Eduard
                                                                            o Uvidia

La siguiente figura muestra los pasos para tener un programa ejecutable desde el
código fuente:




Interprete
Los 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. Un
interprete lee el código como esta escrito y luego lo convierte en acciones, es decir, lo
ejecuta en ese instante.

Existen lenguajes que utilizan un Interprete, como por ejemplo JAVA, y su interprete
traduce en el instante mismo de lectura, el código en lenguaje máquina para que
pueda ser ejecutado.

La siguiente figura muestra el funcionamiento de un interprete.
Introducción a la Programación                                   Lic.
                                                                                 Eduard
                                                                                 o Uvidia

Diferencia entre Compilador e Interprete
Los 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ón
se lo transformo en otro lenguaje (lenguaje máquina).
Un interprete traduce el programa cuando lo lee, convirtiendo el código del programa
directamente en acciones.
La ventaja del interprete es que dado cualquier programa se puede interpretarlo en cualquier
plataforma (sistema operativo), en cambio el archivo generado por el compilador solo funciona en
la plataforma en donde se lo ha creado.
Pero por otro lado un archivo compilado puede ser distribuido fácilmente conociendo la
plataforma, 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 que
un 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 RESUELTOS



Algoritmos
Un algoritmo es un procedimiento a seguir, para resolver un problema en términos de:

1. Las acciones por ejecutar y el
2. El orden en que dichas acciones deben ejecutarse
Introducción a la Programación                             Lic.
                                                                         Eduard
                                                                         o Uvidia

Un algoritmo nace en respuesta a la aparición de un determinado problema. Una
algoritmo esta compuesto de una serie finita de pasos que convergen en la solución de
un problema, pero además estos pasos tienen un orden específico.

Entenderemos como problema a cualquier acción o evento que necesite cierto grado de
análisis, desde la simpleza de cepillarse los dientes hasta la complejidad del
ensamblado de un automóvil. En general, cualquier problema puede ser solucionado
utilizando un algoritmo, en este sentido podemos utilizar los algoritmos para resolver
problemas de computo.

Un algoritmo para un programador es una herramienta que le permite resaltar los
aspectos más importantes de una situación y descartar los menos relevantes. Todo
problema de cómputo se puede resolver ejecutando una serie de acciones en un orden
específico.

Por ejemplo considere el algoritmo que se elaboraría para el problema o situación de
levantarse 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 6
pasos, y no se resaltan aspectos como: colocarse los zapatos después de salir de la
cama, o abrir la llave de la regadera antes de ducharse. Estos aspectos han sido
descartados, pues no tienen mayor trascendencia, en otras palabras los estamos
suponiendo, en cambio existen aspectos que no podemos obviarlos o suponerlos, de lo
contrario nuestro algoritmo perdería lógica, un buen programador deberá reconocer
esos aspectos importantes y tratar de simplificar al mínimo su problema.

Es importante recalcar que los pasos de un algoritmo no son conmutativos pues, no
daría solución al mismo problema a tratar.


ROBUSTEZ DE UN ALGORITMO
Quiere decir que un algoritmo debe contemplar todas las posibles facetas del problema
que queremos resolver, al elaborar un algoritmo no se nos debe escapar ningún detalle
que provoque un funcionamiento malo nuestro algoritmo. Si logramos construir un
algoritmo robusto, cualquier giro inesperado del problema será controlado por el
algoritmo, es decir, debe ser flexible a cambios.
Introducción a la Programación                             Lic.
                                                                          Eduard
                                                                          o Uvidia

CORRECTITUD DE UN ALGORITMO
Es correcto cuando da una solución al problema a tratar y cumple con todos lo
requerimientos especificados tal que cumplamos con los objetivos planteados.


COMPLETITUD DE UN ALGORITMO
Cuando un algoritmo cuenta con todos los recursos para poder llegar a una solución
satisfactoria


EFICIENCIA Y EFICACIA DE UN
ALGORITMO
Un algoritmo es eficiente cuando logra llegar a sus objetivos planteados utilizando la
menor cantidad de recursos posibles, es decir, minimizando el uso memoria, de pasos
y de esfuerzo humano.

Un algoritmo es eficaz cuando alcanza el objetivo primordial, el análisis de resolución
del problema se lo realiza prioritariamente.

Puede darse el caso de que exista un algoritmo eficaz pero no eficiente, en lo posible
debemos de manejar estos dos conceptos conjuntamente.



Resolución de Problemas
Para lograr resolver cualquier problema se deben seguir básicamente los siguientes
pasos:

Análisis del Problema. en este paso se define el problema, se lo comprende y se lo
analiza con todo detalle.

Diseño del Algoritmo. se debe elaborar una algoritmo que refleje paso a paso la
resolución del problema.

Resolución del Algoritmo en la computadora. se debe codificar el algoritmo.
Introducción a la Programación                              Lic.
                                                                          Eduard
                                                                          o Uvidia




RESOLUCIÓN DE PROBLEMAS UTILIZANDO ALGORITMOS

Ejemplo 2.1
Una universidad ofrece un curso que prepara a los estudiantes para el examen de
obtención de licencia de corredor de bienes raíces. El año anterior, varios de los
estudiantes que completaron el curso presentaron el examen para obtener la licencia.
Naturalmente la Universidad desea saber que resultados obtuvieron sus estudiantes en
el examen. Se nos ha pedido escribir un programa que resuma los resultados recibidos
de una lista de 10 estudiantes. Junto a cada nombre se anoto un 1 si el estudiante
aprobó el examen y un 2 si reprobó. Exhiba un resumen de los resultados de la prueba
indicando el número de estudiantes que aprobaron y el número de estudiantes que
reprobaron . 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 solicite
otro resultado de examen.

Solución

Algoritmo
A grandes rasgos:
Analizar los resultados del examen y decidir si se debe aumentar o no la colegiatura.

Se puede refinar como sigue:
Inicializar variables
Introducir 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 o
no la colegiatura.



Pseudocódigo
Pseudocódigo Es un lenguaje artificial e informal que ayuda a los programadores a
desarrollar algoritmos. El Pseudocódigo es similar al lenguaje cotidiano; es cómodo y
amable con el usuario, aunque no es realmente in verdadero lenguaje de
computadora. No se ejecutan en las computadoras mas bien sirven para ayudar al
programadora razonar un programa antes de intentar escribirlo en algún lenguaje. Un
programa ejecutado en Pseudocódigo puede ser fácilmente convertido en un programa
Introducción a la Programación                             Lic.
                                                                         Eduard
                                                                         o Uvidia

en C++, si es que esta bien elaborado. Por ejemplo supongamos que la nota para
aprobar un examen es de 60. El enunciado en Pseudocódigo sería:

                            Si calificación >= 60 entonces
                            Mostrar "Aprobado"
                            FinSi

El 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 con
el 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 0
Inicializar los reprobados (reprobados) en 0
Inicializar el número de estudiantes (estudiantes) en 0
Introducir 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 estudiantes
FinMientras
Imprimir un resumen de los resultados de exámenes y decidir si se debe aumentar o no
la colegiatura.
Imprimir el número de aprobados
Imprimir el número de reprobados
Si estudiantes es más 8 entonces
      Imprimir "Aumentar la colegiatura".
FinSi

Simplificando el problema queda escrito en Pseudocódigo de la siguiente forma:
Introducción a la Programación                              Lic.
                                                                           Eduard
                                                                           o Uvidia




El problema anterior escrito en C++



Diagramas de flujo
Un diagrama de flujo es una representación gráfica de un algoritmo o de una parte del
mismo. Los diagramas de flujo ayudan en la comprensión de la operación de las
estructuras de control (Si, Mientras).

La ventaja de utilizar un algoritmo es que se lo puede construir independiente mente
de un lenguaje de programación, pues al momento de llevarlo a código se lo puede
hacer en cualquier lenguaje.
Dichos diagramas se construyen utilizando ciertos símbolos de uso especial como son
rectángulos, diamantes, óvalos, y pequeños círculos, estos símbolos están conectados
entre sí por flechas, conocidas como líneas de flujo. A continuación se detallarán estos
símbolos.



         Terminal. Representa el inicio y fin de un programa.


         Proceso. Son acciones que el programa tiene que realizar
Introducción a la Programación                            Lic.
                                                                        Eduard
                                                                        o Uvidia


         Decisión. Indica operaciones lógicas o de comparación, así como
expresiones


         Entrada / Salida. Nos permite ingresar datos, de un periférico, así como
mostrarlos



         Salida. Es usado para mostrar datos o resultados

         Conector. Se coloca al principio y fin de un pedazo de programa, enlaza dos
partes cualquiera de un programa

               Línea de flujo o indicador de dirección.

Representaremos el correspondiente diagrama de flujo del ejemplo 2.1
Introducción a la Programación   Lic.
                                      Eduard
                                      o Uvidia




Ejercicios Resueltos
Introducción a la Programación                             Lic.
                                                                          Eduard
                                                                          o Uvidia




Tema 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. EXPRESIONES




Programa
Un 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 satisfacer
una necesidad o cumplir un objetivo de una manera automatizada.

Comúnmente, la palabra programa es usada de dos maneras: para describir
instrucciones individuales, código fuente, creado por el programador y también
describe una pieza entera de software ejecutable. Esta distinción puede causar
confusión, por lo que vamos a tratar de distinguir entre el código fuente por un lado y
un ejecutable por otro.

Para tener un programa ejecutable primero tenemos que tener su código fuente, es
decir, 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 (lenguaje
máquina), y la computadora actúa con esas instrucciones inmediatamente. El JAVA es
un lenguaje interpretado.
Introducción a la Programación                              Lic.
                                                                           Eduard
                                                                           o Uvidia

Alternativamente, los compiladores trasladan el código fuente en programas, los
cuales pueden ejecutarse tiempo después.

A pesar de que se puede trabajar fácilmente con los intérpretes, la mayor parte de la
programación es hecha con compiladores porque el código compilado se ejecuta más
rápido. C++ es un lenguaje de compilación.


Estructura de un Programa
Un programa esta formado por la cabecera y el cuerpo del programa.




Cabecera

En la cabecera se incluyen a nuestro programa algunas rutinas predefinidas que hacen
a la programación más sencilla, pues no tenemos que crear todo desde cero o "tratar
de inventar la rueda", es muy bueno que conozcamos la mayor cantidad de librerías
disponibles para que tengamos un trabajo más que sencillo y estandarizado. Un
programa puede no tener cabecera pero sería demasiado simple, he aquí un ejemplo
de una cabecera para un programa sencillo.

#include <iostream.h>

Cuerpo

El cuerpo del programa contiene la función principal, las funciones adicionales y las
clases que se necesiten en el programa.

La mejor forma de aprender un lenguaje es programando con él. El programa más
sencillo 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ás
importante de cualquier programa C++ y además, es el más pequeño que se puede
escribir y que se compile correctamente. En el se define la función void main, que es la
que 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.
Introducción a la Programación                              Lic.
                                                                          Eduard
                                                                          o Uvidia

La definición del cuerpo de la función está formada por un bloque de sentencias o
instrucciones, que esta encerrado entre llaves {}.

Un programa C++ puede estar formado por diferentes módulos de código fuente. Es
conveniente mantener los código fuente de un tamaño no muy grande, para que la
compilación sea rápida. También, al dividirse un programa en partes, puede facilitar la
legibilidad del programa y su estructuración. Los diferentes códigos fuentes son
compilados de forma separada, únicamente el código fuente que han sido modificados
desde la última compilación, y después combinados con las librerías necesarias para
formar el programa en su versión ejecutable.



Mecanismos de Salida
Los mecanismos de Salida son aquellos mensajes que el programa utiliza para
comunicarse con el mundo exterior o con el usuario. Por ejemplo yo quiero un
programa 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 el
segundo ejemplo, en la primera línea 1 se indica que se tengan en cuenta las funciones
y 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 se
incluye una única sentencia que llama a la función cout en la línea 4. La funcion cout
es usada para desplegar flujos de salida de datos, en pocas palabras, muestra lo que
queramos por pantalla, pueden ser datos, nombre, resultados, etc.

Para usar cout se debe colocar esta palabra seguida del operador < que se lo coloca
dos veces, luego entre comillas dobles "" se coloca el texto que se quiere mostrar por
pantalla. El símbolo n, colocado al final del texto, indica un cambio de línea.
Introducción a la Programación                                  Lic.
                                                                                Eduard
                                                                                o Uvidia

Caracteres especiales ASCII

Hay un grupo de símbolos, que son tratados como caracteres individuales, que
especifican 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 los
explicaremos con más detalle en otro capítulo.


Mecanismos de Entrada
Los mecanismos de Entrada nos permiten interacción entre el mundo exterior (Usuarios) y el
programa, 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 nombrada
edad.
Introducción a la Programación                                       Lic.
                                                                                       Eduard
                                                                                       o Uvidia

En 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 un
valor (en este caso su edad) y al presionar ENTER este valor se almacenará en la
variable edad.

Finalmente en la línea 7 el programa muestra un mensaje: tienes x años. En donde x
es la edad que se introdujo desde teclado.

 en donde se almacena el dato ingresado por teclado.


Variables
Un programa necesita un medio de grabar los datos que usa. Las variables y
Constantes ofrecen varias maneras para representar y manipular los datos.


Definición de variable
Una variable es un espacio para guardar información. Entrando más a detalle una
variable es una ubicación en la memoria de la computadora en la cual se puede grabar
un 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ñas
casillas, cada una de las casillas esta numerada secuencialmente, este número que se
le 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 grabado
temporalmente en la memoria RAM. Todas las variables, son también, creadas en la memoria RAM. Cuando los
programadores hablan de memoria, generalmente se están refiriendo a la memoria RAM.



Reservando Memoria
Se reserva memoria en el momento de definición de las variables, en este momento es
donde 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 debe
separar o reservar, y que tipo de valor se va ha guardar en la variable.
Introducción a la Programación                          Lic.
                                                                         Eduard
                                                                         o Uvidia

Cada casilla de memoria tiene un byte de capacidad. Si el tipo de variable que se crea
es 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 (o
cuantas casillas) tiene que reservar para la variable.

Porque las computadores usan los bits y los bytes para representar los valores, y
porque la memoria es medida en bytes, es importante entender y sentirse cómodo con
este concepto.


Definir una Variable
Para crear una variable es preciso definirla. En la definición de una
variable se manifestando su tipo, seguida de uno o más espacios, luego
se 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 sin
espacios. Nombres de variables aceptadas son: x, jap007, miedad.

Importante. Los nombre buenos de variables nos dice para que la variable es
utilizada, 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 como
j23qrs o xxx y restringir los nombres de variables de una sola letra como x ó y, para
valores que sean de uso rápido y no perduren en todo el programa. Se debe tratar de
usar nombres extensos como miedad o contador. Algunos nombres son fáciles de
entender tres semanas después en lugar de romperse la cabeza imaginándose que
significan nombres cortos.


Inicializar una variable
Una vez definida una variable se debe proceder a darle un valor, es cierto que este
valor puede cambiar a lo largo del programa, pero es bueno acostumbrarse a dar
siempre un valor inicial a nuestras variables. Por ejemplo:

miedad = 0;
notaFinal = 0;


Asignación de un Valor
Introducción a la Programación                                  Lic.
                                                                                 Eduard
                                                                                 o Uvidia

SE   LE PUEDE ASIGNAR VALORES A UNA VARIABLE CUANTAS VECES SE QUIERA DURANTE EL PROGRAMA, SE LE
ASIGNA UN VALOR UTILIZANDO EL OPERADOR DE IGUALDAD   “=”.


Palabras Reservadas o Claves
Existen en todos los lenguajes nombres o palabras que ya están siendo usadas, y por
eso 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 ninguna
palabra reservada porque el compilador encontraría un error.



Constantes
Las constantes son variables que contienen un valor que no cambia durante todo el
programa. Una constante simbólica al igual que cualquier variable tiene un tipo y un
nombre. Existen dos formas de declarar constantes en C++.

La primera es utilizando una instrucción, generalmente en la cabecera, que es como
sigue:

#define Estudiantes 50

Es la forma tradicional de definir constantes, pero nótese que Estudiantes no tiene un
tipo de dato. Lo que hace #define es simplemente sustituir 50 en todas las ocurrencias
del 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 de
dato lo que hace al código mucho más mantenible y lo previene de errores.



Expresiones
Una expresión es todo aquello que se evalúa y devuelve un valor. Existen varios tipos
de expresiones de acuerdo lo que contienen.


Las expresiones aritméticas consisten de una secuencia de operadores y operandos
que especifican una operación determinada. Los operandos pueden ser variables,
Introducción a la Programación                             Lic.
                                                                         Eduard
                                                                         o Uvidia

constantes y los operadores aritméticos son (+ - * / %).
Es más sencillo pensar que una expresión aritmética es como una ecuación o una
fó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 en
area.

Las expresiones lógicas también conocidas como expresiones booleanas. Están
compuestas por operadores y operandos, los operadores en este caso son operadores
relacionales y operadores lógicos.
Este tipo de expresiones es evaluado y devuelve un valor, la diferencia esta en que
este 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
Introducción a la Programación                              Lic.
                                                                           Eduard
                                                                           o Uvidia


Estructuras de Control
Existen tres clases de estructuras de control:

   1. Secuenciales
   2. Condicionales
   3. Iterativas

Los programas que escribamos pueden definirse en base a las tres estructuras de
control 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 de
Control
Diferenciaremos dos partes en una estructura de control:

1. La definición de dicha estructura
2. El cuerpo de la estructura.

En la definición es donde se coloca el nombre de la estructura que se va ha utilizar y
en el cuerpo de la misma se ubican todas las sentencias o instrucciones que
pertenecen o hacen referencia a dicha estructura. Si es cuerpo de tiene más de una
instrucción va entre llaves ( {} ).



Sentencias o Instrucciones
Una sentencia es la unidad ejecutable más pequeña de un programa en C++, en
otras palabras una línea de código escrita es una sentencia. Las sentencias controlan el
flujo y orden de ejecución. Una sentencia de C++ consta de palabras clave o
reservadas como (for, while, if ... else,etc.), expresiones, declaraciones, o llamadas a
funciones.

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 y
coma.

Una sentencia nula es simplemente un punto y coma.
Introducción a la Programación                            Lic.
                                                                           Eduard
                                                                           o Uvidia




Tema 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 Anidadas




Estructuras de Selección
LA ESTRUCTURA   DE   SELECCIÓN   IF


La sentencia if se la conoce como estructura de selección simple y su función es
realizar o no una determinada acción o sentencia, basándose en el resultado de la
evaluación de una expresión (verdadero o falso), en caso de ser verdadero se ejecuta
la sentencia.




                                        Fig. 5.1

La estructura de selección if (que se muestra en la figura 5.1) trabaja de la siguiente
manera: si la evaluación de la expresión o expresiones es verdadera ( 1 ) entonces se
ejecuta 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 la
figura 5.2) se tiene que encerrar todas las sentencias entre llaves ( { } ) y si la
evaluación de la expresión es correcta entonces se ejecuta todas las sentencias
contenidas entre las llaves.




Fig. 5.2

Si la evaluación de la expresión o expresiones resultaría falsa (0), entonces no se
ejecuta las sentencias.
Introducción a la Programación                             Lic.
                                                                         Eduard
                                                                         o Uvidia

Por ejemplo si dada la edad de una persona quiero dar un mensaje de que es o no
mayor de edad, suponiendo que una persona mayor de edad tiene por lo menos 21
añ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
          Fin



El diagrama de flujo de la estructura if se muestra en la Fig. 5.3, este diagrama
contiene el símbolo diamante que es llamado el símbolo de decisión, que indica que
decisión se debe tomar. El símbolo de decisión contiene una expresión, y la evaluación
de ésta será verdadera o falsa. Las flechas nos indican los dos posibles caminos que se
pueden tomar.
Introducción a la Programación                                     Lic.
                                                                                      Eduard
                                                                                      o Uvidia




                                               fig 5.3

El 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 nada

Importante. Para mantener el código legible es bueno dejar espacios o sangrías en
todas las líneas de código que están dentro de una estructura if / else o if, estas
instrucciones se las alinean un poco más a la derecha y así podemos notar claramente
que 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   /   ELSE


La estructura if / else lo que hace es ejecutar una acción si el resultado de la
evaluación de la expresión es verdadera y otra acción si el resultado de la evaluación
es falsa.

La diferencia con utilizar sólo la estructura if es que si la expresión evaluada es verdadera sólo en
ese caso se ejecuta una acción de otro modo se pasa de largo. En cambio en la estructura if / else
si la expresión es falsa entonces se ejecuta otra acción.




                                              Fig. 5.4
Introducción a la Programación                              Lic.
                                                                           Eduard
                                                                           o Uvidia

En síntesis lo que hace esta estructura es realizar una acción si la expresión es
verdadera 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.5

El 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 ANIDADAS

Existe el caso de estructuras if, if/else anidadas, que no es más que una estructura if
o 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;
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 las
líneas de tal programa.
Suponiendo que los valores ingresados por teclado fueran: A=2, B=1, C=5. El
programa actuaría de la siguiente manera.
El programa se ejecuta secuencialmente hasta la línea 7 donde encuentra una
expresió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 otra
expresión (A > C) y el resultado de evaluar dicha expresión es falso (2 > 5) por lo que
el programa salta hasta la línea 11 y muestra "C es el número mayor". Luego va a la
lí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 Problemas




Tema 6
Estructuras 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
Introducción a la Programación                             Lic.
                                                                          Eduard
                                                                          o Uvidia


Estructura de repetición while
Dicha 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ón
2. Si el resultado de esta evaluación es verdadero la sentencia o sentencias se
ejecutan, es decir, se ejecuta el cuerpo de la estructura.

Luego se vuelve a evaluar la expresión
3. Si el resultado de esta evaluación es falso no se ejecuta la sentencia o sentencias y
sale del ciclo while.

Por ejemplo tengo que apagar 10 velas cuando cumpla 10 años, es decir, tengo que
soplar 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
              Fin

Ejemplo 6.1
Otro 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;
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 = 90

Se dice que tiene un límite conocido porque nunca irá más allá del 10, realizará
exactamente 10 iteraciones.


Ejemplo 6.2
Un ejemplo con límite desconocido sería invertir un número entero ingresado por
teclado.

               #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 el
número de iteraciones que hará, eso depende del número de cifras que tenga el
número ingresado por teclado. Si el número ingresado tiene 3 cifras se harán 3
iteraciones y si tiene 6 se harán 6 iteraciones. En otras palabras el límite depende de la
expresión que se evalúa.


La Estructura de Repetición for
Introducción a la Programación                                  Lic.
                                                                               Eduard
                                                                               o Uvidia

Esta estructura de repetición es más utilizada cuando sabemos el número de
repeticiones que deseamos ejecutar, es parecido al caso de la estructura while en el
caso de límite conocido.
La notación de esta estructura es sencilla y se detalla a continuación

for ( 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 vayamos
a 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 variar
después de cada iteración, esta variación podría ser un incremento en la variable
definida en la condición de inicio.

Al igual que las demás estructuras de control el cuerpo de la estructura for lleva llaves
si este contiene más de una sentencia o instrucción.


Ejemplo 6.3
Un ejemplo sencillo puede ser que quiero cantar 10 veces la canción del elefante, el
có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 ....... hasta
10 elefantes......
El ejemplo anterior es muy sencillo pero nos muestra el funcionamiento de la
estructura for.


Un ejemplo algo más complejo sería el siguiente problema.
mas ejercicios.
Introducción a la Programación                             Lic.
                                                                          Eduard
                                                                          o Uvidia


Estructura de repetición do while
Esta estructura de control es muy parecida a la estructura while lo que la hace
diferente es que siempre ejecuta por lo menos una ves el cuerpo de la estructura, por
eso el do, y luego valida una expresión y en función a este resultado vuelve a iterar o
no.
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.4
Un ejemplo para este caso es el siguiente:
Se desea ingresar por lo menos un nombre de un estudiante por teclado hasta que el
usuario 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
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ÚSQUEDA




Estructuras de Datos
Una estructura de datos es un colección de datos que se caracterizan por su forma de
organizació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:




Arreglo
Un arreglo es un conjunto o colección finita de datos de un mismo tipo. Los elementos
de 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
Introducción a la Programación                            Lic.
                                                                            Eduard
                                                                            o Uvidia

Un arreglo se define indicando el tipo de arreglo, es decir, el tipo de datos de todos los
elementos del arreglo, luego se le da un nombre al arreglo y finalmente se le da un
tamañ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 caso
anterior la dimensión es 4, esto quiere decir que en la memoria se reservaron 4
posiciones para almacenar 4 valores enteros.


INICIALIZAR UN ARREGLO
Existen varias maneras de inicializar un arreglo, una manera muy sencilla es poner
entre 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 del
arreglo como se ve en el Ejemplo 7.1


ACCESO A LOS ELEMENTOS DE UN
ARREGLO
Puedo acceder a un elemento por medio de un subíndice, por ejemplo si yo quiero
acceder 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ás
elementos.

                                    arreglo[0]   51
                                    arreglo[1]   60
                                    arreglo[2]   70
                                    arreglo[3]   95

Si nos damos cuenta tener un arreglo es mucho más ventajoso que tener definidas 4
variables.
Introducción a la Programación                                   Lic.
                                                                                  Eduard
                                                                                  o Uvidia


Desventajas. En ocasiones, no podemos predecir con precisión el tamaño que un
arreglo tendrá por lo que podemos definir un arreglo muy grande, lo que nos lleva a
desperdiciar 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án
desperdiciadas, la solución a este problema la veremos más adelante en lo que se
denomina punteros.


EJEMPLO 7.1
Se desea ingresar las notas finales de 10 alumnos de la materia de Introducción a la
programació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 10
alumnos, 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 valor
constante
Introducción a la Programación                               Lic.
                                                                            Eduard
                                                                            o Uvidia

const 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 Quicksort



Métodos de Búsqueda
   1. Búsqueda Secuencial

Esta búsqueda realiza un recorrido lineal (uno por uno) por todos los elementos de un
arreglo. Es útil cuando el tamaño del arreglo no es grande y no tiene a crecer su
número de elementos. solución

   2. Búsqueda Binaria

Dicha búsqueda es aplicable en arreglos ordenados, pues su funcionamiento depende
de este hecho.
Introducción a la Programación                            Lic.
                                                                         Eduard
                                                                         o Uvidia


Tema 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 Bidimensionales
Un arreglos bidimensional esta compuesto, por un conjunto de elementos homogéneos
y se puede acceder a los datos utilizando dos subíndices, este tipo de arreglo es
también conocido como matriz.


DECLARACIÓN
Un 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 dos
dimensiones:

const int N = 10;

int arreglo[N][N];


INICIALIZACIÓN
Una 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
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.1

También podemos utilizar una estructura for dentro de otra estructura for para
inicializar los valores de un arreglo de dos dimensiones como se muestra a
continuación:


EJEMPLO 8.1
Leer 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 UN
ARREGLO BIDIMENSIONAL
En un arreglo de dos dimensiones necesitamos también dos índices para acceder a sus
elementos.

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];
Introducción a la Programación                                       Lic.
                                                                                      Eduard
                                                                                      o Uvidia

En 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 le
podamos dar.

Se pueden definir arreglos de más de 2 dimensiones, pero su manejo se dificultaría
enormemente.


EJEMPLO 8.2 (MULTIPLICACIÓN DE
MATRICES)
Se requiere un programa que realice la multiplicación de dos matrices, para tal efecto
se deben ingresar las dos matrices por teclado teniendo el cuidado de controlar que la
primera matriz tenga una dimensión de N*M y la segunda de M*N para que se pueda
realizar la multiplicación.

Solucion...


EJEMPLO 8.3
Los alumnos de primer semestre de la carrera de Licenciatura en Química de la
Universidad Mayor de San Simon son 20. Todos los alumnos toman inicialmente 5
materias 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 el
promedio 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 comprendido

entre 3 y 11. Un cuadrado mágico esta compuesto de números enteros entre 1 y N, con las

siguientes características: la sumas de las filas, columnas, diagonales son iguales, como se ve en el

siguiente ejemplo:


                                               816
                                               357
Introducción a la Programación                               Lic.
                                                                            Eduard
                                                                            o Uvidia

                                         492

El método de generación del cuadrado mágico consiste en situar el número 1 en la
casilla del centro de la primera fila, el siguiente número se debe situar en la casilla
ubicada en la fila anterior (por encima) y en la columna de la derecha. Este proceso se
repite 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 la
primera columna. En caso de que un número se debe colocar en una casilla que ya
esta 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.6




Carácter
Un carácter es el átomo de los programas de computadora, un carácter es un símbolo
que puede ser una letra del alfabeto o un carácter especial.

Un carácter ocupa 8 bits en memoria, y existen 256 caracteres diferentes. Cada
carácter se lo codifica en un número entero, es decir, que cada carácter tiene su
correspondiente representación entera, el código ASCII es precisamente esto. Por
Introducción a la Programación                           Lic.
                                                                          Eduard
                                                                          o Uvidia

ejemplo el carácter ‘a’ tiene como código ASCII el entero 97. Para ver todos códigos
ASCII véase el anexo A.



Cadenas
Una cadena o cadena de caracteres nos es más que una serie de caracteres
manipulados como una unidad. Si asemejamos una cadena al lenguaje castellano sería
como una palabra, que es un conjunto de sílabas y vocales en donde cada una de
estas 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 propio
una dirección, es decir, lo que nosotros precisemos.


DECLARACIÓN
Una cadena se la define de la siguiente manera

char cadena[20];

La cadena anterior puede contener un máximo de 20 caracteres.


INICIALIZACIÓN
Se 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 el
ejemplo anterior "Hola" esta entre comillas dobles.

Una cadena siempre finaliza con el carácter de fin de cadena ‘0’, que siempre se
añade al final automáticamente, en el ejemplo anterior se añade al final de “Hola” el
carácter de fin de cadena.

También podemos considerar a una cadena como un arreglo de caracteres, y se
puede inicializar de la siguiente manera:

cadena = { ‘H’, ‘o’, ‘l’, ‘a’ } ;

El arreglo de caracteres se vería de esta forma:
Introducción a la Programación                            Lic.
                                                                         Eduard
                                                                         o Uvidia

                                 ‘H’   ‘o’   ‘l’   ‘a’ ‘0’
                                  0    1     2     3    4


Nótese que en la posición 4 se aumenta el fin de cadena


EJEMPLO 9.1
Se 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 esta
entre comillas. También es una cadena la variable nombre que recibirá un valor desde
teclado.



Operaciones con Cadenas
Existen muchas operaciones que se pueden realizar utilizando cadenas, la mayoría de
la operación que podemos requerir se encuentran ya a nuestra disposición dentro de la
librería string.h


LONGITUD
La longitud de una cadena la podemos conocer utilizando la función strlen.

Sintaxis

strlen( cadena ) ;

Ejemplo 9.2
             #include <iostream.h>#include <string.h>

             void main()
             {
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ÓN
Para saber si dos cadenas son exactamente iguales utilizamos la función strcmp.

Sintaxis

strcmp ( cadena1, cadena2 );

Esta función devuelve un valor de acuerdo al resultado de la comparación.

Devuelve:

                       0                    si la dos cadenas son exactamente
iguales

                       Mayor a 0         si la cadena1 es mayor a la cadena2

                       Menor a 0         si la cadena1 es menor que la cadena2

Ejemplo 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
Introducción a la Programación                          Lic.
                                                                         Eduard
                                                                         o Uvidia


                       cout<<"La contraseña no coincide";

             }


COPIA
Podemos reflejar todo el contenido de una cadena a otra, en otras palabras la
copiamos 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 última
tuviera 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ÓN
Podemos juntar o concatenar dos cadenas una a continuación de la otra. Utilizamos la
función strcat.

Sintaxis

           strcat( cadenaDestino, cadenaOrigen );

Todo el contenido de la cadenaOrigen se añade a continuación de la cadenaDestino, si
esta última contiene algo entonces al final contendrá lo que contenía más el contenido
de la cadenaOrigen.
Introducción a la Programación                          Lic.
                                                                         Eduard
                                                                         o Uvidia

Ejemplo 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.6
Escriba 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
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.8




Definición de Puntero
Los punteros son variables que contienen una dirección que hacen referencia a un
valor. Una variable común contiene o almacena un valor, mientras que un puntero
almacena la dirección que hace referencia a este valor.

Para tener un mejor entendimiento de un puntero tenemos que saber que es la
memoria, a la que podemos considerar como una colección de casillas en las cuales se
puede 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 de
varios estantes, supongamos que están divididos en casillas, en donde cada una puede
contener a un libro. En este ejemplo un puntero sería uno de los registros que se
encuentren en el catálogo de la biblioteca, en donde cada registro contiene información
de la ubicación (dirección) del libro dentro de los estantes de la biblioteca. De esta
manera es más fácil buscar directamente en el catálogo que estante por estante, su
manejo 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 Puntero
Un puntero puede ser de cualquier tipo y su declaración es de la siguiente forma:

<tipo> * nombrePuntero ;
Introducción a la Programación                                     Lic.
                                                                                   Eduard
                                                                                   o Uvidia

Esto quiere decir que un puntero tiene que tener un tipo de dato, luego le sigue el
operador de indirección (*) y luego un nombre cualquiera, el que le daremos al
puntero.

Ejemplos de declaración de punteros son:
int *puntero ; // es un puntero a un tipo de dato entero
char *nombre ; //es un puntero a una cadena de caracteres
float *promedio; //es un puntero a un tipo de dato real


Inicialización
Para inicializar un puntero debemos de hacerlo de acuerdo al tipo de dato al que pertenece el
puntero.


EJEMPLO 10.1 (PUNTERO A UN ARREGLO
DE 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 en
realidad en el puntero es la dirección del primer elemento del arreglo, conociendo esta dirección
podemos conocer los demás elementos.

Entrando más en detalle las tres siguientes sentencias son iguales:

cout<<*puntero;

cout<<*(puntero+0);

cout<<puntero[0];
Introducción a la Programación                            Lic.
                                                                        Eduard
                                                                        o Uvidia

Todas las anteriores sentencias muestran el primer elemento del arreglo al que apunta
el 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 esta
manera 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 se
encuentra la instrucción puntero++; la cual no hace incrementar en 1 el valor del
puntero 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 puntero
Como habíamos mencionado que un puntero contiene una dirección que señala a un
valor, entonces como podríamos hacer para ver la dirección o para ver solamente el
valor. Existen dos operadores que nos permiten realizar estas operaciones, para ver
Introducción a la Programación                           Lic.
                                                                          Eduard
                                                                          o Uvidia

solamente la dirección de un puntero se utiliza el operador &. Para obtener el valor
que 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: 4

En el ejemplo anterior en la línea 5 después de declarar un puntero se le asigna una
dirección, para ser más específicos la dirección de la variable aux, esto se logra
precediendo 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 Arreglos
Es posible utilizar punteros para reemplazar a los arreglos normales, veremos como
podemos utilizar un puntero para reemplazar un arreglo de enteros y una arreglo de
caracteres (cadena).


ARREGLOS DE ENTEROS
Esta parte la explicaremos utilizando un ejemplo escrito primero con arreglos y luego
con punteros.


Programa resuelto utilizando un arreglo de enteros


EJEMPLO 10.4
           1:   #include <iostream.h>
           2:   void main()
           3:   {
           4:   int notas[4];
           5:   int i;
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 enteros


EJEMPLO 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ínea
4 donde se declara es arreglo con tamaño 4 en el ejemplo 10.4 y en el ejemplo 10.5
en 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 medio
del subíndice y corchetes "notas[i]" en el caso del ejemplo 10.5 en la línea 7, para
acceder 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 la
forma: "*(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 tanto
podemos utilizar punteros para representar cadenas. El siguiente ejemplo muestra como definir e
inicializar 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;
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 el
puntero no nos limita el tamaño que vaya a tomar la cadena.


EJEMPLO 10.7
En este ejemplo se hará lo mismo que en el ejemplo 9.6 utilizando un puntero a una cadena. Se
escribirá 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á para
realizar el cálculo. En la línea tres encontramos la siguiente expresión dentro de la estructura
while: ptr[0]!=’0’ Esta expresión quiere decir que cuando la posición inicial del puntero sea
fin de cadena ‘0’ entonces el ciclo termina. En la línea 4 se encuentra la instrucción ptr++; Lo
que hace es que el puntero recorra un índice a la derecha, es decir apuntará al siguiente carácter
de la cadena, de esta manera el ciclo recorrerá todas las posiciones de la cadena hasta encontrar
el fin de cadena.
Bien ahora la función tiene que devolver la longitud de la cadena, en la líne 5 podemos ver lo
siguiente: (ptr-cadena) esto quiere decir que se restará la última posición de la cadena menos
la primera, dándonos la longitud de la cadena. Además en la línea 5 se muestra (int) que es un
casting, es decir que convierte en entero a las instrucciones que precede en este caso a la
instrucción (ptr-cadena).


¿Por qué NO trabajar con
punteros?
El error más común es que cuando trabajamos con punteros vamos apuntando a diferentes
valores de memoria, y cuando los dejamos de utilizar un error muy común es de no liberar el
Introducción a la Programación                                        Lic.
                                                                                      Eduard
                                                                                      o Uvidia

espacio de memoria a cual están apuntando lo que nos ocasionará una sobrecarga en la memoria
cuando nuestros programas sean grandes.
También por medio de los punteros es que se pueden tener acceso a valores privados, y podemos
modificar valores haciendo que nuestros programas caigan. Este hecho es muy común en los
crackers de programas, porque se valen de los punteros para cambiar valores en los programas y
utilizarlos 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 con
direcciones 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 con
mayor 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 funciones



Asignación Dinámica de
Memoria
Asignar dinámicamente memoria significa que personalicemos el espacio que ocuparán
nuestras variables en memoria. Cuando reservamos memoria, esta permanece allí
hasta que nosotros la liberemos. Reservar o asignar memoria es una buena técnica
para no desperdiciar memoria inútilmente, pues sólo reservaremos el espacio
necesario, este detalle será muy significante en aplicaciones o programas grandes.

Para reservar memoria utilizamos el operador new seguido del tipo de dato del cual
queremos reservar memoria.
Por ejemplo:

int *apuntador = new int ;

La anterior instrucción reservará para el puntero apuntador 2 bytes que es el tamaño
de un tipo de dato int
Introducción a la Programación                            Lic.
                                                                        Eduard
                                                                        o Uvidia

char *nombre;
nombre = new char[10];

La anterior instrucción reservar para el puntero a una cadena nombre 10 caracteres

Como habiamos mencionado cuando reservamos memoria permenece allí hasta que la
liberemos, esta operación la realizamos con el operador delete.

delete apuntador;
delete nombre;


EJEMPLO 10.8
Ingresar 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
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.4




Concepto de una Función
Una función es un conjunto de instrucciones independientes cuyo objetivo es el de
minimizar la complejidad de un problema, descomponiéndolo en subproblemas más
fáciles de resolver. Una función debe realizar una tarea específica si le damos a una
funció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 que
realizar operaciones y talvez modificación de los datos que la función tenía a
disposición, generalmente este resultado se devuelve en forma de valor.

Estábamos familiarizados con el uso de la función principal void main(), que siempre
debe de estar en cualquier programa, pero resulta que podemos crear las funciones
que nos parezcan necesarias para resolver de un manera más sencilla el problema que
estemos tratando.


¿CUÁNDO UTILIZAR FUNCIONES?
Para saber que tareas tenemos que tratarlas como funciones se darán unas pautas a
continuació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 veces
podemos llevar esta tarea a una función, lo que nos ahora esfuerzo y evita líneas de
código repetidas.

-    Cuando necesitemos realizar una operación sobre algún tipo de dato y producto de
ello necesitemos un valor de respuesta. Como por ejemplo calcular el cuadrado de un
número entero.

DEFINICIÓN DE FUNCIONES
Introducción a la Programación                             Lic.
                                                                          Eduard
                                                                          o Uvidia

Una 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 la
función no devuelve ningún valor.

nombreF   Es el nombre que le damos a nuestra función puede ser el
que queramos menos la palabras reservadas del lenguaje.

Parámetros Es un conjunto de variables, las cuales se escriben con su
tipo de dato y su nombre, separadas por comas, que vienen a constituir
los argumentos de la función.

Cuerpo     Es todo lo que se encuentra entre las llaves {} y contiene
un conjunto de sentencias.

return       Esta sentencia se usa si el tipo de dato de retorno no es
void. Return devuelve una expresión. Se pueden colocar varios returns a
lo largo de un programa y cuando la función encuentra a cualquiera
termina.

EJEMPLO 11.1
En el siguiente ejemplo se definirá una función para que calcule el área de un
triángulo

1: #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: {
Introducción a la Programación                                    Lic.
                                                                                  Eduard
                                                                                  o Uvidia

11: 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 tipo
entero base y altura.

El cuerpo de la función comprende todas las líneas de código desde la línea 4 hasta la
línea 8.


CUERPO DE UNA FUNCIÓN
El 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 definidos
por el usuario, en síntesis se puede trabajar en el cuerpo de una función con todas las
ventajas que el lenguaje nos ofrece pero orientado a la resolución de un problema
específico.


VALOR DE RETORNO
Una función después de haber realizado operaciones con los datos que se le
proporciona debe de devolver algo, ya sea en forma de un valor o sino haber efectuado
alguna 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ón
encuentra esa palabra acaba e inmediatamente devuelve el valor que se indica. En el
ejemplo 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 de
retorno void, pero no significan que no hacen nada, pueden realizar cálculos o
simplemente mostrar algo por pantalla.

Ejemplo 11.2
              1: #include <iostream.h>
              2:
              3: void mostrar(char nombre[])
              4:
              5:
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 VARIABLES
Variables locales

Todas la variables que se crean dentro de el cuerpo de una función tienen ámbito o
vida sólo en el cuerpo mismo de la función, estas variables son llamadas locales. Esto
quiere decir que podemos utilizar estas variables sólo en la función pues al terminar
esta las variables se destruyen. En el ejemplo 11.1 en la línea 5 se define la variable
area, esta variable tiene ámbito sólo en el cuerpo de la función, no podríamos acceder
a esta variable desde la función principal o cualquier otra parte del programa.

Variables globales

Las variables globales son definidas fuera de cualquier función, están definidas de un
manera parecida a las librerías, de estas forma estas variables tienen un alcance global
a todo el programa, esto quiere decir que pueden ser accedidas de cualquier parte del
programa, es decir, de cualquier función. Más información



Llamada o Invocación a una
función
Una vez escrita la función, podemos utilizarla escribiendo su nombre y luego dándole
los parámetros correspondientes:

Sintaxis
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion
Introduccion a la Programacion

Weitere ähnliche Inhalte

Was ist angesagt?

Dueño de microsoft
Dueño de microsoftDueño de microsoft
Dueño de microsoft07223383
 
Dueño de microsoft
Dueño de microsoftDueño de microsoft
Dueño de microsoft07223383
 
Hadware y software!!
Hadware y software!!Hadware y software!!
Hadware y software!!Millicom
 
conceptos básicos de programación digital
conceptos básicos de programación digital conceptos básicos de programación digital
conceptos básicos de programación digital Ma Contreras
 
Equipo de rebeca
Equipo de rebecaEquipo de rebeca
Equipo de rebecaYoss Ü
 
que es software
que es softwareque es software
que es softwarezenaida
 
Apuntes de tics 2015 (1er parcial) (1)
Apuntes de tics 2015 (1er parcial) (1)Apuntes de tics 2015 (1er parcial) (1)
Apuntes de tics 2015 (1er parcial) (1)brianbgga
 
Apuntes de tics 2015 (1er parcial)
Apuntes de tics 2015 (1er parcial)Apuntes de tics 2015 (1er parcial)
Apuntes de tics 2015 (1er parcial)brianbgga
 

Was ist angesagt? (17)

Programas
ProgramasProgramas
Programas
 
Unidad 2, Comunicacón y colaboración
Unidad 2, Comunicacón y colaboraciónUnidad 2, Comunicacón y colaboración
Unidad 2, Comunicacón y colaboración
 
Dueño de microsoft
Dueño de microsoftDueño de microsoft
Dueño de microsoft
 
Dueño de microsoft
Dueño de microsoftDueño de microsoft
Dueño de microsoft
 
Trabajo Acc
Trabajo AccTrabajo Acc
Trabajo Acc
 
Mantenimiento
MantenimientoMantenimiento
Mantenimiento
 
Hadware y software!!
Hadware y software!!Hadware y software!!
Hadware y software!!
 
Concepto
ConceptoConcepto
Concepto
 
Tema 2 arquitectura de ordenadores. (1)
Tema 2  arquitectura de ordenadores. (1)Tema 2  arquitectura de ordenadores. (1)
Tema 2 arquitectura de ordenadores. (1)
 
Software y harware
Software y harwareSoftware y harware
Software y harware
 
Presentación1
Presentación1Presentación1
Presentación1
 
conceptos básicos de programación digital
conceptos básicos de programación digital conceptos básicos de programación digital
conceptos básicos de programación digital
 
Equipo de rebeca
Equipo de rebecaEquipo de rebeca
Equipo de rebeca
 
Clase diez 2011
Clase diez  2011Clase diez  2011
Clase diez 2011
 
que es software
que es softwareque es software
que es software
 
Apuntes de tics 2015 (1er parcial) (1)
Apuntes de tics 2015 (1er parcial) (1)Apuntes de tics 2015 (1er parcial) (1)
Apuntes de tics 2015 (1er parcial) (1)
 
Apuntes de tics 2015 (1er parcial)
Apuntes de tics 2015 (1er parcial)Apuntes de tics 2015 (1er parcial)
Apuntes de tics 2015 (1er parcial)
 

Andere mochten auch

Mapa conceptual
Mapa conceptualMapa conceptual
Mapa conceptualsaos2829
 
Aprenda visual basic 6 como si estuviera en primero aprendergratis - (libro...
Aprenda visual basic 6 como si estuviera en primero   aprendergratis - (libro...Aprenda visual basic 6 como si estuviera en primero   aprendergratis - (libro...
Aprenda visual basic 6 como si estuviera en primero aprendergratis - (libro...Edwin Umanzor
 
Asamblea en-la-carpinteria-milespowerpoints.com
Asamblea en-la-carpinteria-milespowerpoints.comAsamblea en-la-carpinteria-milespowerpoints.com
Asamblea en-la-carpinteria-milespowerpoints.comEduardo Uvidia
 
Errobotika zamudio
Errobotika zamudioErrobotika zamudio
Errobotika zamudiob08
 
Historia Complex
Historia  ComplexHistoria  Complex
Historia Complexsuhuer
 
Historia de los compiladores--Fortran pascal c
Historia de los compiladores--Fortran pascal cHistoria de los compiladores--Fortran pascal c
Historia de los compiladores--Fortran pascal cCarlos Yepez
 
Manual+de+remedios+naturales+y+fórmulas
Manual+de+remedios+naturales+y+fórmulasManual+de+remedios+naturales+y+fórmulas
Manual+de+remedios+naturales+y+fórmulasjuana1956
 
Matlab
MatlabMatlab
Matlabford81
 
Lenguaje de programación maria
Lenguaje de programación mariaLenguaje de programación maria
Lenguaje de programación mariamariagrau14
 
Manual mantto de pozos
Manual mantto de pozosManual mantto de pozos
Manual mantto de pozoscarlos neveu
 
Lenguaje de programación Fortrar
Lenguaje de programación FortrarLenguaje de programación Fortrar
Lenguaje de programación FortrarEric Avendaño
 

Andere mochten auch (20)

Fortran
FortranFortran
Fortran
 
Fortran
FortranFortran
Fortran
 
Introduccion a matlab
Introduccion a matlabIntroduccion a matlab
Introduccion a matlab
 
Mapa conceptual
Mapa conceptualMapa conceptual
Mapa conceptual
 
Aprendiendo word 2007
Aprendiendo word 2007Aprendiendo word 2007
Aprendiendo word 2007
 
Aprenda visual basic 6 como si estuviera en primero aprendergratis - (libro...
Aprenda visual basic 6 como si estuviera en primero   aprendergratis - (libro...Aprenda visual basic 6 como si estuviera en primero   aprendergratis - (libro...
Aprenda visual basic 6 como si estuviera en primero aprendergratis - (libro...
 
Asamblea en-la-carpinteria-milespowerpoints.com
Asamblea en-la-carpinteria-milespowerpoints.comAsamblea en-la-carpinteria-milespowerpoints.com
Asamblea en-la-carpinteria-milespowerpoints.com
 
Errobotika zamudio
Errobotika zamudioErrobotika zamudio
Errobotika zamudio
 
Curso de-fortran
Curso de-fortranCurso de-fortran
Curso de-fortran
 
Plurals
PluralsPlurals
Plurals
 
Historia Complex
Historia  ComplexHistoria  Complex
Historia Complex
 
Historia de los compiladores--Fortran pascal c
Historia de los compiladores--Fortran pascal cHistoria de los compiladores--Fortran pascal c
Historia de los compiladores--Fortran pascal c
 
Matlab introducción
Matlab   introducciónMatlab   introducción
Matlab introducción
 
Manual+de+remedios+naturales+y+fórmulas
Manual+de+remedios+naturales+y+fórmulasManual+de+remedios+naturales+y+fórmulas
Manual+de+remedios+naturales+y+fórmulas
 
Matlab
MatlabMatlab
Matlab
 
Historia petroleo en mexico
Historia petroleo en mexicoHistoria petroleo en mexico
Historia petroleo en mexico
 
Lenguaje de programación maria
Lenguaje de programación mariaLenguaje de programación maria
Lenguaje de programación maria
 
Manual 2 Software Arena
Manual 2 Software ArenaManual 2 Software Arena
Manual 2 Software Arena
 
Manual mantto de pozos
Manual mantto de pozosManual mantto de pozos
Manual mantto de pozos
 
Lenguaje de programación Fortrar
Lenguaje de programación FortrarLenguaje de programación Fortrar
Lenguaje de programación Fortrar
 

Ähnlich wie Introduccion a la Programacion

Software de aplicación
Software de aplicaciónSoftware de aplicación
Software de aplicaciónAndyHP
 
Software de aplicación
Software de aplicaciónSoftware de aplicación
Software de aplicaciónAndyHP
 
Software de aplicación
Software de aplicaciónSoftware de aplicación
Software de aplicaciónAndyHP
 
Elementos de un Computador
Elementos de un ComputadorElementos de un Computador
Elementos de un Computadorwendykarina
 
Componentes fisicos y lógicos del computador
Componentes fisicos y lógicos del computadorComponentes fisicos y lógicos del computador
Componentes fisicos y lógicos del computadorIreneIUPSM
 
Arquitectura de los ordenadores
Arquitectura de los ordenadoresArquitectura de los ordenadores
Arquitectura de los ordenadoresablantos
 
Mi presentación sobre la Informática
Mi presentación sobre la InformáticaMi presentación sobre la Informática
Mi presentación sobre la Informáticajcgararm
 
Fase3 t1-introduccion- a-la- programacion new
Fase3 t1-introduccion- a-la- programacion newFase3 t1-introduccion- a-la- programacion new
Fase3 t1-introduccion- a-la- programacion newINGJOINER
 
PresentacióN Informatica
PresentacióN InformaticaPresentacióN Informatica
PresentacióN InformaticaIngrid
 
Diapositivas Sobre Hadware y Software Sistema Operativo 1
Diapositivas Sobre Hadware y Software Sistema Operativo 1Diapositivas Sobre Hadware y Software Sistema Operativo 1
Diapositivas Sobre Hadware y Software Sistema Operativo 1Carlos Pavon Materan
 
Que es una computadora
Que es una computadoraQue es una computadora
Que es una computadoraMauro Salinas
 
Taller Hardware & Software
Taller Hardware & SoftwareTaller Hardware & Software
Taller Hardware & SoftwareGeanLozano07
 
Ame informatica-01-1210083378072909-9
Ame informatica-01-1210083378072909-9Ame informatica-01-1210083378072909-9
Ame informatica-01-1210083378072909-9nepal16
 
Ame informatica-01-1210083378072909-9
Ame informatica-01-1210083378072909-9Ame informatica-01-1210083378072909-9
Ame informatica-01-1210083378072909-9nepal16
 
Unidad 1.1 componentes de una computadora
Unidad 1.1 componentes de una computadoraUnidad 1.1 componentes de una computadora
Unidad 1.1 componentes de una computadorajudadiso
 
Unidad 1.1 componentes de una computadora
Unidad 1.1 componentes de una computadoraUnidad 1.1 componentes de una computadora
Unidad 1.1 componentes de una computadorajudadiso
 

Ähnlich wie Introduccion a la Programacion (20)

Software de aplicación
Software de aplicaciónSoftware de aplicación
Software de aplicación
 
Software de aplicación
Software de aplicaciónSoftware de aplicación
Software de aplicación
 
Software de aplicación
Software de aplicaciónSoftware de aplicación
Software de aplicación
 
Elementos de un Computador
Elementos de un ComputadorElementos de un Computador
Elementos de un Computador
 
Componentes fisicos y lógicos del computador
Componentes fisicos y lógicos del computadorComponentes fisicos y lógicos del computador
Componentes fisicos y lógicos del computador
 
Arquitectura de los ordenadores
Arquitectura de los ordenadoresArquitectura de los ordenadores
Arquitectura de los ordenadores
 
Mi presentación sobre la Informática
Mi presentación sobre la InformáticaMi presentación sobre la Informática
Mi presentación sobre la Informática
 
Software
SoftwareSoftware
Software
 
Fase3 t1-introduccion- a-la- programacion new
Fase3 t1-introduccion- a-la- programacion newFase3 t1-introduccion- a-la- programacion new
Fase3 t1-introduccion- a-la- programacion new
 
software y hardware
software y hardwaresoftware y hardware
software y hardware
 
Hadware Y Sofware
Hadware Y SofwareHadware Y Sofware
Hadware Y Sofware
 
PresentacióN Informatica
PresentacióN InformaticaPresentacióN Informatica
PresentacióN Informatica
 
Diapositivas Sobre Hadware y Software Sistema Operativo 1
Diapositivas Sobre Hadware y Software Sistema Operativo 1Diapositivas Sobre Hadware y Software Sistema Operativo 1
Diapositivas Sobre Hadware y Software Sistema Operativo 1
 
Que es una computadora
Que es una computadoraQue es una computadora
Que es una computadora
 
Taller Hardware & Software
Taller Hardware & SoftwareTaller Hardware & Software
Taller Hardware & Software
 
Ame informatica-01-1210083378072909-9
Ame informatica-01-1210083378072909-9Ame informatica-01-1210083378072909-9
Ame informatica-01-1210083378072909-9
 
Ame informatica-01-1210083378072909-9
Ame informatica-01-1210083378072909-9Ame informatica-01-1210083378072909-9
Ame informatica-01-1210083378072909-9
 
Unidad 1.1 componentes de una computadora
Unidad 1.1 componentes de una computadoraUnidad 1.1 componentes de una computadora
Unidad 1.1 componentes de una computadora
 
Unidad 1.1 componentes de una computadora
Unidad 1.1 componentes de una computadoraUnidad 1.1 componentes de una computadora
Unidad 1.1 componentes de una computadora
 
software
softwaresoftware
software
 

Mehr von Eduardo Uvidia

Mehr von Eduardo Uvidia (13)

ALIMENTACIÓN SALUDABLE.pdf
ALIMENTACIÓN SALUDABLE.pdfALIMENTACIÓN SALUDABLE.pdf
ALIMENTACIÓN SALUDABLE.pdf
 
Plan de tutoria 2019
Plan de tutoria 2019Plan de tutoria 2019
Plan de tutoria 2019
 
Plan de tutoria UESQ
Plan de tutoria UESQPlan de tutoria UESQ
Plan de tutoria UESQ
 
Acuerdo de confidencialidad
Acuerdo de confidencialidadAcuerdo de confidencialidad
Acuerdo de confidencialidad
 
Comidas del EcuDOR
Comidas del EcuDORComidas del EcuDOR
Comidas del EcuDOR
 
El medio ambiente
El medio ambienteEl medio ambiente
El medio ambiente
 
Evaluacion
EvaluacionEvaluacion
Evaluacion
 
Generaciones de las computadoras
Generaciones de las computadorasGeneraciones de las computadoras
Generaciones de las computadoras
 
Hardware y software
Hardware y softwareHardware y software
Hardware y software
 
Funadamentos de computacion
Funadamentos de computacionFunadamentos de computacion
Funadamentos de computacion
 
Evolución de las computadoras
Evolución de las computadorasEvolución de las computadoras
Evolución de las computadoras
 
Tutorial word
Tutorial wordTutorial word
Tutorial word
 
Eduardo uvidia
Eduardo uvidiaEduardo uvidia
Eduardo uvidia
 

Kürzlich hochgeladen

Mapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfMapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfvictorbeltuce
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...YobanaZevallosSantil1
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxYeseniaRivera50
 
MODELO DE INFORME DE INDAGACION CIENTIFICA .docx
MODELO DE INFORME DE INDAGACION CIENTIFICA .docxMODELO DE INFORME DE INDAGACION CIENTIFICA .docx
MODELO DE INFORME DE INDAGACION CIENTIFICA .docxRAMON EUSTAQUIO CARO BAYONA
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesRaquel Martín Contreras
 
DETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORDETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORGonella
 
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfFichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfssuser50d1252
 
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docxEDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docxLuisAndersonPachasto
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfcoloncopias5
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicialLorenaSanchez350426
 
PROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docxPROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docxEribertoPerezRamirez
 
sesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfsesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfpatriciavsquezbecerr
 
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADOPLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADOMARIBEL DIAZ
 
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIAGUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIAELIASPELAEZSARMIENTO1
 
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxEJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxFabianValenciaJabo
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressionsConsueloSantana3
 

Kürzlich hochgeladen (20)

Mapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdfMapa Mental de estrategias de articulación de las areas curriculares.pdf
Mapa Mental de estrategias de articulación de las areas curriculares.pdf
 
PPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptxPPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptx
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
 
MODELO DE INFORME DE INDAGACION CIENTIFICA .docx
MODELO DE INFORME DE INDAGACION CIENTIFICA .docxMODELO DE INFORME DE INDAGACION CIENTIFICA .docx
MODELO DE INFORME DE INDAGACION CIENTIFICA .docx
 
Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materiales
 
DETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORDETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIOR
 
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfFichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
 
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docxEDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docx
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
 
VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicial
 
PROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docxPROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docx
 
sesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfsesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdf
 
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADOPLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
PLAN DE TUTORIA- PARA NIVEL PRIMARIA CUARTO GRADO
 
Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIAGUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
 
Sesión La luz brilla en la oscuridad.pdf
Sesión  La luz brilla en la oscuridad.pdfSesión  La luz brilla en la oscuridad.pdf
Sesión La luz brilla en la oscuridad.pdf
 
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxEJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressions
 

Introduccion a la Programacion

  • 1. Introducción a la Programación Lic. Eduard o Uvidia Tema 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 decisiones lógicas a velocidades hasta miles de millones de veces más rápidas que las alcanzables por los seres humanos. Por ejemplo, muchas de las computadoras personales actuales pueden realizar decenas de millones de sumas por segundo, y los más sorprendente es que puede hacer todo eso sin cometer errores, se imaginan a una persona provista de una calculadora cuánto tiempo le tomaría realizar el mismo cálculo
  • 2. Introducción a la Programación Lic. Eduard o Uvidia Componentes de una computadora Una computadora de cualquier forma que se vea tiene dos tipos de componentes: El Hardware (Parte Física) y el Software (Parte Lógica). Hardware Llamamos Hardware a la parte física de la computadora, pues vienen a ser las partes que podamos percibir con el sentido del tacto. El hardware que compone a una computadora es muy complejo, pues una pequeña pieza puede contener millones de transistores. Ejemplo de Hardware podría ser la Tarjeta Madre, Memoria Principal, CPU, etc. Partes del Hardware de una computadora El Hardware esta compuesto por seis unidades o secciones básicas y son las siguientes: 1. Unidad de entrada. Que es la sección de recepción de la computadora: obtiene información (datos y programas de computadora) y lo coloca a disposición de las demás unidades para que sea procesada. La información se introduce por medio del teclado 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 con los datos que hemos introducido. Por ejemplo mediante un dispositivo de entrada como el teclado, podemos escribir palabras la cuales las podremos observar por un dispositivo 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 Uvidia 3. Unidad de memoria. También se la conoce como memoria RAM, es el almacén primario de la computadora por lo que es relativamente de baja capacidad. Esta memoria es la más importante de la computadora, porque guarda información necesaria para que la computadora pueda arrancar y funcionar, en otras palabras guarda información de todos los programas que se ejecutan en una computadora incluyendo al Sistema Operativo. 4. Unidad aritmética y lógica (ALU). Esta es la parte de la computadora en donde se realizan los cálculos. sumas o restas. Aquí están también los mecanismos de decisión que permiten a la computadora, por ejemplo, comparar dos elementos de la unidad de memoria para determinar si son iguales o no. 5. Unidad central de procesamiento (CPU). Es el cerebro de la computadora, pues es el coordinador de la máquina y la parte encargada de supervisar el funcionamiento de las otras secciones. La CPU le dice a la unidad de entrada cuándo debe leerse información para introducirla en la unidad de memoria, le dice a la ALU cuando la información de la unidad de memoria debe utilizarse en los cálculos y le dice la unidad de salida cuando debe enviar la información que está es la unidad de memoria a ciertos dispositivos de salida. 6. Unidad de almacenamiento secundario. Esta es el almacén de largo plazo y de alta capacidad de la computadora. Los programas y datos que nos están siendo utilizados por las otras unidades normalmente se colocan en dispositivos de almacenamiento secundario hasta que necesiten, posiblemente horas, días, meses o incluso años después. El acceso es más lento comparado con el de la memoria primaria o memoria RAM. Software Nos referimos con software a la parte lógica de la computadora a los procedimientos que el hardware realiza inducidos por el software y este a su vez por nosotros. El software es como un traductor que hace que nuestras órdenes se conviertan en realidad, manipulando el hardware o la parte física. El software esta compuesto por programas de computadora. Programa Un programa es un conjunto de instrucciones lógicas que le dicen a la computadora que debe hacer, además un programa debe satisfacer la necesidades de los usuarios
  • 4. Introducción a la Programación Lic. Eduard o Uvidia utilizando eficientemente los recursos disponibles. Los programas de tratan con mayor profundidad en el Tema 3. Los programas que escribiremos más adelante serán utilizando un lenguaje de programación muy popular como lo es el C++. Código Fuente Le daremos el nombre de código fuente a los programas que escribamos en un determinado lenguaje de programación, que simplemente estará compuesto por instrucciones escritas por un programador. El código fuente no constituye software propiamente dicho pero es una instancia mediante la cual se llega al Software Sistema Operativo Es el programa más importante que se ejecuta en una computadora. Cualquier computadora de propósito general debe operar con un sistema operativo para lograr ejecutar otros programas. El sistema operativo ejecuta las tareas básicas, como de reconocer entradas desde el teclado, enviar mensajes a pantalla, manteniendo rastro de los archivos y directorios en el disco, y controlar los dispositivos periféricos como las impresoras. Para grandes sistemas, el sistema operativo tiene una gran responsabilidad y cualidades. Es como un policía de transito, quien se asegura de que los diferentes programas que se ejecutan al mismo tiempo no interfieran unos con otros. También es responsable de la seguridad, asegurando que usuarios no autorizados accedan al sistema. El sistema operativo provee de una plataforma de software por encima de la cual otros programas, llamados aplicaciones, pueden ejecutarse. Los programas de aplicación tienen que crearse de acuerdo a la plataforma en donde se van a ejecutar. La elección de sistema operativo, entonces, determina el tipo de uso que se le va ha dar a la PC como también el tipo de aplicaciones que se puedan ejecutar. Para las PCs (computadoras personales) los más populares sistemas operativos son el DOS, 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 Uvidia Lenguajes de alto nivel y lenguajes de bajo nivel Los programadores escriben instrucciones en diversos lenguajes de programación. La computadora puede entender directamente algunos de ellos, pero otros requieren pasos de traducción intermedios. Hoy día se utilizan cientos de lenguajes de computadora, los cuales pueden dividirse en tres tipos generales: 1. Lenguaje máquina Una computadora sólo puede entender el lenguaje máquina. El lenguaje de máquina ordena a la computadora realizar sus operaciones fundamentales una por una. Dicho lenguaje es difícil de usar para lar persona porque trabajar con números no es muy có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. El lenguaje ensamblador consiste en pequeñas abreviaturas de palabras en ingles. Se crearon los programar traductores para convertir los programas escritos en lenguaje ensamblador a lenguaje máquina a velocidades de computadora. Estos lenguajes aun requerían muchas instrucciones para realizar simples operaciones. 3. Lenguajes de alto nivel Para acelerar, aún más, el proceso de programación se desarrollan los lenguajes de alto 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 que asemejan el ingles cotidiano y contiene notaciones matemáticas de uso común. Ambientes de Programación Los programadores necesitan un ambiente de programación, es decir, una lugar en donde puedan plasmar sus ideas, un lugar en donde puedan escribir sus programas, en otras palabras donde puedan programar. Los ambientes de programación vienen a ser los diferentes leguajes de programación que existen, son muy variados, con muchas 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; entre los 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 Uvidia Traductor de lenguajes de programación Los traductores son programas que traducen los programas en código fuente, escritos en lenguajes de alto nivel, a programas escritos en lenguaje máquina. Los traductores pueden ser de dos tipos: compiladores e interpretes Compilador Un compilador es un programa que lee el código escrito en un lenguaje (lenguaje origen), 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, el compilador le hace notar al usuario la presencia de errores en el código fuente del programa. Vea la figura de abajo. El C++ es un lenguaje que utiliza un compilador y su trabajo es el de llevar el código fuente 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 archivo parcial (un objeto) que tiene extensión obj luego el compilador invoca al linker que convierte al archivo objeto en un ejecutable con extensión exe que como ya sabemos es un archivo que esta en 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 errores en el programa, es decir, revisa que todo este en orden por ejemplo variables y funciones bien definidas, revisa todo lo referente a cuestiones sintácticas, esta fuera del alcance del compilador que por ejemplo el algoritmo utilizado en el problema funcione bien.
  • 7. Introducción a la Programación Lic. Eduard o Uvidia La siguiente figura muestra los pasos para tener un programa ejecutable desde el código fuente: Interprete Los 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. Un interprete lee el código como esta escrito y luego lo convierte en acciones, es decir, lo ejecuta en ese instante. Existen lenguajes que utilizan un Interprete, como por ejemplo JAVA, y su interprete traduce en el instante mismo de lectura, el código en lenguaje máquina para que pueda ser ejecutado. La siguiente figura muestra el funcionamiento de un interprete.
  • 8. Introducción a la Programación Lic. Eduard o Uvidia Diferencia entre Compilador e Interprete Los 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ón se lo transformo en otro lenguaje (lenguaje máquina). Un interprete traduce el programa cuando lo lee, convirtiendo el código del programa directamente en acciones. La ventaja del interprete es que dado cualquier programa se puede interpretarlo en cualquier plataforma (sistema operativo), en cambio el archivo generado por el compilador solo funciona en la plataforma en donde se lo ha creado. Pero por otro lado un archivo compilado puede ser distribuido fácilmente conociendo la plataforma, 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 que un 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 RESUELTOS Algoritmos Un algoritmo es un procedimiento a seguir, para resolver un problema en términos de: 1. Las acciones por ejecutar y el 2. El orden en que dichas acciones deben ejecutarse
  • 9. Introducción a la Programación Lic. Eduard o Uvidia Un algoritmo nace en respuesta a la aparición de un determinado problema. Una algoritmo esta compuesto de una serie finita de pasos que convergen en la solución de un problema, pero además estos pasos tienen un orden específico. Entenderemos como problema a cualquier acción o evento que necesite cierto grado de análisis, desde la simpleza de cepillarse los dientes hasta la complejidad del ensamblado de un automóvil. En general, cualquier problema puede ser solucionado utilizando un algoritmo, en este sentido podemos utilizar los algoritmos para resolver problemas de computo. Un algoritmo para un programador es una herramienta que le permite resaltar los aspectos más importantes de una situación y descartar los menos relevantes. Todo problema de cómputo se puede resolver ejecutando una serie de acciones en un orden específico. Por ejemplo considere el algoritmo que se elaboraría para el problema o situación de levantarse 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 6 pasos, y no se resaltan aspectos como: colocarse los zapatos después de salir de la cama, o abrir la llave de la regadera antes de ducharse. Estos aspectos han sido descartados, pues no tienen mayor trascendencia, en otras palabras los estamos suponiendo, en cambio existen aspectos que no podemos obviarlos o suponerlos, de lo contrario nuestro algoritmo perdería lógica, un buen programador deberá reconocer esos aspectos importantes y tratar de simplificar al mínimo su problema. Es importante recalcar que los pasos de un algoritmo no son conmutativos pues, no daría solución al mismo problema a tratar. ROBUSTEZ DE UN ALGORITMO Quiere decir que un algoritmo debe contemplar todas las posibles facetas del problema que queremos resolver, al elaborar un algoritmo no se nos debe escapar ningún detalle que provoque un funcionamiento malo nuestro algoritmo. Si logramos construir un algoritmo robusto, cualquier giro inesperado del problema será controlado por el algoritmo, es decir, debe ser flexible a cambios.
  • 10. Introducción a la Programación Lic. Eduard o Uvidia CORRECTITUD DE UN ALGORITMO Es correcto cuando da una solución al problema a tratar y cumple con todos lo requerimientos especificados tal que cumplamos con los objetivos planteados. COMPLETITUD DE UN ALGORITMO Cuando un algoritmo cuenta con todos los recursos para poder llegar a una solución satisfactoria EFICIENCIA Y EFICACIA DE UN ALGORITMO Un algoritmo es eficiente cuando logra llegar a sus objetivos planteados utilizando la menor cantidad de recursos posibles, es decir, minimizando el uso memoria, de pasos y de esfuerzo humano. Un algoritmo es eficaz cuando alcanza el objetivo primordial, el análisis de resolución del problema se lo realiza prioritariamente. Puede darse el caso de que exista un algoritmo eficaz pero no eficiente, en lo posible debemos de manejar estos dos conceptos conjuntamente. Resolución de Problemas Para lograr resolver cualquier problema se deben seguir básicamente los siguientes pasos: Análisis del Problema. en este paso se define el problema, se lo comprende y se lo analiza con todo detalle. Diseño del Algoritmo. se debe elaborar una algoritmo que refleje paso a paso la resolució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 Uvidia RESOLUCIÓN DE PROBLEMAS UTILIZANDO ALGORITMOS Ejemplo 2.1 Una universidad ofrece un curso que prepara a los estudiantes para el examen de obtención de licencia de corredor de bienes raíces. El año anterior, varios de los estudiantes que completaron el curso presentaron el examen para obtener la licencia. Naturalmente la Universidad desea saber que resultados obtuvieron sus estudiantes en el examen. Se nos ha pedido escribir un programa que resuma los resultados recibidos de una lista de 10 estudiantes. Junto a cada nombre se anoto un 1 si el estudiante aprobó el examen y un 2 si reprobó. Exhiba un resumen de los resultados de la prueba indicando el número de estudiantes que aprobaron y el número de estudiantes que reprobaron . 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 solicite otro resultado de examen. Solución Algoritmo A grandes rasgos: Analizar los resultados del examen y decidir si se debe aumentar o no la colegiatura. Se puede refinar como sigue: Inicializar variables Introducir 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 o no la colegiatura. Pseudocódigo Pseudocódigo Es un lenguaje artificial e informal que ayuda a los programadores a desarrollar algoritmos. El Pseudocódigo es similar al lenguaje cotidiano; es cómodo y amable con el usuario, aunque no es realmente in verdadero lenguaje de computadora. No se ejecutan en las computadoras mas bien sirven para ayudar al programadora razonar un programa antes de intentar escribirlo en algún lenguaje. Un programa ejecutado en Pseudocódigo puede ser fácilmente convertido en un programa
  • 12. Introducción a la Programación Lic. Eduard o Uvidia en C++, si es que esta bien elaborado. Por ejemplo supongamos que la nota para aprobar un examen es de 60. El enunciado en Pseudocódigo sería: Si calificación >= 60 entonces Mostrar "Aprobado" FinSi El 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 con el 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 0 Inicializar los reprobados (reprobados) en 0 Inicializar el número de estudiantes (estudiantes) en 0 Introducir 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 estudiantes FinMientras Imprimir un resumen de los resultados de exámenes y decidir si se debe aumentar o no la colegiatura. Imprimir el número de aprobados Imprimir el número de reprobados Si estudiantes es más 8 entonces Imprimir "Aumentar la colegiatura". FinSi Simplificando el problema queda escrito en Pseudocódigo de la siguiente forma:
  • 13. Introducción a la Programación Lic. Eduard o Uvidia El problema anterior escrito en C++ Diagramas de flujo Un diagrama de flujo es una representación gráfica de un algoritmo o de una parte del mismo. Los diagramas de flujo ayudan en la comprensión de la operación de las estructuras de control (Si, Mientras). La ventaja de utilizar un algoritmo es que se lo puede construir independiente mente de un lenguaje de programación, pues al momento de llevarlo a código se lo puede hacer en cualquier lenguaje. Dichos diagramas se construyen utilizando ciertos símbolos de uso especial como son rectángulos, diamantes, óvalos, y pequeños círculos, estos símbolos están conectados entre sí por flechas, conocidas como líneas de flujo. A continuación se detallarán estos sí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í como expresiones Entrada / Salida. Nos permite ingresar datos, de un periférico, así como mostrarlos Salida. Es usado para mostrar datos o resultados Conector. Se coloca al principio y fin de un pedazo de programa, enlaza dos partes 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 Uvidia Ejercicios Resueltos
  • 16. Introducción a la Programación Lic. Eduard o Uvidia Tema 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. EXPRESIONES Programa Un 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 satisfacer una necesidad o cumplir un objetivo de una manera automatizada. Comúnmente, la palabra programa es usada de dos maneras: para describir instrucciones individuales, código fuente, creado por el programador y también describe una pieza entera de software ejecutable. Esta distinción puede causar confusión, por lo que vamos a tratar de distinguir entre el código fuente por un lado y un ejecutable por otro. Para tener un programa ejecutable primero tenemos que tener su código fuente, es decir, 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 (lenguaje máquina), y la computadora actúa con esas instrucciones inmediatamente. El JAVA es un lenguaje interpretado.
  • 17. Introducción a la Programación Lic. Eduard o Uvidia Alternativamente, los compiladores trasladan el código fuente en programas, los cuales pueden ejecutarse tiempo después. A pesar de que se puede trabajar fácilmente con los intérpretes, la mayor parte de la programación es hecha con compiladores porque el código compilado se ejecuta más rápido. C++ es un lenguaje de compilación. Estructura de un Programa Un programa esta formado por la cabecera y el cuerpo del programa. Cabecera En la cabecera se incluyen a nuestro programa algunas rutinas predefinidas que hacen a la programación más sencilla, pues no tenemos que crear todo desde cero o "tratar de inventar la rueda", es muy bueno que conozcamos la mayor cantidad de librerías disponibles para que tengamos un trabajo más que sencillo y estandarizado. Un programa puede no tener cabecera pero sería demasiado simple, he aquí un ejemplo de una cabecera para un programa sencillo. #include <iostream.h> Cuerpo El cuerpo del programa contiene la función principal, las funciones adicionales y las clases que se necesiten en el programa. La mejor forma de aprender un lenguaje es programando con él. El programa más sencillo 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ás importante de cualquier programa C++ y además, es el más pequeño que se puede escribir y que se compile correctamente. En el se define la función void main, que es la que 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 Uvidia La definición del cuerpo de la función está formada por un bloque de sentencias o instrucciones, que esta encerrado entre llaves {}. Un programa C++ puede estar formado por diferentes módulos de código fuente. Es conveniente mantener los código fuente de un tamaño no muy grande, para que la compilación sea rápida. También, al dividirse un programa en partes, puede facilitar la legibilidad del programa y su estructuración. Los diferentes códigos fuentes son compilados de forma separada, únicamente el código fuente que han sido modificados desde la última compilación, y después combinados con las librerías necesarias para formar el programa en su versión ejecutable. Mecanismos de Salida Los mecanismos de Salida son aquellos mensajes que el programa utiliza para comunicarse con el mundo exterior o con el usuario. Por ejemplo yo quiero un programa 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 el segundo ejemplo, en la primera línea 1 se indica que se tengan en cuenta las funciones y 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 se incluye una única sentencia que llama a la función cout en la línea 4. La funcion cout es usada para desplegar flujos de salida de datos, en pocas palabras, muestra lo que queramos por pantalla, pueden ser datos, nombre, resultados, etc. Para usar cout se debe colocar esta palabra seguida del operador < que se lo coloca dos veces, luego entre comillas dobles "" se coloca el texto que se quiere mostrar por pantalla. 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 Uvidia Caracteres especiales ASCII Hay un grupo de símbolos, que son tratados como caracteres individuales, que especifican 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 los explicaremos con más detalle en otro capítulo. Mecanismos de Entrada Los mecanismos de Entrada nos permiten interacción entre el mundo exterior (Usuarios) y el programa, 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 nombrada edad.
  • 20. Introducción a la Programación Lic. Eduard o Uvidia En 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 un valor (en este caso su edad) y al presionar ENTER este valor se almacenará en la variable edad. Finalmente en la línea 7 el programa muestra un mensaje: tienes x años. En donde x es la edad que se introdujo desde teclado. en donde se almacena el dato ingresado por teclado. Variables Un programa necesita un medio de grabar los datos que usa. Las variables y Constantes ofrecen varias maneras para representar y manipular los datos. Definición de variable Una variable es un espacio para guardar información. Entrando más a detalle una variable es una ubicación en la memoria de la computadora en la cual se puede grabar un 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ñas casillas, cada una de las casillas esta numerada secuencialmente, este número que se le 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 grabado temporalmente en la memoria RAM. Todas las variables, son también, creadas en la memoria RAM. Cuando los programadores hablan de memoria, generalmente se están refiriendo a la memoria RAM. Reservando Memoria Se reserva memoria en el momento de definición de las variables, en este momento es donde 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 debe separar o reservar, y que tipo de valor se va ha guardar en la variable.
  • 21. Introducción a la Programación Lic. Eduard o Uvidia Cada casilla de memoria tiene un byte de capacidad. Si el tipo de variable que se crea es 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 (o cuantas casillas) tiene que reservar para la variable. Porque las computadores usan los bits y los bytes para representar los valores, y porque la memoria es medida en bytes, es importante entender y sentirse cómodo con este concepto. Definir una Variable Para crear una variable es preciso definirla. En la definición de una variable se manifestando su tipo, seguida de uno o más espacios, luego se 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 sin espacios. Nombres de variables aceptadas son: x, jap007, miedad. Importante. Los nombre buenos de variables nos dice para que la variable es utilizada, 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 como j23qrs o xxx y restringir los nombres de variables de una sola letra como x ó y, para valores que sean de uso rápido y no perduren en todo el programa. Se debe tratar de usar nombres extensos como miedad o contador. Algunos nombres son fáciles de entender tres semanas después en lugar de romperse la cabeza imaginándose que significan nombres cortos. Inicializar una variable Una vez definida una variable se debe proceder a darle un valor, es cierto que este valor puede cambiar a lo largo del programa, pero es bueno acostumbrarse a dar siempre 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 Uvidia SE LE PUEDE ASIGNAR VALORES A UNA VARIABLE CUANTAS VECES SE QUIERA DURANTE EL PROGRAMA, SE LE ASIGNA UN VALOR UTILIZANDO EL OPERADOR DE IGUALDAD “=”. Palabras Reservadas o Claves Existen en todos los lenguajes nombres o palabras que ya están siendo usadas, y por eso 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 ninguna palabra reservada porque el compilador encontraría un error. Constantes Las constantes son variables que contienen un valor que no cambia durante todo el programa. Una constante simbólica al igual que cualquier variable tiene un tipo y un nombre. Existen dos formas de declarar constantes en C++. La primera es utilizando una instrucción, generalmente en la cabecera, que es como sigue: #define Estudiantes 50 Es la forma tradicional de definir constantes, pero nótese que Estudiantes no tiene un tipo de dato. Lo que hace #define es simplemente sustituir 50 en todas las ocurrencias del 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 de dato lo que hace al código mucho más mantenible y lo previene de errores. Expresiones Una expresión es todo aquello que se evalúa y devuelve un valor. Existen varios tipos de expresiones de acuerdo lo que contienen. Las expresiones aritméticas consisten de una secuencia de operadores y operandos que especifican una operación determinada. Los operandos pueden ser variables,
  • 23. Introducción a la Programación Lic. Eduard o Uvidia constantes y los operadores aritméticos son (+ - * / %). Es más sencillo pensar que una expresión aritmética es como una ecuación o una fó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 en area. Las expresiones lógicas también conocidas como expresiones booleanas. Están compuestas por operadores y operandos, los operadores en este caso son operadores relacionales y operadores lógicos. Este tipo de expresiones es evaluado y devuelve un valor, la diferencia esta en que este 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 Uvidia Estructuras de Control Existen tres clases de estructuras de control: 1. Secuenciales 2. Condicionales 3. Iterativas Los programas que escribamos pueden definirse en base a las tres estructuras de control 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 de Control Diferenciaremos dos partes en una estructura de control: 1. La definición de dicha estructura 2. El cuerpo de la estructura. En la definición es donde se coloca el nombre de la estructura que se va ha utilizar y en el cuerpo de la misma se ubican todas las sentencias o instrucciones que pertenecen o hacen referencia a dicha estructura. Si es cuerpo de tiene más de una instrucción va entre llaves ( {} ). Sentencias o Instrucciones Una sentencia es la unidad ejecutable más pequeña de un programa en C++, en otras palabras una línea de código escrita es una sentencia. Las sentencias controlan el flujo y orden de ejecución. Una sentencia de C++ consta de palabras clave o reservadas como (for, while, if ... else,etc.), expresiones, declaraciones, o llamadas a funciones. 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 y coma. Una sentencia nula es simplemente un punto y coma.
  • 25. Introducción a la Programación Lic. Eduard o Uvidia Tema 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 Anidadas Estructuras de Selección LA ESTRUCTURA DE SELECCIÓN IF La sentencia if se la conoce como estructura de selección simple y su función es realizar o no una determinada acción o sentencia, basándose en el resultado de la evaluación de una expresión (verdadero o falso), en caso de ser verdadero se ejecuta la sentencia. Fig. 5.1 La estructura de selección if (que se muestra en la figura 5.1) trabaja de la siguiente manera: si la evaluación de la expresión o expresiones es verdadera ( 1 ) entonces se ejecuta 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 la figura 5.2) se tiene que encerrar todas las sentencias entre llaves ( { } ) y si la evaluación de la expresión es correcta entonces se ejecuta todas las sentencias contenidas entre las llaves. Fig. 5.2 Si la evaluación de la expresión o expresiones resultaría falsa (0), entonces no se ejecuta las sentencias.
  • 26. Introducción a la Programación Lic. Eduard o Uvidia Por ejemplo si dada la edad de una persona quiero dar un mensaje de que es o no mayor de edad, suponiendo que una persona mayor de edad tiene por lo menos 21 añ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 Fin El diagrama de flujo de la estructura if se muestra en la Fig. 5.3, este diagrama contiene el símbolo diamante que es llamado el símbolo de decisión, que indica que decisión se debe tomar. El símbolo de decisión contiene una expresión, y la evaluación de ésta será verdadera o falsa. Las flechas nos indican los dos posibles caminos que se pueden tomar.
  • 27. Introducción a la Programación Lic. Eduard o Uvidia fig 5.3 El 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 nada Importante. Para mantener el código legible es bueno dejar espacios o sangrías en todas las líneas de código que están dentro de una estructura if / else o if, estas instrucciones se las alinean un poco más a la derecha y así podemos notar claramente que 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 / ELSE La estructura if / else lo que hace es ejecutar una acción si el resultado de la evaluación de la expresión es verdadera y otra acción si el resultado de la evaluación es falsa. La diferencia con utilizar sólo la estructura if es que si la expresión evaluada es verdadera sólo en ese caso se ejecuta una acción de otro modo se pasa de largo. En cambio en la estructura if / else si la expresión es falsa entonces se ejecuta otra acción. Fig. 5.4
  • 28. Introducción a la Programación Lic. Eduard o Uvidia En síntesis lo que hace esta estructura es realizar una acción si la expresión es verdadera 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.5 El 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 ANIDADAS Existe el caso de estructuras if, if/else anidadas, que no es más que una estructura if o 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 las líneas de tal programa. Suponiendo que los valores ingresados por teclado fueran: A=2, B=1, C=5. El programa actuaría de la siguiente manera. El programa se ejecuta secuencialmente hasta la línea 7 donde encuentra una expresió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 otra expresión (A > C) y el resultado de evaluar dicha expresión es falso (2 > 5) por lo que el programa salta hasta la línea 11 y muestra "C es el número mayor". Luego va a la lí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 Problemas Tema 6 Estructuras 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 Uvidia Estructura de repetición while Dicha 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ón 2. Si el resultado de esta evaluación es verdadero la sentencia o sentencias se ejecutan, es decir, se ejecuta el cuerpo de la estructura. Luego se vuelve a evaluar la expresión 3. Si el resultado de esta evaluación es falso no se ejecuta la sentencia o sentencias y sale del ciclo while. Por ejemplo tengo que apagar 10 velas cuando cumpla 10 años, es decir, tengo que soplar 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 Fin Ejemplo 6.1 Otro 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 = 90 Se dice que tiene un límite conocido porque nunca irá más allá del 10, realizará exactamente 10 iteraciones. Ejemplo 6.2 Un ejemplo con límite desconocido sería invertir un número entero ingresado por teclado. #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 el número de iteraciones que hará, eso depende del número de cifras que tenga el número ingresado por teclado. Si el número ingresado tiene 3 cifras se harán 3 iteraciones y si tiene 6 se harán 6 iteraciones. En otras palabras el límite depende de la expresión que se evalúa. La Estructura de Repetición for
  • 32. Introducción a la Programación Lic. Eduard o Uvidia Esta estructura de repetición es más utilizada cuando sabemos el número de repeticiones que deseamos ejecutar, es parecido al caso de la estructura while en el caso de límite conocido. La notación de esta estructura es sencilla y se detalla a continuación for ( 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 vayamos a 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 variar después de cada iteración, esta variación podría ser un incremento en la variable definida en la condición de inicio. Al igual que las demás estructuras de control el cuerpo de la estructura for lleva llaves si este contiene más de una sentencia o instrucción. Ejemplo 6.3 Un ejemplo sencillo puede ser que quiero cantar 10 veces la canción del elefante, el có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 ....... hasta 10 elefantes...... El ejemplo anterior es muy sencillo pero nos muestra el funcionamiento de la estructura for. Un ejemplo algo más complejo sería el siguiente problema. mas ejercicios.
  • 33. Introducción a la Programación Lic. Eduard o Uvidia Estructura de repetición do while Esta estructura de control es muy parecida a la estructura while lo que la hace diferente es que siempre ejecuta por lo menos una ves el cuerpo de la estructura, por eso el do, y luego valida una expresión y en función a este resultado vuelve a iterar o no. 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.4 Un ejemplo para este caso es el siguiente: Se desea ingresar por lo menos un nombre de un estudiante por teclado hasta que el usuario 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ÚSQUEDA Estructuras de Datos Una estructura de datos es un colección de datos que se caracterizan por su forma de organizació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: Arreglo Un arreglo es un conjunto o colección finita de datos de un mismo tipo. Los elementos de 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 Uvidia Un arreglo se define indicando el tipo de arreglo, es decir, el tipo de datos de todos los elementos del arreglo, luego se le da un nombre al arreglo y finalmente se le da un tamañ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 caso anterior la dimensión es 4, esto quiere decir que en la memoria se reservaron 4 posiciones para almacenar 4 valores enteros. INICIALIZAR UN ARREGLO Existen varias maneras de inicializar un arreglo, una manera muy sencilla es poner entre 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 del arreglo como se ve en el Ejemplo 7.1 ACCESO A LOS ELEMENTOS DE UN ARREGLO Puedo acceder a un elemento por medio de un subíndice, por ejemplo si yo quiero acceder 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ás elementos. arreglo[0] 51 arreglo[1] 60 arreglo[2] 70 arreglo[3] 95 Si nos damos cuenta tener un arreglo es mucho más ventajoso que tener definidas 4 variables.
  • 36. Introducción a la Programación Lic. Eduard o Uvidia Desventajas. En ocasiones, no podemos predecir con precisión el tamaño que un arreglo tendrá por lo que podemos definir un arreglo muy grande, lo que nos lleva a desperdiciar 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án desperdiciadas, la solución a este problema la veremos más adelante en lo que se denomina punteros. EJEMPLO 7.1 Se desea ingresar las notas finales de 10 alumnos de la materia de Introducción a la programació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 10 alumnos, 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 valor constante
  • 37. Introducción a la Programación Lic. Eduard o Uvidia const 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 Quicksort Métodos de Búsqueda 1. Búsqueda Secuencial Esta búsqueda realiza un recorrido lineal (uno por uno) por todos los elementos de un arreglo. Es útil cuando el tamaño del arreglo no es grande y no tiene a crecer su número de elementos. solución 2. Búsqueda Binaria Dicha búsqueda es aplicable en arreglos ordenados, pues su funcionamiento depende de este hecho.
  • 38. Introducción a la Programación Lic. Eduard o Uvidia Tema 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 Bidimensionales Un arreglos bidimensional esta compuesto, por un conjunto de elementos homogéneos y se puede acceder a los datos utilizando dos subíndices, este tipo de arreglo es también conocido como matriz. DECLARACIÓN Un 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 dos dimensiones: const int N = 10; int arreglo[N][N]; INICIALIZACIÓN Una 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.1 También podemos utilizar una estructura for dentro de otra estructura for para inicializar los valores de un arreglo de dos dimensiones como se muestra a continuación: EJEMPLO 8.1 Leer 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 UN ARREGLO BIDIMENSIONAL En un arreglo de dos dimensiones necesitamos también dos índices para acceder a sus elementos. 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 Uvidia En 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 le podamos dar. Se pueden definir arreglos de más de 2 dimensiones, pero su manejo se dificultaría enormemente. EJEMPLO 8.2 (MULTIPLICACIÓN DE MATRICES) Se requiere un programa que realice la multiplicación de dos matrices, para tal efecto se deben ingresar las dos matrices por teclado teniendo el cuidado de controlar que la primera matriz tenga una dimensión de N*M y la segunda de M*N para que se pueda realizar la multiplicación. Solucion... EJEMPLO 8.3 Los alumnos de primer semestre de la carrera de Licenciatura en Química de la Universidad Mayor de San Simon son 20. Todos los alumnos toman inicialmente 5 materias 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 el promedio 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 comprendido entre 3 y 11. Un cuadrado mágico esta compuesto de números enteros entre 1 y N, con las siguientes características: la sumas de las filas, columnas, diagonales son iguales, como se ve en el siguiente ejemplo: 816 357
  • 41. Introducción a la Programación Lic. Eduard o Uvidia 492 El método de generación del cuadrado mágico consiste en situar el número 1 en la casilla del centro de la primera fila, el siguiente número se debe situar en la casilla ubicada en la fila anterior (por encima) y en la columna de la derecha. Este proceso se repite 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 la primera columna. En caso de que un número se debe colocar en una casilla que ya esta 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.6 Carácter Un carácter es el átomo de los programas de computadora, un carácter es un símbolo que puede ser una letra del alfabeto o un carácter especial. Un carácter ocupa 8 bits en memoria, y existen 256 caracteres diferentes. Cada carácter se lo codifica en un número entero, es decir, que cada carácter tiene su correspondiente representación entera, el código ASCII es precisamente esto. Por
  • 42. Introducción a la Programación Lic. Eduard o Uvidia ejemplo el carácter ‘a’ tiene como código ASCII el entero 97. Para ver todos códigos ASCII véase el anexo A. Cadenas Una cadena o cadena de caracteres nos es más que una serie de caracteres manipulados como una unidad. Si asemejamos una cadena al lenguaje castellano sería como una palabra, que es un conjunto de sílabas y vocales en donde cada una de estas 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 propio una dirección, es decir, lo que nosotros precisemos. DECLARACIÓN Una cadena se la define de la siguiente manera char cadena[20]; La cadena anterior puede contener un máximo de 20 caracteres. INICIALIZACIÓN Se 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 el ejemplo anterior "Hola" esta entre comillas dobles. Una cadena siempre finaliza con el carácter de fin de cadena ‘0’, que siempre se añade al final automáticamente, en el ejemplo anterior se añade al final de “Hola” el carácter de fin de cadena. También podemos considerar a una cadena como un arreglo de caracteres, y se puede 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 4 Nótese que en la posición 4 se aumenta el fin de cadena EJEMPLO 9.1 Se 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 esta entre comillas. También es una cadena la variable nombre que recibirá un valor desde teclado. Operaciones con Cadenas Existen muchas operaciones que se pueden realizar utilizando cadenas, la mayoría de la operación que podemos requerir se encuentran ya a nuestra disposición dentro de la librería string.h LONGITUD La longitud de una cadena la podemos conocer utilizando la función strlen. Sintaxis strlen( 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ÓN Para saber si dos cadenas son exactamente iguales utilizamos la función strcmp. Sintaxis strcmp ( cadena1, cadena2 ); Esta función devuelve un valor de acuerdo al resultado de la comparación. Devuelve: 0 si la dos cadenas son exactamente iguales Mayor a 0 si la cadena1 es mayor a la cadena2 Menor a 0 si la cadena1 es menor que la cadena2 Ejemplo 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"; } COPIA Podemos reflejar todo el contenido de una cadena a otra, en otras palabras la copiamos 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 última tuviera 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ÓN Podemos juntar o concatenar dos cadenas una a continuación de la otra. Utilizamos la función strcat. Sintaxis strcat( cadenaDestino, cadenaOrigen ); Todo el contenido de la cadenaOrigen se añade a continuación de la cadenaDestino, si esta última contiene algo entonces al final contendrá lo que contenía más el contenido de la cadenaOrigen.
  • 46. Introducción a la Programación Lic. Eduard o Uvidia Ejemplo 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.6 Escriba 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.8 Definición de Puntero Los punteros son variables que contienen una dirección que hacen referencia a un valor. Una variable común contiene o almacena un valor, mientras que un puntero almacena la dirección que hace referencia a este valor. Para tener un mejor entendimiento de un puntero tenemos que saber que es la memoria, a la que podemos considerar como una colección de casillas en las cuales se puede 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 de varios estantes, supongamos que están divididos en casillas, en donde cada una puede contener a un libro. En este ejemplo un puntero sería uno de los registros que se encuentren en el catálogo de la biblioteca, en donde cada registro contiene información de la ubicación (dirección) del libro dentro de los estantes de la biblioteca. De esta manera es más fácil buscar directamente en el catálogo que estante por estante, su manejo 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 Puntero Un 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 Uvidia Esto quiere decir que un puntero tiene que tener un tipo de dato, luego le sigue el operador de indirección (*) y luego un nombre cualquiera, el que le daremos al puntero. Ejemplos de declaración de punteros son: int *puntero ; // es un puntero a un tipo de dato entero char *nombre ; //es un puntero a una cadena de caracteres float *promedio; //es un puntero a un tipo de dato real Inicialización Para inicializar un puntero debemos de hacerlo de acuerdo al tipo de dato al que pertenece el puntero. EJEMPLO 10.1 (PUNTERO A UN ARREGLO DE 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 en realidad en el puntero es la dirección del primer elemento del arreglo, conociendo esta dirección podemos 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 Uvidia Todas las anteriores sentencias muestran el primer elemento del arreglo al que apunta el 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 esta manera 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 se encuentra la instrucción puntero++; la cual no hace incrementar en 1 el valor del puntero 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 puntero Como habíamos mencionado que un puntero contiene una dirección que señala a un valor, entonces como podríamos hacer para ver la dirección o para ver solamente el valor. Existen dos operadores que nos permiten realizar estas operaciones, para ver
  • 50. Introducción a la Programación Lic. Eduard o Uvidia solamente la dirección de un puntero se utiliza el operador &. Para obtener el valor que 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: 4 En el ejemplo anterior en la línea 5 después de declarar un puntero se le asigna una dirección, para ser más específicos la dirección de la variable aux, esto se logra precediendo 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 Arreglos Es posible utilizar punteros para reemplazar a los arreglos normales, veremos como podemos utilizar un puntero para reemplazar un arreglo de enteros y una arreglo de caracteres (cadena). ARREGLOS DE ENTEROS Esta parte la explicaremos utilizando un ejemplo escrito primero con arreglos y luego con punteros. Programa resuelto utilizando un arreglo de enteros EJEMPLO 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 enteros EJEMPLO 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ínea 4 donde se declara es arreglo con tamaño 4 en el ejemplo 10.4 y en el ejemplo 10.5 en 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 medio del subíndice y corchetes "notas[i]" en el caso del ejemplo 10.5 en la línea 7, para acceder 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 la forma: "*(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 tanto podemos utilizar punteros para representar cadenas. El siguiente ejemplo muestra como definir e inicializar 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 el puntero no nos limita el tamaño que vaya a tomar la cadena. EJEMPLO 10.7 En este ejemplo se hará lo mismo que en el ejemplo 9.6 utilizando un puntero a una cadena. Se escribirá 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á para realizar el cálculo. En la línea tres encontramos la siguiente expresión dentro de la estructura while: ptr[0]!=’0’ Esta expresión quiere decir que cuando la posición inicial del puntero sea fin de cadena ‘0’ entonces el ciclo termina. En la línea 4 se encuentra la instrucción ptr++; Lo que hace es que el puntero recorra un índice a la derecha, es decir apuntará al siguiente carácter de la cadena, de esta manera el ciclo recorrerá todas las posiciones de la cadena hasta encontrar el fin de cadena. Bien ahora la función tiene que devolver la longitud de la cadena, en la líne 5 podemos ver lo siguiente: (ptr-cadena) esto quiere decir que se restará la última posición de la cadena menos la primera, dándonos la longitud de la cadena. Además en la línea 5 se muestra (int) que es un casting, es decir que convierte en entero a las instrucciones que precede en este caso a la instrucción (ptr-cadena). ¿Por qué NO trabajar con punteros? El error más común es que cuando trabajamos con punteros vamos apuntando a diferentes valores 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 Uvidia espacio de memoria a cual están apuntando lo que nos ocasionará una sobrecarga en la memoria cuando nuestros programas sean grandes. También por medio de los punteros es que se pueden tener acceso a valores privados, y podemos modificar valores haciendo que nuestros programas caigan. Este hecho es muy común en los crackers de programas, porque se valen de los punteros para cambiar valores en los programas y utilizarlos 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 con direcciones 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 con mayor 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 funciones Asignación Dinámica de Memoria Asignar dinámicamente memoria significa que personalicemos el espacio que ocuparán nuestras variables en memoria. Cuando reservamos memoria, esta permanece allí hasta que nosotros la liberemos. Reservar o asignar memoria es una buena técnica para no desperdiciar memoria inútilmente, pues sólo reservaremos el espacio necesario, este detalle será muy significante en aplicaciones o programas grandes. Para reservar memoria utilizamos el operador new seguido del tipo de dato del cual queremos reservar memoria. Por ejemplo: int *apuntador = new int ; La anterior instrucción reservará para el puntero apuntador 2 bytes que es el tamaño de un tipo de dato int
  • 54. Introducción a la Programación Lic. Eduard o Uvidia char *nombre; nombre = new char[10]; La anterior instrucción reservar para el puntero a una cadena nombre 10 caracteres Como habiamos mencionado cuando reservamos memoria permenece allí hasta que la liberemos, esta operación la realizamos con el operador delete. delete apuntador; delete nombre; EJEMPLO 10.8 Ingresar 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.4 Concepto de una Función Una función es un conjunto de instrucciones independientes cuyo objetivo es el de minimizar la complejidad de un problema, descomponiéndolo en subproblemas más fáciles de resolver. Una función debe realizar una tarea específica si le damos a una funció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 que realizar operaciones y talvez modificación de los datos que la función tenía a disposición, generalmente este resultado se devuelve en forma de valor. Estábamos familiarizados con el uso de la función principal void main(), que siempre debe de estar en cualquier programa, pero resulta que podemos crear las funciones que nos parezcan necesarias para resolver de un manera más sencilla el problema que estemos tratando. ¿CUÁNDO UTILIZAR FUNCIONES? Para saber que tareas tenemos que tratarlas como funciones se darán unas pautas a continuació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 veces podemos llevar esta tarea a una función, lo que nos ahora esfuerzo y evita líneas de código repetidas. - Cuando necesitemos realizar una operación sobre algún tipo de dato y producto de ello necesitemos un valor de respuesta. Como por ejemplo calcular el cuadrado de un número entero. DEFINICIÓN DE FUNCIONES
  • 56. Introducción a la Programación Lic. Eduard o Uvidia Una 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 la función no devuelve ningún valor. nombreF Es el nombre que le damos a nuestra función puede ser el que queramos menos la palabras reservadas del lenguaje. Parámetros Es un conjunto de variables, las cuales se escriben con su tipo de dato y su nombre, separadas por comas, que vienen a constituir los argumentos de la función. Cuerpo Es todo lo que se encuentra entre las llaves {} y contiene un conjunto de sentencias. return Esta sentencia se usa si el tipo de dato de retorno no es void. Return devuelve una expresión. Se pueden colocar varios returns a lo largo de un programa y cuando la función encuentra a cualquiera termina. EJEMPLO 11.1 En el siguiente ejemplo se definirá una función para que calcule el área de un triángulo 1: #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 Uvidia 11: 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 tipo entero base y altura. El cuerpo de la función comprende todas las líneas de código desde la línea 4 hasta la línea 8. CUERPO DE UNA FUNCIÓN El 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 definidos por el usuario, en síntesis se puede trabajar en el cuerpo de una función con todas las ventajas que el lenguaje nos ofrece pero orientado a la resolución de un problema específico. VALOR DE RETORNO Una función después de haber realizado operaciones con los datos que se le proporciona debe de devolver algo, ya sea en forma de un valor o sino haber efectuado alguna 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ón encuentra esa palabra acaba e inmediatamente devuelve el valor que se indica. En el ejemplo 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 de retorno void, pero no significan que no hacen nada, pueden realizar cálculos o simplemente 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 VARIABLES Variables locales Todas la variables que se crean dentro de el cuerpo de una función tienen ámbito o vida sólo en el cuerpo mismo de la función, estas variables son llamadas locales. Esto quiere decir que podemos utilizar estas variables sólo en la función pues al terminar esta las variables se destruyen. En el ejemplo 11.1 en la línea 5 se define la variable area, esta variable tiene ámbito sólo en el cuerpo de la función, no podríamos acceder a esta variable desde la función principal o cualquier otra parte del programa. Variables globales Las variables globales son definidas fuera de cualquier función, están definidas de un manera parecida a las librerías, de estas forma estas variables tienen un alcance global a todo el programa, esto quiere decir que pueden ser accedidas de cualquier parte del programa, es decir, de cualquier función. Más información Llamada o Invocación a una función Una vez escrita la función, podemos utilizarla escribiendo su nombre y luego dándole los parámetros correspondientes: Sintaxis