Sunteți pe pagina 1din 10

La programacin modular es un paradigma de programacin que significa escribir un programa de

acuerdo a las siguientes reglas:


El programa tiene diseo modular.
Los mdulos estn diseados de modo descendente.
Cada mdulo se codifica utilizando tres estructuras de control bsicas: secuencial,
decisin/seleccin ( ,
,
) y repeticin (
, ,
).
Evitar completamente el uso de
, la instruccin de transferencia de control, por
contraproducente. Dado que podra conducir a programa espagueti que es mucho ms difcil de
seguir y mantener.
En la programacin con diseo modular, un problema complejo se subdivide en varios subproblemas
de menor complejidad, los cuales a su vez se subdividen en otros problemas ms simples. El proceso debe
de continuarse hasta obtener subproblemas lo suficientemente simples como para que puedan ser
implementados fcilmente con un lenguaje de programacin. Esta tcnica se conoce como refinamiento
sucesivo (stepwise) o anlisis descendente (top-down).
Cada uno de los mdulos o subprogramas tiene funcionamiento independiente entre s y cada uno de
los ellos ejecuta una actividad o tarea nica bien definida y se codifican independientemente de otros
mdulos. Los mdulos pueden enviar informacin y/o recibir informacin desde otro bloque, es decir se
pueden comunicar entre s mediante una interfaz que tambin debe de estar bien definida.
Cada programa tiene un mdulo llamado programa principal que controla todo lo que sucede; el
programa comienza a ejecutarse por este mdulo y de aqu se transfiere el control de ejecucin hacia
otros mdulos.
La programacin estructurada utiliza un nmero limitado de estructuras de control que minimizan la
complejidad de los programas y por consiguiente reducen los errores: hace que los programas sean ms
fciles.
Los programas son ms fciles de escribir, verificar, leer y mantener
Reduccin significativa de errores al codificar
La estructura de los programas es clara
Reduccin de esfuerzo en las pruebas debido a la reduccin de errores
Se incrementa el rendimiento del programador
Las estructuras de control de un lenguaje de programacin son mtodos de especificar el orden en que
las instrucciones de un algoritmo se ejecutarn. Las estructuras de control son:
las instrucciones se ejecutan una a continuacin de la anterior, siempre una a la vez y
tal como aparecen escritas en el programa
dependiendo del valor de una expresin lgica el programa puede ejecutar uno de dos
posibles caminos de ejecucin.
dependiendo de la evaluacin de un valor lgico, el programa puede estar ejecutando
repetitivamente una instruccin o grupo de instrucciones.

Un programa C++ se compone de una o ms funciones. Una de ellas debe ser obligatoriamente la
funcin "main". Una funcin en C++ es un grupo de instrucciones que realizan una o ms acciones. Adems
el programa contendr una serie directivas
que permitirn agregar al mismo archivos de
Marco Antonio Ayala
@marantaya

Escuela de Fsica (2016)


Universidad de El Salvador

cabecera que estn compuestos de funciones y datos predeterminados. De manera ms explcita, un


programa bsico de C++ puede incluir:
Directivas del preprocesador.
Declaraciones globales.
La funcin main.
Funciones definidas por el usuario.
Comentarios del programa.
El siguiente programa muestra la estructura tpica de un programa C++.
Programa I: Estructura general de un programa C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

/*
* Created on October 26, 2013, 9:16 PM
* IDE/Compiler: NetBeans 7.3.1/g++ 4.8.1 x64
* File: Welcome.cpp
*/
#include <iostream>
#include <cstdlib>
#include <windows.h>
int main(int argc, char** argv) {
SetConsoleTitle("Welcome to C++ Programming");
std::cout << "\n\tBienvenido a la programacin en C++";
std::cout << "\n\n\tPresione [Enter] para continuar...";
std::cin.get();
return 0;
}

El preprocesador en un compilador C o C++ es un programa que es invocado antes de la compilacin


real y que realiza acciones en base a una o ms directivas que se encuentren dentro del cdigo fuente (las
directivas de preprocesador son instrucciones al compilador antes de que efecte la compilacin del
programa principal).
Se puede utilizar el preprocesador para compilar cdigo en forma condicional, insertar archivos,
especificar los mensajes de error en tiempo de compilacin, sustitucin de elementos del programa por
Marco Antonio Ayala
@marantaya

