Algoritmos y Lenguajes de Programacion
Algoritmos y Lenguajes de Programacion
Algoritmos y Lenguajes de Programacion
COMPUTACIÓN Y
HOJA DE CÁLCULO.
DESARROLLO DE
LÓGICA
ALGORÍTMICA.
INTRODUCCIÓN A LA
PROGRAMACIÓN DE
UN LENGUAJE
ESTRUCTURADO.
ESTRUCTURAS
ALGORITMOS Y LENGUAJES SELECTIVAS Y DE
REPETICIÓN.
DE PROGRAMACIÓN.
..
La asignatura de Algoritmos y Lenguajes de Programación aporta al ARREGLOS Y
perfil
() del egresado, los conocimientos, habilidades, Metodologías, ARCHIVOS.
así como capacidades de análisis y síntesis, para resolver problemas
numéricos en hojas de cálculo y lenguajes de programación
pertinentes a las áreas de producción y toma de decisiones. FUNCIONES.
TECNOLÓGICO DE
ESTUDIOS
SUPERIORES DE
JOCOTITLÁN
Prof. Alejandro Domínguez Mendoza. “SI SE PUEDE IMAGINAR, SE PUEDE PROGRAMAR”
UNIDAD I
INTRODUCCIÓN A LA COMPUTACIÓN
Y HOJA DE CÁLCULO.
Definición de Sistema
Elementos de un sistema.
Los sistemas operativos controlan la relación de las señales de entrada para obtener
siempre las mismas señales de salida, y con esto, obtener siempre los mismos resultados.
Los sistemas operativos se dividen en gráficos y de texto. Los primeros sistemas tenían una
interfaz de tipo texto, en la cual la pantalla solamente mostraba caracteres de texto. Los
principales sistemas operativos de tipo texto fueron el IBM-DOS, MS-DOS, AMIGA,
Commodore.
Los sistemas operativos gráficos permiten una operación más eficiente del dispositivo que
lo usa, y el cual es accesible mediante un dispositivo apuntador (mouse o touch pad) o
mediante sistemas táctiles. Los primeros sistemas de este tipo fueron Mac OS y Windows.
Los sistemas operativos Mixtos combinan las funciones GUI (Graphic User Interfase, Interfaz
gráfica de usuario) y de texto. El sistema que representa esta modalidad es Linux.
Todos los sistemas operativos permiten al usuario utilizar una serie de instrucciones
programadas (programas o software) para obtener un nuevo proceso de instrucciones o
lograr un resultado físico, en alguno de los elementos periféricos de hardware.
Es el encargado de administrar los recursos dentro del sistema, tales como la memoria, o la
disponibilidad de procesamiento durante las distintas operaciones que realiza el procesador
de la computadora.
La mayoría de los sistemas operativos que existen en el mercado, son sistemas a los que se
denominan de propietario y son aquellos que para su uso requieren el pago de una licencia
Conceptos generales.
Excel: Es una aplicación para crear hojas de cálculo que está divida en filas y columnas, al
cruce de estas se le denomina celdas sobre las cuales se almacena información (letras o
números) que podemos usar para realizar operaciones, tales como sumas, restas,
multiplicaciones, divisiones, cálculos financieros, estadísticos, de ingeniería, amortizaciones,
etc.
¿Qué es un rango?
Formato Descripción
General Formato de número predeterminado que Excel aplica cuando se escribe
un número. La mayor parte de los números a los que se aplica el formato
con la opción General se muestran tal y como se escriben. No obstante,
si la celda no es lo suficientemente ancha para mostrar todo el número,
el formato General redondea los números con decimales. El
formato General también usa la notación científica (exponencial) para
los números grandes (12 o más dígitos).
Número Se usa para la presentación de números en general. Se puede especificar
el número de posiciones decimales que se va a usar, el uso de un
separador de miles y el modo en que se muestran los números
negativos.
Moneda Se usa con los valores monetarios y muestra el símbolo de moneda
predeterminado junto a los números. Se puede especificar el número de
posiciones decimales que se va a usar, el uso de un separador de miles y
el modo en que se muestran los números negativos.
Contabilidad Este formato también se usa para valores monetarios, pero alinea los
símbolos de moneda y las comas decimales en una columna.
Fecha Muestra los números de serie que representan fechas y horas como
valores de fecha, según el tipo y la configuración regional (ubicación)
especificados. Los formatos de fecha que comienzan con un asterisco (*)
responden a cambios de la configuración regional de fecha y hora, que
se especifican en el Panel de control. Los formatos sin asterisco no se
ven afectados por la configuración del Panel de control.
Hora Muestra los números de serie que representan fechas y horas como
valores de hora, según el tipo y la configuración regional (ubicación)
especificados. Los formatos de hora que comienzan con un asterisco (*)
responden a cambios de la configuración regional de fecha y hora, que
se especifica en el Panel de control. Los formatos sin asterisco no se ven
afectados por la configuración del Panel de control.
Porcentaje Multiplica el valor de la celda por 100 y muestra el resultado con un
símbolo de porcentaje (%). Puede especificar el número de posiciones
decimales que desea usar.
Formato Descripción
Fracción Muestra un número como fracción, según el tipo de fracción que se
especifique.
Científico Muestra un número en notación exponencial, en el que se reemplaza
parte del número por E+n, donde E (exponente) multiplica el número
anterior por 10 elevado a n. Por ejemplo, un formato Científico de 2
decimales muestra 12345678901 como 1,23E+10; 1,23 se multiplica por
10 elevado a la décima potencia. Se puede especificar el número de
posiciones decimales que se desea usar.
Texto Este formato trata el contenido de una celda como texto y lo muestra tal
como se escribe, incluso si se escriben números.
Especial Muestra un número como un código postal, un número de teléfono o un
número de seguridad social.
Personalizado Permite modificar una copia de un código de formato de número
existente. Use este formato para crear un formato personalizado que se
agregue a la lista de códigos de formato de número. Se pueden agregar
entre 200 y 250 formatos de número personalizados, según la versión
de idioma de Excel que esté instalada en su equipo.
Para introducir cualquier fórmula o función siempre debemos comenzar por el signo = de
manera que Excel pueda identificar que los datos introducidos no son textos o datos
numéricos.
Formula =(c5+f6+b1+a3)^(1/2)
Función= Raiz(c5+f6+b1+a3)
Las funciones son herramientas especiales que efectúan cálculos de diversa complejidad en
un solo paso. Excel contiene funciones especializadas en cálculos matemáticos, financieros,
funciones lógicas, etc.
Las fórmulas en Excel son expresiones que se utilizan para realizar cálculos o procesamiento
de valores, produciendo un nuevo valor que será asignado a la celda en la cual se introduce
dicha fórmula. En una fórmula, por lo general, intervienen valores que se encuentran en
una o más celdas de un libro de trabajo.
ejemplo, podemos calcular el VAN (Valor Actual Neto) de una inversión aunque no
recordemos la fórmula, simplemente utilizando la función correspondiente.
Nombre: Es un término descriptivo abreviado, tal como SUMA, PROMEDIO, VNA, etc.
Argumentos: Son los datos que necesita la función para operar correctamente. Por ejemplo,
la función SUMA tendrá como argumentos el rango de valores a sumar, en la función que
calcula el VAN de una inversión, los argumentos serán el tipo de interés o coste de capital,
así como el rango de los rendimientos obtenidos. Los argumentos se sitúan entre paréntesis
y van separados por "punto y coma"(;).
1.5. MACROS.
Las macros de Excel nos permiten automatizar tareas que realizamos cotidianamente de
manera que podamos ser más eficientes en nuestro trabajo. Una macro no es más que una
serie de comandos o instrucciones que permanecen almacenados dentro de Excel y que
podemos ejecutar cuando sea necesario y cuantas veces lo deseemos.
Realiza algunas acciones en la hoja de cálculo como, por ejemplo, escribir algún texto,
seleccionar algunas columnas o filas o rellenar con algunos datos. En definitiva, deja
volar tu imaginación.
DESARROLLO DE LA LÓGICA
ALGORÍTMICA.
La resolución de los problemas consta de cinco etapas que garantizan la llegada correcta a
la solución: identificación del problema, planteamiento de alternativas de solución, elección
de una alternativa, desarrollo de la solución y evaluación de ésta.
Por lo tanto, es necesario que cada alternativa sea bien analizada para que la toma de
decisiones sea bien justificada. Deberás elegir la alternativa que sea la más adecuada para
la solución del problema, tomando en cuenta las características del problema y las
características que deberá tener la solución, así como los elementos, datos o información
con la que cuentas.
4. Desarrollo de la solución
Después de decidir cuál es la mejor alternativa de todas, se llega a la etapa de la solución.
En esta fase, a partir de los datos relacionados con la alternativa seleccionada, se aplican
las operaciones necesarias para solucionar el problema. La selección de los procesos
también debe ser determinada en función de lo óptimo, es decir, las operaciones deben
llegar a la solución por el camino más corto para garantizar la mayor eficiencia en el
funcionamiento. Si la alternativa es la óptima, llevará a la solución deseada que fue prevista
en la identificación del problema.
5. Evaluación de la solución
Luego de haber desarrollado la solución queda aún una etapa, que es la evaluación. En los
procesos industriales a este procedimiento se le llama control de la calidad y consiste en
determinar que la solución obtenida es lo que se esperaba conseguir comprobando que el
resultado sea correcto. En esta fase se deben "pulir" los procesos ya realizados y tratar de
llevarlos a un grado mayor de optimización , pues el algoritmo más eficiente en la solución
de un problema es el que llega a su objetivo final con la mayor economía de procedimientos
que sea posible. A continuación, puedes observar un ejemplo de la aplicación de la
metodología a la solución de un problema simple. Es importante saber que los problemas
complejos también se resuelven con esta estructura.
Desarrollo en cascada.
Metodología de desarrollo en
cascada es:
Análisis de requisitos.
Diseño del sistema.
Diseño del programa.
Codificación.
Pruebas.
Implementación del programa.
Mantenimiento.
• Esta metodología, conocida como modularización o diseño Top Down, es una de las
técnicas más importantes para lograr un buen diseño de programa.
• La programación modular es uno de los métodos de diseño más flexibles y potentes para
• mejorar la productividad de un programa. La descomposición de un programa en módulos
• Independientes más simples se conoce también como el método de “divide y vencerás".
Se diseña cada módulo con independencia de los demás y, siguiendo un método
descendente, se llega hasta la descomposición final del problema en módulos en forma
jerárquica.
• En consecuencia, el programa se divide en módulos (partes independientes), cada uno de
los cuales ejecuta una única actividad o tarea.
Programación estructurada
Hoy en día las aplicaciones informáticas son mucho más ambiciosas que las necesidades de
programación existentes en los años 60, principalmente debido a las aplicaciones gráficas,
por lo que las técnicas de programación estructurada no son suficientes lo que ha llevado
al desarrollo de nuevas técnicas tales como la programación orientada a objetos y el
desarrollo de entornos de programación que facilitan la programación de grandes
aplicaciones.
1. Los programas son más fáciles de entender, ya que pueden ser leído de forma secuencial,
sin necesidad de hacer seguimiento a saltos de línea (GOTO) dentro de los bloques de
código para entender la lógica.
2. La estructura del programa es clara puesto que las instrucciones están más ligadas o
relacionadas entre sí.
3. Reducción del esfuerzo en las pruebas. El seguimiento de los fallos o errores del programa
("debugging") se facilita debido a la estructura más visible, por lo que los errores se pueden
detectar y corregir más fácilmente.
4. Reducción de los costos de mantenimiento de los programas.
5. Programas más sencillos y más rápidos (ya que es más fácil su optimización).
6. Los bloques de código son auto explicativos, lo que facilita a la documentación.
7. Los GOTO se reservan para construir las instrucciones básicas (selección e iteración)
Definición de Algoritmo.
"Un algoritmo se define como un método que se realiza paso a paso para solucionar un
problema que termina en un número finito de pasos".
1. Inicio.
2. Traer gato.
Los algoritmos pueden describirse utilizando diversos lenguajes. Cada uno de estos
lenguajes permiten describir los pasos con mayor o menor detalle.
• Lenguaje Natural.
• Lenguaje de Diagrama de Flujo.
• Lenguaje Natural de Programación.
• Lenguaje de Programación de Algoritmos.
Lenguaje Natural.
Es aquél que describe en español, para nuestro caso, los pasos a seguir utilizando un
vocabulario cotidiano. Se le conoce como lenguaje jerga cuando se utilizan términos
especializados de una determinada ciencia, profesión o grupo.
Es aquél que se vale de diversos símbolos para representar las ideas o acciones a
desarrollar. Es útil para organizar las acciones o pasos de un algoritmo pero requiere de
etapas posteriores para implementarse en un sistema de cómputo.
Son aquéllos que están orientados a la solución de problemas que se definen de una
manera precisa. Generalmente son aplicados para la elaboración de fórmulas o métodos
científicos.
2.3.2. PSEUDOCÓDIGO.
Definición de Pseudocódigo.
Para ejemplificar los problemas a resolver o para clarificar los conceptos, se usarán
herramientas comunes y familiares para los programadores, estas herramientas son:
pseudocódigo y diagramas de flujo. En esta sección se detallarán las reglas del
pseudocódigo que se utiliza en las diferentes unidades de este material.
• VARIABLES. Se deben especificar las variables a utilizar así como su tipo (entero,
alfanumérico, etcétera). Esto sirve para familiarizarse con la creación de variables e ir
creando una estandarización propia de cada programador.
Ejemplo:
VARIABLES Num, Suma de tipo entero
En los casos anteriores se usan mayúsculas para identificar el nombre del algoritmo y el o
los nombres de las variables a utilizar.
Es muy importante definir donde comienzan las instrucciones del algoritmo, para que el
programador sepa dónde debe empezar a idear la forma en que trabajará el programa.
• Ejemplo
ALGORITMO Suma
VARIABLES Num, Suma, Cont de tipo entero
• INICIO
Cuerpo del algoritmo
• FIN
* Notas:
1.-Es muy importante tomar en cuenta la interpretación, esto hará más claro nuestro
pseudocódigo.
2.-Cada programador fija sus reglas y estándares para la creación de pseudocódigo, los
creadores de este material trataron de igualarlo lo más posible al lenguaje natural para que
las personas que están empezando a familiarizarse con estas herramientas lograran una
mejor comprensión del mismo.
3.-Un buen programador hace uso de estas herramientas como apoyo en la creación,
mantenimiento y documentación de sus programas.
Prueba De Escritorio
Técnica para desarrollar cada paso de un algoritmo de manera escrita, con la finalidad de
detectar errores de entrada y salida de datos, así como errores de sintaxis y de lógica.
Consiste en dar valores a las variables que hemos definido y que siguen el flujo del
programa para comprobar si al final el resultado es el acertado.
Por ejemplo:
- No ingresar un dato de nacimiento que sea mayor que la fecha actual.
- No ingresar un número negativo donde deber ir uno positivo o sin decimales;
- No ingresar un valor numérico donde solo debe ir texto;
- No ingresar un valor fuera del rango establecido;
etc.,
En casos de generar algún error, el programa tendrá que enviar al usuario un mensaje
indicándole esto y dándole la oportunidad de corregir.
Una vez todo haya funcionado bien en el papel, entonces ya podemos escribir el
pseudocódigo siguiendo el diagrama de flujo.
Esta prueba es para no perder tiempo escribiendo el programa y luego tener que buscar EN
DONDE está el error y como debemos corregirlo.
También sirve para optimizar un algoritmo viendo cómo podemos llegar a un determinado
resultado con menos pasos.
NO OLVIDAR que el programa deber ser lo más intuitivo posible y tener, en algunos casos,
carteles de ayuda cuando presione la tecla programada (generalmente la F1 como cualquier
programa comercial). Para salir utilizar la tecla ESC (como en cualquier...)
Esto hace a la profesionalidad del sistema.
2.4.1. SECUENCIALES.
2.4.2. SELECTIVOS.
Las estructuras selectivas se utilizan para tomar decisiones lógicas; de ahí que se suelan
denominar también estructuras de decisión o alternativas y son utilizadas en todos los
lenguajes de programación.
En las estructuras selectivas se evalúan una condición y en función del resultado de la misma
se realiza una opción u otra. Las condiciones se especifican usando expresiones lógicas. La
representación de una estructura selectiva se hace con palabras en pseudocódigo (if, then,
else o bien en español si, entonces, si_no), las estructuras selectivas pueden ser:
Simples
Las estructuras selectivas simples o condicionales están compuesta únicamente de una sola
condición si es verdadera ejecutara la acción o acciones si la condición es falsa no hará nada.
Dobles
Las estructuras selectivas dobles están compuesta únicamente de una sola condición, si es
verdadera ejecutara la acción o acciones y si la condición es falsa ejecutara las acciones para
la condición falsa. Esta estructura selectiva solo se debe utilizar únicamente cuando existen
dos condiciones, si hubiera más de dos condiciones se puede utilizar varias selectivas
simples o una selectiva múltiple.
Múltiples
Anidadas
Las estructuras alternativas anidadas están compuestas por estructuras alternativas simples
y/o dobles que tienen en si interior una o mas estructuras alternativas simples y/o dobles,
la regla para realizar este tipo de anidamientos, es que antes de terminar el bloque de
acciones de la estructura alternativa externa debe cerrarse la estructura alternativa interna.
si < condición externa> entonces si < condición interna> entonces < acción 1> si_no < acción
2> fin_si fin_si.
2.4.3. REPETITIVOS.
Iterativas
Las computadoras están especialmente diseñadas para todas aquellas aplicaciones en las
cuáles una operación o conjunto de ellas deben repetirse muchas veces. Un tipo importante
de estructura es el necesario para repetir una o varias acciones un número determinado de
veces.
La estructura iterativa mientras es aquella en que el cuerpo del ciclo se repite mientras se
cumple una determinada condición. Cuando se ejecuta la instrucción mientras, la primera
cosa que sucede es que se evalúa la condición (una expresión lógica). Si se evalúa como
falsa, no se entra al ciclo y el programa prosigue en la siguiente instrucción después del ciclo.
Si la expresión lógica es verdadera, entonces se ejecuta el cuerpo del ciclo, después de lo
cual se evalúa de nuevo la expresión lógica. Este proceso se repite una y otra vez mientras
la condición es verdadera.
Existen muchas situaciones en las que se desea que el ciclo se ejecute al menos una vez
antes de comprobar la condición de repetición. La estructura repetir se ejecuta hasta que
se cumpla una condición determinada que se comprueba al final del ciclo. El ciclo repetir se
ejecuta hasta que una condición que originalmente es falsa, se hace verdadera.
INTRODUCCIÓN A LA
PROGRAMACIÓN DE UN LENGUAJE
ESTRUCTURADO.
Entorno de programación
Las actividades mejor soportadas por herramientas de desarrollo son normalmente las
centrales: codificación y pruebas de unidades. El conjunto de herramientas que soportan
estas actividades constituyen lo que se llama un entorno de programación. A veces se
utilizan las siglas IDE (Integrated Development Environment) para designar estos entornos,
aunque no son un entorno de desarrollo completo, sino sólo una parte de él.
Otras funciones:
Entorno integrado
C++:
Directivas de preprocesador
Declaraciones globales (variables globales, funciones,…)
Función main()
{
Secuencia de declaraciones e instrucciones
}
función1 ()
{
Secuencia de declaraciones e instrucciones
}
Función ()
{
Secuencia de declaraciones e instrucciones
}
Para utilizar algo de una biblioteca en un programa, hay que colocar al principio del
programa una directiva de pre-procesamiento seguida de la cabecera de la biblioteca entre
ángulos.
Indica al compilador que lea las directivas antes de compilar la función principal
* La función main()
Una función C++ es un subprograma que devuelve un valor, un conjunto de valores o realiza
una tarea específica. Todo programa C++ tiene una única función main() que es el punto
inicial de entrada al programa. Si se intenta declarar dos funciones main() dentro del
programa se produce error.
#include <iostream.h>
int main()
{
entrada_datos();
proceso_datos();
return 0;
...
}
Llamadas a otras funciones.
El tipo de dato determina la naturaleza del valor que puede tomar una variable.Un tipo de
dato define un dominio de valores y las operaciones que se pueden realizar con éstos
valores.
C++ dispone de unos cuantos tipos de datos predefinidos (simples) y permite al
programador crear otro tipo de datos.
Ejemplos:
int a = 1234;
bool seguir = true, encontrado;
3.4 IDENTIFICADORES.
Los identificadores
Como norma general, un identificador debe tener los suficientes caracteres para que su
significado se reconozca fácilmente, pero se debe evitar un excesivo número de caracteres.
Un identificador puede tener cualquier número de caracteres, pero dependiendo del
compilador utilizado, solo son significativos los n primeros caracteres. Por tanto, dos
identificadores son diferentes si difieren al menos en uno de los “n” primeros caracteres.
No se permite el uso de la ñ ni de las tildes en los identificadores, aunque sí pueden ser
utilizados en comentarios.
C++ diferencia mayúsculas y minúsculas, por lo tanto, nombre y Nombre son identificadores
diferentes.
Almacenamiento:
Hay dos clases, almacenamiento primario, que son los que usa la CPU directamente
(memoria principal, memoria caché, etc) y el almacenamiento secundario, a los cuales la
CPU no accede directamente, sino que deben almacenarse previamente en uno primario.
Son de almacenamiento secundario los discos magnéticos, ópticos, cintas magnéticas,
tambores magnéticos, etc.El almacenamiento de datos puede usarse también para copias
de seguridad, ver backup.Con el correr de los años, el almacenamiento de datos
informáticos ha ido bajando de precio. Por ejemplo, 1 GB de memoria en 1956 costaba 8,2
millones de dólares. En 1980, 184 mil dólares; en 1990 eran 5.200 dólares; en 2000 eran 12
dólares, y en 2006 fueron 1,2 dólares.
Direccionamiento
Representación De Memoria
Como arreglos
Como listas ordenadas
En esta unidad trataremos a las colas como arreglos de elementos, en donde debemos
definir el tamaño de la cola y dos apuntadores, uno para accesar el primer elemento de la
lista y otro que guarde el último.
Cola (Definición)
Una cola es una estructura de almacenamiento, donde la podemos considerar como una
lista de elementos, en la que éstos van a ser insertados por un extremo y serán extraídos
por otro. Las colas son estructuras de tipo FIFO (first-in, first-out), ya que el primer elemento
en entrar a la cola será el primero en salir de ella. Existen muchísimos ejemplos de colas en
la vida real, como por ejemplo: personas esperando en un teléfono público, niños
esperando para subir a un juego mecánico, estudiantes esperando para subir a un camión
escolar, etc.
Operadores.
Operador de comparación
Operando.
Expresiones.
Cada expresión toma un valor que se determina tomando los valores de las variables y
constantes implicadas y la ejecución de las operaciones indicadas. Una expresión consta de
operadores y operandos. Según sea el tipo de datos que manipulan, se clasifican las
expresiones en: Aritméticas, Relacionales, Lógicas
Prioridad
Se llama prioridad al orden en el que se evalúa una expresión. 4D tiene una estricta
prioridad izquierda-a-derecha. Por ejemplo: 3+4*5 devuelve 35 porque la expresión es
evaluada como 3+4, dando 7, el cuál es multiplicado por 5, resultando 35. Se pueden utilizar
paréntesis para cambiar la prioridad izquierda-a-derecha. Por ejemplo:
3+(4*5) devuelve 23 porque se evalúa primero la expresión (4*5), por estar entre paréntesis.
El resultado es 20, lo cual es añadido el 3, dando el resultado final 23. Se pueden insertar
paréntesis dentro de otros grupos de paréntesis. Es necesario asegurarse de que cada
paréntesis izquierdo tiene su correspondiente derecho. La falta o el uso incorrecto de los
paréntesis pueden provocar resultados inesperados o expresiones no válidas.
Evaluación de expresiones
Cuando en una expresión concurre más de una operación, los paréntesis indicarán prioridad,
es decir, la operación encerrada entre paréntesis se realizará en primer lugar. Además,
algunos operadores tendrán preferencia sobre otros. Por ejemplo, en la operación a + b / c,
primero se realizará b / c y posteriormente se le sumará a. En caso de que el programador
quiera que se sume primero a y b para posteriormente dividir por c, tendríamos que hacer
(a + b) / c. Si todos los operadores de una expresión tienen la misma prioridad, la operación
se hará de izquierda a derecha, salvo cuando tengamos exponenciales, en tal caso, el orden
será de derecha a izquierda, por ejemplo, al hacer 2**3**2 resulta el valor 2**9 = 512.
Tablas de Verdad
Donde:
p , q = Entradas
V = Verdadero
F = Falso
• Análisis.
• Diseño.
• Codificación o construcción.
• Implantación o explotación.
• Mantenimiento.
ANÁLISIS
En esta fase se establece el producto a desarrollar, siendo necesario especificar los procesos
y estructuras de datos que se van a emplear. Debe existir una gran comunicación entre el
usuario y el analista para poder conocer todas las necesidades que precisa la aplicación. En
el caso de falta de información por parte del usuario se puede recurrir al desarrollo de
prototipos para saber con más precisión sus requerimientos.
En el análisis estructurado se pueden emplear varias técnicas como:
Diagramas de flujo de datos: Sirven para conocer el comportamiento del sistema mediante
representaciones gráficas.
Modelos de datos: Sirven para conocer las estructuras de datos y sus características.
(Entidad relación y formas normales)
Diccionario de datos: Sirven para describir todos los objetos utilizados en los gráficos, así
como las estructuras de datos.
Al final de esta fase tenemos que tener claro las especificaciones de la aplicación.
DISEÑO
En esta fase se alcanza con mayor precisión una solución óptima de la aplicación, teniendo
en cuenta los recursos físicos del sistema (tipo de ordenador, periféricos, comunicaciones,
etc…) y los recursos lógicos. (Sistema operativo., programas de utilidad, bases de datos,
etc…)
En el diseño estructurado se pueden definir estas etapas:
Diseño de datos: Establece las estructuras de datos de acuerdo con su soporte físico y lógico.
(Estructuras en memoria, ficheros y hojas de datos)
CODIFICACIÓN
Pruebas unitarias: Sirven para comprobar que cada módulo realice bien su tarea.
EXPLOTACIÓN
MANTENIMIENTO
Esta es la fase que completa el ciclo de vida y en ella nos encargaremos de solventar los
posibles errores o deficiencias de la aplicación. Existe la posibilidad de que ciertas
aplicaciones necesiten reiniciar el ciclo de vida.
Tipos de mantenimiento:
Inicio > Todos los programas > Bloodshed Dev-C++ > Dev-C++
PASO 4: EDITAR
#include <conio.h>
#include <stdio.h>
int main()
{
printf( "Hola mundo." );
getch(); /* Pausa */
return 0;
}
En la pantalla se verá algo parecido a:
PASO 5: COMPILAR
PASO 6: EJECUTAR
PASO 7: SALIR
ESTRUCTURAS SELECTIVAS Y DE
REPETICIÓN.
Permite ejecutar una acción o grupo de acciones solo si se cumple una determinada
condición, es decir, donde la condición “C” es un grupo de condiciones a evaluarse. El
bloque “A” representa la operación o conjunto de operaciones a realizar si la condición “C”
es verdadera.
Pseudocodigo En C++
Si(C) if(C)
A {
Finsi A
}
También se puede decir que se evalúa la condición “C” si es verdadero (true) se ejecuta
todas las sentencias que están dentro de las llaves (en C++), hasta el Finsi (en pseudocódigo)
para luego continuar con la siguiente línea de código que esta después.
En caso que la condición “C” sea falsa (false) no se ejecutara las sentencias dentro de las
llaves (en C++), hasta el Finsi (en pseudocódigo), y el control pasa a la siguiente instrucción
de programa (en orden descendente).
Permite seleccionar una ruta de dos posibles, en base a la verdad (V) o falsedad (F) de la
condición.
Pseudocódigo En C++
if(condicion)
Si(Condicion) {
a1 a1;
a2 a2;
a3 a3;
. .
.
.
.
. an;
an }
Sino else
b1 {
b1 b1;
b1 b2 ;
. b3;
. .
. .
bn .
Finsi bn;
}
Si (if) la condición es verdadera, se ejecutan las sentencias: {a1, a2, a3, …, an} , sino (else)
se ejecutaran las sentencias: {b1, b2, b3, …, bn}
Si la sentencia solo tiene una línea no es necesario poner llaves.
Una estructura de decisión puede estar anidada dentro de otra estructura de decisión, hay
que tener en cuenta que el anidamiento sea total.
Se debe mantener el concepto que una estructura de decisión debe tener una sola entrada
y una sola salida tanto para la estructura que anida como para la estructura anidada.
Pseudocódigo En C++
if(Condicion1)
Si(Condicion1) {
Si(Codicion2) if(Condicion2)
Ejecuta bloque de {
acciones 1 Ejecuta bloque de
Sino acciones1
Ejecuta bloque de }
acciones 2 else
Finsi {
Sino Ejecuta bloque de
Ejecuta bloque de acciones 3 acciones2
Finsi }
}
else
{
Ejecuta bloque de
acciones3
}
Esta instrucción se utiliza para seleccionar una alternativa dentro de múltiples opciones
disponibles.
El contenido de la variable selector debe ser ordinal, es decir debe ser de tipo int o char o
sus variantes de int: long int, short int, no están permitido datos de tipo float.
Es decir si la variable selector es exactamente igual a la constante J, entonces se ejecutara
la sentencia J(s), luego de encontrar la instrucción break, hará que el control del programa
salga fuera del switch.
Pseudocódigo C++
Según sea(Valor) switch (valor)
Caso <condicion1> {
Sentencia1(s) Case : <condicion1>
Salto Sentencia1(s);
Caso <condicion2> break;
Case : <condicion2>
Sentencia2(s)
Sentencia2(s);
Salto break;
Caso <condicion3> Case : <condicion3>
Sentencia3(s) Sentencia3(s);
Salto break;
Caso <condicion4> Case : <condicion4>
Sentencia4(s) Sentencia4(s);
Salto break;
Default default:
SentenciaD(s) SentenciaD(s);
Salto break;
FinSegunsea }
CONCEPTOS
Bucle
El buque es un conjunto de instrucciones que se repiten.
Interacción
Es cada una de las veces que se ejecuta el bucle.
Contador
Un contador es una variable cuyo valor incrementa o decrementa en una cantidad fija se
utiliza en los siguientes casos.
Ø Para contabilizar el número de veces que se desea una operación o grupo de operaciones.
Ø Un contador toma un valor inicial antes de empezar sus funciones y se debe codificar en
el siguiente formato:
cont=cont +1
cont=cont -1
Acumulador
Un acumulador se debe inicializar a cero (0) en caso de suma y en uno (1) en caso de
producto y se codifica bajo el siguiente formato:
acum=acum+variable
acum=acum*variable
Condición es una expresión booleana (puede ver verdadera o falsa) que se evalua
al principio del bucle y antes de cada iteración de las sentencias.
Si la condición es verdadera, se ejecuta el bloque de sentencias y se vuelve al
principio del bucle.
Si la condición es falsa, no se ejecuta el bloque de sentencias y se continúa con la
siguiente sentencia del programa.
FinMientras }
Por consiguiente, cuando el flujo de un programa llega a un bucle do while, existen dos
posibilidades:
Se ejecuta el bloque de instrucciones y, después, si la condición se evalúa a falsa, el bloque
realizado una sola iteración.
Se ejecuta el bloque de instrucciones y, a continuación, si la condición se evalúa a verdadera,
el bloque de instrucciones se vuelve a ejecutar. Y así sucesivamente, hasta que la condición
sea falsa.
El <bloque_de_instrucciones> de un bucle do while puede ejecutarse una o más veces
(iteraciones). También hay que prevenir que el bucle no sea infinito.
Hasta (Condicion)
Un bucle for hace que una instrucción o bloque de instrucciones se repitan un número
determinado de veces mientras se cumpla la condición.
grupo de sentencias {
ARREGLOS Y ARCHIVOS.
Un arreglo es una colección de datos (cada uno de los cuales es del mismo tipo). Cada pieza
del arreglo se llama elemento. Para acceder a un elemento de un arreglo, utiliza el operador
de corchetes ( [] ) y un índice entero que indica la ubicación del elemento en el arreglo.
Cuando se crea un nuevo objeto arreglo, sus elementos son inicializados a sus valores
predeterminados Para crear un objeto arreglo, utiliza el operador new, seguido por el tipo
de los elementos y el tamaño del arreglo deseado. El tamaño del arreglo no debe ser
negativo.
ages = new int[5];
Existe otra forma de crear un objeto arreglo: la declaración del arreglo puede incluir un
inicializador, el cual es una lista separada por comas de los elementos iniciales entre
corchetes. Un inicializador puede ser utilizado solamente en la instrucción de declaración.
int[ ] ages = {21, 19, 35, 27, 55};
int x[2][3]={{1,2,3},{4,5,6}};
Observe que tenemos un conjunto de llaves que encierra a otros grupos de números
también encerrados entre llaves y separados por comas. ¿Cuántos grupos de números se
tienen encerrados por las llaves de los extremos?, porque la dimensión del primer índice es.
¿Cuántos números se tienen en cada uno de los grupos? , por el tamaño correspondiente
al segundo índice es 3.
456
x[1][0] x[1][1] x[1][2]7
ARREGLOS DE CARÁCTERES
UTILIZACIÓN DE ARREGLOS
Un arreglo es una colección de datos (cada uno de los cuales es del mismo tipo). Cada pieza
del arreglo se llama elemento. Para acceder a un elemento de un arreglo, utiliza el operador
de corchetes ( [] ) y un índice entero que indica la ubicación del elemento en el arreglo.
El primer elemento en un arreglo tiene un índice 0, el segundo tiene un índice 1 y así
sucesivamente. Por lo tanto, los índices en un arreglo de n elementos estarán en el rango
de 0 a n - 1. Los elementos del arreglo son almacenados contiguamente en memoria.
El archivo de cabecera fstream.h define las clases ifstream, ostream y fstream para
operaciones de lectura, escritura y lectura/escritura en archivos respectivamente. Para
trabajar con archivos debemos crear objetos de éstas clases de acuerdo a las operaciones
que deseamos efectuar. Empezamos con las operaciones de escritura, para lo cual
básicamente declaramos un objeto de la clase ofstream, después utilizamos la función
miembro open para abrir el archivo, escribimos en el archivo los datos que sean necesarios
utilizando el operador de inserción y por último cerramos el archivo por medio de la función
miembro close, éste proceso está ilustrado en nuestro primer programa, archiv01.cpp.
//***********************************************
// archiv01.cpp
// Demuestra la escritura básica en archivo
//***********************************************
#include <fstream.h>
int main()
{
ofstream archivo; // objeto de la clase ofstream
archivo.open("datos.txt");
archivo.close();
return 0;
}
//***********************************************
// archiv02.cpp
// Demuestra el uso de manipuladores
//***********************************************
#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
int main()
{
ofstream archivo("Datos.txt"); // constructor de ofstream
int numero;
archivo.close();
return 0;
}
De esta manera, podemos modificar el modo de apertura del programa archiv02.cpp para
que los datos del programa se concatenen en el archivo Datos.txt simplemente escribiendo
el constructor así: ofstream archivo("Datos.txt", ios::app);. Si deseamos que el programa no
sobreescriba un archivo existente especificamos el constructor de ésta manera: ofstream
archivo("Datos.txt", ios::noreplace);. Utilizando los especificadores de modo de apertura se
puede conseguir un mayor control en las operaciones de E/S en archivos.
Para abrir un archivo y realizar operaciones de lectura se crea un objeto de la clase ifstream
y se procede prácticamente de la misma forma que lo expuesto en el apartado anterior.
Después de abrir el archivo se puede leer su contenido utilizando la función miembro de la
clase ifstream o bién el operador de extracción. Cuando se lee un archivo, por lo general se
empieza al principio del mismo y se leerá su contenido hasta que se encuentre el final del
archivo. Para determinar si se ha llegado al final del archivo se puede utilizar la función
miembro eof como condición de un bucle while. Además se puede utilizar la función
miembro fail para detectar un error al abrir el archivo, esto se demuestra en el siguiente
programa, archiv03.cpp:
//***********************************************
// archiv03.cpp
// Demuestra operaciones de lectura de archivos
//***********************************************
#include <fstream.h>
int main()
{
ifstream archivo("Pruebas.txt", ios::noreplace);
char linea[128];
long contador = 0L;
if(archivo.fail())
cerr << "Error al abrir el archivo Pruebas.txt" << endl;
else
while(!archivo.eof())
{
archivo.getline(linea, sizeof(linea));
cout << linea << endl;
if((++contador % 24)==0)
{
cout << "CONTINUA...";
cin.get();
}
}
archivo.close();
return 0;
}
El programa crea un objeto de la clase ifstream para abrir el archivo llamado Pruebas.txt
utilizando el constructor de clase y especificando la bandera ios::noreplace que evita que el
archivo sea sobreescrito. Si por algún motivo ocurre un error al abrir el archivo se genera el
mensaje de error especificado en la línea 16. En ausencia de errores el programa entra en
un bucle while el cual está evaluado por efecto de la función miembro eof( ) de tal manera
que el bucle se ejecuta hasta encontrar el final del archivo. Utilizando la función miembro
getline( ) se obtiene una línea de texto y se exhibe en pantalla, línea 21, luego utilizamos
una instrucción condicional if con el operador de módulo (%) para determinar si se han leído
24 líneas de texto. Cada vez que el contador de líneas dividido entre 24 dé como resultado
un resíduo de cero el programa se detiene permitiendo leer las 24 líneas de texto previas.
Para continuar se debe presionar la tecla enter y entonces el programa leerá y mostrará en
pantalla las siguientes 24 líneas de texto, líneas 22 a la 26.
de lectura y escritura, las funciones miembro que nos permiten éstas pruebas son las
siguientes:
//*********************************************************
// archiv04.cpp
// Demuestra éxito en operaciones de E/S de archivos
//*********************************************************
#include <fstream.h>
#include <stdlib.h>
int main()
{
ifstream origen("Pruebas.txt");
char linea[128];
if(origen.fail())
cerr << "Error al abrir el archivo Pruebas.txt" << endl;
else
{
ofstream destino("Copia.txt", ios::noreplace);
if(destino.fail())
cerr << "Error al crear el archivo: Copia.txt" << endl;
else
{
while(!origen.eof())
{
origen.getline(linea, sizeof(linea));
if(origen.good()) // si lectura ok y
if(origen.eof()) // si eof, -> termina
exit(1); // el programa
else
destino << linea << endl;
if(destino.fail())
{
cerr << "Fallo de escritura en archivo" << endl;
exit(1);
}
}
}
destino.close();
}
origen.close();
return 0;
}
//*********************************************************
// archiv05.cpp
// Demuestra operaciones con archivos binarios
//*********************************************************
#include <fstream.h>
#include <stdlib.h>
int main()
{
ifstream origen("Archiv04.exe", ios::binary);
char linea[1];
if(origen.fail())
cerr << "Error al abrir el archivo: Archiv04.exe" << endl;
else
{
ofstream destino("Copia.exe", ios::binary);
if(destino.fail())
cerr << "Error al crear el archivo: Copia.exe" << endl;
else
{
while(!origen.eof()&&!origen.fail())
{
origen.read(linea, sizeof(linea));
if(origen.good())
{
destino.write(linea, sizeof(linea));
if(destino.fail())
{
cerr << "Error en el archivo: Copia.exe" << endl;
exit(1);
}
}
else if(!origen.eof())
{
cerr << "Error en el archivo: Archiv04.exe" << endl;
exit(1);
}
}
}
destino.close();
}
origen.close();
return 0;
}
Observará que se utiliza la función miembro origen.read( ) para leer un byte del archivo
especificado por el objeto de la clase ifstream llamado origen, línea 27. En forma similar, se
utiliza la función miembro destino.write( ) para escribir un byte en el archivo especificado
para el objeto de la clase ofstream llamado Copia.EXE, línea 30 del programa. La
comprobación de las operaciones de E/S se realizan como se indicó para el programa
archiv04.cpp. Si se desea utilizar los operadores de inserción y extracción para operaciones
de E/S en archivos binarios se requiere sobrecargar éstos operadores, ésto lo trataremos
más adelante cuando se aborde el tema de la sobrecarga de operadores en C++.
Hasta este punto hemos efectuado operaciones, sea de escritura o bién de lectura en un
archivo, tanto en formato de texto como en formato binario pero todavía no se han
efectuado ámbas operaciones en un mismo archivo. En ciertas aplicaciones es necesario
efectuar operaciones de lectura/escritura en un archivo como es el caso de una base de
datos, para esto es necesario crear un objeto de la clase fstream. Cuando un programa abre
un archivo para operaciones de E/S éste mantiene el registro de dos apuntadores de archivo,
uno para operaciones de lectura y otro para operaciones de escritura. Como en la mayoría
de los casos en que se abre un archivo para operaciones de E/S se efectúa acceso aleatorio,
analizaremos ésta condición.
En los programas presentados hasta este punto se han realizados operaciones secuenciales
en el archivo, ya sea para escritura ó lectura de datos, empezando por el principio y
continuando hasta el final del mismo. Las operaciones aleatorias en un archivo no
necesariamente inician por el principio del archivo, en lugar de ésto es posible desplazarse
por el contenido del archivo para realizar una operación de E/S. Para mover los apuntadores
de archivo a posiciones específicas se utilizan dos funciones: seekg( ) coloca el apuntador
de escritura de archivo en un lugar específico, y seekp( ) mueve el apuntador de lectura a
una posición específica en el archivo, la sintáxis de las funciones es ésta:
seekp(desplazamiento, posicion)
seekg(desplazamiento, posicion)
del archivo a partir del cual se moverá el apuntador de archivo, de acuerdo a las siguientes
banderas
Para demostrar las operaciones aleatorias conviene generar un breve archivo de texto en
donde poder efectuar algunas operaciones de E/S, use el siguiente código:
//***********************************************
// letras.cpp
// Genera un abecedario
//***********************************************
#include <fstream.h>
int main()
{
ofstream archivo("Letras.txt");
return 0;
}
//*********************************************************
// archiv06.cpp
// Demuestra lectura y escritura en un archivo
//*********************************************************
#include <fstream.h>
int main()
{
char letra;
fstream letras("Letras.txt", ios::in|ios::out);
letras.close();
return 0;
}
Observe que para posicionar el apuntador de lectura de archivo a partir del fin del mismo
se utiliza un número negativo y además la lectura avanza hacia el final del archivo. Por la
naturaleza del programa archiv06.cpp solo desplegará el mensaje HOLA en pantalla una sola
vez, esto es porque las letras que forman la palabra "HOLA" se leen del archivo y a su vez se
escriben al final del mismo, el código toma en cuenta las letras previamente escritas, lineas
19 a la 32. Para un mejor entendimiento del funcionamiento del programa utilice el
depurador de errores de su compilador en la modalidad de paso por paso.
Salida a impresora
//***********************************************
// archiv07.cpp
// Demuestra la salida a impresora
//***********************************************
#include <fstream.h>
#include <stdlib.h>
int main()
{
char texto[256];
ofstream impresora("PRN");
ifstream archivo("Pruebas.txt");
if (archivo.fail())
cerr << "Error al abrir el archivo: Pruebas.txt" << endl;
else
{
while (!archivo.eof())
{
archivo.getline(texto, sizeof(texto));
if (archivo.good())
{
impresora << texto << endl;
if (impresora.fail())
{
cerr << "Error de escritura en impresora" << endl;
exit(1);
}
}
else if (!impresora.eof())
{
cerr << "Error al leer el archivo: Pruebas.txt" << endl;
exit(1);
}
}
archivo.close();
impresora.close();
}
return 0;
}
FUNCIONES.
6.1 INTRODUCCIÓN.
Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general
toman ciertos valores de entrada, llamados parámetros y proporcionan un valor de salida o
valor de retorno; aunque en C++, tanto unos como el otro son opcionales, y pueden no
existir.
Tal vez parezca un poco precipitado introducir este concepto tan pronto en el curso. Sin
embargo, las funciones son una herramienta muy valiosa, y como se usan en todos los
programas C++, creo que debemos tener, al menos, una primera noción de su uso. A fin de
cuentas, todos los programas C++ contienen, como mínimo, una función.
Funciones:
Métodos:
Los métodos y las funciones son funcionalmente idénticos, pero su diferencia radica en el
contexto en el que existen. Un método también puede recibir valores, efectuar operaciones
con estos y retornar valores, sin embargo en método está asociado a un objeto,
básicamente un método es una función que pertenece a un objeto o clase, mientras que
una función existe por sí sola, sin necesidad de un objeto para ser usada.
Procedimientos:
Una función estándar. Es un conjunto de líneas de código que realizan una tarea específica
y puede retornar un valor. Las funciones pueden tomar parámetros que modifiquen su
funcionamiento. Las funciones son utilizadas para descomponer grandes problemas en
tareas simples y para implementar operaciones que son comúnmente utilizadas durante un
programa y de esta manera reducir la cantidad de código. Cuando una función es invocada
se le pasa el control a la misma, una vez que esta finalizó con su tarea el control es devuelto
al punto desde el cual la función fue llamada.
Para comenzar, vamos a considerar el caso en el cual se desea crear la función cuadrado(),
que deberá devolver el cuadrado de un número real (de punto flotante), es decir,
cuadrado() aceptará números de punto flotante y regresará una respuesta como número
flotante.
Nota: aunque para la función que veremos el tipo de retorno coincide con el tipo de
parámetro pasado, algunas veces las cosas pueden cambiar, es decir, no es obligatorio que
una función reciba un parámetro de un tipo y que tenga que regresar una respuesta de
dicho tipo.
double Cuadrado(double n)
{
return n*n;
}
Normalmente, las funciones operan sobre ciertos valores pasados a las mismas ya sea como
constantes literales o como variables, aunque se pueden definir funciones que reciban
parámetros. Existen dos formas en C++ de pasar parámetros a una función; por referencia
o por valor. El hecho es que si en una declaración de función se declaran parámetros por
referencia, a los mismos no se les podrá pasar valores literales ya que las referencias
apuntan a objetos (variables o funciones) residentes en la memoria; por otro lado, si un
parámetro es declarado para ser pasado por valor, el mismo puede pasarse como una
constante literal o como una variable. Los parámetros pasados por referencia pueden ser
alterados por la función que los reciba, mientras que los parámetros pasados por valor o
copia no pueden ser alterados por la función que los recibe, es decir, la función puede
manipular a su antojo al parámetro, pero ningún cambio hecho sobre este se reflejará en el
parámetro original.
La función cuadrado(), es un clásico ejemplo que muestra el paso de parámetros por valor,
en ese sentido la función cuadrado() recibe una copia del parámetro n. En la misma función
se puede observar que se realiza un cálculo ( n*n ), sin embargo el parámetro original no
sufrirá cambio alguno, esto seguirá siendo cierto aún cuando dentro de la función hubiera
una instrucción parecida a n = n * n; o n*=n;
double Cuadrado(double n)
{
return n*n;
}
Para mostrar un ejemplo del paso de parámetros por referencia, vamos a retomar el caso
de la función cuadrado, salvo que en esta ocasión cambiaremos ligeramente la sintaxis
para definir la misma: