Está en la página 1de 19

Tema 1: Análisis y Diseño de un problema.

ÍNDICE

1. ANÁLISIS, DISEÑO Y DESARROLLO DE UN PROBLEMA 2


2. ALGORITMO 2
2.1. Descripción narrada ................................................................................................................................ 2
2.2. Diagrama de flujo.................................................................................................................................... 3
2.3. Pseudocódigo............................................................................................................................................. 6
2.4. Ejemplos ..................................................................................................................................................... 7
2.4.1. Hacer llamada telefónica 8

2.4.2. Suma de dos números 8

2.4.3. Área de un triángulo 9


2.4.4. Mayor de dos números 9

3. PROGRAMA 10
3.1. Programación estructurada ................................................................................................................ 10
3.2. Programación modular ...........................................................................................................................11

4. CODIFICACIÓN 11
5. LENGUAJE DE PROGRAMACIÓN 11
5.1. Por nivel .....................................................................................................................................................11
5.1.1. Lenguajes de programación de bajo nivel 12

5.1.2. Lenguajes de programación de alto nivel 12

5.1.3. Diferencias entre lenguajes de bajo y alto nivel 13

5.2. Por la forma de ejecutarse ................................................................................................................ 13

6. TRADUCTOR 13
6.1. Compilador................................................................................................................................................ 14
6.2. Intérprete ............................................................................................................................................... 17
6.3. Comparativa ............................................................................................................................................ 19

7. CICLO DE VIDA DEL SOFTWARE 19

Encarnación Marín Caballero Página 1 de 19


Tema 1: Análisis y Diseño de un problema.

1. ANÁLISIS, DISEÑO Y DESARROLLO DE UN PROBLEMA

Análisis
Problema

Paso
Algoritmo
directo

Programa
Codificación

2. ALGORITMO
Un algoritmo es una secuencia ordenada de pasos. Este método para resolver problemas es
independiente del lenguaje de programación y del ordenador. Puede ser escrito en lenguaje natural.

El algoritmo debe ser finito y preciso (no ambiguo).


Dos aspectos importantes de los algoritmos son: diseño y eficiencia.

Hay tres métodos para describir algoritmos que son: descripción narrada, diagrama de flujo y
pseudocódigo.

2.1. Descripción narrada


La descripción narrada de un algoritmo es una secuencia finita de pasos (no instrucciones como
en los programas) no ambiguos que se pueden llevar a cabo en un tiempo finito para resolver un
problema.

Ejemplo: Cuando quiero ver una película de vídeo, podría hacer los siguientes pasos:

1) Elijo una película de las de mi colección.


2) Compruebo SI TV y vídeo están conectados a la red (y procedo).

3) SI la TV está apagada, la enciendo, SI NO, pues no. Y lo mismo con el vídeo.


4) Introduzco la película en el vídeo. Dejo el estuche sobre el vídeo.

5) SI la TV no está en el canal adecuado, la cambio, SI NO, pues no.


6) Cojo los mandos a distancia (el del TV y el del vídeo).
7) Me pongo cómodo.

8) Pulso PLAY en el mando del vídeo.

Fíjate bien en unos detalles que son fundamentales y que aparecen en este algoritmo:

 La descripción de cada paso no me lleva a ambigüedades, los pasos son absolutamente


explícitos y no inducen a error.

 El número de pasos es finito. Tienen un principio y un fin.

El lenguaje de este algoritmo está escrito en nuestro idioma, pero ahora necesitamos
acercarnos un poco más al lenguaje del ordenador. Pero el primer paso para realizar un programa es
sacar su algoritmo, que consiste en explicar lo que queremos que haga nuestro programa.

Encarnación Marín Caballero Página 2 de 19


Tema 1: Análisis y Diseño de un problema.

2.2. Diagrama de flujo


Un diagrama de flujo es una representación gráfica del algoritmo. Expresamos los pasos del
algoritmo mediante un esquema con unos símbolos establecidos.

Un diagrama de flujo debe proporcionar una información clara, ordenada y concisa de todos
los pasos a seguir.
Los símbolos que se usan para realizar los diagramas de flujo son los siguientes:

Las reglas para la construcción de un diagrama de flujo son:


1) Todos los símbolos han de estar conectados.
2) A un símbolo de proceso pueden llegarle varias líneas.

3) A un símbolo de decisión pueden llegarle varias líneas, pero sólo saldrán dos (Sí o No, Verdadero
o Falso).
4) A un símbolo de inicio nunca le llegan líneas.

5) De un símbolo de fin no parte ninguna línea.

Encarnación Marín Caballero Página 3 de 19


Tema 1: Análisis y Diseño de un problema.

Ejemplo 1: Un algoritmo para cocinar un huevo para otra persona sería:

1) Pregunto si quiere el huevo frito.

2) Si me dice que sí, lo frío, si me dice que no, lo hago hervido.

3) Una vez cocinado le pregunto si quiere sal en el huevo.


4) Si me dice que no, lo sirvo en el plato. Si me dice que sí, le hecho sal y después lo sirvo en el
plato.
Ahora que ya sabemos todos los pasos, mediante el algoritmo, podemos hacer un esquema con
estos pasos a seguir. Este esquema será el diagrama de flujo.

NOTA: Si uno tiene experiencia puede prescindir del algoritmo escrito, pero siempre
tendremos que tenerlo en mente para hacer el diagrama de flujo sin equivocarnos.

Ejemplo 2: Imaginemos que tenemos una lámpara o bombilla y queremos hacer un diagrama de
flujo para saber qué hacer cuando la lámpara no funciona.

Encarnación Marín Caballero Página 4 de 19


Tema 1: Análisis y Diseño de un problema.

Ejemplo 3: Imaginemos que queremos hacer un diagrama de flujo para activar el diodo LED si
se ha presionado el pulsador.

Ejemplo 4: Realiza un diagrama de flujo para leer tres números, calcular el valor medio y
mostrar por pantalla al usuario el resultado sería:

Encarnación Marín Caballero Página 5 de 19


Tema 1: Análisis y Diseño de un problema.

2.3. Pseudocódigo
El pseudocódigo es una forma de escribir los pasos, pero de la forma más cercana al lenguaje de
programación que vamos a utilizar, es como un falso lenguaje, pero en nuestro idioma, en el lenguaje
humano.
Por eso es bueno utilizar el pseudocódigo, algo así como un falso lenguaje de programación en
español, que ayuda a asimilar con más facilidad las ideas básicas.
Ejemplo 1: Si queremos escribir algo en pantalla, en pseudocódigo podríamos poner:

Escribir "Hola"
También podemos usar:

Mostrar por pantalla "Hola"


NOTA 1: Realmente el pseudocódigo lo podríamos escribir como nosotros quisiéramos, ya que
realmente no es el programa en sí, sólo es una ayuda para posteriormente realizar el programa mediante
el lenguaje de programación que utilicemos, eso sí, es de gran ayuda, tanto que es imprescindible. Pero
aunque lo podamos escribir de cualquier forma, la mayoría de los programadores suelen usar un
vocabulario en común.

NOTA 2: Recuerda que el pseudocódigo para un programador es fundamental. Si sabes hacer el


pseudocódigo del programa, pasarlo a cualquier lenguaje de programación es muy sencillo, sólo tendrás
que aprender los comandos equivalentes a las instrucciones en pseudocódigo. Además, la mayoría de los
lenguajes utilizan prácticamente los mismos comandos en su lenguaje.

Para especificar el principio y el fin del programa pondremos:

Inicio

Aquí iría el programa en pseudocódigo

Fin
Otra forma muy utilizada sería:

Proceso NombreDelPrograma

Aquí iría el programa en pseudocódigo


FinProceso

Las órdenes que más utilizaremos en pseudocódigo son:

 Escribir. Escribe en pantalla el texto que pongamos entre comillas dobles o también puede
escribir en pantalla el valor de una variable.
Ejemplos:

Escribir "Hola" O bien: Mostrar por pantalla "Hola"


Escribir Edad
 Leer. Lee desde lo que el usuario marque desde el teclado y guarda el valor dentro de una
variable.

Ejemplos: Leer Edad


Leer numero

Encarnación Marín Caballero Página 6 de 19


Tema 1: Análisis y Diseño de un problema.

Ejemplo 2: Un algoritmo escrito en pseudocódigo para leer la edad de una persona sería:

Inicio

Escribir “¿Cuál es tu edad?”


Leer Edad
Escribir “Tu edad es” + Edad
Fin
¿Qué haría este pseudocódigo? Pues muy sencillo, primero nos mostraría un mensaje en pantalla
preguntándonos la edad, luego escribiríamos la edad y el valor introducido lo recogería la variable Edad
(imagina que introducimos 18). Por último, mostraría en pantalla la frase: Tu edad es 18. ¿Fácil no?

Ejemplo 3: Un algoritmo escrito en pseudocódigo para leer el radio de un círculo, calcular su


área y mostrar por pantalla al usuario el resultado sería:
Inicio
Escribir “dame el radio del circulo”
Leer radio
area = 3.14159 * radio
Escribir “el área del circulo es:”
Escribir área
Fin
Como se ve las instrucciones se van ejecutando unas detrás de otra hasta llegar al final.

Ejemplo 4: Un algoritmo escrito en pseudocódigo para calcular la raíz cuadrada de un número


si el número leído es mayor o igual que cero sería:
Inicio

Mostrar por pantalla “Introduce un número”


Leer numero
InicioSI
SI numero >=0 ENTONCES:
raiz = raiz_cuadrada (numero)
Mostrar por pantalla “la raíz cuadrada es:”
Mostrar por pantalla raiz
FinSI
Fin

2.4. Ejemplos
A continuación, vamos a ver algunos ejemplos donde se aplique todo lo que hemos visto hasta el
momento sobre algoritmos.

Encarnación Marín Caballero Página 7 de 19


Tema 1: Análisis y Diseño de un problema.

2.4.1. Hacer llamada telefónica


«Escriba un algoritmo que resuelva el problema cotidiano de hacer una llamada telefónica a una
persona. Expresa el algoritmo usando el pseudocódigo y el diagrama de flujo».

2.4.2. Suma de dos números


«Escriba un algoritmo que pregunte por dos números y muestra como resultado la suma de
éstos. Expresa el algoritmo usando el pseudocódigo y el diagrama de flujo».

Encarnación Marín Caballero Página 8 de 19


Tema 1: Análisis y Diseño de un problema.

2.4.3. Área de un triángulo


«Escriba un algoritmo que permita conocer el área de un triángulo a partir de la base y la altura.
Expresa el algoritmo usando el pseudocódigo y el diagrama de flujo».

2.4.4. Mayor de dos números


«Escriba un algoritmo que permita leer dos números diferentes y nos diga cuál es el mayor de
los dos números. Expresa el algoritmo usando el pseudocódigo y el diagrama de flujo».

Pseudocódigo Diagrama de flujo

Encarnación Marín Caballero Página 9 de 19


Tema 1: Análisis y Diseño de un problema.

3. PROGRAMA
Un programa es un conjunto de instrucciones que se ejecutan en el ordenador .
El programa puede ser lineal y no lineal.
Las tres partes fundamentales que debe tener un programa son: entrada, programa y salida.

Programa
Entrada Salida
(algoritmo)

Caja negra
Las características más importantes de los programas son: legibilidad, portabilidad,
modificabilidad, eficiencia, modularidad y estructuración.

3.1. Programación estructurada


La programación estructurada utiliza el Diseño Descendiente (Top-Down).

El programa ha de ser propio si cumple lo siguiente:


 Tiene un solo punto de entrada y uno de salida.

 Existe al menos un camino que va desde el inicio hasta el fin.


 No posee bucles infinitos.

Según el Teorema de Böhm y Jacopini, “todo programa propio puede escribirse utilizando
únicamente tres tipos de estructuras de control: secuencial, selectiva (o de selección) y repetitiva”.
La estructura selectiva se divide en: simples (if), dobles (if…else) y múltiples (switch).

Y la estructura repetitiva se divide en: no determinista (while, do…while) y determinista (for).

Encarnación Marín Caballero Página 10 de 19


Tema 1: Análisis y Diseño de un problema.

3.2. Programación modular


La programación modular es el conjunto de subprogramas (o llamados módulos) utilizados para
la elaboración de un programa. Éstos pueden agruparse en uno o varios ficheros.

Se utiliza la técnica Divide y Vencerás para crear subprogramas.

4. CODIFICACIÓN
La codificación consiste en escribir la solución en la sintaxis de un lenguaje de programación .

El código o programa se escribe en un lenguaje de programación.

Ejemplo: Programa escrito en el lenguaje de programación C.

5. LENGUAJE DE PROGRAMACIÓN

Un lenguaje de programación es el medio para escribir las instrucciones del algoritmo . Define
el conjunto de símbolos y reglas sintácticas y semánticas, que definen el significado de sus elementos y
expresiones.
Los lenguajes de programación se pueden clasificar por nivel o por la forma de ejecutarse.

5.1. Por nivel


Se clasifican en dos tipos:

 Lenguajes de programación de bajo nivel.

 Lenguajes de programación de alto nivel.

Encarnación Marín Caballero Página 11 de 19


Tema 1: Análisis y Diseño de un problema.

5.1.1. Lenguajes de programación de bajo nivel


Los lenguajes de programación de bajo nivel son aquellos utilizados fundamentalmente para
controlar el “hardware” del ordenador y dependen totalmente de la máquina y no se pueden utilizar en
otras máquinas. Son los más complicados, pero sólo los usan prácticamente los creadores de las
máquinas. Con este tipo de lenguajes programan la asignación y liberación de memoria, el uso de
punteros, el poder usar paso por valor y por referencia, la creación de tipos de datos, etc.
 Lenguaje máquina: basado en el código binario (0 y 1).

 Lenguaje ensamblador: está basada en los “mnemónicos” (por ejemplo: ADD, LOAD,…), que son
grupos de caracteres alfanuméricos que simbolizan las órdenes o tareas a realizar.

5.1.2. Lenguajes de programación de alto nivel


Los lenguajes de programación de alto nivel son más parecidos al lenguaje natural humano y no
dependen de la máquina y sirven fundamentalmente para crear programas informáticos que solucionan
diferentes problemas. Son los más usados por los programadores y por todo el mundo que realiza
programas informáticos. Ejemplos: Pascal, C, C++, Java, HTML, PHP, etc.

Encarnación Marín Caballero Página 12 de 19


Tema 1: Análisis y Diseño de un problema.

5.1.3. Diferencias entre lenguajes de bajo y alto nivel

5.2. Por la forma de ejecutarse


Se clasifican en dos tipos:
 Lenguajes compilados: son aquellos cuyo código se transforma a un código binario
ejecutable directamente. Ejemplos: C, C++, Ensamblador,…
 Lenguajes interpretados: son aquellos que necesitan de un programa que traduzca en
ejecución el código fuente escrito a instrucciones máquina. Ejemplos: Java, Python,…

6. TRADUCTOR
Los programas creados con estos lenguajes de programación tienen que ser traducidos a
lenguaje máquina, es decir, al sistema binario para que puedan ser ejecutados.

Un traductor es un programa que toma como entrada un texto escrito en un lenguaje (código
fuente) y lo traduce a otro texto de salida en un lenguaje diferente (código objeto).

Encarnación Marín Caballero Página 13 de 19


Tema 1: Análisis y Diseño de un problema.

Existen principalmente dos tipos de traductores: compiladores e intérpretes.

Compilador ≠ Intérprete

6.1. Compilador
Un compilador es un programa que traduce el programa fuente escrito en lenguaje de alto nivel
a lenguaje máquina.
Ejemplo: Su acción equivale a la de un traductor humano, que toma un libro y produce otro
equivalente escrito en otra lengua.

El compilador traduce (sentencia a sentencia) el programa fuente a código objeto.

Como parte importante de este proceso de traducción, el compilador informa al usuario de la


presencia de errores en el programa fuente. Una vez que el programa fuente está libre de errores, se
obtiene el código objeto, por lo que éste será independiente del código fuente.

Un programa escrito en lenguaje de alto nivel (en el editor del lenguaje) se llama programa
fuente o código fuente y el programa traducido programa objeto o código objeto.
El programa objeto obtenido de la compilación no ha sido traducido normalmente a código
máquina sino a ensamblador. Para conseguir el programa máquina real se debe utilizar un programa
llamado montador o enlazador (linker).

El proceso de montaje conduce a un programa en lenguaje máquina directamente ejecutable ,


que se llama programa ejecutable o código ejecutable.

Encarnación Marín Caballero Página 14 de 19


Tema 1: Análisis y Diseño de un problema.

Las fases del proceso de compilación son:

La traducción del programa completo se realiza en una sola operación denominada compilación
del programa, es decir, se traducen todas las instrucciones del programa en un solo bloque , el programa
compilado y depurado se denomina programa ejecutable porque ya se puede ejecutar directamente y
cuantas veces se desee, sólo deberá volver a compilarse de nuevo en el caso que se modifique alguna
instrucción del programa. De este modo, el programa ejecutable no necesita del compilador para su
ejecución.

Ejemplos: Lenguajes compilados típicos son: PASCAL, COBOL, C, C++,…

Ejemplo: Programa Hola Mundo escrito en el lenguaje de programación C. Éste consiste en


sacar por pantalla la archiconocida frase de “Hola Mundo”.

 Código fuente: hola.c que está escrito con instrucciones de la sintaxis del lenguaje de alto
nivel. En lenguaje C.
 Código objeto: hola.o que está escrito con instrucciones de la sintaxis del procesador (lenguaje
de bajo nivel). En lenguaje ensamblador.

 Código ejecutable: hola.exe que está escrito con instrucciones del código máquina. En binario (0
y 1).

Encarnación Marín Caballero Página 15 de 19


Tema 1: Análisis y Diseño de un problema.

El compilador C es GCC desarrollado por el proyecto GNU para C.

Su sintaxis es: gcc [ opción | archivo ] ...

Ejemplos:

 gcc hola.c
Compila el programa en C hola.c y genera un archivo ejecutable a.out.
 gcc -o hola hola.c
Compila el programa en C hola.c y genera un archivo ejecutable hola.exe.

 gcc -c hola.c
No genera el ejecutable, sino el código objeto, en el archivo hola.o. Si no se indica un nombre
para el archivo objeto, usa el nombre del archivo en C y le cambia la extensión por “.o”.
 gcc -c -o objeto.o hola.c
Genera el código objeto indicando el nombre de archivo, que es objeto.o.

El proceso de ejecución de un programa en C tiene los siguientes pasos:

1) Escritura del programa fuente con un editor (programa que permite a una computadora actuar
de modo similar a una máquina de escribir electrónica) y guardarlo en un dispositivo de
almacenamiento (un disco).

2) Introducir el programa fuente en memoria.

3) Compilar el programa con el compilador C.


4) Verificar y corregir errores de compilación si los hay (listado de errores).

5) Obtención del programa objeto, si no hay errores en la compilación.

6) El montador obtiene el programa ejecutable.


7) Se ejecuta el programa y si no existen errores, se tendrá la salida del mismo.

NOTA:
 El tiempo que se necesita para traducir un lenguaje de alto nivel a lenguaje objeto se denomina
tiempo de compilación.

 El tiempo que tarda en ejecutarse un programa objeto se denomina tiempo de ejecución.

Encarnación Marín Caballero Página 16 de 19


Tema 1: Análisis y Diseño de un problema.

6.2. Intérprete
Un intérprete es un traductor que toma un programa fuente, lo traduce y, a continuación, lo
ejecuta.
Ejemplo: Su acción equivale a la de un intérprete humano, que traduce las frases que oye sobre
la marcha, sin producir ningún escrito permanente.
El intérprete no produce un código objeto, siendo su ejecución simultánea a la del programa
fuente.

El sistema de traducción consiste en: traducir la primera sentencia del programa a lenguaje
máquina, se detiene la traducción, se ejecuta la sentencia y a continuación se traduce la siguiente
sentencia, se detiene la traducción, se ejecuta la sentencia, y así sucesivamente hasta terminar el
programa.

Ejemplos: Lenguajes interpretados típicos son: BASIC, Java, Python, PHP,…

Los programas interpretados suelen ser más lentos que los compilados debido a la necesidad de
traducir el programa mientras se ejecuta, pero a cambio son más flexibles como entornos de
programación y depuración (lo que se traduce, por ejemplo, en una mayor facilidad para reemplazar
partes enteras del programa o añadir módulos completamente nuevos), y permiten ofrecer al programa
interpretado un entorno no dependiente de la máquina donde se ejecuta el intérprete, sino del propio
intérprete (lo que se conoce comúnmente como máquina virtual).

Encarnación Marín Caballero Página 17 de 19


Tema 1: Análisis y Diseño de un problema.

Ejemplo: Programa Hola Mundo escrito en el lenguaje de programación Java. Éste consiste en
sacar por pantalla la archiconocida frase de “Hola Mundo”.

Lo primero que tendremos que hacer en Java será crear la clase HolaMundo.

public class HolaMundo {


public static void main(String[] args) {
System.out.println("Hola Mundo");
}
}
Esta clase la guardaremos en un fichero .java. Es importante que el fichero se llame tal cual
llamemos a la clase. Haciendo coincidir tanto mayúsculas como minúsculas.
El fichero se llamará HolaMundo.java

Para compilar y ejecutar este código tendremos que ejecutar las siguientes sentencias:
javac HolaMundo.java
java HolaMundo

javac es el compilador de Java. Sirve para compilar el código fuente con extensión “.java” de los
programas escritos en Java y generar los archivos bytecode con extensión “.class” correspondientes.
Dichos archivos con extensión “.class” se podrán ejecutar en la máquina virtual de Java (Java Virtual
Machine, JVM). En este caso, ha creado el archivo HolaMundo.class.
java es el intérprete de Java. Es un componente de la JVM capaz de interpretar los archivos
bytecode con extensión “.class” en el ordenador.

NOTA: El compilador C genera el archivo ejecutable que no es válido para cualquier


ordenador. Por ejemplo, si se ha generado el ejecutable para Windows, no podrá utilizarse en
Macintosh. Por el contrario, Java se hizo independiente del hardware y del sistema operativo en que
se ejecutaba. Para ello, añadió un paso intermedio: los programas Java no se ejecutan en nuestra
máquina real (en nuestro ordenador o servidor) sino que Java simula una máquina virtual con su propio
hardware y sistema operativo. En resumen, el proceso se amplía en un paso: del código fuente, se pasa a
un código intermedio denominado habitualmente bytecode entendible por la máquina virtual de Java. Y
es esta máquina virtual simulada, denominada Java Virtual Machine o JVM, la encargada de
interpretar el bytecode dando lugar a la ejecución del programa.

Encarnación Marín Caballero Página 18 de 19


Tema 1: Análisis y Diseño de un problema.

6.3. Comparativa
Los intérpretes y compiladores tienen diversas ventajas e inconvenientes que los hacen
complementarios:

 Un intérprete facilita la búsqueda de errores, pues la ejecución de un programa puede


interrumpirse en cualquier momento para estudiar el entorno (valores de las variables, etc.).
Además, el programa puede modificarse sobre la marcha, sin necesidad de volver a comenzar la
ejecución.

 Un compilador suele generar programas más rápidos y eficientes, ya que el análisis del
lenguaje fuente se hace una sola vez, durante la generación del programa equivalente. En
cambio, un intérprete se ve obligado generalmente a analizar cada instrucción tantas veces
como se ejecute (incluso miles o millones de veces).
 Un intérprete permite utilizar funciones y operadores más potentes, como por ejemplo
ejecutar código contenido en una variable en forma de cadenas de caracteres. Usualmente, este
tipo de instrucciones es imposible de tratar por medio de compiladores. Los lenguajes que
incluyen este tipo de operadores y que, por tanto, exigen un intérprete, se llaman
interpretativos. Los lenguajes compilados, que permiten el uso de un compilador, prescinden de
este tipo de operadores.

7. CICLO DE VIDA DEL SOFTWARE

Etapas: análisis, diseño, codificación (o implementación), verificación (o prueba) e implantación.

Encarnación Marín Caballero Página 19 de 19

También podría gustarte