Escuela de Fsica (2016)


Universidad de El Salvador

valores previamente definidos, aplicar reglas especficas de la mquina a las secciones del cdigo, entre
otros.
Las directivas siempre comienzan con el signo de almohadilla # seguido por el nombre la directiva y
algunas de ellas pueden incluir argumentos o valores. Las directivas del preprocesador pueden aparecer
en cualquier parte del cdigo fuente, pero el resultado de su instruccin slo se aplica de donde aparece
hacia el resto del programa. Las directivas ms usuales son:
y
. Otras menos comunes
son:
,
,
, etc.
Solamente se puede escribir una directiva por lnea en el programa fuente. En caso de que la directiva
sea demasiado larga, se puede colocar el carcter \ al final de la lnea y continuar en la siguiente.

Indica al compilador que lea el archivo fuente que viene a continuacin y su contenido lo inserte en la
posicin donde se encuentre la directiva. La sintaxis de la directiva son las siguientes:

Las primeras dos versiones implican que ninguna expansin de macro ser intentada; en otras
palabras, el archivo header_name nunca es revisado en busca de identificadores tipo macro. El archivo
header_name debe ser un nombre de archivo vlido con una extensin y una ruta opcional de ubicacin
del archivo.
La tercera versin asume que el primer carcter no blanco seguido despus de #include no es el
carcter <, ni la comilla doble; es ms, asume la existencia de una definicin de macro que expandir el
identificador de macro en un encabezado en cualquiera de los formatos <header_name> o "header_name".
Los archivos que se incluyen con una directiva #include son llamados "archivos de cabecera" o
"archivos de inclusin". Estos archivos tienen extensin *.h para lenguaje C y/o C++; y extensin *.hpp,
exclusivo para lenguaje C++.
El preprocesador remueve la lnea de la directiva #include y conceptualmente la reemplaza con el
cdigo del archivo de cabecera en el mismo punto en que se encuentra la directiva dentro del programa
fuente. El cdigo en s no cambia, pero el compilador ve o procesa un programa fuente aumentado.
La diferencia entre los formatos <header_name> y "header_name" reside en el algoritmo empleado
para localizar el archivo de cabecera incluido.
La versin <header_name> especifica un archivo de cabecera estndar: la bsqueda es hecha
sucesivamente en cada uno de los directorios include, en el mismo orden en que han sido especificados. Si
el archivo no es localizado en ninguno de los directorios (carpetas) por defecto, entonces un mensaje de
error es emitido.
La versin "header_name" especifica un archivo de cabecera suministrado por el usuario. El archivo es
buscado en el siguiente orden:
En el mismo directorio del archivo que contiene la directiva #include
En los directorios de archivos de cabecera que incluye el archivo fuente
En el directorio de trabajo (directorio actual)
A travs de la ruta especificada por la opcin /I del compilador.
En las rutas especificadas por medio de la variable de entorno INCLUDE
Como una convencin se debe de utilizar los delimitadores < y > para cuando se incluya archivos de
cabecera que vienen definidos junto con la implementacin del compilador y utilizar comillas dobles si se
va a incluir archivos de cabecera creados por el programador. Por ejemplo:
Marco Antonio Ayala
@marantaya

Escuela de Fsica (2016)


Universidad de El Salvador

#include <stdio.h>
#include <unistd.h>
#include "usefullib.h"
#include "myprog.h"
Las directivas #include pueden estar en cualquier parte del programa, pero lo ms comn es situarlas
al principio del mismo.
El (Programa I: Estructura general de un programa C++) incluye tres archivos de cabecera desde la
lnea 7 a la lnea 9:
#include <iostream>
#include <cstdlib>
#include <windows.h>
La mayora de programas en C++ necesitarn leer datos del teclado por medio del objeto cin o escribir
datos en pantalla a travs del objeto cout, por lo que siempre llevarn como cabecera del programa la
directiva:
Si en el programa se van a manejar cadenas de caracteres es necesario colocar en la cabecera del
programa, la directiva:
Para conservar compatibilidad con el lenguaje de programacin C respecto a las instrucciones de
entrada/salida (E/S) {input/output (I/O)}, en donde se utilizan las funciones scanf () y printf () se
debe agregar la directiva de preprocesador:

La sintaxis de la directiva #define es la siguiente:


La directiva #define es utilizada para especificar una macro. Las macros proveen el mecanismo de
sustitucin de un identificador (nombre) por una secuencia de caracteres (token_sequence), ya sea que
tengan o no un conjunto de parmetros similar a las funciones.
La secuencia de caracteres puede consistir de palabras claves, constantes, operadores, instrucciones
completas de cdigo. Un espacio o ms debe de existir entre el identificador (macro_identifier) y la
secuencia de caracteres <token_sequence>. Si la secuencia est vaca, el proceso de sustitucin elimina el
identificar en todas sus ocurrencias en el cdigo fuente.
Por convencin se ha establecido en colocar en maysculas todos los identificadores definidos por
#define
#define ADD +
#define PI 3.14159265358979323846
#define INCLUDE_PATH "C:\\Libreria\\cpp\\libutils.hpp"
#define AUTHOR "Tom & Jerry"
La directiva #undef remueve la definicin de un identificador previamente definido por #define. La
sintaxis de esta directiva es:
As los identificadores anteriores se remueve su definicin de la siguiente manera:
#undef PI
#undef ADD
Marco Antonio Ayala
@marantaya

Escuela de Fsica (2016)


Universidad de El Salvador

#undef INCLUDE_PATH
#undef AUTHOR

Esta directiva del preprocesador tiene el siguiente formato:


Con la directiva #pragma, un compilador en particular es capaz de definir directivas que no interfieran
con otros compiladores que tambin soporten #pragma. Si el compilador no reconoce el nombre de la
directiva entonces ignora la directiva #pragma sin emitir ningn mensaje de error o advertencia. Es una
forma de proveer de informacin adicional al compilador en la forma que debe de realizar la traduccin
del lenguaje.
Algunas directivas pragmas que son reconocidas por el compilador de Microsoft Visual Studio son las
siguientes:

Proporciona un mtodo de guardar el estado de la compilacin en un punto determinado del cdigo


fuente. Se usa esta directiva para guardar en un archivo la informacin de la compilacin de los archivos
de cabecera incluidos en el programa fuente y que son comunes en los distintos archivos que componen el
proyecto, en dicho caso, puede reducir la cantidad de espacio en disco usada por los archivos de cabecera
precompilados.
Los archivos de cabecera precompilados pueden ser compartidos por los archivos de cdigo fuente del
proyecto solamente si las directivas #include antes de #pragma hdrstop son idnticas. Por lo tanto se
puede tener el mayor rendimiento del compilador si incluye archivos de cabecera comunes antes de
#pragma hdrstop.
Utilice esta directiva de preprocesador solamente en archivos de cdigo fuente. La directiva no tiene
efecto cuando es utilizada en archivos de cabecera o dentro de una funcin.
Se puede especificar un nombre de archivo y la ruta donde se guarda la informacin de la
precompilacin, pero si no se hace, se crea un archivo automticamente en el directorio donde est
alojado el archivo de cdigo fuente.
#pragma hdrstop
#pragma hdrstop ("c:\\projects\\include\\myinc.pch")

La sintaxis de esta directiva es la siguiente:


,
La directiva de comentario le permite escribir una cadena de caracteres dentro del archivo de salida.
El tipo de comentario puede tener cualquiera de los siguientes valores:
exestr: El enlazador escribe una cadena de caracteres dentro de un archivo objeto (*.obj). La
cadena especificada es colocada en el archivo ejecutable final. Tal cadena de caracteres nunca ser
cargada en la memoria pero puede ser encontrada dentro del archivo ejecutable usando un
utilitario de bsqueda de archivos apropiado.
lib: Escribe un comentario que es grabado dentro del archivo objeto (*.obj). Un mdulo de librera
que no est especificado en el archivo de respuesta del enlazador, puede ser especificado la
directiva comentario lib. El enlazador incluye el nombre del mdulo de librera especificado en la
cadena como la ltima librera. Mltiples mdulos pueden ser nombrados y enlazados en el orden
en que son nombrados.
Marco Antonio Ayala
@marantaya

