logo sinuh
 

Inicio arrow Conocimiento arrow Curso de programación en C desde cero arrow Entrega 12. Funciones (I).
Entrega 12. Funciones (I). Imprimir
Por Luis García Galván   
sábado, 03 mar 2007 10:51

CURSO DESDE 0 DE PROGRAMACIÓN C BAJO GNU/LINUX.


Entrega 12. Funciones (I).


 

Comenzamos con las soluciones.


Ya estamos de nuevo, y vamos a empezar con una cita a una parte de la entrega anterior:


Ya nos despedimos hasta la próxima semana, y quedamos como tarea que hagáis un ejemplo práctico con 'continue' , aunque sé de sobra que no me mandareis ninguno para que os lo corrija y lo publique en la próxima entrega, pero quién sabe, lo mismo un día me dais una sorpresa.”


Pues bien, se ve que de esta forma he conseguido despertar vuestra aportación. En concreto me han mandado dos soluciones y voy a poner ambas según el orden de llegada.


La primera nos la manda Josep Subirana Oller que nos propone el siguiente ejemplo:


#include <stdio.h>
#define SALTO_LINEA '\n'

void main(void)
{
  int x,y;
  y = 100;

  for(x = 0; x<=y; x++)
    {
      if(x%2 != 0)
      continue;

      printf("Valores pares encontrados %d %c", x, SALTO_LINEA);
    }
}


De ejecución:


sol_12_1.c: In function 'main':

sol_12_1.c:5: warning: return type of 'main' is not 'int'

matados2k@imperio:~/curso programacion$ ./sol_12_1

Valores pares encontrados 0

Valores pares encontrados 2

[..Salida recortada..]

Valores pares encontrados 98

Valores pares encontrados 100

matados2k@imperio:~/curso programacion$


La segunda nos la manda Pedigree:


#include <stdio.h>

void main(){

//Supersticioso
int x=1;
for (x=1; x<=100; x++)
  {
    if (x == 13)
      {
        printf ("XX \n");
        continue;
      }
    printf ("%d \n", x);
  }
}


De ejecución:


matados2k@imperio:~/curso programacion$ cc -o sol_12_2 sol_12_2.c

sol_12_2.c: In function 'main':

sol_12_2.c:3: warning: return type of 'main' is not 'int'

matados2k@imperio:~/curso programacion$ ./sol_12_2

1

2

[...]

11

12

XX

14

15

[...]

99

100

matados2k@imperio:~/curso programacion$


Ambos son muy buenos ejemplos del uso de 'continue', así que muchas gracias por vuestras aportaciones.


Programación estructurada y programación modular.


De momento la programación que estamos haciendo nosotros es una programación estructurada. Y como en la wikipedia lo explican muy bien, vamos a utilizar su información:


La programación estructurada es una forma de escribir programación de ordenador de forma clara, para ello utiliza únicamente tres estructuras: secuencial, selectiva e iterativa; siendo innecesario y no permitiéndose el uso de la instrucción o instrucciones de transferencia incondicional ( GOTO ).


De hecho esto es lo que hemos visto hasta ahora, ver cómo se ejecutan instrucciones unas tras otras (secuencial), ver cómo elegimos la ejecución de un fragmento u otro (selectiva) y ver cómo ejecutar una y otra vez una parte (iterativa).


Con la programación estructurada, elaborar programas de computador sigue siendo una labor que demanda esfuerzo, creatividad, habilidad y cuidado. Sin embargo, con este estilo podemos obtener las siguientes ventajas:

  1. Los programas son más fáciles de entender, ya que puede ser leído de forma secuencial, sin necesidad de hacer seguimiento a saltos de línea (GOTO) dentro de bloques de código para entender la lógica.

  2. La estructura del programa es más clara, puesto que las instrucciones están más ligadas o relacionadas entre sí.

  3. Reducción del esfuerzo en las pruebas. El seguimiento de los fallos ("debugging") se facilita debido a la lógica más visible, por lo que los errores se pueden detectar y corregir más fácilmente.

  4. Reducción de los costos de mantenimiento.

  5. Programas más sencillos y más rápidos.

  6. Los bloques de código son auto explicativos, lo que apoya a la documentación.


Pero esto también trae sus inconvenientes. El principal inconveniente de este método de programación es que se obtiene un único bloque de programa, que cuando se hace demasiado grande puede resultar problemático en su manejo. Esto se resuelve empleando la programación modular, definiendo módulos interdependientes programados y compilados por separado.


