[go: up one dir, main page]

0% encontró este documento útil (0 votos)
196 vistas15 páginas

Programación Modular en C y Pascal

Este documento describe la programación modular y cómo dividir un problema principal en subproblemas más pequeños llamados módulos. Explica que la programación modular involucra crear subprogramas llamados módulos como procedimientos y funciones para resolver los subproblemas. Luego proporciona un ejemplo de cómo dividir el problema de gestionar las notas de los alumnos en varios módulos.

Cargado por

jorge medrano
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
196 vistas15 páginas

Programación Modular en C y Pascal

Este documento describe la programación modular y cómo dividir un problema principal en subproblemas más pequeños llamados módulos. Explica que la programación modular involucra crear subprogramas llamados módulos como procedimientos y funciones para resolver los subproblemas. Luego proporciona un ejemplo de cómo dividir el problema de gestionar las notas de los alumnos en varios módulos.

Cargado por

jorge medrano
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 15

INSTITUTO TECNOLGICO SUPERIOR DE LERDO.

1 B
Introduccin a la Programacin.

JORGE FERNANDO MEDRANO MENDOZA.

LERDO, DGO.
25/11/2016
PROGRAMACIN MODULAR.

Uno de los mtodos ms conocidos para resolver un problema es dividirlo en


problemas ms pequeos, llamados subproblemas. De esta manera, en lugar de
resolver una tarea compleja y tediosa, resolvemos otras ms sencillas y a partir de
ellas llegamos a la solucin. Esta tcnica se usa mucho en programacin ya que
programar no es ms que resolver problemas, y se le suele llamar diseo
descendente, metodologa del divide y vencers o programacin top-down.

Es evidente que si esta metodologa nos lleva a tratar con subproblemas,


entonces tambin tengamos la necesidad de poder crear y trabajar
con subprogramas para resolverlos. A estos subprogramas se les suele
llamar mdulos, de ah viene el nombre de programacin modular.
En Pascal disponemos de dos tipos de mdulos: los procedimientos y
las funciones.

Veamos un ejemplo de cmo emplear el diseo descendente para resolver un


problema. Supongamos que un profesor quiere crear un programa para gestionar
las notas de sus alumnos. Quiere que dicho programa le permita realizar tareas
tales como asignar notas, cambiar notas, ver las notas segn distintas
calificaciones, etc. A continuacin tienes un esquema que representa una de las
posibles divisiones del problema en mdulos.
3.1Declaracin de variables.

Los prototipos de las funciones que se utilizan en un programa se incluyen


generalmente en la cabecera del programa y presentan la siguiente sintaxis:

En el prototipo de una funcin no se especifican las sentencias que forman parte


de la misma, sino sus caractersticas. Por ejemplo:

En este caso se declara la funcin cubo que recibe como parmetro una variable
de tipo entero (numero) y devuelve un valor del mismo tipo. En ningn momento
estamos especificando qu se va a hacer con el variable nmero, slo declaramos
las caractersticas de la funcin cubo.

Cabe sealar que el nombre de los parmetros es opcional y se utiliza para


mejorar la comprensin del cdigo fuente. De esta manera, el prototipo de la
funcin cubo podra expresarse de la siguiente manera:

Los prototipos de las funciones son utilizados por el compilador para verificar que
se accede a la funcin de la manera adecuada con respecto al nmero y tipo de
parmetros, y al tipo de valor de retorno de la misma. Veamos algunos ejemplos
de prototipos de funciones:

Las funciones de biblioteca se declaran en lo que se conocen como ficheros de


cabecera o ficheros .h (del ingls hederse, cabeceras). Cuando deseamos utilizar
alguna de las funciones de biblioteca, debemos especificar el fichero .h en que se
encuentra declarada la funcin, al inicio de nuestro programa. Por ejemplo, si
deseamos utilizar la funcin pronto en nuestro programa, debemos incluir el
fichero stdio.h que contiene el prototipo de esta funcin.

Por valor: cualquier cambio que se realice dentro de la funcin en el argumento


enviado, NO afectar al valor original de las variables utilizadas en la llamada. Es
como si trabajramos con una copia, no con el original. No es posible enviar por
valor arrays, deberemos hacerlo por referencia.
Por referencia: lo que hacemos es enviar a la funcin la direccin de memoria
donde se encuentra la variable o dato. Cualquier modificacin SI afectar a las
variables utilizadas en la llamada. Trabajamos directamente con el original. /* Paso
por valor. */

Para enviar un valor por referencia se utiliza el smbolo & (ampersand) delante de
la variable enviada. Esto le indica al compilador que la funcin que se ejecutar
tendr que obtener la direccin de memoria en que se encuentra la variable.

Vamos a fijarnos en los ejemplos. En el ejemplo anterior podrs comprobar que


antes y despus de la llamada, las variables mantienen su valor. Solamente se
modifica en la funcin intercambio (paso por valor).

En el siguiente ejemplo podrs ver como las variables intercambian su valor tras la
llamada de la funcin (paso por referencia).

Las variables con un * son conocidas como punteros, el nico dato en 'C' que
puede almacenar una direccin de memoria.
3.2 Biblioteca de funciones

L lenguaje C, C++ contiene numerosas funciones, cuando se emplean funciones


de esta biblioteca estndar, se incrementa la transportabilidad de los programas.

Las funciones estndar se dividen en grupos, todas las funciones que pertenecen
al mismo grupo estn declaradas en el archivo de cabecera (aquel que dice xxx.h),
la letra "h" significa heder en ingls y es lo que se llama cabecera.

C ofrece un conjunto de funciones estndar que dan soporte a las operaciones


que se utilizan con ms frecuencia. Estas funciones estn agrupadas en
bibliotecas. Para utilizar cualquiera de las funciones que forman parte de las
bibliotecas estndar de C, slo hace falta realizar una llamada a dicha funcin.

En ciencias de la computacin, una biblioteca (del ingls librar) es un conjunto


de subprogramas utilizados para desarrollar software. Las bibliotecas contienen
cdigo y datos, que proporcionan servicios a programas independientes, es decir,
pasan a formar parte de stos. Esto permite que el cdigo y los datos se
compartan y puedan modificarse de forma modular. Algunos programas
ejecutables pueden ser a la vez programas independientes y bibliotecas, pero la
mayora de stas no son ejecutables. Ejecutables y bibliotecas hacen referencias
(llamadas enlaces) entre s a travs de un proceso conocido como enlace, que por
lo general es realizado por un software denominado enlazador.

Ejemplo de librera estndar. Match

Match es el nombre de una librera que incorpora funciones matemticas. Para


poder utilizar dichas funciones hay que aadir la instruccin #include <math.h> al
principio del cdigo de nuestro archivo. Cada directiva include se coloca en una
lnea separada y no requiere punto y coma al ser una indicacin al compilador y no
una instruccin de verdad .Esta librera contiene las siguientes funciones (se
indican los prototipos y uso);
3.3 Entrada y salida
Las funciones que forman parte de la biblioteca estndar de C, funciones estndar
o predefinidas, estn divididas en grupos. Todas las funciones que pertenecen a
un mismo grupo se definen en el mismo fichero de cabecera. Los nombres de los
ficheros cabeceras de C se muestran en la siguiente tabla:

Cuando deseamos utilizar cualquiera de las funciones estndar de C, primero


debemos utilizar la directiva de precompilacin #include para incluir los ficheros
cabecera en nuestro programa. Por otra parte, antes de utilizar una funcin,
primero debemos conocer las caractersticas de dicha funcin, es decir, el nmero
y tipo de datos de sus argumentos y el tipo de valor que devuelve. Esta
informacin es proporcionada por los prototipos de funcin.

Los grupos de funciones estndar ms comunes son:

- entrada/salida estndar

- matemticas

- de conversin

- diagnstico

- de manipulacin de memoria

- control de proceso

- ordenacin

- directorios

- fecha y hora

- bsqueda

- manipulacin de cadenas

- grficos

- etctera

Podemos incluir tantos ficheros de cabecera como nos haga falta, incluyendo los
ficheros de cabecera que hemos creado y donde hemos definido nuestras
funciones. En el resto de este apartado veremos algunas de las funciones de la
entrada/salida estndar ms utilizadas.

En C no existe ninguna palabra clave para realizar la entrada y salida de datos


(E/S). Se realizan a travs de funciones de biblioteca (concretamente, la biblioteca
stdio.h, ver captulo 13).

Las funciones principales que realizan la entrada y salida sin formato son:
getchar(): Lee un carcter del teclado. Espera hasta que se pulsa una tecla y
entonces devuelve su valor.

putchar (): Imprime un carcter en la pantalla en la posicin actual del cursor.

Gets (): Lee una cadena de caracteres introducida por el teclado y la sita en una
direccin apuntada por su argumento de tipo puntero a carcter.

Puts (): Escribe su argumento de tipo cadena en la pantalla seguida de un carcter


de salto de lnea.
3.4 Archivo
En C un archivo puede ser cualquier cosa, desde un archivo de disco a un terminal
o una impresora. Se asocia una secuencia con un archivo especfico realizando
una operacin de apertura, una vez que est abierto, la informacin puede ser
intercambiada entre ste y el programa. El puntero a un archivo es el hilo que
unifica el sistema de E/S con buffer. Un puntero a un archivo es un puntero a una
informacin que define varias cosas sobre l, incluyendo el nombre, el estado y la
posicin actual del archivo. En esencia, el puntero a un archivo identifica un
archivo en disco especfico y utiliza la secuencia asociada para dirigir el
funcionamiento de las funciones de E/S con buffer. Para obtener una variable de
tipo puntero a archivo se debe utilizar una sentencia como la siguiente: FILE
*punto;