Escuela de Fsica (2016)


Universidad de El Salvador

user: El compilador escribe una cadena dentro del archivo objeto (*.obj). El enlazador ignora la
cadena de caracteres especificada.

Las declaraciones globales son todas aquellas instrucciones que introducen al programa objetos que
se encuentran disponibles para todas las funciones del programa. Los objetos pueden ser de tipo
fundamental, definidos por el usuario, pueden ser variables o constantes, pueden ser corresponder a una
funcin, etc.
Las siguientes declaraciones son globales si se encuentran localizadas fuera de cualquier funcin y su
disponibilidad (que pueden usarse) es a partir de su declaracin en adelante.
int avar = 27;
const double SQRT2 = 1.4142135623730950488016887242097;
double ReadNumber(const char*, const double&, const double&);

Una funcin en C++ es un subprograma que realiza una o ms instrucciones y al terminar devuelve un
valor nico, un conjunto de valores o solamente realiza una tarea especfica tal como entrada/salida. La
ejecucin de las instrucciones se realiza de manera independiente de otros bloques o segmentos de
programa (otras funciones).
Una funcin en C++ tiene un tipo que est definido por una palabra a la izquierda del nombre de la
funcin. En el caso anterior la funcin es de tipo int.
El bloque de instrucciones que componen a la funcin se especifica justo despus del encabezado de la
funcin entre llaves { y }.
Una funcin en C++ termina se encuentra la llave de cierre del bloque de instrucciones } o de manera
explcita cuando se ejecuta la sentencia return. Si la funcin devuelve un valor, este debe de incluirse como
parte de la instruccin de retorno, en cualquiera de las siguientes formas de sintaxis:

Cada programa C o C++ tiene obligatoriamente una funcin main() que es el punto de inicia por
donde todo programa comienza a ejecutarse. La declaracin de la funcin principal puede tener
argumentos entre sus parntesis tal como en la siguiente expresin (lnea 11 del Programa I: Estructura
general de un programa C++):
int main(int argc, char** argv)
O si la funcin principal no utilizar argumentos puede tener cualquiera de los formatos:
int main( )
int main(void)
La primera instruccin de la funcin principal del Programa I: Estructura general de un programa C++
es una llamada (invocacin) de otra funcin:
SetConsoleTitle ("Welcome to C++ Programming");
La funcin SetConcoleTitle se encuentra definida en el archivo de cabecera <windows.h> y cambia el
ttulo de la consola donde se muestra la salida del programa. El dato se pasa como una cadena de
caracteres: "Welcome to C++ Programming".
A continuacin ejecuta la sentencia:
std::cout << "\n\tBienvenido a la programacin en C++";
Marco Antonio Ayala
@marantaya

Escuela de Fsica (2016)


Universidad de El Salvador

En tal sentencia cout es un objeto definido en <iostream>, y dentro del espacio de nombres std. El
objeto cout muestra o enva mensajes generalmente al dispositivo estndar de salida (el monitor). Utiliza
el operador << que es llamado en este contexto,
. Despus del operador se
encuentra el valor que se enviar como salida: "\n\tBienvenido a la programacin en C++", en este caso
una constante de cadena de caracteres (una secuencia de caracteres encerrados entre comillas dobles).
La instruccin de la lnea 16, std::cin.get(); utiliza la funcin miembro de cin para esperar que se
ingrese un valor (una entrada) desde el teclado por parte del usuario y la procesa hasta que el usuario
presiona [Enter]. El efecto es que se genera una pausa antes de ejecutar la sentencia de retorno y finalizar
la funcin.
Una sentencia (statement) o instruccin es el elemento individual de cdigo ms pequeo que puede
dar una orden a la computadora. La instruccin est compuesta por una secuencia de elementos que por s
solos no pueden dar una orden; la secuencia debe terminar con un carcter separador o finalizador de
sentencias.
En C++ las instrucciones estn separadas por un punto y coma, omitirlo es un error de sintaxis pues el
compilador no entiende la instruccin; en otras palabras se ha cometido una violacin a las reglas
sintcticas del lenguaje.

