Tutorial de Programación Estructurada.

Anuncio
MÓDULO DE
PROGRAMACIÓN
ESTRUCTURADA.
Ing. Edgar Calderón Sánchez.
Página 1
UNIDAD # 1
PROGRAMAS.
Ing. Edgar Calderón Sánchez.
Página 2
1.- SISTEMAS
INFORMACIÓN.
DE
PROCESAMIENTO
DE
LA
Un sistema en general se define como el conjunto de componentes
conectados e interactivos, que tiene un propósito.
Los sistemas de procesamiento de información son un sistema que
transforman los datos en información organizada, significativa y útil.
Los componentes de un sistema de proceso de información son tres:
entrada, proceso y salida.
Entrada: se le dan los datos que el sistema requiere, estos lo da el
usuario del sistema.
Proceso (procesamiento): este se realiza el CPU del computador, es
donde se procesan los datos que el usuario suministro.
Salida: este es el resultado o la información que nos suministra el CPU
después de procesar los datos de entrada.
Existen dos conceptos a considerar en los sistemas de información, el
Hardware y el Software.
Hardware.- es
componentes).
la
parte
física
del
computador
(Dispositivo
o
Software.- es la parte lógica del computador (Programas).
CPU o UPC (Unidad Central de Procesamiento) , este es el conjunto de
circuitos eléctricos, que los como suma, resta, multiplicación, división,
entre otros.
Ing. Edgar Calderón Sánchez.
Página 3
Memoria Central.- La información que se procesa, se almacena en este
dispositivo hasta terminar los cálculos o el proceso.
Dispositivos de almacenamiento secundario (memoria auxiliar) ,tales
como disco o cintasmagnéticas, que se utilizan para almacenar grandes
cantidades de información.
Dispositivos de E/S.- estos permiten la comunicación con el usuario, o
sea, usuarioalgunos son Teclado, monitor, impresora, mouse y otros.
2.- EL CICLO DE VIDA DE UNA APLICACIÓN
Una de las cosas que se han definido tras el nacimiento de la ingeniería
del software ha sido el ciclo de vida de una aplicación. El ciclo de vida
define los pasos que sigue el proceso de creación de una aplicación
desde que se propone hasta que finaliza su construcción. Los pasos son:
Análisis. En esta fase se determinan los requisitos que tiene que cumplir
la aplicación. Se anota todo aquello que afecta al futuro funcionamiento
de la aplicación. Este paso le realiza un analista
Diseño. Se especifican los esquemas de diseño de la aplicación. Estos
esquemas forman los planos del programador, los realiza el analista y
representan todos los aspectos que requiere la creación de la aplicación.
Ing. Edgar Calderón Sánchez.
Página 4
Codificación. En esta fase se pasa el diseño a código escrito en algún
lenguaje de programación. Esta es la primera labor que realiza el
programador.
Pruebas. Se trata de comprobar que el funcionamiento de la aplicación
es la adecuada. Se realiza en varias fases:
a) Prueba del código.- Las realizan programadores. Normalmente
programadores distintos a los que crearon el código, de ese modo
la prueba es más independiente y generará resultados más
óptimos.
b) Versión alfa.- Es una primera versión terminada que se revisa a
fin de encontrar errores. Estas pruebas conviene que sean hechas
por personal no informático. El producto sólo tiene cierta
apariencia de acabado.
c) Versión beta.- Versión casi definitiva del software en la que no se
estiman fallos, pero que se distribuye a los clientes para que
encuentren posibles problemas. A veces está versión acaba
siendo la definitiva (como ocurre con muchos de los programas
distribuidos libremente por Internet).
Mantenimiento.- Tiene lugar una vez que la aplicación ha sido ya
distribuida, en esta fase se asegura que el sistema siga funcionando
aunque cambien los requisitos o el sistema para el que fue diseñado el
software. Antes esos cambios se hacen los arreglos pertinentes, por lo
que habrá que retroceder a fases anteriores del ciclo de vida.
Ing. Edgar Calderón Sánchez.
Página 5
3.- TIPO DE ERRORES DE UNA APLICACIÓN.
Los errores de programación pertenecen a tres categorías: errores de
compilación, errores en tiempo de ejecución y errores lógicos. Las
técnicas para depurar cada uno de ellos se tratarán en las tres lecciones
siguientes.
3.1.- ERRORES DE COMPILACIÓN.
Los errores de compilación, también conocidos como errores del
compilador, son errores que impiden que su programa se ejecute.
Cuando presiona F5 para ejecutar un programa, Visual Basic compila el
código en un lenguaje binario que el equipo entiende. Si el compilador de
Visual Basic se encuentra con código que no entiende, emite un error de
compilador.
La mayoría de los errores del compilador se deben a errores cometidos
al escribir el código. Por ejemplo, puede escribir mal una palabra clave,
omitir alguna puntuación necesaria o intentar utilizar una instrucción
EndIf sin antes utilizar una instrucción If.
Afortunadamente, el editor de código de Visual Basic se diseñó para
identificar estos errores antes de que se intente ejecutar el programa.
Aprenderá a encontrar y corregir los errores de compilación en la lección
siguiente, Encontrar y eliminar errores del compilador.
3.2.- ERRORES EN TIEMPO DE EJECUCIÓN.
Los errores en tiempo de ejecución son errores que aparecen mientras
se ejecuta su programa. Estos errores aparecen normalmente cuando su
programa intenta una operación que es imposible que se lleve a cabo.
Un ejemplo de esto es la división por cero. Suponga que tiene la
instrucción siguiente:
Speed = Miles / Hours
Si la variable Hours tiene un valor de 0, se produce un error en tiempo de
ejecución en la operación de división. El programa se debe ejecutar para
que se pueda detectar este error y si Hours contiene un valor válido, no
se producirá el error.
Ing. Edgar Calderón Sánchez.
Página 6
Cuando aparece un error en tiempo de ejecución, puede usar las
herramientas de depuración de Visual Basic para determinar la causa.
Aprenderá a encontrar y corregir los errores en tiempo de ejecución en la
lección ¡No funciona! Encontrar y eliminar errores en tiempo de
ejecución.
3.3.- ERRORES LÓGICOS.
Los errores lógicos son errores que impiden que su programa haga lo
que estaba previsto. Su código puede compilarse y ejecutarse sin
errores, pero el resultado de una operación puede generar un resultado
no esperado.
Por ejemplo, puede tener una variable llamada FirstName y establecida
inicialmente en una cadena vacía. Después en el programa, puede
concatenar FirstName con otra variable denominada LastName para
mostrar un nombre completo. Si olvida asignar un valor a FirstName, sólo
se mostrará el apellido, no el nombre completo como pretendía.
Los errores lógicos son los más difíciles de detectar y corregir, pero
Visual Basic también dispone de herramientas de depuración que
facilitan el trabajo. Aprenderá a encontrar y corregir los errores lógicos en
¿Qué? Esto no debiera haber ocurrido. Encontrar errores lógicos.
4.- PROGRAMACIÓN.
La programación informática, a menudo acortada como programación, es
el proceso de diseñar, codificar, depurar y mantener el código fuente de
programas computacionales. El código fuente es escrito en un lenguaje
de programación. El propósito de la programación es crear programas
que exhiban un comportamiento deseado. El proceso de escribir código
requiere frecuentemente conocimientos en varias áreas distintas,
además del dominio del lenguaje a utilizar, algoritmos especializados y
lógica formal. Programar no involucra necesariamente otras tareas tales
como el análisis y diseño de la aplicación (pero sí el diseño del código),
aunque sí suelen estar fusionadas en el desarrollo de pequeñas
aplicaciones.
Ing. Edgar Calderón Sánchez.
Página 7
5.- HISTORIA.
Para crear un programa, y que la computadora lo intérprete y ejecute las
instrucciones escritas en él, debe usarse un lenguaje de programación.
En sus inicios las computadoras interpretaban sólo instrucciones en un
lenguaje específico, del más bajo nivel, conocido como código máquina,
siendo éste excesivamente complicado para programar. De hecho sólo
consiste en cadenas de números 1 y 0 (sistema binario).
Para facilitar el trabajo de programación, los primeros científicos que
trabajaban en el área decidieron reemplazar las instrucciones,
secuencias de unos y ceros, por palabras o letras provenientes del
inglés; las codificaron y crearon así un lenguaje de mayor nivel, que se
conoce como Assembly o lenguaje ensamblador. Por ejemplo, para
sumar se usa la letra A de la palabra inglesa add (sumar). En realidad
escribir en lenguaje ensamblador es básicamente lo mismo que hacerlo
en lenguaje máquina, pero las letras y palabras son bastante más fáciles
de recordar y entender que secuencias de números binarios. A medida
que la complejidad de las tareas que realizaban las computadoras
aumentaba, se hizo necesario disponer de un método sencillo para
programar. Entonces, se crearon los lenguajes de alto nivel. Mientras que
una tarea tan trivial como multiplicar dos números puede necesitar un
conjunto de instrucciones en lenguaje ensamblador, en un lenguaje de
alto nivel bastará con solo una. Una vez que se termina de escribir un
programa, sea en ensamblador o en un lenguaje de alto nivel, es
necesario compilarlo, es decir, traducirlo a lenguaje máquina.
Ejemplos de multiplicar 2 números en Assembly.
TITLE multiplicacion
; CALCULO DE DOS DIGITOS
.MODEL SMALL
.STACK 100H
.DATA
D1 DB ?
D2 DB ?
CRLF DB 10,13,10,13,'$'
_TITULO DB 'MULTIPLICACION DE DOS DIGITOS'
_DIGITO1 DB 'DIGITO 1 = $'
_DIGITO2 DB 'DIGITO 2 = $'
_RESULT DB ' EL RESULTADO ES -----> $'
.CODE
_INICIA_OPERACION:
Ing. Edgar Calderón Sánchez.
Página 8
MOV AX,@DATA
MOV DS,AX
MOV DX,OFFSET CRLF ;insertarlinea
MOV AH,09H
INT 21H
MOV DX,OFFSET _TITULO ;mensaje como titulo
MOV AH,09H
INT 21H
MOV DX,OFFSET CRLF ;insertarlinea
MOV AH,09H
INT 21H
MOV DX,OFFSET _DIGITO1
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
MOV D1, AL
SUB D1,30H
MOV DX,OFFSETcrlf ;insertarlinea
MOV AH,09H
INT 21H
MOV DX,OFFSET _DIGITO2
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
MOV D2,AL
SUB D2,30H
MOV DX,OFFSET CRLF
MOV AH,09H
INT 21H
MOV DX,OFFSET CRLF
MOV AH,09H
INT 21H
;CALCULO DE LA MULTIPLICACION---MOV AX,0H ;LIMPIAR EL ACUMULADOR
MOV AL,D1
MUL D2
AAM ; (AAM) >> aplicar ajuste ASCII de la multiplicacion ***********
MOV BX,AX
;MOSTRAR EL RESULTADO DE LA OPERACION
MOV DX,OFFSET _RESULT
MOV AH,09H
INT 21H
Ing. Edgar Calderón Sánchez.
Página 9
MOV DL,BH ;mostrar decenas
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,BL ;mostrar unidades
ADD DL,30H
MOV AH,02H
INT 21H
;insertarlinea
MOV DX,OFFSETcrlf
MOV AH,09H
INT 21H
_SALIR_A_MODO_DE_MSDOS:
MOV AH,4CH
INT 21H
END _INICIA_OPERACION
Líneas de códigos = 74
Ejemplos de multiplicar 2 números en c.
#include<conio.h>
#include<stdio.h>
void main()
{
int n1,n2,rm;
clrscr();
printf("ingrese el primer número”);
scanf(“%d”,&n1);
printf("ingrese el segundonúmero”);
scanf(“%d”,&n2);
rm=n1 * n2;
printf(“La multiplicación es : %d”,&rm);
getch();
}
Líneas de códigos = 14
Ing. Edgar Calderón Sánchez.
Página 10
6.- LÉXICO Y PROGRAMACIÓN.
La programación se rige por reglas y un conjunto más o menos reducido
de órdenes, expresiones, instrucciones y comandos que tienden a
asemejarse a una lengua natural acotada (en inglés); y que además
tienen la particularidad de una reducida ambigüedad. Cuanto menos
ambiguo es un lenguaje de programación, se dice, es más potente. Bajo
esta premisa, y en el extremo, el lenguaje más potente existente es el
binario, con ambigüedad nula (lo cual lleva a pensar así del lenguaje
ensamblador).
En los lenguajes de programación de alto nivel se distinguen diversos
elementos entre los que se incluyen el léxico propio del lenguaje y las
reglas semánticas y sintácticas.
7.- TIPOS DE PROGRAMACION.
Existen varias clases de programación, dependiendo de los métodos
utilizados y las técnicas empleadas.
Los tipos o técnicas de programación son bastante variados, aunque
puede que muchos de los lectores sólo conozcan una metodología para
realizar programas. En la mayoría de los casos, las técnicas se centran
en programación modular y programación estructurada, pero existen
otros tipos de programación.
7.1.- PROGRAMACIÓN ESTRUCTURADA (PE).
La programación estructurada está compuesta por un conjunto de técnicas que
han ido evolucionando, aumentando considerablemente la productividad del
programa reduciendo el tiempo de depuración y mantenimiento del mismo.
Esta programación estructurada utiliza un número limitado de estructuras de
control, reduciendo así considerablemente los errores.
Ing. Edgar Calderón Sánchez.
Página 11
Esta técnica incorpora:

Diseño descendente (top-dow): el problema se descompone en etapas
o estructuras jerárquicas.

Recursos abstractos (simplicidad): consiste en descompones las
acciones complejas en otras más simples capaces de ser resueltas con
mayor facilidad.

Estructuras básicas: existen tres tipos de estructuras básicas:
o
Estructuras secuénciales: cada acción sigue a otra acción
secuencialmente. La salida de una acción es la entrada de otra.
o
Estructuras selectivas: en estas estructuras se evalúan las
condiciones y en función del resultado de las mismas se realizan
unas acciones u otras. Se utilizan expresiones lógicas.
o
Estructuras repetitivas: son secuencias de instrucciones que se
repiten un número determinado de veces.
Las principales ventajas de la programación estructurada son:

Los programas son más fáciles de entender.

Se reduce la complejidad de las pruebas.

Aumenta la productividad del programador.

Los programas queden mejor documentados internamente.
Un programa está estructurado si posee un único punto de entrada y sólo uno
de salida, existen de "1 a n" caminos desde el principio hasta el fin del
programa y por último, que todas las instrucciones son ejecutables sin que
aparezcan bucles infinitos.
Ing. Edgar Calderón Sánchez.
Página 12
7.2.- PROGRAMACIÓN MODULAR(PM).
En la programación modular consta de varias secciones dividas de forma
que interactúan a través de llamadas a procedimientos, que integran el
programa en su totalidad.
En la programación modular, el programa principal coordina las llamadas
a los módulos secundarios y pasa los datos necesarios en forma de
parámetros.
A su vez cada módulo puede contener sus propios datos y llamar a otros
módulos o funciones.
Un 'módulo' es cada una de las partes de un programa que resuelve uno
de los subproblemas en que se divide el problema complejo original.
Cada uno de estos módulos tiene una tarea bien definida y algunos
necesitan de otros para poder operar. En caso de que un módulo
necesite de otro, puede comunicarse con éste mediante una interfaz de
comunicación que también debe estar bien definida.
Si bien un módulo puede entenderse como una parte de un programa en
cualquiera de sus formas y variados contextos, en la práctica se los suele
tomar como sinónimos de procedimientos y funciones. Pero no necesaria
ni estrictamente un módulo es una función o un procedimiento, ya que el
mismo puede contener muchos de ellos. No debe confundirse el término
"módulo" (en el sentido de programación modular) con términos como
"función" o "procedimiento", propios del lenguaje que lo soporte.
Ing. Edgar Calderón Sánchez.
Página 13
7.3.- PROGRAMACIÓN ORIENTADA A OBJETOS (POO).
Se trata de una técnica que aumenta considerablemente la velocidad de
desarrollo de los programas gracias a la reutilización de los objetos.
El elemento principal de la programación orientada a objetos es el
objeto.El objeto es un conjunto complejo de datos y programas que
poseen estructura y forman parte de una organización.
Un objeto contiene varios datos bien estructurados y pueden ser visibles
o no dependiendo del programador y las acciones del programa en ese
momento. El polimorfismo y la herencia son unas de sus principales
características.
La programación orientada a objetos es una forma de programar que
trata de encontrar una solución a estos problemas. Introduce nuevos
conceptos, que superan y amplían conceptos antiguos ya conocidos.
Entre ellos destacan los siguientes:
7.3.1.- CLASE.
Definiciones de las propiedades y comportamiento de un tipo de objeto
concreto. La instanciación es la lectura de estas definiciones y la
creación de un objeto a partir de ellas.
7.3.2.- HERENCIA.
(Por ejemplo, herencia de la clase C a la clase D) es la facilidad mediante
la cual la clase D hereda en ella cada uno de los atributos y operaciones
de C, como si esos atributos y operaciones hubiesen sido definidos por la
misma D. Por lo tanto, puede usar los mismos métodos y variables
públicas declaradas en C. Los componentes registrados como "privados"
(private) también se heredan, pero como no pertenecen a la clase, se
mantienen escondidos al programador y sólo pueden ser accedidos a
Ing. Edgar Calderón Sánchez.
Página 14
través de otros métodos públicos. Esto es así para mantener hegemónico
el ideal de POO.
7.3.3.- OBJETO.
Instancia de una clase. Entidad provista de un conjunto de propiedades o
atributos (datos) y de comportamiento o funcionalidad (métodos), los
mismos que consecuentemente reaccionan a eventos. Se corresponden
con los objetos reales del mundo que nos rodea, o con objetos internos
del sistema (del programa). Es una instancia a una clase.
7.3.4.- MÉTODO.
Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución
se desencadena tras la recepción de un "mensaje". Desde el punto de
vista del comportamiento, es lo que el objeto puede hacer. Un método
puede producir un cambio en las propiedades del objeto, o la generación
de un "evento" con un nuevo mensaje para otro objeto del sistema.
7.3.5.- EVENTO.
Es un suceso en el sistema (tal como una interacción del usuario con la
máquina, o un mensaje enviado por un objeto). El sistema maneja el
evento enviando el mensaje adecuado al objeto pertinente. También se
puede definir como evento la reacción que puede desencadenar un
objeto; es decir, la acción que genera.
7.3.6.- ATRIBUTOS.
Características que tiene la clase.
7.3.7.- MENSAJE.
Una comunicación dirigida a un objeto, que le ordena que ejecute uno de
sus métodos con ciertos parámetros asociados al evento que lo generó.
Ing. Edgar Calderón Sánchez.
Página 15
7.3.8.- PROPIEDAD O ATRIBUTO.
Contenedor de un tipo de datos asociados a un objeto (o a una clase de
objetos), que hace los datos visibles desde fuera del objeto y esto se
define como sus características predeterminadas, y cuyo valor puede ser
alterado por la ejecución de algún método.
7.3.9.- ESTADO INTERNO.
Es una variable que se declara privada, que puede ser únicamente
accedida y alterada por un método del objeto, y que se utiliza para indicar
distintas situaciones posibles para el objeto (o clase de objetos). No es
visible al programador que maneja una instancia de la clase.
7.3.10.- COMPONENTES DE UN OBJETO.
Atributos, identidad, relaciones y métodos.
7.3.11.- IDENTIFICACIÓN DE UN OBJETO.
Un objeto se representa por medio de una tabla o entidad que esté
compuesta por sus atributos y funciones correspondientes.
7.4.- PROGRAMACIÓN CONCURRENTE.
Este tipo de programación se utiliza cuando tenemos que realizar varias
acciones a la vez.
Se suele utilizar para controlar los accesos de usuarios y programas a un
recurso de forma simultánea.
Se trata de una programación más lenta y laboriosa, obteniendo unos
resultados lentos en las acciones.
Ing. Edgar Calderón Sánchez.
Página 16
7.4.1.- PRINCIPIOS GENERALES DE LA CONCURRENCIA.
En un sistema multiprogramado con un único procesador, los procesos
se intercalan en el tiempo para dar la apariencia de ejecución simultánea
En un sistema con varios procesadores, no solo es posible intercalar los
procesos,
sino
también
superponerlos.
La
intercalación
y
la
superposición representan formas de ejecución muy diferentes. Ambas
técnicas pueden contemplarse como ejemplos de proceso concurrente y
ambas plantean los mismos problemas. En el caso de un sistema
monoprocesador, los problemas creados por la multiprogramación parten
del hecho de que la velocidad relativa de ejecución de los procesos no
puede predecirse.
Los procesos concurrentes pueden
funcionar en forma totalmente
independiente unos de otros, o pueden ser asíncronos, lo cual significa
que en ocasiones requieren cierta sincronización o cooperación.
Cuando dos o más procesos llegan al mismo tiempo a ejecutarse, se
dice que se ha presentado una concurrencia de procesos. Es importante
mencionar que para que dos o más procesos sean concurrentes, es
necesario que tengan alguna relación entre ellos como puede ser la
cooperación para un determinado trabajo o el uso de información o
recursos compartidos, por ejemplo: en un sistema de un procesador, la
multiprogramación es una condición necesaria pero no suficiente para
que exista concurrencia, ya que los procesos pueden ejecutarse de
forma totalmente independiente.
Ing. Edgar Calderón Sánchez.
Página 17
7.5.- PROGRAMACIÓN FUNCIONAL.
Se caracteriza principalmente por permitir declarar y llamar a funciones
dentro de otras funciones.
Los programas escritos en un lenguaje funcional están constituidos
únicamente por definiciones de funciones, entendiendo éstas no como
subprogramas clásicos de un lenguaje imperativo, sino como funciones
puramente matemáticas, en las que se verifican ciertas propiedades
como la transparencia referencial (el significado de una expresión
depende únicamente del significado de sus subexpresiones), y por tanto,
la carencia total de efectos colaterales.
Otras características propias de estos lenguajes son la no existencia de
asignaciones de variables y la falta de construcciones estructuradas
como la secuencia o la iteración (lo que obliga en la práctica a que todas
las repeticiones de instrucciones se lleven a cabo por medio de funciones
recursivas).
Existen dos grandes categorías de lenguajes funcionales: los funcionales
puros y los híbridos. La diferencia entre ambos estriba en que los
lenguajes funcionales híbridos son menos dogmáticos que los puros, al
admitir conceptos tomados de los lenguajes imperativos, como las
secuencias de instrucciones o la asignación de variables. En contraste,
los lenguajes funcionales puros tienen una mayor potencia expresiva,
conservando a la vez su transparencia referencial, algo que no se cumple
siempre con un lenguaje funcional híbrido.
Ing. Edgar Calderón Sánchez.
Página 18
7.6.- PROGRAMACIÓN LÓGICA.
Se suele utilizar en la inteligencia artificial y pequeños programas
infantiles. Se trata de una programación basada en el cálculo de
predicados (una teoría matemática que permite lograr que un ordenador
basándose en hecho y reglas lógicas, pueda dar soluciones inteligentes).
La mayoría de los lenguajes de programación lógica se basan en la
teoría lógica de primer orden, aunque también incorporan algunos
comportamientos de orden superior como la lógica difusa. En este
sentido, destacan los lenguajes funcionales, ya que se basan en el
cálculo lambda, que es la única teoría lógica de orden superior que es
demostradamente computable (hasta el momento).
7.6.1.- CARACTERISTICAS DE LA PROGRAMACION LOGICA
Unificación de términos.
Mecanismos de inferencia automática.
Recursión como estructura de control básica.
Visión lógica de la computación.
7.7.- LENGUAJES DE PROGRAMACION LOGICA.
Un lenguaje es el CLP pero el lenguaje de programación lógica por
excelencia es el PROLOG.
Prolog: es un Lenguaje de Programación diseñado para representar y
utilizar el conocimiento que se tiene sobre un determinado dominio. Los
programas en Prolog responden preguntas sobre el tema del cual tienes
conocimiento.
Ing. Edgar Calderón Sánchez.
Página 19
8.- OBJETOS DE UN PROGRAMA.
Un objeto es una unidad dentro de un programa de computadora que
consta de un estado y de un comportamiento, que a su vez constan
respectivamente de datos almacenados y de tareas realizables durante el
tiempo de ejecución. Un objeto puede ser creado instanciando una clase,
como ocurre en la programación orientada a objetos, o mediante
escritura directa de código y la replicación otros objetos, como ocurre en
la programación basada en prototipos.
Estos objetos interactúan unos con otros, en contraposición a la visión
tradicional en la cual un programa es una colección de subrutinas
(funciones o procedimientos), o simplemente una lista de instrucciones
para el computador. Cada objeto es capaz de recibir mensajes, procesar
datos y enviar mensajes a otros objetos de manera similar a un servicio.
En el mundo de la programación orientada a objetos (POO), un objeto es
el resultado de la instanciación de una clase. Una clase es el
anteproyecto que ofrece la funcionalidad en ella definida, pero ésta
queda implementada sólo al crear una instancia de la clase, en la forma
de un objeto. Por ejemplo: dado un plano para construir sillas (una clase
de nombre clase_silla), entonces una silla concreta, en la que podemos
sentarnos, construida a partir de este plano, sería un objeto de
clase_silla. Es posible crear (construir) múltiples objetos (sillas) utilizando
la definición de la clase (plano) anterior. Los conceptos de clase y objetos
son análogos a los de tipo de datos y variable; es decir, definida una
clase podemos crear objetos de esa clase, igual que disponiendo de un
determinado tipo de dato (por ejemplo el tipo entero), podemos definir
variables de dicho tipo:
Ing. Edgar Calderón Sánchez.
Página 20
inta,b;
( 'int' es un tipo de dato y 'a' y 'b' son variables de tipo entero con las que
podemos operar)
Para utilizar la funcionalidad definida en una clase en particular (salvo en
las clases abstractas), primeramente es necesario crear un objeto de esa
clase. De la misma manera, para una persona que desea sentarse, las
especificaciones para construir una silla serán de poca utilidad; lo que se
necesita es una silla real construida a partir de esas especificaciones.
Siguiendo con la analogía anterior, también se puede decir que para
hacer operaciones aritméticas, de nada sirve por sí solo el tipo entero
(int); para ello necesitamos variables (o constantes) con las que operar.
9.- TIPOS DE DATOS-CONSTANTES ,VARIABLES.
9.1.- TIPOS DE DATOS.
En el lenguaje C estandarizado como C89, existían cuatro tipos de datos
básicos que son: los números enteros, los números reales, los
caracteres, y los punteros. A partir del estándar C99 se agregan: los
valores lógicos (verdadero o falso) y los números complejos.
Estos tipos de datos son parte del lenguaje, y por ello se los considera
primitivos. Más adelante veremos que con el uso de estructuras y
uniones es posible crear tipos compuestos de datos a partir de estos
tipos primitivos.
En este capítulo veremos los enteros, los reales y los caracteres. Más
adelante se verán otros tipos de datos más complejos, como son los
vectores, las cadenas de caracteres, y los punteros en general.
Ing. Edgar Calderón Sánchez.
Página 21
9.2.- ENTEROS.
Los enteros son el tipo de dato más primitivo en C. Se usan para
representar números enteros. Pero siempre se pueden encontrar otras
aplicaciones para los números enteros. En general se pueden usar para
representar cualquier variable discreta.
Los tipos de datos enteros son: short, int, long y longlong, cada uno
representando
un
número
entero
de
un
tamaño
o
capacidad
determinado. Según el compilador y la plataforma de hardware, cada uno
de estos tipos de dato puede ocupar desde 1 byte hasta 8 bytes en
memoria.
Además, el lenguaje C hace la distinción de si el entero es con signo
(signed) o sin signo (unsigned). En caso de que no se declare si es con
signo o sin signo, se toma con signo.
Algunos ejemplos de declaraciones de enteros:
int a;
unsignedint a;
signed long a;
signed long long a = 10000000;
a=7
a= 158
a= -895
a= 78584
Ing. Edgar Calderón Sánchez.
Página 22
9.3.- FLOTANTES.
Se denomina flotantes a los tipos de datos que representan a los
números reales, ya que utilizan un sistema de representación basado en
la técnica de coma flotante, que permite operar con números reales de
diversas magnitudes, mediante un número decimal llamado mantisa y un
exponente que indica el orden de magnitud.
El tipo de dato flotante en lenguaje C sólo tiene dos tamaños: el float y el
double, que son 4 bytes y 8 bytes respectivamente. Se los puede utilizar
tanto para representar números decimales, como para representar
números enteros con un orden de magnitud muy grande.
La forma de declarar una variable flotante es escribiendo en una línea
uno de los tipos de datos flotantes y a continuación el nombre de la
variable y tal vez algún valor que se les quiera dar.
Algunos ejemplos:
float a;
double a = 1e23;
double a = 3.1416;
float a = 4e-9;
double a = -78;
Hay que tener en cuenta que aunque los valores flotantes son más
convenientes para algunas aplicaciones, hay casos en los que se
prefieren los enteros. Esto se debe a que los números flotantes no
necesariamente tienen soporte de hardware, en particular en las
plataformas integradas. Una alternativa que se utiliza en estas
situaciones es interpretar los enteros como decimales de forma que 150
se interprete como 1.5 y 2345 como 23.45.
Para el caso de los flotantes de 4 bytes, se utiliza 1 bit para el signo, 8
bits para el exponente y 23 bits para el valor del número.
Ing. Edgar Calderón Sánchez.
Página 23
9.4.- CARACTERES.
Los caracteres se representan utilizando el tipo char, que tiene sólo 1
byte de tamaño. Este tipo se utiliza para representar los 256 caracteres
de la tabla de caracteres del sistema. El tipo char es también un tipo
entero, ya que puede tomar valores de 0 a 255. Por lo tanto también
puede ser signed o unsigned.
En cuanto a la forma de declarar variables de tipo char es la misma
forma que con los otros tipos.
char a;
char a = 's';
unsigned char a = 48;
Como puedes ver, se le puede asignar un número a una variable char, ya
que se trata de un tipo entero. En muchas situaciones se utiliza el tipo
char para almacenar números pequeños, ya que ocupa en memoria
sólamente un byte.
Es importante notar que con la llegada de la codificación UTF-8, los
caracteres de los diversos idiomas pueden ocupar 1, 2, 3 o 4 bytes, de
modo que el tipo char ya no alcanza para la representación de todos los
caracteres posibles. Por ello, el estándar C99 introduce el tipo wchar que
puede ocupar más de 1 byte, según sea necesario para la codificación
utilizada por el sistema.
Ing. Edgar Calderón Sánchez.
Página 24
9.5.- CONSTANTES.
Una constante es una partida de datos que permanecen sin cambios en
el programa (durante el desarrollo y ejecución).
Ejemplos:
3.1416 (valor de pi, este valor no debe variar)
2000 (año en que según Nostradamus se acabaría el mundo XD)
‘a’ (primera letra del alfabeto)
9.6.- VARIABLES.
Una variable es una partida de datos cuyo valor puede cambiar en el
programa (durante el desarrollo y ejecución).
Los
diferentes
tipos
de
variables
dependen
del
lenguaje
de
programación, por lo general estas suelen ser enteras, reales, carácter,
lógicas y de cadena.
Tanto las variables como las constantes tienen un nombre o identificador
generalmente
conformado
por
caracteres
alfanuméricos
(ciertos
lenguajes de programación admiten el carácter de subrayado ‘_’ como
válido en los identificadores), y el primero de éstos debe ser una letra.
Ejemplos:
variable1
numerador
primer_jugador
Ing. Edgar Calderón Sánchez.
Página 25
Por estética y comodidad durante el desarrollo del algoritmo se suele
usar palabras en MAYUSCULAS para las constantes y en minúsculas
para las variables. Si se desea usar varias palabras como nombre para
una variable, éstas deben estar unidas, la primera palabra en minúsculas
y el primer carácter de la segunda en mayúscula (así se ve más bonito
XD).
Ejemplos:
miVariable
MICONSTANTE
primerJugador
10.- TIPOS DE OPERADORES.
Todo
sistema
de
computación
es
alimentado
con
datos.
La
representación de los datos incide en la elaboración de los algoritmos. El
sistema de identificación de los datos se denomina “estructura de datos”,
y depende de las características de estos.
-Los datos son los siguientes;
a) Datos numéricos:
•
Enteros.
•
Reales.
•
Reales decimales.
•
Reales exponenciales.
Ing. Edgar Calderón Sánchez.
Página 26
b) Datos alfanuméricos:
•
De carácter.
•
De cadena.
c) Datos lógicos:
•
Verdadero [True]
•
Falso [False]
10.1.- TIPOS DE DATOS: NUMÉRICOS.
Son aquellos que se utilizan para realizar operaciones aritméticas.
10.1.1.- Enteros; corresponden a números “completos”, o sea que no
tienen parte decimal, pueden ser negativos, positivos o cero. Ejemplo: La
edad de una persona (39), el total de estudiantes en un grupo (36).
10.1.2.- Reales; son aquellos números que poseen punto decimal.
Pueden ser negativos, positivos o cero.
Reales decimales; son los que constan de una parte entera y una
decimal (en algunos casos se puede omitir la parte entera o la decimal).
Ejemplo: La nota de un estudiante (4.7), el porcentaje de algún impuesto
(0.16).
10.1.3.- Reales exponenciales (de punto flotante); son aquellos
números que se expresan en función de potencias de 10; esta expresión
es conocida como notación científica. Ejemplo: -2.85E03; 0.735E-4;
0.58E-1
Ing. Edgar Calderón Sánchez.
Página 27
10.2.- TIPOS DE DATOS: ALFANUMÉRICOS
Corresponden al conjunto de caracteres alfabéticos, numéricos, y/o
especiales; con ellos no se efectúan operaciones matemáticas.
10.2.1.- Carácter; cuándo se hace referencia a un solo carácter, y debe
encerrarse entre apostrofes (‘ ‘). Ej: Sexo de una persona (‘M’ o ‘F’),
estado civil (‘S’, ‘C’, ‘V’).
10.2.2.- Cadena; Cuándo se hace referencia a más de un carácter,
siempre debe encerrarse entre comillas (“ “). Ej: código de un estudiante
(“2041220”), nombre de una persona (“Víctor Hugo Torres”), dirección
donde reside una persona (“Calle 100 # 50 - 20), número telefónico
(“3002125820”).
10.3.- TIPOS DE DATOS: LÓGICOS.
Son aquellos datos que solo pueden tomar dos valores:
1. Valor verdadero – true
2. Valor falso – false
11.- OPERADORES.
Un operador es un símbolo que se utiliza para manipular datos.
11.1.- Los operadores se clasifican en:
– Aritméticos.
– Relacionales.
– Lógicos.
11.2.- Operadores: Aritméticos:
+ Suma
- Resta
Ing. Edgar Calderón Sánchez.
Página 28
* Multiplicación
/ División (div)
% Módulo o residuo (Mod)
^ ó ** Potencia
= Asignación
11.3.- Operadores: Relacionales.
> Mayor que
< Menor que
(=) == Igual a
(<>) != Diferente de
>= Mayor o igual que
<= Menor o igual que
11.4.- Operadores: Lógicos.
(*) && Conjunción (y)
(+) | | Disyunción (o)
(~) ! Negación (no)
12.- LENGUAJES DE PROGRAMACION.
Un lenguaje de programación es un lenguaje formal diseñado para
expresar procesos que pueden ser llevados a cabo por máquinas como
las computadoras.
Pueden usarse para crear programas que controlen el comportamiento
físico y lógico de una máquina, para expresar algoritmos con precisión, o
como modo de comunicación humana.
Ing. Edgar Calderón Sánchez.
Página 29
Está formado por un conjunto de símbolos y reglas sintácticas y
semánticas que definen su estructura y el significado de sus elementos y
expresiones. Al proceso por el cual se escribe, se prueba, se depura, se
compila (de ser necesario) y se mantiene el código fuente de un
programa informático se le llama programación.
También la palabra programación se define como el proceso de creación
de
un
programa
de
computadora,
mediante
la
aplicación
de
procedimientos lógicos, a través de los siguientes pasos:
El desarrollo lógico del programa para resolver un problema en particular.
Escritura de la lógica del programa empleando un lenguaje de
programación específico (codificación del programa).
Ensamblaje o compilación del programa hasta convertirlo en lenguaje de
máquina.
Prueba y depuración del programa.
Desarrollo de la documentación.
Existe un error común que trata por sinónimos los términos 'lenguaje de
programación' y 'lenguaje informático'. Los lenguajes informáticos
engloban a los lenguajes de programación y a otros más, como por
ejemplo HTML (lenguaje para el marcado de páginas web que no es
propiamente un lenguaje de programación, sino un conjunto de
instrucciones que permiten estructurar el contenido de los documentos).
Ing. Edgar Calderón Sánchez.
Página 30
Permite especificar de manera precisa sobre qué datos debe operar una
computadora, cómo deben ser almacenados o transmitidos y qué
acciones debe tomar bajo una variada gama de circunstancias.
Todo esto, a través de un lenguaje que intenta estar relativamente
próximo al lenguaje humano o natural. Una característica relevante de los
lenguajes de programación es precisamente que más de un programador
pueda usar un conjunto común de instrucciones que sean comprendidas
entre ellos para realizar la construcción de un programa de forma
colaborativa.
13.-
ENSAMBLADORES
INTERPRETES
Y
COMPILADORES
13.1.- ENSAMBLADORES.
El término ensamblador (del inglés assembler) se refiere a un tipo de
programa informático que se encarga de traducir un fichero fuente escrito
en un lenguaje ensamblador, a un fichero objeto que contiene código
máquina, ejecutable directamente por la máquina para la que se ha
generado. El propósito para el que se crearon este tipo de aplicaciones
es la de facilitar la escritura de programas, ya que escribir directamente
en código binario, que es el único código entendible por la computadora,
es en la práctica imposible. La evolución de los lenguajes de
programación a partir del lenguaje ensamblador originó también la
evolución de este programa ensamblador hacia lo que se conoce como
programa compilador.
13.1.1.- TIPOS DE ENSAMBLADORES.
Podemos distinguir entre dos tipos de ensambladores:
Ing. Edgar Calderón Sánchez.
Página 31
13.2.- ENSAMBLADORES BÁSICOS.
Son de muy bajo nivel, y su tarea consiste básicamente en ofrecer
nombres simbólicos a las distintas instrucciones, parámetros y cosas
tales como los modos.
13.2.1.- ENSAMBLADORES MODULARES 32-BITS O DE ALTO
NIVEL.
Son ensambladores que aparecieron como respuesta a una nueva
arquitectura de procesadores de 32 bits, muchos de ellos teniendo
compatibilidad hacia atrás pudiendo trabajar con programas con
estructuras de 16 bits. Además de realizar la misma tarea que los
anteriores, permitiendo también el uso de macros, permiten utilizar
estructuras de programación más complejas propias de los lenguajes de
alto nivel.
13.3.- INTERPRETES.
Un intérprete es un programa capaz de analizar y ejecutar otros
programas, escritos en un lenguaje de alto nivel. Los intérpretes suelen
contraponerse a los compiladores, ya que mientras que los segundos se
encargan de traducir un programa desde su descripción en un lenguaje
de programación al código máquina del sistema destino, los primeros
sólo realizan la traducción a medida que sea necesario y normalmente,
no guardan el resultado de dicha traducción.
La desventaja principal de los interpretadores es que cuando se
interpreta un programa, típicamente corre más lentamente que si hubiera
sido compilado. La diferencia en velocidades puede ser minúscula o
grande; a menudo un orden de magnitud y a veces más. Generalmente
toma más tiempo correr un programa bajo un interpretador que correr el
código compilado, pero puede tomar menos tiempo para interpretarlo que
el tiempo total requerido para compilarlo y ejecutarlo. Esto es
Ing. Edgar Calderón Sánchez.
Página 32
especialmente importante si se está haciendo y probando un código
prototipo cuando un ciclo de editar, interpretar y depurar del
interpretador, a menudo puede ser mucho más corto que el ciclo de
editar, compilar, ejecutar y depurar del compilador.
13.4.- COMPILADORES.
Un compilador es un programa que, a su vez, traduce un programa
escrito en un lenguaje de programación a otro lenguaje de programación,
generando un programa equivalente. Usualmente el segundo lenguaje es
código máquina, pero también puede ser simplemente texto. Este
proceso de traducción se conoce como compilación.
La razón principal para querer usar un compilador es querer traducir un
programa de un lenguaje de alto nivel, a otro lenguaje de nivel inferior
(típicamente lenguaje máquina). De esta manera un programador
puede diseñar un programa en un lenguaje mucho más cercano a cómo
piensa un ser humano, para luego compilarlo a un programa más
manejable por una computadora.
La construcción de un compilador involucra la división del proceso en una
serie de fases que variará con su complejidad. Generalmente estas fases
se agrupan en dos tareas: el análisis del programa fuente y la síntesis del
programa objeto.
13.4.1.- Análisis: Se trata de la comprobación de la corrección del
programa fuente, e incluye las fases correspondientes al Análisis léxico
(que
consiste
componentes
en
la
descomposición
léxicos),
Análisis
del
sintáctico
programa
(agrupación
fuente
de
en
los
componentes léxicos en frases gramaticales ) y Análisis semántico
(comprobación de la validez semántica de las sentencias aceptadas en la
fase de Análisis Sintáctico).
Ing. Edgar Calderón Sánchez.
Página 33
13.4.2.- Síntesis: Su objetivo es la generación de la salida expresada en
el lenguaje objeto y suele estar formado por una o varias combinaciones
de fases de Generación de Código (normalmente se trata de código
intermedio o de código objeto) y de Optimización de Código (en las que
se busca obtener un código lo más eficiente posible).
Alternativamente, las fases descritas para las tareas de análisis y síntesis
se pueden agrupar en Front-end y Back-end:
13.4.3.- Front-end:Es la parte que analiza el código fuente, comprueba
su validez, genera el árbol de derivación y rellena los valores de la tabla
de símbolos. Esta parte suele ser independiente de la plataforma o
sistema para el cual se vaya a compilar, y está compuesta por las fases
comprendidas entre el Análisis Léxico y la Generación de Código
Intermedio.
13.4.4.- Back-end:Es la parte que genera el código máquina, específico
de una plataforma, a partir de los resultados de la fase de análisis,
realizada por el Front End.
Esta división permite que el mismo Back End se utilice para generar el
código máquina de varios lenguajes de programación distintos y que el
mismo Front End que sirve para analizar el código fuente de un lenguaje
de programación concreto sirva para generar código máquina en varias
plataformas distintas. Suele incluir la generación y optimización del
código dependiente de la máquina.
El código que genera el Back End normalmente no se puede ejecutar
directamente, sino que necesita ser enlazado por un programa enlazador
(linker).
Ing. Edgar Calderón Sánchez.
Página 34
UNIDAD # 2
PROGRAMACIÓN.
Ing. Edgar Calderón Sánchez.
Página 35
14.- REPRESENTACIÓN: DIAGRAMA DE FLUJO.
Es la representación gráfica de un algoritmo, el cual muestra mediante la
utilización de diversos símbolos, los pasos o procesos a seguir para
alcanzar la solución de un problema.
Se les llama diagrama de flujo por que los símbolos utilizados se
conectan por medio de flechas para indicar la secuencia de las
operaciones
Los símbolos que más se emplean en un diagrama son los siguientes:
Símbolo que se utiliza para representar el inicio y el
fin de un diagrama de flujo
Símbolo que se utiliza para
representar la entrada
y salida de datos (se declaran las variables)
Representa la unidad de entrada de datos por
teclado.
Representa los procesos (las operaciones y cálculos)
Ing. Edgar Calderón Sánchez.
Página 36
Representa una decisión en él se escribe una
decisión
y
dependiendo
del
resultado
de
la
evaluación de la misma se sigue por una de las
ramas o caminos alternativos.
Representa a la repetición de un conjunto de datos.
Se lo utiliza para expresar la conexión dentro de una
misma página
Representa la conexión entre página diferentes.
Símbolo que se utiliza para representar la salida de
datos por pantalla.
Símbolo que se utiliza para representar la salida de
datos por la impresora.
Las líneas son las que marcan el orden de las
secuencias de operaciones e indican el sentido d
ejecución de las operaciones
Ing. Edgar Calderón Sánchez.
Página 37
15.- REGLAS PARA ELABORAR UN DIAGRAMA DE FLUJO.
En el diseño de un diagrama es conveniente seguir las siguientes reglas:
o El inicio del diagrama debe parecer en la parte superior.
o Los símbolos de inicio y fin deberán aparecer solo una vez.
o Todos los símbolos deben estar conectados por medio de líneas
de flujo.
o El flujo de las operaciones deben representarse, si es posible, de
arriba hacia abajo y de izquierda a derecha, en cuyo caso pueden
omitirse las puntas de flechas.
o La representación de las bifurcaciones y bucles, así como en el
conjunto total del diagrama deben tener una cierta simetría.
o Las líneas de flujo para indicar la dirección de flujo del diagrama
deben ser rectas, verticales y horizontales. Evite los cruces de
líneas de flujo.
EJEMPLO: Crear el diagrama de flujo que proporcione el precio medio
de un producto a partir del precio en tres establecimientos distintos.
Ing. Edgar Calderón Sánchez.
Página 38
16.- PSEUDOCÓDIGO.
El pseudocódigo es un lenguaje de especificación de algoritmos (no de
programación) basado en un sistema notacional, con estructuras
sintácticas y semánticas, similares a los lenguajes procedurales, aunque
menos formales que las de éstos, por lo que no puede ser ejecutado
directamente por un computador.
El pseudocódigo utiliza para representar las sucesivas acciones,
palabras reservadas - similares a sus homónimas en los lenguajes de
programación-, tales como start,end, stop, if-thenelse, while-do,
repeat-until,
(inicio,
fin,
parar,
si-entoncessino,mientras-hacer,
repetir-hasta), etc. A lo largo de este capítulo, a medida que vayamos
describiendo las estructuras de control utilizadas en los programas,
iremos haciendo una lista de las instrucciones más usuales del
pseudocódigo. Las ventajas del uso del pseudocódigo residen en:
Su uso en la planificación de un programa; permitiendo que el
programador se pueda concentrar en la lógica y en las estructuras
de control y no tenga que preocuparse, por ahora de detalles
acerca de las reglas sintácticas y semánticas de un lenguaje
específico. Consiguientemente es más fácil de modificar, en el
caso de que se descubran errores o anomalías en la lógica del
algoritmo.
Aunque el pseudocódigo es independiente del lenguaje de alto
nivel
que
vaya
a
utilizarse,
un
algoritmo
expresado
en
pseudocódigo puede ser traducido más fácilmente a muchos de
ellos.
Ing. Edgar Calderón Sánchez.
Página 39
Ejemplo: Realizar un pseudocódigo que permita sumar dos números.
1.- Inicio
2.- Declarar variables: Num1, Num2, Suma
3.- Leer <-- Num1
4. Leer <-- Num2
5.- Suma <-- Num1 + Num2
6.- Mostrar --> Suma
7.- Final
16.- ESTRUCTURA DE UN PROGRAMA EN C.
Todo programa escrito en C consta de una o más funciones, una de las
cuales se llama main. El programa siempre comenzará por la ejecución
de la función main. Cada función debe contener:
Una cabecera de la función, que consta del nombre de la
función, seguido de una lista opcional de argumentos
encerrados con paréntesis.
Una lista de declaración de argumentos, si se incluyen estos
en la cabecera.
Una sentencia compuesta, que contiene el resto de la función.
Los argumentos son símbolos que representan información que se le
pasa a la función desde otra parte del programa. (También se llaman
parámetros a los argumentos).
Cada sentencia compuesta se encierra con un par de llaves, {.....}. Las
llaves pueden contener combinaciones de sentencias elementales
Ing. Edgar Calderón Sánchez.
Página 40
(denominadas sentencias de expresión) y otras sentencias compuestas.
Así las sentencias compuestas pueden estar anidadas, una dentro de
otra. Cada sentencia de expresión debe acabar en punto y coma (;).
Los comentarios pueden aparecer en cualquier parte del programa,
mientras estén situados entre los delimitadores /* ................ */ (por
ejemplo: /*esto es un ejemplo*/). Los comentarios son útiles para
identificar los elementos principales de un programa o simplemente para
orientar a un posible usuario de ese código.
Todo fichero fuente en C sigue la siguiente estructura; para verla más
claramente
pondremos
un
ejemplo
con
sus
correspondientes
comentarios, que nos vayan explicando cada una de las partes, muchas
de las cosas que se vean, no se conocen aún, pero nos servirán para
hacernos
una
idea
de
cómo
se
estructura
un
programa:
Ejemplo:
#include <stdio.h>
#include <conio.h>
/*#include del sistema:Se deben especificar todos los ficheros de
cabecera (ficheros con extensión .h) correspondientes a las
librerías de funciones utilizadas.
Son librerías implementadas y listas para que nosotros las
usemos, con sólo llamar a la función que tenga implementada
dentro dicha librería. Por ejemplo: la instrucción printf está
incluida dentro de stdio.h, por tanto, cuando decidamos usarla,
Ing. Edgar Calderón Sánchez.
Página 41
tendremos que poner en esta sección:
#include <stdio.h> */
#include <lista.h>
/* #include de la aplicación:Ficheros de cabecera creados para el
fichero fuente. Se puede decir que estos son los que yo he
creado, que son invocados escribiendo su nombre seguido de .h.
(Más tarde explicaremos cómo se crean). Si lo pongo entre
signos: < > (como lo tenemos en este ejemplo), dicha librería será
buscada en el directorio del compilador INCLUDE que contiene
las librerías. Si por el contrario pongo: #include "lista.h", entonces,
dicha librería será buscada 1º en el directorio actual, y luego, si
no está, será buscada en el directorio del compilador INCLUDE*/
extern void salida(void);
/* externvariables globales externas: Variables globales
que voy a definir en otros módulos que voy a usar en este
módulo. A salida le hemos asignado el tipo de
almacenamiento extern, pues tiene que ser accedida
desde otro archivo distinto de aquel en que es definida;
por tanto, ha de ser una función externa. */
#define CIERTO 1
#define FALSO 0
/* #define definición de macros y constantes simbólicas.*/
Ing. Edgar Calderón Sánchez.
Página 42
typedef struct {
int dia;
int mes;
int ano;
} FECHA;
/* typedef definición de tipos: me sirve para crearme un
tipo distinto de los preestablecidos de partida.*/
int suma (int , int);
/* Declaración de los prototipos de las funciones
implementados en este módulo: La declaración de una
función le da información al compilador de una función
que va a ser utilizada pero que todavía no ha sido
implementada. En particular le dice al compilador qué tipo
de datos requiere y cuál devuelve la función. En el
ejemplo, la función con nombre suma
recibe dos números enteros y da como salida otro número
entero.*/
extern int a,b,c;
/* Declaración de variables globales de este módulo:
extern declaración de funciones externas a este
módulo: Funciones que se utilizan en este módulo y
que están implementadas en otro módulo.
static declaración de las funciones internas no
visibles para otros módulos: Funciones que se
implementan en este módulo y que no pueden ser
utilizadas en otros módulos. */
Ing. Edgar Calderón Sánchez.
Página 43
main(){
............
............
}
int suma(int x,int y){
...........
...........
}
/* Implementación de las funciones: Se implementan
todas las funciones del módulo incluida la función
main().*/
17.- CLASIFICACIÓN DE LAS INSTRUCCIONES.
Una instrucción es lo que le ordenamos a la máquina para que ejecute,
por eso se dice que un programa es un conjunto de instrucciones; ya que
cuando ejecutamos un programa, se ejecutan así mismo en su interior
muchas instrucciones que hacen que la máquina realice algo.
17.1.- Estos son los tipos de instrucciones:
- instrucciones declarativas
- instrucciones de asignación
- instrucciones selectivas
- instrucciones repetitivas
- instrucciones de entrada y salida de datos
- instrucciones de bifurcación
Ing. Edgar Calderón Sánchez.
Página 44
17.1.1.- INSTRUCCIONES DECLARATIVAS.
Sirven para declarar librerías, variables, constantes, arreglos , punteros,
estructuras…
Por ejemplo:
1.) Para librerías:
Las librerías las declaramos porque vamos a usar recursos que
contienen ellas.
#include <iostream.h> ——> cin , cout..
#include <conio.h> ——> función getch()..
#include <string.h> ——> para manipular cadenas
#include <math.h> ——> para operaciones numéricas
#include <time.h> ——> para usar la hora
#include <stdio.h> ——> para usar alternativas de entrada – salida como
printf , scanf
2.) Para variables:
Las variables las declaramos con el fin de tener un espacio para
almacenar algun dato que va a cambiar con el tiempo.
char nombre;
int a,b,c;
——> Declarando variable tipo carácter
——> Declarando variable tipo entero
double sueldo
——> Declarando variable tipo decimal
short contador
——> Declarando variable tipo entero-corto
Ing. Edgar Calderón Sánchez.
Página 45
Sugerencia: leer cuanto espacio ocupa usar cada tipo de variable.
Consejo: A las únicas variables que se deben dar valores iníciales son a:
- Los contadores
- Los acumuladores
Acumuladores: se incrementa o decrementa en un valor variable.
Ejemplo: sacar el promedio de un alumno, se suman las notas ( que
varían ) y se divide para el numero de notas.
Contadores: se incrementa o decrementa en una forma constante.
Ejemplo: va contando de “1 en 1″ ó de “-3 en -3″ , etc…
3.) Para constantes:
Las constantes las declaramos con el fin de tener un espacio para
almacenar algún dato que no va a cambiar.
Se las puede declarar de dos formas:
Tomemos como ejemplo la fórmula para hallar el área de un triangulo:
¿ qué es lo que nunca cambia ?
La base puede variar, la altura puede variar. Pero como vemos el “2” es
constante, sea cual sea la base o la altura el 2 se queda ahí. Entonces si
queremos declarar al “2” como una constante, podemos hacerlo de dos
maneras:
Ing. Edgar Calderón Sánchez.
Página 46
1) Anteponiéndole ” #define ” al nombre de la constante y luego el valor
que le corresponde, así:
#define nomb 2
Nota: al usar éste método no se le pone el delimitador ” ; ” al final de la
línea.
A continuación coloco un ejemplo en código, para que tengan una idea
de cómo sería:
#include <iostream.h>
main()
{
#define nomb 2 ——> Declarada la constante de la forma 1.
int base,altura,area;
cout<<”Ingrese base: \n”;
cin >>base;
cout<<”Ingrese altura: \n”;
cin >>altura;
area = ( base * altura )/nomb;
cout<<”El area del triangulo es: “<< area <<endl;
system(“pause”);
}
Ing. Edgar Calderón Sánchez.
Página 47
2) Anteponiéndole ” const ” seguido del tipo de variable que és, despues
el nombre de la constante y luego el valor que va a contener, asi:
const int nomb = 2;
Nota: a diferencia del método anterior, éste si lleva el delimitador” ; ” al
final de la línea.
A continuación coloco un ejemplo en codigo, para que tengan una idea
de cómo sería:
#include <iostream.h>
main()
{
const int nomb = 2; ——> Declarada la constante de la forma 2.
int base,altura,area;
cout<<”Ingrese base: \n”;
cin >>base;
cout<<”Ingrese altura: \n”;
cin >>altura;
area = ( base * altura )/nomb;
cout<<”El area del triangulo es: “<< area <<endl;
system(“pause”);
}
Ing. Edgar Calderón Sánchez.
Página 48
4.) Para arreglos:
Los arreglos son un conjunto de variables del mismo tipo y nombre, pero
indexadas por una posición diferente.
float vector [12];
——> Declarando un arreglo tipo flotante ( decimal )
Ése “vector” que se ha declarado arriba, al ser un arreglo quiere decir
que hay 12 variables con el mismo nombre y son del mismo tipo, pero
diferenciadas únicamente en su posición, así:
vector[0],vector[1],vector[2],vector[3],vector[4],vector[5],vector[6],
………….. ,vector[10],vector[11].
Nota: los arreglos siempre comienzan en la posición cero ( 0 ) por eso
llegan hasta una unidad menos, en éste caso como declaramos un
arreglo de 12 , su tope será de 11; puesto a que desde cero ( 0 ) hasta
once ( 11 ) hay doce ( 12 ) variables ;)
5.) Para punteros:
Los punteros son variables que almacenan direcciones de memoria y se
los reconoce por llevar un “asterisco” ( * ) delante del nombre de la
variable, así:
float * ventas ;
6.) Para estructuras:
Las estructuras son una agrupación de variables que forman un registro,
se las denota de ésta manera:
struct alumno
{
Ing. Edgar Calderón Sánchez.
Página 49
int cedula;
char nombre;
short edad;
}
17.1.2.- INSTRUCCIONES DE ASIGNACIÓN.
Sirven para dar valores a las variables, y llevan éste formato:
nombre_variable = expresión ;
Por ejemplo:
a = 15 ;
x=a+5;
z=x/2;
17.1.3.- INSTRUCCIONES SELECTIVAS.
Son mediante las cuales podemos ejecutar diferentes acciones, como
resultado de una expresión que estemos evaluando en ese momento y
pueden ser:
- Las selectivas simples
- Las selectivas dobles
- Las selectivas múltiples
1.) Simples:
Las que como resultado de una expresión que se esté evaluando, solo
podemos ejecutar una opción por verdadero; ejemplo:
if ( expresión a evaluar )
——> Si ésa expresión es verdadera y solo
es verdadera, se ejecutarán las acciones.
{
Ing. Edgar Calderón Sánchez.
Página 50
acción_1;
acción_2;
}
2.) Dobles:
Nos permite seleccionar entre dos diferentes acciones:
- Una por verdadero
- Otra por falso
De ésta manera:
if ( expresion a evaluar )
——> Si ésa expresión es verdadera, se
ejecutarán las acciones 1 y 2.
{
accion_1;
accion_2;
}
else ——> Pero si ésa expresión era falsa, se ejecutarán las acciones 3
y 4.
{
accion_3;
accion_4;
}
A profundidad: para ver más sobre el manejo de la condición if , puede
acceder.
Ing. Edgar Calderón Sánchez.
Página 51
3.) Múltiples:
Podemos ejecutar diferentes acciones como resultado de una expresión
que estemos evaluando; ejemplo:
switch ( expresión a evaluar )
vamos a evaluar.
——> Esta es la expresión que
{
case 1 : acción 1 ;
case 2 : acción 2 ;
case 3 : acción 3 ;
}
17.1.4.- INSTRUCCIONES REPETITIVAS.
Sirven para repetir una condición N veces, siempre y cuando la condición
sea verdadera.
a) Cuando no sabemos cuántas veces tendrá que ejecutarse una acción
para que sea verdadera, se usa el While y el Do – While. Estas dos
instrucciones repetitivas son muy parecidas en su función, y llegan al
mismo resultado. Solo cambia la sintaxis:
- Para while:
While ( expresión ) ——> Mientras esa expresión sea verdadera hará
las acciones 1 y 2.
{
Acción 1;
Acción 2;
}
Ing. Edgar Calderón Sánchez.
Página 52
- Para do – while:
Do
{
acción 1;
acción 2;
} While ( expresión )
——> Mientras esa expresión sea
verdadera hará las acciones 1 y 2.
b) Cuando sabemos cuántas veces queremos que se realice una acción,
pues usamos la instruccion repetitiva ” for “, su sintaxis es la siguiente:
for ( expresión inicial ; expresión final ; incremento / decremento )
{
acciónes; ——> Hasta que no llegue a la “expresión final“, se ejecurá la
acción una y otra vez.
}
17.1.5.- INSTRUCCIONES DE ENTRADA Y SALIDA DE
DATOS.
El lenguaje C++ no tiene palabras reservadas para ingresar o mostrar
datos, para ello usa recursos que se encuentran en las librerías.
Por ejemplo:
En la libreria <iostream.h> tenemos para la entrada y salida de datos a
cin y cout respectivamente.
Uso:
Ing. Edgar Calderón Sánchez.
Página 53
- Para la entrada de datos ( pedir )
cin >> nombre_del_usuario ;
- Para la salida de datos ( mostrar )
cout << nombre_del_usuario
En la libreria <stdio.h> tenemos para la entrada y salida de datos a scanf
y printf respectivamente.
Uso:
- Para la entrada de datos ( pedir )
scanf ( ” %i %s %f ” , &edad apellido &sueldo ) ;
Nota: Los amperson ( & ) van en todo tipo de variable menos en las
cadenas de caracteres cuando usamos el scanf.
- Para la salida de datos ( mostrar )
printf ( ” su edad es: %i ” , edad )
17.1.6.- INSTRUCCIONES DE BIFURCACIÓN.
Interrumpen el flujo normal de un programa, es decir que evitan que se
ejecute alguna instrucción del programa y salta a otra parte del
programa.
Por ejemplo: el “ break “
Switch ( expresión que estamos evaluando )
{
case 1 : cout << ” Hola! “ ; break ;
Ing. Edgar Calderón Sánchez.
Página 54
case 2 : cout << ” amig@s “ ;
}
En el ejemplo anterior tenemos, que en caso de que haya sido “1″ pues
mostrará “Hola!” y saldrá del programa dejando a un lado lo demás.
Entonces hemos comprobado que interrumpió el flujo normal del
programa.
Pero si tuviéramos algo de ésta manera:
Switch (expresión que estamos evaluando)
{
case 1 : cout << ” Hola! “ ;
case 2 : cout << ” amig@s ” ;
case 3 : cout << ” bienvenidos a “ ;
case 4 : cout << ” Programando: Paso a Paso “ ; break ;
}
Entonces el flujo normal del programa avanza hasta el caso 4 dónde
vemos que está el ” break ” y él pues interrumpe el flujo normal del
programa y ahí acabaría nuestro programa, como resultado nos hubiera
mostrado lo siguiente: ” Hola! amig@s bienvenidos a Programando: Paso
a Paso “.
Así mismo, hay otras que cumplen funciones parecidas como por
ejemplo:
Ing. Edgar Calderón Sánchez.
Página 55
continue : éste hace que se salte la instrucción en donde está y pase a
la siguiente, por ejemplo:
for ( x=1; x<10; x++ )
{
if ( x == 5 ) continue;
cout << x << endl;
}
Como resultado muestra: 1 – 2 – 3 – 4 – 6 – 7 – 8 – 9
No muestra el número 5, porque ahí se encuentra el continue.
goto : éste nos lleva a una línea que indiquemos por medio de etiquetas.
Así:
A:
if ( x == 100 ) goto A ;
Y otros como ” return ” que devuelve un valor ( usado en funciones por lo
general ), otro es ” exit ” que obliga a salir.
Ing. Edgar Calderón Sánchez.
Página 56
UNIDAD # 3
LENGUAJE C.
PROGRAMACIÓN ESTRUCTURADA
I APLICACIONES INFORMATICAS
Ing. Edgar Calderón Sánchez.
Página 57
18- C LENGUAJE ESTRUCTURADO.
La programación estructurada es un paradigma de programación
orientado a mejorar la claridad, calidad y tiempo de desarrollo de un
programa de computadora, utilizando únicamente subrutinas y tres
estructuras: secuencia, selección (if y switch) e iteración (bucles for y
while), considerando innecesario y contraproducente el uso de la
instrucción de transferencia incondicional (GOTO), que podría conducir a
"código espagueti", que es mucho más difícil de seguir y de mantener, y
era la causa de muchos errores de programación.
A finales de los años 1970 surgió una nueva forma de programar que no
solamente daba lugar a programas fiables y eficientes, sino que además
estaban escritos de manera que facilitaba su mejor comprensión, no sólo
proveyendo ventajas durante la fase de desarrollo, sino también
posibilitando una más sencilla modificación posterior.
Todo programa puede escribirse utilizando únicamente las tres
instrucciones de control siguientes:
1. Secuencia
2. Instrucción condicional.
3. Iteración (bucle de instrucciones) con condición al principio.
Solamente con estas tres estructuras se pueden escribir todos los
programas
y
aplicaciones
posibles.
Si
bien
los
lenguajes
de
programación tienen un mayor repertorio de estructuras de control, éstas
pueden ser construidas mediante las tres básicas citadas.
Ing. Edgar Calderón Sánchez.
Página 58
19.- HISTORIA Y CARACTARISTICAS DE C.
C++ es un lenguaje de programación diseñado a mediados de los años
1980 por Bjarne Stroustrup. La intención de su creación fue el extender al
exitoso lenguaje de programación C con mecanismos que permitan la
manipulación de objetos. En ese sentido, desde el punto de vista de los
lenguajes orientados a objetos, el C++ es un lenguaje híbrido.
Posteriormente se añadieron facilidades de programación genérica, que
se sumó a los otros dos paradigmas que ya estaban admitidos
(programación estructurada y la programación orientada a objetos). Por
esto se suele decir que el C++ es un lenguaje de programación
multiparadigma.
Actualmente existe un estándar, denominado ISO C++, al que se han
adherido la mayoría de los fabricantes de compiladores más modernos.
Existen también algunos intérpretes, tales como ROOT.
Una particularidad del C++ es la posibilidad de redefinir los operadores, y
de
poder
crear
nuevos
tipos
que
se
comporten
como
tipos
fundamentales.
El nombre C++ fue propuesto por Rick Mascitti en el año 1983, cuando el
lenguaje fue utilizado por primera vez fuera de un laboratorio científico.
Antes se había usado el nombre "C con clases". En C++, la expresión
"C++" significa "incremento de C" y se refiere a que C++ es una
extensión de C.
Ing. Edgar Calderón Sánchez.
Página 59
20.- CARACTERÍSTICAS DE C.
1. Tiene un conjunto completo de instrucciones de control.
2. Permite la agrupación de instrucciones.
3. Incluye el concepto de puntero (variable que contiene la
dirección de otra variable).
4. Los argumentos de las funciones se transfieren por su
valor.
5. E/S no forma parte del lenguaje, sino que se
proporciona a través de una biblioteca de funciones.
6. Permite la separación de un programa en módulos que
admiten compilación independiente.
7. Tamaño pequeño.
8. Uso extensivo de llamadas a funciones.
9. Comandos breves (poco tecleo).
10.
Lenguaje estructurado.
21.- UN EDITOR DE TEXTO DE ELEMENTOS
Un editor de texto es un programa que permite crear y modificar archivos
digitales compuestos únicamente por un texto sin formato, conocidos
comúnmente como archivos de texto o texto plano. El programa lee el
archivo e interpreta los bytes leídos según el código de caracteres que
usa el editor. Hoy en día es comúnmente de 7- u 8-bits en ASCII o UTF8, rara vez EBCDIC.
Por ejemplo, un editor ASCII de 8 bits que lee el número binario 0110
0001 (decimal 97 o hexadecimal 61) en el archivo lo representará en la
Ing. Edgar Calderón Sánchez.
Página 60
pantalla por la figura a, que el usuario reconoce como la letra "a" y
ofrecerá al usuario las funciones necesarias para cambiar el número
binario en el archivo.
Los editores de texto son incluidos en el sistema operativo o en algún
paquete de software instalado y se usan cuando se deben crear o
modificar archivos de texto como archivos de configuración, scripts o el
código fuente de algún programa.
El archivo creado por un editor de texto incluye por convención en DOS y
Microsoft Windows la extensión ".txt", aunque pueda ser cambiada a
cualquier otra con posterioridad. Tanto Unix como Linux dan al usuario
total libertad en la denominación de sus archivos.
Al trasladar archivos de texto de un sistema operativo a otro se debe
considerar que existen al menos dos convenciones diferentes para
señalar el término de una línea: Unix y Linux usan sólo retorno de carro
en cambio Microsoft de carro y salto de línea.
21.1.- DIFERENCIA ENTRE TEXTO "PLANO"
ARCHIVOS DE TEXTO CON DIAGRAMACIÓN.
Y
Los editores de textos "planos" se distinguen de los procesadores de
texto en que se usan para escribir sólo texto, sin formato y sin imágenes,
es decir sin diagramación.

El texto plano es representado en el editor mostrando todos los
caracteres presentes en el archivo. Los únicos caracteres de
formateo son los caracteres de control del respectivo código de
caracteres. En la práctica, éstos son: salto de línea, tabulación
Ing. Edgar Calderón Sánchez.
Página 61
horizontal y retorno de carro. El código de caracteres más usado
en el año 2007 es el ASCII.

Los documentos creados por un procesador de texto generalmente
contienen más caracteres de control para darle al texto un formato
o diagramación particular, a menudo protegidos de ser copiados
por una marca registrada como por ejemplo negrilla, cursiva,
columnas, tablas, tipografía, etc. En un comienzo se utilizaron tales
formatos sólo en autoedición, pero hoy se utilizan incluso en el
procesador de texto más sencillo.

Los procesadores de texto pueden en la mayoría de los casos
almacenar un texto plano en un archivo de texto plano, pero se le
debe ordenar explícitamente que se desea esa opción, de otra
manera podría guardarlo con algún formato especial.
22.- FUNCIONES DE USUARIO. FUNCIONES DE LIBRERÍA.
22.1.- FUNCIONES DE USUARIO
 Un programa en C++ se forma por una colección defunciones.
 Todos los programas se construyen a partir de una o más
funciones que se integran para crear una aplicación
 Todas las funciones contienen uno o más estatutos C++y se crean