La funcin fopen () abre una secuencia para que pueda ser utilizada y le asocia a
un archivo. Su prototipo es: FILE *fopen(constchar *nombre_archivo, constchar
*modo); Donde nombre_archivo es un puntero a una cadena de caracteres que
representan un nombre vlido del archivo y puede incluir una especificacin de
directorio. La cadena que apunta modo determina cmo se abre el archivo. Los
modos son los siguientes:

R: Abre un archivo de texto para lectura.

W: Crea un archivo de texto par escritura

A: Abre un archivo de texto para aadir

R+: Abre un archivo de texto para lectura/escritura

W+: Crea un archivo de texto para lectura/escritura

A+: Aade o crea un archivo de texto para lectura/escritura

La funcin fclose() cierra una secuencia que fue abierta mediante una llamada a
fopen(). Escribe toda la informacin que todava se encuentre en el buffer del
disco y realiza un cierre formal del archivo a nivel del sistema operativo. Tambin
libera el bloque de control de archivo asociado con la secuencia, dejndolo libre
para su reutilizacin. A veces es necesario cerrar algn archivo para poder abrir
otro, debido a la existencia de un lmite del sistema operativo en cuanto al nmero
de archivos abiertos. Su prototipo es: intfclose(FILE *fp);
La funcin putc() escribe caracteres en un archivo que haya sido abierto
previamente para operaciones de escritura, utilizando la funcin fopen(). Su
prototipo es: intputc(int car, FILE *pf);

La funcin getc() escribe caracteres en un archivo que haya sido abierto, en modo
lectura, mediante fopen(). Su prototipo es: intgetc(FILE *pf);La funcin fputs()
escribe la cadena en la secuencia especificada. Su prototipo es: fputs() escribe la
cadena en la secuencia especificada. Su prototipo es: intfputs(constchar *cad,
FILE *pf);La funcin fgets() lee una cadena de la secuencia especificada hasta que
se lee un carcter de salto de lnea o hasta que se han ledo longitud-1 caracteres.

La funcin rewind() inicia el indicador de posicin al principio del archivo indicado


por su argumento. Su prototipo es: rewind() inicia el indicador de posicin al
principio del archivo indicado por su argumento. Su prototipo es: voidrewind(FILE
*pf);

Existen otras muchas funciones en la biblioteca estndar de C (ver captulo 13)


como pueden serremove(): Borra el archivo especificado.

Fflush(): Vaca el contenido de una secuencia de salida.

fread(): Lee tipos de datos que ocupan ms de un byte. Permiten la lectura


de bloques de cualquier tipo de datos.

fwrite(): Escribe tipos de datos que ocupan ms de un byte. Permiten la


escritura de bloques de cualquier tipo de datos.

fprintf(): Hace las funciones de printf() sobre un fichero.

fscanf(): Hace las funciones de scanf() sobre un fichero.

feof(): Detecta el final de un fichero.

ferror(): Detecta un error en la lectura/escritura de un fichero.

fclose() cierra una secuencia que fue abierta mediante una llamada a
fopen().

putc() escribe caracteres en un archivo que haya sido abierto previamente


para operaciones de escritura, utilizando la funcin fopen().

La funcin getc() escribe caracteres en un archivo que haya sido abierto, en modo
lectura, mediante fopen(). Su prototipo es:
La funcin fputs() escribe la cadena en la secuencia especificada. Su prototipo es:
intfputs(constchar *cad, FILE *pf);

La funcin fgets() lee una cadena de la secuencia especificada hasta que se lee
un carcter de salto de lnea o hasta que se han ledo longitud-1 caracteres. Su
prototipo es: fgets() lee una cadena de la secuencia especificada hasta que se lee
un carcter de salto de lnea o hasta que se han ledo longitud-1 caracteres. Su
prototipo es:intfgets(char *cad, FILE *pf);
3.5 Cadenas

Manejo de cadenas <string.h>

Recordando la presentacin de arreglos hecha (captulo 5) en donde las cadenas


estn definidas como un arreglo de caracteres o un apuntador a una porcin de
memoria conteniendo caracteres ASCII. Una cadena en C es una secuencia de
cero o ms caracteres seguidas por un caracter NULL o \0:

Es importante preservar el caracter de terminacin NULL, ya que con ste es


