PDF de programación - Uso de subrutinas, transmisión de parámetros y compilación condicional en C++

Imágen de pdf Uso de subrutinas, transmisión de parámetros y compilación condicional en C++

Uso de subrutinas, transmisión de parámetros y compilación condicional en C++gráfica de visualizaciones

Actualizado el 17 de Marzo del 2020 (Publicado el 2 de Marzo del 2019)
909 visualizaciones desde el 2 de Marzo del 2019
31,7 KB
5 paginas
Creado hace 20a (16/06/2003)
USO DE SUBRUTINAS, TRANSMISIÓN DE

PARÁMETROS Y COMPILACIÓN CONDICIONAL EN

Bruno López Takeyas

Instituto Tecnológico de Nuevo Laredo

Reforma Sur 2007, C.P. 88250, Nuevo Laredo, Tamps. México

http://www.itnuevolaredo.edu.mx/takeyas
E-mail: [email protected]



C++



float CALCULA(void); // Devuelve un
valor de tipo real



3. Limitación de return()



Básicamente una Subrutina es un segmento de
código que se escribe sólo una vez pero puede
invocarse o ejecutarse muchas veces. Existen dos
tipos: Procedimientos y Funciones.


Subrutinas



? Procedimientos



? Funciones



1. Procedimientos

Son un tipo de subrutina que ejecuta un
conjunto de acciones sin devolver valor alguno como
resultado de dichas operaciones. Estos se identifican
por su declaración void().

P. ejem.
void Rutina(void);
void TAREA(void);



2. Funciones

A diferencia de los procedimientos, las
funciones después de ejecutar un conjunto de
acciones devuelven sólo un valor del tipo usado en la
declaración de ésta por medio de return().

P. ejem.
int SUMA(void); // Devuelve un valor de
tipo entero



1

La cláusula return() sólo devuelve un valor. Si

se desea que la función devuelva más de un valor
debe usarse otro mecanismo.



4. Variables locales y

globales

Las variables que se declaran dentro de una
subrutina se llaman locales mientras que las variables
globales se conocen a través del programa entero y
se pueden usar en cualquier segmento de código
manteniendo su valor. Se pueden declarar variables
globales declarándolas fuera de cualquier función.
Cualquier función puede acceder a ellas sin tener en
cuenta en qué función esté dicha expresión.



5. Usando argumentos para
pasar datos a subrutinas

El mecanismo para enviar información a las

subrutinas es llamado argumento (algunos autores lo
conocen como parámetro) y son los datos que se
colocan entre paréntesis al invocarlas.
P. ejem.


int PROCESO(int x, float y)

Argumentos



7. Paso de argumentos por

referencia

Existen dos formas de pasar argumentos a una
subrutina: por valor y por referencia. Hasta este punto
sólo se ha analizado el envío de valores, pero
también se puede enviar la dirección de memoria de
una variable a una subrutina.


TIP

Todos los arreglos se pasan por

referencia a una subrutina



En el ejemplo de la Fig. 1 se muestra una
variable x de tipo entero, que se pasa por referencia
(se manda su dirección de memoria) a un
procedimiento llamado RUTINA, quien recibe dicha
dirección con una variable apuntador a un valor
entero (y). La variable y recibe la dirección donde se
aloja el valor de x y esto provoca que cuando se
modifica lo que apunta y (valor de x), indirectamente
se modifica el valor de x. Esto se refleja en memoria
como lo indica la Fig. 2.


Memoria RAM



Se pueden enviar varios argumentos a una
subrutina, sin embargo es necesario precisar que
deben estar declaradas las variables receptoras en el
orden
tipo de dato
apropiado.



indicado considerando el

6. Recibiendo un valor de

una función



Una vez que se

función es
necesario utilizar la variable capaz de recibir el valor
calculado por ésta, la cual debe ser del mismo tipo de
la función. P. Ejem.

invoca una



a=PROCESO(3, 5.25);


en el caso anterior, la variable “a” recibe el valor
calculado por la función “PROCESO”, quien acepta
los argumentos 3 y 5.25 respectivamente.



// un argumento

/*
Programa para el paso de argumentos por
referencia

Instructor: M.C. Bruno Lopez Takeyas
*/

#include <conio.h>
#include <iostream.h>

void RUTINA(int *y); // Declaracion del
procedimiento RUTINA que acepta

(apuntador a un entero)

void main(void)
{
int x=3;

clrscr();
cout << "\n\r Antes de la rutina x=" << x;

RUTINA(&x); // Envio de la direccion de “x”
como argumento

cout << "\n\n\n\r Despues de la rutina x=" <<
x;

getch();
return;
}

void RUTINA(int *y)
{
cout << "\n\n\n\r Valor recibido por y=" <<
*y;
*y+=5;
cout << "\n\n\n\r Valor modificado de y=" <<
*y;
return;
}

2


1400
1401
1402
1403
1404
1405



3



1401


x



y

Fig. 2.- Apuntadores como receptores de direcciones


la Fig. 3 muestra una
típica de envío de argumentos por

El programa de

aplicación
referencia: el ordenamiento de un arreglo.







// de un arreglo

/*
Programa para ordenar un arreglo
(pasandolo por referencia)

Instructor: M.C. Bruno Lopez Takeyas
*/

#include <conio.h>
#include <stdio.h>
#include <iostream.h>

#define TOP 10 // Cantidad de elementos
en el arreglo