Pero ¿Qué es la programación modular? (Una muy buena explicación sacada de http://teleformacion.edu.aytolacoruna.es/PASCAL/document/modular.htm)


Uno de los métodos más conocidos para resolver un problema es dividirlo en problemas más pequeños, llamados subproblemas. De esta manera, en lugar de resolver una tarea compleja y tediosa, resolvemos otras más sencillas y a partir de ellas llegamos a la solución. Esta técnica se usa mucho en programación ya que programar no es más que resolver problemas, y se le suele llamar diseño descendente, metodología del divide y vencerás o programación top-down.

Es evidente que si esta metodología nos lleva a tratar con subproblemas, entonces también tengamos la necesidad de poder crear y trabajar con subprogramas para resolverlos. A estos subprogramas se les suele llamar módulos, de ahí viene el nombre de programación modular.”

Entonces antes de aprender como programar de forma modular debemos aprender a crear esos subprogramas que van a resolver nuestros subproblemas y para eso usaremos las funciones. Los módulos no son más que agrupaciones lógicas de funciones que separaremos en distintos ficheros y esto es cosa que veremos más adelante. Todavía nos queda mucho del lenguaje C que aprender.


Procedimientos y funciones.


Muchos de vosotros si ya sabéis programar en otros lenguajes sabréis que que existen dos herramientas que nos ayudan a programar modularmente, estas son los procedimientos y las funciones.


Ambas agrupan un conjunto de instrucciones bajo el nombre de una pseudo instrucción, la diferencia entre una forma y otra es que las funciones devuelven un valor para ser utilizado dentro de una expresión y los procedimientos no.


Pero en C sólo existen las funciones, lo cual no quiere decir que no se puedan hacer procedimientos. De hecho un procedimiento en C será una función que devuelve un 'void'.


Pero además C, como muchos otros lenguajes, distinguen entre la declaración de una función y su definición.


La declaración de una función no es más que la especificación de su nombre, el tipo de sus parámetros y el tipo de valor que devuelve. Y por si alguien se pierde, un parámetro es una variable que se le pasa a una función.


Y la definición incluye todo lo anterior más la secuencia de instrucciones que forman el cuerpo de la función.


¿Estás perdido a estas alturas?


No tengas miedo si no consigues asimilar toda esta importante teoría, como plago todas las entregas de ejemplos terminarás asimilando sin darte cuenta, así que no te rindas y sigue prestando atención al curso.


Mi filosofía es enseñar las cosas, el porqué de las cosas y cómo deben hacerse las cosas. Una cosa es saber cómo se programa y otra distinta es saber programar y ser un buen programador. Así que despacito, buena letra y paciencia con los tostones teóricos. Intentemos que estos supositorios entren de la forma más suave posible.


Definición de una función.


Para más puñeta resulta que se pueden usar dos sintaxis para definir una función: una definida por Kernighan y Ritchie, y otra definida por el estándar ANSI. Nosotros, como todo el mundo, vamos a usar la que define el estándar ANSI, aunque aprendamos las dos.


La sintaxis de K&R es la siguiente:


    tipo_resultado nombre_función (parámetro_1, parámetro_2, ...,parámetro_N)

    tipo_parámetro_1 parámetro_1;

    tipo_parámetro_2 parámetro_2;

    ....

    tipo_parámetro_N parámetro_N;

    {

      Cuerpo de la función;

    }


La sintaxis establecida por el estándar ANSI es la siguiente:


    tipo_resultado nombre_función (tipo_parámetro_1 parámetro_1, tipo_parámetro_2 parámetro_2, ... ,tipo_parámetro_N parámetro_N)

    {

      Cuerpo de la función;

    }

Despedida.


En la próxima entrega veremos cada uno de los elementos de estas definiciones, como son el resultado, el nombre, los parámetros y los valores devueltos, y si nos da tiempo veremos cómo se declaran las funciones. Así que nos os puedo poner ejercicios aún para la próxima semana ni os puedo poner un ejemplo de cada una de las sintaxis. Hasta la semana que viene.


Agradecimientos:

· Revisión del documento: Karuchi (Carolina García).



Página oficial y dominio de mi propiedad http://matados2k.es

Matados'2k Usuario y moderador de www.sinuh.org

Matados'2k Moderador de foro.noticias3d.com


matados2k (arroba) gmail (punto) com


Este documento está sometido a la licencia de creative commons en su variante “Reconocimiento-NoComercial-SinObraDerivada 2.1 España” . Es de agradecer que se comunique al autor el uso de este documento en otro medio y se debe incluir de forma obligatoria este recuadro y los agradecimientos.

 

Comentario[s]

Sólo los usuarios registrados pueden escribir comentarios.
Por favor valídate o regístrate.

Powered by AkoComment 2.0!




© 2002-2005 SINUH - Comunidad GNU/Linux de Extremadura
Este portal utiliza Mambo
DHTML / JavaScript Tree by TwinHelix Designs

Para contactar con nosotros envía un correo a
info
Licencia Creative Commons
Los contenidos de este portal, salvo indicación en contra, están sujetos a una licencia de Creative Commons.

Los logotipos y marcas que aparecen son propiedad de sus respectivos dueños.

Las opiniones y declaraciones de las personas reflejadas en los foros y comentarios son propiedad y responsabilidad de sus autores, no identificando la opinión de SINUH y excluyendo de cualquier responsabilidad a esta asociación.
Ahora 9 visitantes
Advertisement