Un comentario es cualquier informacin que se aade al archivo fuente para proporcionar


aclaraciones de cualquier tipo.
El compilador ignora todo el texto que se incluye como comentario. No es obligatorio agregar
comentarios al cdigo, pero es una buena prctica incluir comentarios significativos en el programa
fuente.
El objetivo de agregar comentarios a un programa es con el fin de entender y comprender ms
fcilmente ms adelante en el tiempo, para lo que el programa fue diseado, adems es mucho ms
factible hacerle modificaciones (ya sea por el mismo programador o por otras personas que necesiten
modificarlo).
Es muy comn incluir en la parte superior del programa fuente informacin tal como: nombre del
archivo, nombre del programador, fecha de creacin, fechas de modificacin, una breve descripcin del
programa, etc.
Existen dos formas de incluir comentarios en C++:
Comentarios tipo bloque. Este tipo es heredado por el C++ a partir del C. Comienzan por la
secuencia de caracteres /* y terminan por el par */. Todo lo que se encuentre entre ellos ser
ignorado por el compilador. Son utilizados para guardar compatibilidad con el C y para incluir
comentarios extensos de varias lneas.
Comentarios de una lnea. Son exclusivos de C++; se define el comienzo de estos tipos de
comentarios por una doble pleca o barra invertida (double slash) //. Todo lo que viene des-pus
de estos caracteres hasta el final de la lnea es ignorado por el compilador.
Ejemplos de comentarios en C++:
/* Este es un tipo de comentario tipo bloque
al estilo del C estndar de Kernigan y Ritchie */
// Este es un comentario exclusivo de C++
Para cada uno de los siguientes casos, diga si los cambios realizados producen algn tipo de
error o dan una salida diferente. Si es as, Cules son los mensajes de error o la salida que se
Marco Antonio Ayala
@marantaya

Escuela de Fsica (2016)


Universidad de El Salvador

obtiene? Explique porqu ocurre dicho error (o errores) o porqu la salida es diferente.
1. Elimine los caracteres de la lnea 1, /*
2. Borre la lnea #include <iostream>
3. Quite la lnea #include <cstdlib>
4. Elimine la lnea #include <windows.h>
5. Cambie el nombre del archivo incluido <windows.h> a <windows>
6. Cambie el nombre del archivo incluido <iostream> a <iostream.h>
7. Quite el nombre std:: en la sentencia std::cout << "\n\tBienvenido a la programacin en
C++";
8. Elimine el operador de insercin << en la misma sentencia
9. Cambie las comillas dobles por comillas simples
10. Elimine la letra n de la secuencia de caracteres "\n\t
11. Elimine la letra t de la secuencia de caracteres "\n\t
12. Borre el punto y coma al final de la sentencia
13. Quite los parmetros int argc, char** argv dentro de los parntesis de la funcion main.
14. Borre la palabra int antes del nombre main
15. Cambie la palabra int que est antes de main por la palabra void
16. Quite los parntesis en la sentencia std::cin.get();
17. Elimine la llave de apertura al inicio del cuerpo de main. Haga lo mismo con la llave que
est al final del cuerpo de main.
18. Elimine el carcter de almohadilla # a cualquiera de las directivas del procesador.
El siguiente programa solicita dos cantidades por parte del usuario. Realiza la operacin de suma y
luego muestra el resultado.
Cuando se hace necesario almacenar informacin debe contarse con un mecanismo para guardarla y
poder acceder a ella posteriormente. La manera de hacerlo es por medio de la declaracin de objetos que
permiten asignar un nombre a una zona de memoria.
En el Programa II: Sumar dos cantidades enteras, se declaran tres objetos de tipo entero: dos ellos
para almacenar los valores ledos y el tercero para guardar el resultado de la suma:
int number1, number2, suma;
Como siguiente accin se realiza la lectura de datos por medio del objeto cin que puede extraer datos
del flujo de entrada asociado al dispositivo estndar (teclado)
std::cin >> number1;
std::cin >> number2;
El objeto cin est definido en la librera incluida <iostream>, y dentro del espacio de nombres std.
Utiliza el operador >> que se conoce como
porque toma de manera secuencial
datos del flujo de entrada y lo coloca en el objeto que se encuentra despus del operador.
Justo antes de las sentencias de lectura de datos se ha colocado, utilizando cout, un mensaje que se
mostrar en la consola de salida y que sirve como informacin al usuario para instruirle el tipo de
informacin que debe de ingresar.
Programa II: Sumar dos cantidades enteras
1 /*
Marco Antonio Ayala
@marantaya

Escuela de Fsica (2016)


Universidad de El Salvador

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

* Created on October 26, 2013, 9:16 PM


* IDE/Compiler: NetBeans 7.3.1/g++ 4.8.1 x64
* File: SumData.cpp
*/
#include <iostream>
#include <cstdlib>
#include <limits>
#include <windows.h>
int main(int argc, char** argv) {
int number1, number2, suma;
SetConsoleTitle("Sumar dos Cantidades Enteras");
std::cout << "\n\tSUMA DE DOS CANTIDADES ENTERAS\n";
std::cout << "\tPrimera cantidad: ";
std::cin >> number1;
std::cout << "\tSegunda cantidad: ";
std::cin >> number2;
suma = number1 + number2;
// muestra el resultado
std::cout << "\n\n\t\t" << number1 << " + " << number2 << " = " << suma;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "\n\n\tPresione [Enter] para continuar...";
std::cin.get();
return 0;
}
La lnea 21 del programa anterior, con la sentencia:
suma = number1 + number2;

