Búsqueda personalizada
Artículos de Carlos Pes
 Inicio Artículos > Artículo 3

¿Cómo se diseña un algoritmo?

En programación, un algoritmo establece, de manera genérica e informal, la secuencia de pasos o acciones que resuelve un determinado problema y, para representarlo, se utiliza, fundamentalmente, dos tipos de notación: pseudocódigo y diagramas de flujo.

Así pues, en este artículo, voy a explicar, con un ejemplo, los pasos que "mentalmente" se pueden seguir para diseñar el algoritmo, en Pseudocódigo CEE (C En Español) y ordinograma, de un programa que dé solución a un problema de programación.

En concreto, vamos a ver, desmenuzadamente, cómo se puede diseñar el algoritmo para resolver el ejercicio 1, "Media aritmética de números introducidos", de la sección Repetitiva hacer...mientras del listado de ejercicios de programación resueltos en diferentes lenguajes.

De forma que, los pasos a seguir son los siguientes:


(Paso 1)

Comprender qué es lo que se nos está pidiendo. En este caso, el enunciado del ejercicio es:


"Diseñe el algoritmo de un programa que:

1º) Pida por teclado un número (dato entero).
2º) Muestre por pantalla los mensajes:
  • Ha introducido <cantidad_de_números> número(s)
  • La suma es <suma>
3º) Pregunte al usuario si desea introducir otro o no.
4º) Repita los pasos 1º, 2º y 3º, mientras que, el usuario no responda 'n' de (no).
5º) Muestre por pantalla la media aritmética (dato real) de los números introducidos.

Nota: Utilice un bucle hacer...mientras."

 

En pantalla:

Introduzca un número entero: 3
Ha introducido 1 número(s)
La suma es 3

¿Desea introducir otro (s/n)?: s
Introduzca un número entero: 7
Ha introducido 2 número(s)
La suma es 10

¿Desea introducir otro (s/n)?: s
Introduzca un número entero: 6
Ha introducido 3 número(s)
La suma es 16

¿Desea introducir otro (s/n)?: s
Introduzca un número entero: 13
Ha introducido 4 número(s)
La suma es 29


¿Desea introducir otro (s/n)?: n
La media aritmética es 7.25

 

Introduzca un número entero: 8
Ha introducido 1 número(s)
La suma es 8

¿Desea introducir otro (s/n)?: n
La media aritmética es 8.000000

 

Simplemente, al leer el enunciado del problema, ya podemos hacernos una idea de algunas características importantes del algoritmo que vamos a diseñar:
Introduzca un número entero:
Ha introducido X número(s)
La suma es Y
¿Desea introducir otro (s/n)?:
La media aritmética es Z
Introduzca un número entero:

y, otra, para recoger un dato de tipo carácter después de mostrar por pantalla:

¿Desea introducir otro (s/n)?:
  • En algún momento, se deberá calcular:
la cantidad de números introducidos,
la suma de los mismos y
la media aritmética de dichos números,

por tanto, seguramente, emplearemos 2 ó 3 instrucciones de asignación.
  • Tendremos que utilizar varias variables para:
recoger el o los números que introduzca el usuario por teclado (numero),
contar los números introducidos (contador),
almacenar la suma de dichos números (acumulador),
preguntar al usuario si desea introducir otro número o no (seguir),
¿calcular la media aritmética (media_aritmetica)?
  • Necesitaremos un bucle para que el usuario pueda introducir los números que desee (solamente uno o más), de hecho, ya se nos especifica, en la "Nota" del enunciado, que debemos hacer uso de un bucle hacer...mientras.
En los pasos siguientes, vamos a ver cómo combinar los elementos detectados e integrarlos en la estructura de un algoritmo. No obstante, lo vamos a hacer, poco a poco, a medida que vayamos construyendo dicho algoritmo.


(Paso 2)

Escribir la estructura básica del algoritmo en pseodocódigo:

 algoritmo Media_aritmetica_de_numeros_introducidos

 inicio

    ...

 fin

Obsérvese que, ya podemos nombrar al algoritmo mediante un identificador, en este caso, podemos escribir:

Media_aritmetica_de_numeros_introducidos

En ordinograma, comenzaremos escribiendo el inicio y fin del cuerpo:

Ejemplo ordinograma paso 2


(Paso 3)

Según se nos indica en el primer punto del ejercicio, el algoritmo debe:

1º) Pedir por teclado un número (dato entero).

Mostrándose por pantalla:

Introduzca un número entero: <número>

Por consiguiente, en el algoritmo hay que escribir una instrucción de salida y otra de entrada. En pseudocódigo:

 algoritmo Media_aritmetica_de_numeros_introducidos

 inicio

    escribir( "Introduzca un número entero: " )
    leer( numero )
    ...

 fin

Se tiene que declarar la variable 
numero, así escribimos:

 algoritmo Media_aritmetica_de_numeros_introducidos

 variables
    entero numero


 inicio

    escribir( "Introduzca un número entero: " )
    leer( numero )
    ...

 fin

En ordinograma:

Ejemplo ordinogram paso 3

Recordemos que, en los ordinogramas no se representa la declaración de variables.



(Paso 4)

A continuación, en el segundo punto del ejercicio se nos indica que:

2º) El programa debe mostrar por pantalla los mensajes:
  • Ha introducido <cantidad_de_números> número(s)
  • La suma es <suma>
De modo que, incorporamos dos nuevas instrucciones de salida al algoritmo, en las que vamos a mostrar el valor de una variable contador para mostrar la cantidad de números introducidos por el usuario y, por otra parte, el valor de una variable acumulador, para mostrar la suma de dichos números. En pseudocódigo:

 algoritmo Media_aritmetica_de_numeros_introducidos

 variables
    entero numero


 inicio

    escribir( "Introduzca un número entero: " )
    leer( numero )
    ...

    escribir( "Ha introducido ",
contador, " número(s)" )
    escribir( "La suma es ", acumulador )
    ...

 fin

Y declaramos las nuevas variables: 
contadoracumulador.

 algoritmo Media_aritmetica_de_numeros_introducidos

 variables
    entero acumulador, contador, numero


 inicio

    escribir( "Introduzca un número entero: " )
    leer( numero )
    ...

    escribir( "Ha introducido ",
contador, " número(s)" )
    escribir( "La suma es ", acumulador )
    ...

 fin

En ordinograma:

Ejemplo ordinograma paso 4

Pero, ¿qué valores tienen las variables
contadoracumulador? Inicialmente, almacenarán un cero (0) cada una de ellas y, después de leer un número, habrá que incrementar el valor de contador en uno (1) y sumar el valor de dicho número a acumulador.

 algoritmo Media_aritmetica_de_numeros_introducidos

 variables
    entero acumulador, contador, numero


 inicio
    acumulador  0
    contador  0

    escribir( "Introduzca un número entero: " )
    leer( numero )

    acumulador  acumulador + numero
    contador  contador + 1

   
escribir( "Ha introducido ",
contador, " número(s)" )
    escribir( "La suma es ", acumulador )
    ...

 fin

En ordinograma:


Ejemplo ordinograma paso 4


(Paso 5)

Atendiendo al tercer punto del ejercicio:

3º) Preguntar al usuario si desea introducir otro número o no.

al algoritmo le añadimos una nueva instrucción de salida, otra de entrada y declaramos una nueva variable (seguir). En pseudocódigo:

 algoritmo Media_aritmetica_de_numeros_introducidos

 variables
    caracter seguir
      entero acumulador, contador, numero

 inicio
    acumulador  0
    contador  0

    escribir( "Introduzca un número entero: " )
    leer( numero )

    acumulador  acumulador + numero
    contador  contador + 1

   
escribir( "Ha introducido ",
contador, " número(s)" )
    escribir( "La suma es ", acumulador )

    escribir( "¿Desea introducir otro número (s/n)?: " )
    leer( seguir )

    ...

 fin

En ordinograma:

Ejemplo ordinograma paso 5


(Paso 6)

Teniendo en cuenta el cuarto punto del ejercicio:

4º) Repetir los pasos 1º, 2º y 3º, mientras que, el usuario no responda 'n' de (no).

es necesario hacer uso de una instrucción de control repetitiva que, como se especifica en la "Nota" del ejercicio, será un bucle hacer...mientras. En cualquier caso, también podríamos habernos hecho las preguntas del apartado 10.3 Repetitiva para del Curso de Diseño de Algoritmos acerca de cuándo usar un bucle u otro:
  • ¿Se conoce, de antemano, el número de veces (iteraciones) que tiene que ejecutarse un determinado bloque de instrucciones? No, por tanto, descartamos el bucle para.
  • ¿El bloque de instrucciones debe ejecutarse al menos una vez? , de forma que, optamos por hacer uso de un bucle hacer...mientras.
En pseudocódigo:

 algoritmo Media_aritmetica_de_numeros_introducidos

 variables
    caracter seguir
      entero acumulador, contador, numero

 inicio
    acumulador  0
    contador  0

    hacer
      escribir( "Introduzca un número entero: " )
      leer( numero )

      acumulador  acumulador + numero
      contador  contador + 1

     
escribir( "Ha introducido ",
contador, " número(s)" )
      escribir( "La suma es ", acumulador )

      escribir( "¿Desea introducir otro número (s/n)?: " )
      leer( seguir )

    mientras ( seguir <> 'n' )
    ...

 fin

Fíjese que, la inicialización de las variables 
contadoracumulador no están dentro del bloque de instrucciones del bucle, ya que, ello provocaría un error de lógica.

En ordinograma:

Ejemplo ordinograma paso 6


(Paso 7)

Y, finalmente, para el quinto punto:

5º) Mostrar por pantalla la media aritmética (dato real) de los números introducidos.

añadimos una última instrucción. En pseudocódigo:

 algoritmo Media_aritmetica_de_numeros_introducidos

 variables
    caracter seguir
      entero acumulador, contador, numero

 inicio
    acumulador  0
    contador  0

    hacer
      escribir( "Introduzca un número entero: " )
      leer( numero )

      acumulador  acumulador + numero
      contador  contador + 1

     
escribir( "Ha introducido ",
contador, " número(s)" )
      escribir( "La suma es ", acumulador )

      escribir( "¿Desea introducir otro número (s/n)?: " )
      leer( seguir )

    mientras ( seguir <> 'n' )

    escribir( "La media aritmética es ", acumulador / contador )

 fin

Nótese que, para mostrar la media aritmética no hemos utilizado una nueva variable y, de esta forma, también nos ahorramos escribir una nueva instrucción de asignación:

   media_aritmética  acumulador / contador

En ordinograma, la solución final será:

Ejemplo ordinograma paso 7

Puede consultar la codificación de este algoritmo en lenguaje C y en Pascal
. No obstante, téngase en cuenta que en Pascal se hace uso del bucle repetir...hasta en vez de repetir...mientras. Para más información, puede consultar el Artículo 2 - Bucle Hacer...mientras versus Bucle Repetir...hasta.

Para cualquier sugerencia, comentario o error detectado, puede contactar con el autor.
 Páginas relacionadas con el artículo
· Listado de ejercicios de programación resueltos en diferentes lenguajes.
· Presentación resumen y soluciones a los Ejercicios Propuestos del libro EMPEZAR DE CERO A PROGRAMAR EN LENGUAJE C.
 A destacar
Cursos Ejercicios Libros Enlaces Recomendados
Curso Diseño de Algoritmos
Curso Informática Básica
Curso Ingeniería del Software
Curso Marketing en Internet
Curso Lenguaje C
Curso Turbo Pascal
Curso Representación Datos
Ejercicios de Algoritmos
Ejercicios de Lenguaje C
Ejercicios de Ordinogramas
Ejercicios de Pascal
Empezar de cero a programar en lenguaje C
Domine la programación en lenguaje C
Empezar de cero a programar en Pascal
Aede business school
Búsqueda personalizada
 Más Webs Interesantes
© 2006-2008 CarlosPes.com