generalmente para realizar una única tarea.
 La definición de una función se realiza escribiendo primero el tipo
del valor de retorno de la función, después el nombre de la función,
posteriormente entre paréntesis las variables que utilizará dicha
función (parámetros) y finalmente las instrucciones de la función.
Ing. Edgar Calderón Sánchez.
Página 62
 Las funciones definidas por el usuario se invocan por su nombre y
los parámetros opcionales que se puedan tener.
Ejemplo:
double promedio( int a, int b, int c)
{
return (a + b + c ) / 3.0;
}
Declara a la función promedio, la cual recibe tres valores enteros y
calcula y regresa el promedio de ellos.
22.2.- FUNCIONES DE LIBRERIAS.
Es una colección de clases y funciones, escritas en el núcleo del
lenguaje. La biblioteca estándar proporciona varios contenedores
genéricos, funciones para utilizar y manipular esos contenedores,
funciones objeto, cadenas y flujos genéricos.
Ejemplos.
 #include "stdio.h"
 #include "conio.h"
 #include "stdlib.h"
 #include <string.h>
 #include <ctype.h>
 #include <locale.h>
 #include <math.h>
 #include <setjmp.h>
 #include <signal.h>
 #include <time.h>
Ing. Edgar Calderón Sánchez.
Página 63
23.- EJECUCION DE UN PROGRAMA EN C.
Edición. El código se escribe en un editor de texto o en un editor
de código preparado para esta acción.
El archivo se suele guardar con extensión .cpp (también en cxx, c++
o cc).
Preprocesado.
lee
Antes
de
compilar
el
código,
el
preprocesador
las instrucciones de preprocesador y las convierte al código fuente
equivalente.
Compilación. El código fuente resultante en lenguaje C++ se compila
mediante el software apropiado, obteniendo un código máquina llamado
archivo objeto (cuya extensión suele ser .obj). Este código aún no
es ejecutable ya que necesita incluir el código máquina relativo a
Ing. Edgar Calderón Sánchez.
Página 64
las funciones y módulos que se utilizaban en nuestro código. Estas
funciones están incluidas en archivos externos (librerías).
Enlazado. El código objeto se une al código compilado de las
librerías y módulos invocados por el código anterior. El resultado es un
archivo ejecutable.
Cargado. Normalmente lo realiza el propio entorno de ejecución. El
archivo ejecutable se lanza en el Sistemas Operativo.
Ejecución de las instrucciones por la CPU. Es entonces cuando el
procesador accede al código máquina del programa ya convertido y
ejecuta las acciones. Será entonces cuando veamos los resultados.
Estas dos últimas fases cubren lo que se conoce como ejecución del
programa.
Ing. Edgar Calderón Sánchez.
Página 65
Descargar