como C define y maneja las longitudes de las cadenas. Todas las funciones de la
biblioteca estndar de C lo requieren para una operacin satisfactoria.

En general, aparte de algunas funciones restringidas en longitud (strncat(),


strncmp() y strncpy()), al menos que se creen cadenas a mano, no se debern
encontrar problemas. Se debern usar las funciones para manejo de cadenas y no
tratar de manipular las cadenas en forma manual desmantelando y ensamblando
cadenas.

Todas las funciones para manejo de cadenas tienen su prototipo en:

#include<string.h>

Las funciones ms comunes son descritas a continuacin:

char *strcpy(constchar *dest, constchar *orig) -- Copia la cadena de


caracteres apuntada por orig (incluyendo el carcter terminador '\0') al
vector apuntado por dest. Las cadenas no deben solaparse, y la de destino,
debe ser suficientemente grande como para alojar la copia.

intstrcmp(constchar *s1, constchar *s2) -- Compara las dos cadenas de


caracteres s1 y s2. Devuelve un entero menor, igual o mayor que cero si se
encuentra que s1es, respectivamente, menor que, igual a, o mayor que s2.

char *strerror(interrnum) -- Devuelve un mensaje de error que corresponde


a un nmero de error.

intstrlen(constchar *s) -- Calcula la longitud de la cadena de caracteres.

char *strncat(char *s1, const char *s2, size_t n) -- Agregancaracteres de s2


a s1.
intstrncmp(constchar *s1, char *s2, size_t n) -- Compara los
primeros n caracteres de dos cadenas.

char *strncpy(constchar *s1, constchar *s2, size_t n) -- Copia los


primeros ncaracteres de s2 a s1.

strcasecmp(constchar *s1, constchar *s2) -- versin que ignora si son


maysculas o minsculas de strcmp().

strncasecmp(constchar *s1, constchar *s2, size_t n) -- versin insensible a


maysculas o minsculas de strncmp() que compara los
primeros n caracteres de s1.
PROGRAMAS:

1)
#include <stdio.h>

#include <iostream.h>

#include <conio.h>

void sumar(int n1,int n2){

int resultado;
resultado = n1 + n2;
cout<<"La suma es igual a: "<<resultado;
}
{
void main(){
int registro,numero1,numero2,condicion=0;
while(condicion < 1){
cout<<"0.- Sumar";
cout<<"nN.- Cualquier numero para
salir";
cout<<"nQue desea hacer: ";
cin>>registro;
switch(registro){
case 0:
cout<<"Introduce el 1 numero: ";
cin>>numero1;
cout<<"Introduce el 2 numero: ";
cin>>numero2;
sumar(numero1,numero2);
break;
default:
condicion = 1;
break;
}
_getch();
Return0;
}
}
2)
#include <stdio.h>
#include <stdlib.h>

#define MULTIPLICACION 1
#define RESTA 2
#define SUMA 3
#define POTENCIA 4
#define SALIR 5

/*Listado de prototipos de subprogramas


sirven para que desde el principio, el compilador conozca los nombres de los
subprogramas que habrn de definirse posteriormente, as como el tipo de valores
que regresan las funciones
*/
void menuPrincipal();
void hacerMultiplicacion();
void restar(int minuendo,int sustraendo);
void hacerResta();
int suma(int a,int b);
void otrasSumas();
void hacerSuma();
int potencia(int base,int exponente);
void hacerPotencia();

int main() //funcin main programa principal


{
int opcion;
do{
menuPrincipal();
printf("Dame la opcion: ");
scanf("%d",&opcion);
switch(opcion){
case MULTIPLICACION:
hacerMultiplicacion();
break;
case RESTA:
hacerResta();
break;
case SUMA:
hacerSuma();
break;
case POTENCIA:
hacerPotencia();
break;
case SALIR:
printf("bye bye\n");
break;
default:
printf("Opcion no valida\n");
}
printf("Presione entrar para continuar");
getchar();
getchar();
}while(opcion!=SALIR);

return 0;
3)
#include <stdio.h>

#include <iostream.h>

#include <conio.h>

void retar(int n1,int n2){

int resultado;
resultado = n1 + n2;
cout<<"La reta es igual a: "<<resultado;
}
{
void main(){
int registro,numero1,numero2,condicion=0;
while(condicion < 1){
cout<<"0.- restar";
cout<<"nN.- Cualquier numero para
salir";
cout<<"nQue desea hacer: ";
cin>>registro;
switch(registro){
case 0:
cout<<"Introduce el 1 numero: ";
cin>>numero1;
cout<<"Introduce el 2 numero: ";
cin>>numero2;
sumar(numero1,numero2);
break;
default:
condicion = 1;
break;
}
_getch();
Return0;
}
}

También podría gustarte