Se indica a la computadora que debe de realizar la suma de los datos previamente almacenados en los
objetos number1 y number2, y que el resultado debe de asignarlo (guardarlo) en el objeto de la izquierda
(suma).
El carcter + que combina a los objetos number1 y number2 se le conoce como operador y los objetos
combinados como operandos. Los tres elementos forman una expresin que realiza la evaluacin y lo que
resulta se coloca en el objeto de la izquierda por medio del operador de asignacin =.

En la lnea 26 se tiene la sentencia:


Marco Antonio Ayala
@marantaya

Escuela de Fsica (2016)


Universidad de El Salvador

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Usa la funcin miembro de cin para ignorar caracteres del flujo de entrada estndar (asociado a cin), y
se ignorarn tanto caracteres segn el numero obtenido de la expresin que compone el primer
parmetro: std::numeric_limits<std::streamsize>::max() o si se encuentra el carcter de fin de lnea '\n'.
En el primer parmetro la funcin max() que est definida en el archivo de cabecera <limits> devuelve
el valor mximo que puede representar los tipos de datos de C++, en este caso se aplica para un tipo
streamsize (tamao de flujo). La operacin se realiza utilizando la plantilla numeric_limits que tambin
est definida en la librera <limits>.
La sentencia anterior es recomendable colocarla antes de std::cin.get(); para vaciar los posibles datos
que puedan existir en el flujo de entrada (valores que pudieron haber quedado cuando se realizaron
sentencias de entrada). Si no se vaca el flujo de entrada, la funcin miembro std::cin.get(); no esperar a
que el usuario presione la tecla [Enter] debido a que extrae un carcter de los que ya se encuentra en el
flujo de entrada.
Para cada uno de los siguientes casos, diga si los cambios realizados producen algn tipo de
error o dan una salida diferente. Si es as, Cules son los mensajes de error o la salida que se
obtiene? Explique porqu ocurre dicho error (o errores) o porqu la salida es diferente.
1. Elimine la lnea de cdigo #include <limits>
2. Cambie el nombre del archivo de cabecera <limits> a <limits.h>
3. Cambie la sentencia suma = number1 + number2; por suma = number1 - number2; Cmo
clasificara ese error?
4. Ejecute el programa, ingrese una cantidad de punto flotante en vez de una entera cuando se
pida la primera cantidad.
5. Ejecute el programa, ingrese una cantidad de punto flotante en vez de una entera cuando se
pida la segunda cantidad.

Marco Antonio Ayala


@marantaya

Escuela de Fsica (2016)


Universidad de El Salvador

S-ar putea să vă placă și