Vous êtes sur la page 1sur 14

Cmo se Disea un Algoritmo?

En programacin, un algoritmo establece, de manera genrica e informal, la secuencia de pasos o


acciones que resuelve un determinado problema y, para representarlo, se utiliza,
fundamentalmente, dos tipos de notacin: pseudocdigo y diagramas de flujo.

As pues, en este artculo, voy a explicar, con un ejemplo, los pasos que "mentalmente" se pueden
seguir para disear el algoritmo, en Pseudocdigo CEE (C En Espaol) y ordinograma, de un
programa que d solucin a un problema de programacin.

En concreto, vamos a ver, desmenuzadamente, cmo se puede disear el algoritmo para resolver
el ejercicio 1, "Media aritmtica de nmeros introducidos", de la seccin
Repetitivahacer...mientras del listado de ejercicios de programacin resueltos en diferentes
lenguajes.

De forma que, los pasos a seguir (siete en este caso) son los siguientes:

Paso 1

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

"Disee el algoritmo de un programa que:

1) Pida por teclado un nmero (dato entero).


2) Muestre por pantalla los mensajes:

* Ha introducido <cantidad_de_nmeros> nmero(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 aritmtica (dato real) de los nmeros introducidos.

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

En pantalla:

Introduzca un nmero entero: 3


Ha introducido 1 nmero(s)
La suma es 3

Desea introducir otro (s/n)?: s


Introduzca un nmero entero: 7
Ha introducido 2 nmero(s)
La suma es 10
Desea introducir otro (s/n)?: s
Introduzca un nmero entero: 6
Ha introducido 3 nmero(s)
La suma es 16

Desea introducir otro (s/n)?: s


Introduzca un nmero entero: 13
Ha introducido 4 nmero(s)
La suma es 29

Desea introducir otro (s/n)?: n


La media aritmtica es 7.25

Introduzca un nmero entero: 8


Ha introducido 1 nmero(s)
La suma es 8

Desea introducir otro (s/n)?: n


La media aritmtica es 8.000000

Simplemente, al leer el enunciado del problema, ya podemos hacernos una idea de algunas
caractersticas importantes del algoritmo que vamos a disear:

* Exiten 5 instrucciones de salida para mostrar por pantalla:

Introduzca un nmero entero:


Ha introducido X nmero(s)
La suma es Y
Desea introducir otro (s/n)?:
La media aritmtica es Z

* Exiten 2 instruccciones de entrada. Una para recoger un dato nmerico entero despus de
mostrar por pantalla:

Introduzca un nmero entero:

y, otra, para recoger un dato de tipo carcter despus de mostrar por pantalla:

Desea introducir otro (s/n)?:

* En algn momento, se deber calcular:

la cantidad de nmeros introducidos,


la suma de los mismos y
la media aritmtica de dichos nmeros,

por tanto, seguramente, emplearemos 2 3 instrucciones de asignacin.


* Tendremos que utilizar varias variables para:

recoger el o los nmeros que introduzca el usuario por teclado (numero),


contar los nmeros introducidos (contador),
almacenar la suma de dichos nmeros (acumulador),
preguntar al usuario si desea introducir otro nmero o no (seguir),
calcular la media aritmtica (media_aritmetica)?

* Necesitaremos un bucle para que el usuario pueda introducir los nmeros que desee (solamente
uno o ms), 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 cmo 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 bsica del algoritmo en pseudocdigo:

algoritmo Media_aritmetica_de_numeros_introducidos

inicio

...

fin

Obsrvese 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:

Paso 3

Segn se nos indica en el primer punto del ejercicio, el algoritmo debe:

1) Pedir por teclado un nmero (dato entero).


Mostrndose por pantalla:

Introduzca un nmero entero: <nmero>

Por consiguiente, en el algoritmo hay que escribir una instruccin de salida y otra de entrada. En
pseudocdigo:

algoritmo Media_aritmetica_de_numeros_introducidos

inicio

escribir( "Introduzca un nmero 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 nmero entero: " )


leer( numero )
...

fin

En ordinograma:
Recordemos que, en los ordinogramas no se representa la declaracin de variables.

Paso 4

A continuacin, en el segundo punto del ejercicio se nos indica que:

2) El programa debe mostrar por pantalla los mensajes:

* Ha introducido <cantidad_de_nmeros> nmero(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 nmeros introducidos por el
usuario y, por otra parte, el valor de una variable acumulador, para mostrar la suma de dichos
nmeros. En pseudocdigo:

algoritmo Media_aritmetica_de_numeros_introducidos

variables
entero numero

inicio

escribir( "Introduzca un nmero entero: " )


leer( numero )
...

escribir( "Ha introducido ", contador, " nmero(s)" )


escribir( "La suma es ", acumulador )
...

fin

Y declaramos las nuevas variables: contador y acumulador.

algoritmo Media_aritmetica_de_numeros_introducidos

variables
entero acumulador, contador, numero

inicio

escribir( "Introduzca un nmero entero: " )


leer( numero )
...

escribir( "Ha introducido ", contador, " nmero(s)" )


escribir( "La suma es ", acumulador )
...

fin

En ordinograma:
Pero, qu valores tienen las variables contador y acumulador? Inicialmente, almacenarn un cero
(0) cada una de ellas y, despus de leer un nmero, habr que incrementar el valor de contador en
uno (1) y sumar el valor de dicho nmero a acumulador.

algoritmo Media_aritmetica_de_numeros_introducidos

variables
entero acumulador, contador, numero

inicio
acumulador 0
contador 0

escribir( "Introduzca un nmero entero: " )


leer( numero )

acumulador acumulador + numero


contador contador + 1

escribir( "Ha introducido ", contador, " nmero(s)" )


escribir( "La suma es ", acumulador )
...

fin

En ordinograma:
Paso 5

Atendiendo al tercer punto del ejercicio:

3) Preguntar al usuario si desea introducir otro nmero o no.

al algoritmo le aadimos una nueva instruccin de salida, otra de entrada y declaramos una nueva
variable (seguir).

En pseudocdigo:

algoritmo Media_aritmetica_de_numeros_introducidos

variables
caracter seguir
entero acumulador, contador, numero

inicio
acumulador 0
contador 0

escribir( "Introduzca un nmero entero: " )


leer( numero )

acumulador acumulador + numero


contador contador + 1

escribir( "Ha introducido ", contador, " nmero(s)" )


escribir( "La suma es ", acumulador )

escribir( "Desea introducir otro nmero (s/n)?: " )


leer( seguir )
...

fin

En ordinograma:
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 instruccin de control repetitiva que, como se especifica en la "Nota"
del ejercicio, ser un bucle hacer...mientras. En cualquier caso, tambin podramos habernos
hecho las preguntas del apartado Cundo usar un bucle u otro? del Curso de Diseo de
Algoritmos:

* Se conoce, de antemano, el nmero 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? S, de forma que, optamos por
hacer uso de un bucle "hacer...mientras".

En pseudocdigo:

algoritmo Media_aritmetica_de_numeros_introducidos

variables
caracter seguir
entero acumulador, contador, numero

inicio
acumulador 0
contador 0

hacer
escribir( "Introduzca un nmero entero: " )
leer( numero )

acumulador acumulador + numero


contador contador + 1

escribir( "Ha introducido ", contador, " nmero(s)" )


escribir( "La suma es ", acumulador )

escribir( "Desea introducir otro nmero (s/n)?: " )


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

fin

Fjese que, la inicializacin de las variables contador y acumulador no estn dentro del bloque de
instrucciones del bucle, ya que, ello provocara un error de lgica.

En ordinograma:
Paso 7

Y, finalmente, para el quinto punto:

5) Mostrar por pantalla la media aritmtica (dato real) de los nmeros introducidos.

aadimos una ltima instruccin. En pseudocdigo:

algoritmo Media_aritmetica_de_numeros_introducidos

variables
caracter seguir
entero acumulador, contador, numero

inicio
acumulador 0
contador 0

hacer
escribir( "Introduzca un nmero entero: " )
leer( numero )

acumulador acumulador + numero


contador contador + 1

escribir( "Ha introducido ", contador, " nmero(s)" )


escribir( "La suma es ", acumulador )

escribir( "Desea introducir otro nmero (s/n)?: " )


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

escribir( "La media aritmtica es ", acumulador / contador )


fin

Ntese que, para mostrar la media aritmtica no hemos utilizado una nueva variable y, de esta
forma, tambin nos ahorramos escribir una nueva instruccin de asignacin:

media_aritmtica acumulador / contador

En ordinograma, la solucin final ser:


Puede consultar la codificacin de este algoritmo en lenguaje C y en Pascal. No obstante, tngase
en cuenta que en Pascal se hace uso del bucle "repetir...hasta" en vez de "repetir...mientras".

Si le ha gustado este artculo y desea incluirlo en su sitio web, puede hacerlo sin ningn problema,
siempre y cuando cite como fuente del mismo a www.carlospes.com

Vous aimerez peut-être aussi