void SORTEADOR(int B[TOP]); //
Declaracion del que acepta el arreglo B

// para ordenarlo
en forma ascendente

void IMPRIME(int B[TOP]); //
Procedimiento que imprime los elementos



void main(void)
{
int A[TOP]={3,5,6,7,8,0,2,9,1,4}; //
Declaracion e inicializacion del

original

clrscr();

cout << "\n\rArreglo antes de sortearlo
...";
IMPRIME(A); // Imprime los elementos
del arreglo A antes de sortearlo

SORTEADOR(A); // Procedimiento para
ordenar el arreglo A en forma ascendente

cout << "\n\n\n\rArreglo despues de
sortearlo ...";
IMPRIME(A); // Imprime los elementos
del arreglo A despues de sortearlo
getch();
return;
}

void IMPRIME(int B[TOP])
{
int i; // Variable local

printf("\n\r");

// arreglo



3

for(i=0;i<TOP;i++)
printf("%2d ",B[i]);
return;
}

void SORTEADOR(int B[TOP])
{
int i,j,aux; // Variables locales

for(i=0;i<TOP-1;i++)
for(j=i+1;j<TOP;j++)
if(B[i]>B[j])
{


elementos

}
return;
}

B[j]=aux;

aux=B[i];
B[i]=B[j]; // Intercambio de

Fig. 3.- Sorteador de un arreglo



8. Compilación condicional



#elif,

#else,

#endif,

Las directivas del preprocesador #if, #ifdef,
#ifndef,
compilarán
selectivamente varias porciones de un programa. La
idea general es que si la expresión después de #if,
#ifdef o #ifndef es cierta, entonces el código que
está entre una de las precedentes y un #endif se
compilará; de lo contrario se saltará. La directiva
#endif marca el final de un bloque #if. El #else se
puede usar con cualquiera de los anteriores de
manera similar a las sentencias else e if. El programa
de la Fig. 4 ilustra el us o de estas directivas.

/*
Programa para mostrar la forma de
compilar condicionalmente un programa

Instructor: M.C. Bruno Lopez Takeyas
*/

#include <conio.h>
#include <stdio.h>
#include <iostream.h>

#define CAPTURAR_ELEMENTOS // Bandera
para activar/desactivar la compilacion

// de un segmento
de codigo







// arreglo

// Si se omite

// de un arreglo

// captura de los


esta definicion, se cancela la

elementos desde el teclado

#define TOP 10 // Cantidad de elementos
en el arreglo

void SORTEADOR(int B[TOP]); //
Declaracion del que acepta el arreglo B

// para ordenarlo
en forma ascendente

void IMPRIME(int B[TOP]); //
Procedimiento que imprime los elementos


void main(void)
{
#ifdef CAPTURAR_ELEMENTOS
int A[TOP];
int i;
#else if
int A[TOP]={3,5,6,7,8,0,2,9,1,4}; //
Declaracion e inicializacion del

original
#endif CAPTURAR_ELEMENTOS

clrscr();

#ifdef CAPTURAR_ELEMENTOS
for(i=0;i<TOP;i++)
{
printf("\n\rA[%d] ? ",i);
cin >> A[i];
}
#endif CAPTURAR_ELEMENTOS

cout << "\n\rArreglo antes de sortearlo
...";
IMPRIME(A); // Imprime los elementos
del arreglo A antes de sortearlo

SORTEADOR(A); // Procedimiento para
ordenar el arreglo A en forma ascendente

cout << "\n\n\n\rArreglo despues de
sortearlo ...";
IMPRIME(A); // Imprime los elementos
del arreglo A despues de sortearlo
getch();
return;
}

void IMPRIME(int B[TOP])
{

4

int i; // Variable local


printf("\n\r");
for(i=0;i<TOP;i++)
printf("%2d ",B[i]);
return;
}

void SORTEADOR(int B[TOP])
{
int i,j,aux; // Variables locales

for(i=0;i<TOP-1;i++)
for(j=i+1;j<TOP;j++)
if(B[i]>B[j])
{


elementos

}
return;
}

B[j]=aux;

aux=B[i];
B[i]=B[j]; // Intercambio de



Fig. 4.- Compilación condicional



9. Encabezados creados por
el programador (archivos
*.h)



Los archivos de encabezados

(también
conocidos como archivos “include”) son de texto tal
como los que codifica el programador usando el editor
de programas de Turbo C++. Regularmente se
encuentran almacenados en el
subdirectorio
\INCLUDE. Es posible colocar estatutos en el listado
de programas que no son código de programación
sino mensajes para el compilador. Estos mensajes
informan al
llamados “directivas del compilador”,
compilador de definiciones de
frases. Ciertas
directivas del compilador se agrupan en los archivos
de encabezados y pueden ser incluídas en el código
fuente de los programas antes de compilarse. Sin
embargo, el programador puede diseñar segmentos
de código (regularmente con subrutinas) que utiliza
repetidamente en sus programas, es entonces
cuando surge la necesidad de crear archivos de
encabezados que sólo incluye en sus programas
cada vez que los necesita, basta con codificar las
rutinas y grabarlas en un archivo con extensión h. La



Fig. 5 muestra un ejemplo de la forma de incluir estos
encabezados creados por el usuario.

#include “c:\\tarea\\CA
  • Links de descarga
http://lwp-l.com/pdf15391

Comentarios de: Uso de subrutinas, transmisión de parámetros y compilación condicional en C++ (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad