viernes, 23 de octubre de 2015

MODULOS (FUNCIONES)


FUNCIONES
La función podría ser definida como un conjunto de instrucciones que permiten procesar las variables para obtener un resultado. Puede que esta definición resulte un poco vaga si no nos servimos de un ejemplo para ilustrarla.

Supongamos que queremos calcular el valor total de un pedido a partir de la simple suma de los precios de cada uno de los artículos. Podríamos definir una función suma en nuestro lenguaje ficticio:

Definir función suma (art1,art2,art3)
suma=art1+art2+art3
imprimir(suma)
fin función

Este supuesto programa nos permitiría calcular la suma de tres elementos e imprimir el resultado en pantalla. Lo interesante de utilizar este tipo de funciones es que ellas nos permiten su utilización sistemática tantas veces como queramos sin necesidad de escribir las instrucciones tantas veces como veces queremos utilizarla. Por supuesto, podemos prescindir de esta declaración de función e introducir una línea del siguiente tipo:

imprimir(art1+art2+art3)

Evidentemente, cuanto más complicada sea la función y más a menudo la utilicemos en nuestros scripts más útil resulta definirlas.
Esta función suma podría ser utilizada en cualquier lugar de nuestro script haciendo una llamada del siguiente tipo:

ejecuta suma(4,6,9)
Cuyo resultado sería:
19


TIPOS DE FUNCIONES



La función es una estructura autónoma similar a los módulos. La diferencia radica en que la función se usa para devolver un solo valor de un tipo de dato simple a su punto de referencia. La función se relaciona especificando su nombre en una expresión, como si fuera una variable ordinaria de tipo simple. Las funciones se dividen en estándares y definidas por el usuario.



- Estándar: Son funciones proporcionadas por cualquier lenguaje de programación de alto nivel, y se dividen en aritméticas y alfabéticas.



- Definidas por el usuario: son funciones que puede definirlas el programador con el propósito de ejecutar alguna función específica, y que por lo general se usan cuando se trata de hacer algún cálculo que será requerido en varias ocasiones en la parte principal del algoritmo.



Ejemplos:



Función factorial (n:entero):entero



var i,factorial:entero



inicio



              si n <=1 entonces



               factorial <-- 1



sino



              factorial <-- 1



desde i = 1 hasta n hacer



              factorial <-- factorial * 1



          fin_desde



       fin_si



fin



Evaluar la función f = x! / (y!(x-y)!)



Algoritmo hallarf



var x,y:entero



f:real



inicio



     leer (x,y)



     f <-- factorial (x)/(factorial (y)* factorial (x-y))



     escribir ("El valor de f es:", f)



fin


COMPONENTES

Los componentes son unos elementos genéricos con una funcionalidad muy concreta, cuya única finalidad es la reutilización. Cada uno de ellos está destinado a realizar una tarea típica en una aplicación.

Un componente de la VCL es una clase que caracteriza a un control de Windows agregando propiedades, métodos y gestores de eventos a cada control.

La filosofía de los componentes en C++ Builder es exactamente la misma que en Visual Basic. Esto es tanto así que algunos componentes pueden utilizarse en ambos entornos (los componentes ActiveX).

DECLARACION

Las declaraciones de funciones generalmente son especificadas por: Un nombre único en el ámbito: Nombre de la función con el que se identifica y se distingue de otras. No podrá haber otra función ni procedimiento con ese nombre (salvo sobrecarga o polimorfismo en programación orientada a objetos). Un tipo de dato de retorno: tipo de dato del valor que la función devolverá al terminar su ejecución. Una lista de parámetros: Especificación del conjunto de argumentos (pueden ser cero, uno o más) que la función debe recibir para realizar su tarea. El código u órdenes de procesamiento: conjunto de órdenes y sentencias que debe ejecutar la función.

Una función de inicio

Cada programa debe tener una sola función externa denominada main(), principal, que desde la óptica del programador define el punto de entrada al programa. Las funciones se declaran en cabeceras (estándar o específicas de usuario) o dentro de los ficheros fuente. Estas declaraciones son denominadas prototipos. En ocasiones la declaración y definición se realiza en el mismo punto (como ocurre con las variables), aunque es normal colocar al principio del fuente los "prototipos" de las funciones que serán utilizadas en su interior, y las definiciones en cualquier otro sitio (generalmente al final). En el caso del ejemplo anterior, la declaración y definición de func1 se ha realizado en el mismo punto, mientras que la declaración de func2 se realiza dentro del cuerpo de la clase y la definición en el exterior de esta. La forma general del prototipo de una función es: valor-devuelto nombre-función (lista-de-argumentos); La forma general de la definición es:

valor-devuelto nombre-función (lista-de-argumentos) {

  sentencias;         // "cuerpo" de la función

}

Ejemplo:

float cuadrado (float x);                // prototipo

float cuadrado (float x) { return x*x; } // definición

La comunicación entre el programa y las funciones que lo componen se realiza mediante los argumentos de llamada, los valores devueltos y las variables globales y externas.

El operador de invocación a función

En ocasiones, en especial al tratar la sobrecarga de operadores, es conveniente considerar una invocación del tipo func(lista-de-argumentos); como un operador binario; el denominado operador de invocación a función ( ) que se aplica entre el primer argumento func y el segundo, lista-de-argumentos. En este sentido la invocación anterior sería equivalente a: func()lista-de-argumentos.

PARÁMETROS

Normalmente, las funciones operan sobre ciertos valores pasados a las mismas ya sea como constantes literales o como variables, aunque se pueden definir funciones que no reciban parámetros. Existen dos formas en de pasar parámetros a una función; por referencia o por valor. El hecho es que si en una declaración de función se declaran parámetros por referencia, a los mismos no se les podrá pasar valores literales ya que las referencias apuntan a objetos (variables o funciones) residentes en la memoria; por otro lado, si un parámetro es declarado para ser pasado por valor, el mismo puede pasarse como una constante literal o como una variable. Los parámetros pasados por referencia pueden ser alterados por la función que los reciba, mientras que los parámetros pasados por valor o copia no pueden ser alterados por la función que los recibe, es decir, la función puede manipular a su antojo al parámetro, pero ningún cambio hecho sobre este se reflejará en el parámetro original.

Parámetros constantes

Los parámetros usados por una función pueden declararse como constantes ( const ) al momento de la declaración de la función. Un parámetro que ha sido declarado como constante significa que la función no podrá cambiar el valor del mismo ( sin importar si dicho parámetro se recibe por valor o por referencia ).

Parámetros con valor por defecto

Los parámetros usados por una función pueden declararse con un valor por defecto. Un parámetro que ha sido declarado con valor por defecto es opcional a la hora de hacer la llamada a la función

ARGUMENTOS

Los argumentos que aparecen en la llamada a la función se denominan argumentos actuales, mientras que los argumentos formales son los que aparecen en la primera línea de definición de la función. (También se llaman los argumentos actuales, a veces, argumentos simplemente, o parámetros actuales). En una llamada normal a una función, habrá un argumento actual por cada argumento formal. Los argumentos actuales pueden ser constantes, variables simples, o expresiones más complejas. No obstante, cada argumento actual debe ser del mismo tipo de datos que el argumento formal correspondiente.
 
 Los parámetros formales son variables locales a una función, ya que son creados al entrar en la función (se crean en la pila) y destruidos cuando ésta termina. El tipo de variable declarado para cada parámetro formal debe ser el  mismo que se utilice cuando se llama a la función Si esto no sucede, pueden introducirse errores, ya que el compilador no verificará los tipos. Para prevenir estos errores se emplean los prototipos de las funciones. Los prototipos consisten en declarar al principio del programa (de cada módulo si el programa contiene varios módulos) las funciones que se utilizan y los tipos de sus argumentos. De esta forma el compilador puede reconocer una incongruencia entre el prototipo de una función y su llamada.  Los prototipos, también nos pueden solveltar los errores que se pueden dar al hacer una llamada a una función func2 (que no devuelve un entero), y que aparece implementada debajo de func1, siendo llamada desde func1, por tanto, para resolver el problema de orden de definición son útiles igualmente los prototipos o declaraciones por adelantado. Veamos como sería todo esto:
 
 
Los parámetros son siempre pasados por valor. Por tanto, el parámetro de la función recibe el valor de la variable que se utiliza como argumento. Cualquier modificación sobre estos parámetros no afecta a las variables que se utilizan para llamar a la función, puesto que el parámetro en estos casos es una copia de esas variables.

Veamos un ejemplo en el que se modifica el valor de su argumento. Se visualiza el valor original de a (a=2) cuando comienza la ejecución de main. Este valor se pasa a la función modificar, en donde se multiplica por 3 y se visualiza el nuevo valor. Nótese que se altera el valor del argumento formal que se visualiza en la función. Finalmente, el valor de a en main (el argumento actual) se vuelve a visualizar, después de haberse devuelto el control a main desde modificar.
 
 

Se genera la siguiente salida:

a = 2     (desde main, antes de llamar a la función)

a = 6     (desde la función, después de modificar el valor)

a = 2     (desde main, después de llamar a la función)




 
 


 Pasar los argumentos por valor tiene sus ventajas y sus desventajas. Algo positivo es que los valores hallados dentro de la función no son vistos fuera de ella. Su desventaja es que impide que se transfiera información desde la función hasta el punto de llamada mediante los argumentos. Por tanto, el paso por valor implica que la transferencia de información sólo puede realizarse en un sentido.


INVOCACIÓN DE FUNCIONES Y PROCEDIMIENTOS

Una vez que en su programa se ha definido una función, esta puede ser llamada las veces que sean necesarias. Para llamar a una función basta con hacer referencia a su nombre y si la misma requiere de parámetros estos deberán indicarse dentro de parentesis. Para llamar a una función que no requiera de parámetros se deberá indicar el nombre de la misma seguida de parentesis vacios. Por ejemplo, para llamar a la función cuadrado() vista anteriormente, podemos emplear:

int main (void) // Llamado a procedimiento main

{

while(1)

{

 F_1 = cuadrado(25); F_2 = cuadrado( ); // llamado a función cuadrado R = cuadrado(X); // guardar en R el cuadrado de X }
return 0;
}

Última modificación: martes, 24 de abril de 2012, 19:26


Invocación de una función

La definición de una función no hace que ésta se ejecute. Salvo la función principal, main() (que es invocada por el SO), todas las funciones han de ser invocadas desde alguna función, que incluso puede ser ella misma (recursivas).

Tipo de Retorno

• Toda función retorna un valor.  Si no nos interesa el valor de devolución de la función podemos hacer dos cosas: – Ignorarlo – Declarar el tipo de retorno como tipo void.





AMBITO O ALCANCE DE LAS VARIABLES

En esta lección vamos a aprender una de las más útiles características de la programación modular: el uso de variables locales y globales en nuestros programas.



Se dice que una variable es local cuando está declarada y definida dentro de algún subprograma (ya sea una función o un procedimiento). El significado y la utilidad de una variable local están limitados únicamente al subprograma donde fue definida, es decir, el valor que tenga almacenado no será accesible para ningún otro subprograma. Ahora bien, pueden definirse variables locales con el mismo nombre en distintos subprogramas, pero eso no quiere decir que se refieran a la misma posición de memoria o al mismo valor.



Por otro lado, una variable global es la que se declara en el programa o algoritmo principal, del cual dependen todos los demás subprogramas. A diferencia de las variables locales, las globales tienen la ventaja de compartir información entre subprogramas. Una variable global es útil y accesible tanto en el programa principal como en todos los subprogramas que dependan de él. Cualquier subprograma puede acceder y modificar el valor de una variable global.



El ámbito o alcance (scope, en inglés) de una variable es la parte del programa o algoritmo en el que una variable definida, conocida y acesible. En la siguiente figura podemos ver una descripción conceptual del ámbito de diferentes variables:


En el siguiente ejemplo definimos la función signo que realiza la siguiente tarea: si el número dado es 0, entonces devuelve un 0, si es positivo, devuelve un 1 y si es negativo devuelve un -1.





algoritmo Signos

var

   entero: a, b, c

   real: x, y, z

inicio

   x <- 5.4

   a <- signo(x)

   y <- 0

   b <- signo(y)

   z <- 7.89

   c <- signo (z - 9)

   escribir ("Las respuestas son " + a +" " + b + " " + c)

fin



entero función signo (real x)

var

   entero: s

inicio

   si x = 0 entonces s <- 0

   si x > 0 entonces s <- 1

   si x < 0 entonces s <- -1

   devolver (s)

fin_función





En este ejemplo, la variable s, declarada dentro de la función signo, es local y accesible únicamente dentro de ese procedimiento.



Es importante comprender el concepto de ámbito de variables dado que muchos de los errores de programación se dan por no considerar correctamente la accesibilidad que tendrá una variable en un determinado programa.



PASO DE ARGUMENTOS POR VALOR



Cuando un programa llama a un subprograma, la información se comunica a través de una lista de parámetros o argumentos. La forma más común para realizar este paso de información es utilizando una correspondencia posicional, es decir, que los valores de los parámetros se asignan en el mismo orden en que se pasan.



Por ejemplo, supongamos que tenemos un procedimiento definido del siguiente modo:



procedimiento division (entero dividendo, entero divisor)

...

...

fin_procedimiento



y una llamada a dicho procedimiento desde nuestro programa principal, expresada asi:



division(20, 5)



Los valores 20 y 5, pasados como parámetros al procedimiento división, se asignarán en el orden que se pasan. Es decir, la variable dividendo tomará el valor de 20 y divisor el valor de 5.



Existen diferentes métodos para la transmisión de parámetros a los subprogramas, entre los cuales se cuentan:

  • Paso por valor
  • Paso por referencia
  • Paso por nombre
  • Paso por resultado





Los dos primeros son los más frecuentes en la gran mayoría de los lenguajes de programación, por lo que nos vamos a enfocar a explicarlos a detalle.

Paso por Valor

Un parámetro es pasado por valor cuando lo que se le pasa al subprograma es una copia del valor de una variable, el cual recibe en una variable local al subprograma, de modo que cualquier operación realizada sobre dicho valor no afectará ni cambiará al valor original. Tomemos, por ejemplo, el siguiente algoritmo:



procedimiento cambiar(entero a, entero b)

var

   entero: aux

inicio

   aux <- a

   a <- b

   b <- aux

fin_procedimiento



algoritmo Paso_Por_Valor

var

   entero: a, b   

inicio

   a <- 5

   b <- 50

   escribir(a, b)

   cambiar(a, b)

   escribir(a,b)

fin



El algoritmo principal contiene dos variables, cuyos valores son 5 y 50, respectivamente. Luego invoca al procedimiento cambiar, el cual toma una copia de esos valores y los usa en sus operaciones internas. Dentro de dicho procedimiento, la variable a tomará el valor de 5 y la variable b tomará el valor de 50. Las operaciones del procedimiento tienen el objetivo de intercambiar dichos valores por lo que, una vez realizadas, las variables a y b tendrán los valores intercambiados. Pero dado que el procedimiento trabaja con una copia de los datos, las variables originales conservan sus mismos valores. Es decir, cuando volvamos a escribir en pantalla los valores de a y b, veremos los mismos valores que originalmente les asignamos.



Paso por referencia

Cuando pasamos parámetros por referencia, en realidad estamos pasando a un subprograma un indicador o apuntador que señala a la posición de memoria donde se almacena el valor de una variable, de modo que todas las operaciones que se hacen sobre dichos valores dentro del subprograma afectan y cambian a los mismos. En el paso por referencia no se pasa una copia de los datos, sino las referencias a los datos originales. Para indicar que un parámetro está siendo pasado por referencia, utilizamos la palabra reservada var delante de cada uno de los argumentos que especifiquemos en la definición del subprograma.



Observa el ejemplo anterior pero ahora modificado para recibir los parámetros por referencia:



procedimiento cambiar(var entero a, var entero b)

var

   entero: aux

inicio

   aux <- a

   a <- b

   b <- aux

fin_procedimiento



algoritmo Paso_Por_Valor

var

   entero: a, b   

inicio

   a <- 5

   b <- 50

   escribir(a, b)

   cambiar(a, b)

   escribir(a,b)

fin



Observa que hemos añadido la palabra reservada var delante de cada uno de los parámetros incluidos en la definición del procedimiento. En este caso, todas las operaciones que hacemos dentro del procedimiento cambiar están afectando directamente a los valores originales de a y b, por lo que al ejecutar la segunda instrucción escribir(a,b) del programa principal, veremos que a y b han intercambiado sus valores como resultado de la ejecución del subprograma.



Es importante resaltar que en ambos ejemplos usamos los mismos nombres para las variables tanto en el programa principal como en el procedimiento. Pero eso no siempre tiene que ser así. Si usamos nombres distintos para las variables, pero especificamos que estamos pasando los valores por referencia, las variables en el subprocedimiento apuntarán a las variables originales independientemente de su nombre.

El paso de parámetros más usual y por defecto es el paso por valor. Sin embargo, existen situaciones en las que el paso por referencia es más útil, como en aquellos casos en los que los parámetros contengan una cantidad demasiado grande de información (como un arreglo, de los cuales aprenderemos más adelante).




En el siguiente ejemplo definimos la función signo que realiza la siguiente tarea: si el número dado es 0, entonces devuelve un 0, si es positivo, devuelve un 1 y si es negativo devuelve un -1.





algoritmo Signos

var

   entero: a, b, c

   real: x, y, z

inicio

   x <- 5.4

   a <- signo(x)

   y <- 0

   b <- signo(y)

   z <- 7.89

   c <- signo (z - 9)

   escribir ("Las respuestas son " + a +" " + b + " " + c)

fin



entero función signo (real x)

var

   entero: s

inicio

   si x = 0 entonces s <- 0

   si x > 0 entonces s <- 1

   si x < 0 entonces s <- -1

   devolver (s)

fin_función





En este ejemplo, la variable s, declarada dentro de la función signo, es local y accesible únicamente dentro de ese procedimiento.



Es importante comprender el concepto de ámbito de variables dado que muchos de los errores de programación se dan por no considerar correctamente la accesibilidad que tendrá una variable en un determinado programa.



PASO DE ARGUMENTOS POR VALOR



Cuando un programa llama a un subprograma, la información se comunica a través de una lista de parámetros o argumentos. La forma más común para realizar este paso de información es utilizando una correspondencia posicional, es decir, que los valores de los parámetros se asignan en el mismo orden en que se pasan.



Por ejemplo, supongamos que tenemos un procedimiento definido del siguiente modo:



procedimiento division (entero dividendo, entero divisor)

...

...

fin_procedimiento



y una llamada a dicho procedimiento desde nuestro programa principal, expresada asi:



division(20, 5)



Los valores 20 y 5, pasados como parámetros al procedimiento división, se asignarán en el orden que se pasan. Es decir, la variable dividendo tomará el valor de 20 y divisor el valor de 5.



Existen diferentes métodos para la transmisión de parámetros a los subprogramas, entre los cuales se cuentan:
  • Paso por valor
  • Paso por referencia
  • Paso por nombre
  • Paso por resultado





Los dos primeros son los más frecuentes en la gran mayoría de los lenguajes de programación, por lo que nos vamos a enfocar a explicarlos a detalle.

Paso por Valor

Un parámetro es pasado por valor cuando lo que se le pasa al subprograma es una copia del valor de una variable, el cual recibe en una variable local al subprograma, de modo que cualquier operación realizada sobre dicho valor no afectará ni cambiará al valor original. Tomemos, por ejemplo, el siguiente algoritmo:



procedimiento cambiar(entero a, entero b)

var

   entero: aux

inicio

   aux <- a

   a <- b

   b <- aux

fin_procedimiento



algoritmo Paso_Por_Valor

var

   entero: a, b   

inicio

   a <- 5

   b <- 50

   escribir(a, b)

   cambiar(a, b)

   escribir(a,b)

fin



El algoritmo principal contiene dos variables, cuyos valores son 5 y 50, respectivamente. Luego invoca al procedimiento cambiar, el cual toma una copia de esos valores y los usa en sus operaciones internas. Dentro de dicho procedimiento, la variable a tomará el valor de 5 y la variable b tomará el valor de 50. Las operaciones del procedimiento tienen el objetivo de intercambiar dichos valores por lo que, una vez realizadas, las variables a y b tendrán los valores intercambiados. Pero dado que el procedimiento trabaja con una copia de los datos, las variables originales conservan sus mismos valores. Es decir, cuando volvamos a escribir en pantalla los valores de a y b, veremos los mismos valores que originalmente les asignamos.



Paso por referencia

Cuando pasamos parámetros por referencia, en realidad estamos pasando a un subprograma un indicador o apuntador que señala a la posición de memoria donde se almacena el valor de una variable, de modo que todas las operaciones que se hacen sobre dichos valores dentro del subprograma afectan y cambian a los mismos. En el paso por referencia no se pasa una copia de los datos, sino las referencias a los datos originales. Para indicar que un parámetro está siendo pasado por referencia, utilizamos la palabra reservada var delante de cada uno de los argumentos que especifiquemos en la definición del subprograma.



Observa el ejemplo anterior pero ahora modificado para recibir los parámetros por referencia:



procedimiento cambiar(var entero a, var entero b)

var

   entero: aux

inicio

   aux <- a

   a <- b

   b <- aux

fin_procedimiento



algoritmo Paso_Por_Valor

var

   entero: a, b   

inicio

   a <- 5

   b <- 50

   escribir(a, b)

   cambiar(a, b)

   escribir(a,b)

fin



Observa que hemos añadido la palabra reservada var delante de cada uno de los parámetros incluidos en la definición del procedimiento. En este caso, todas las operaciones que hacemos dentro del procedimiento cambiar están afectando directamente a los valores originales de a y b, por lo que al ejecutar la segunda instrucción escribir(a,b) del programa principal, veremos que a y b han intercambiado sus valores como resultado de la ejecución del subprograma.


Es importante resaltar que en ambos ejemplos usamos los mismos nombres para las variables tanto en el programa principal como en el procedimiento. Pero eso no siempre tiene que ser así. Si usamos nombres distintos para las variables, pero especificamos que estamos pasando los valores por referencia, las variables en el subprocedimiento apuntarán a las variables originales independientemente de su nombre.

El paso de parámetros más usual y por defecto es el paso por valor. Sin embargo, existen situaciones en las que el paso por referencia es más útil, como en aquellos casos en los que los parámetros contengan una cantidad demasiado grande de información (como un arreglo, de los cuales aprenderemos más adelante).




ACTIVIDAD

Ejemplo de donde se analizan las funciones internas, asociándola con la definición matemática de función.

FUNCIONES INTERNAS:

Son funciones matemáticas diferentes de las operaciones básicas pero que se incorporan al lenguaje y que se consideran estándar. Dependen del lenguaje. Normalmente se encuentran en la librería de matemáticas del lenguaje de programación.

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfePPj5SHUSSYvE1MlIfwY9rpBmCcfdPpirlq_2_pdMfAZ4d8XiRHsOmC_HQ7fE1XCfoMZ-s_TQkuTzVVRiLSHnV-OG5609tZUWlJgLQ00V9zqAPcX0Zjexz-ZWOgzeamSyPu3Tlt3ZHo/s1600/funciones+internas.JPG

Veamos ahora cómo usar estas funciones para traducir a expresiones algorítmicas una de las fórmulas matemáticas más conocidas: la fórmula general para resolver ecuaciones de segundo grado (sí recuerdan sus matemáticas de secundaria, ¿verdad?):



https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDOXH9C0Ukxw_4bO4VYScR4n6SvJgo2GPVUV1-yVQWNDAP1ZUUKfMIUnnLF0bKJG9A_Xz3PhVz5XGg4vGxuFPVR3lgSji0CG58O7RgvQv4JzM_lD5npj6Ebyuov8xW0qcTeoRRSqpZ3GI/s1600/general.png



O lo que es lo mismo:

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiEe2PWTfDAIUGu1h0etO-Q-w5zikAGEZ1RJN930K7mabgMYKmYR3huq6mWlFlaKHuxFrpYNRWwmPnHTV5X-Kr-h6siMZZG-k8CF5vyOQcZXtV5MAmujXZILsDTXZSgfwBHmFeWmj4H1g/s1600/general1.png





https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqVbNQyalKAH7e3UzTa5pEKJxoIQOR_4LCp4KL2pqYHd4gEOk8hK2NiL5HMcAVnShHUfWSOwuqk3zfSSYPGnpHTLhhnbEsehK94zQakRERo9ASV0k_4K7aIcj9fBRGvSRZFDCXhISLXSA/s1600/general2.png

Estas fórmulas, traducidas a expresiones algorítmicas quedarían así:



x1 = (-b + raiz2(cuadrado(b) - 4 * a * c)) / (2 * a)

x1 = (-b - raiz2(cuadrado(b) - 4 * a * c)) / (2 * a)


Dos ejemplos de ejercicios de programación donde se analizan la diferencia entre el paso por valor y paso por referencia

Programación en c

El "Hola Mundo"

#include<stdio.h>



intmain (intargc,char **argv)

{

printf("Hola mundo\n");

return 0;

}

Nota: este programa está tomado del Dominio Público



$ ./holamundo

Hola Mundo

$

El "Hola Mundo" comentado

[Contexto]



/* Inclusión de archivos */

#include<stdio.h>



/* Función principal */

intmain (intargc,char **argv)

{

   /* Impresión por pantalla y salida del programa*/

printf("Hola mundo\n");

return 0;

}

$ ./holamundoc

Hola Mundo

$

El "Hola Mundo" estructurado en funciones

[Contexto]



/*

holamundo.c



(c) Envite, 2004

para el wikilibro "Programación en C (fundamentos)"

bajo licencia FDL, adaptado del Dominio Público

*/



#include<stdio.h> /*Necesario para la función printf()*/



voidholamundo(void) /*Función donde se ejecuta la lógica del programa*/

{

printf("Hola Mundo\n"); /*imprime la cadena*/

return; /*sale de la función*/

}



intmain(void) /*Función principal del programa*/

{

holamundo(); /*llamada a la función que lleva el peso*/

return(0); /*sale del programa: correcto*/

}



$ ./holamundof

Hola mundo

$


Programacipascal
Ejemplo lenguaje Pascal
Hola Mundo

Un sencillo ejemplo del programa Hola Mundo:



PROGRAM HolaMundo (OUTPUT);

BEGIN

WriteLn('¡Hola Mundo!');

{ Es imprescindible añadir el carácter ";" tras el

último comando de un bloque.  Añadirlo hace que se

incluya un "elemento nulo" al programa. }

END.






2 comentarios:

  1. Dentro de la programación modular hay funciones que son instrucciones para obtener un resultado después de hacer un largo proceso a través de algoritmo.

    ResponderEliminar
  2. Es muy importante que la función modular es como un conjunto de instrucciones que permiten procesar las variables para obtener un resultado.

    ResponderEliminar

Nota: solo los miembros de este blog pueden publicar comentarios.