Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Solucin(problema) ALGORITMO(Solucin(problema))
Pasos para la resolucin de un problema:
Los algoritmos son independientes del lenguaje de programacin y del ordenador que los ejecuta. Se pueden expresar en multitud de lenguajes y ejecutarse en ordenadores distintos.
2.2 Qu es un programa?
Un programa es la expresin (transcripcin) de un algoritmo en un lenguaje de programacin, capaz de ser procesado por un ordenador tras su compilacin y linkado y que controla el funcionamiento de un ordenador a la hora de resolver un problema. ALGORITMO + LENGUAJE DE PROGRAMACIN 2.2.1 Cmo se construye un programa. El proceso de elaboracin de un programa, conlleva varias etapas:
Anlisis Diseo Codificacin Pruebas
Documentacin y Mantenimiento
PROGRAMA
Fase de Anlisis: decidir qu es lo que tenemos que hacer. Fase de Diseo (desarrollo de la solucin): se define cmo vamos a hacerlo. Obtencin del Algoritmo Se utilizar el Diseo Descendente o TOP-DOWN: Un problema complejo se resuelve dividiendo el problema en subproblemas, y as sucesivamente hasta que la resolucin de cada subproblema sea fcilmente programable. Fase de Codificacin: Implementacin del Algoritmo en el lenguaje de programacin ms adecuado Obtencin del Programa Fase de Pruebas: No basta que el programa est terminado Hay que comprobar que el programa NO falla y funciona perfectamente en todos los casos posibles que se puedan presentar. Fase de Documentacin y Mantenimiento: Se elabora la documentacin del programa, y se realizan las actualizaciones oportunas que se vayan necesitando.
Pgina 2 de 16
TODAS ESTAS FASES HAY QUE REALIZARLAS CON SUMO CUIDADO, PUESTO QUE UN ERROR EN UNA DE ELLAS, PUEDE CONLLEVAR LA VUELTA ATRS EN TODO EL PROCESO.
No
Si
N=2
No
Si
Escribe PAR
N=1
N=N-2
Escribe Impar
Pgina 4 de 16
2.3.2 El pseudocdigo El pseudocdigo es la representacin narrativa (no hay reglas sintcticas estrictas) de un algoritmo, escrita en lenguaje natural utilizando las estructuras de control tpicas de algn Lenguaje de Programacin y algunos smbolos algebraicos. La utilizacin de pseudocdigo presenta las ventajas de ser ms compacto que un organigrama, ser ms fcil de escribir y ser ms fcil de transcribir a un lenguaje de programacin. Las estructuras de control deciden qu camino hay que seguir en funcin de una condicin. Son las siguientes: 1. Estructura secuencial: consiste en colocar una instruccin tras otra, de manera que se van ejecutando de arriba abajo. 2. Estructura selectiva o condicional (si, si no): permiten ejecutar un conjunto de instrucciones u otras en funcin de si se cumple o no una condicin 3. Estructura iterativa o de repeticin (mientras, repetir, para): permite repetir una instruccin o grupo de ellas un n fijo de veces o mientras (o hasta que) una condicin sea cierta. Estructura secuencial Pseudocdigo de un algoritmo que calcule la media de tres nmeros: Leer (n1); Leer (n2); Leer (n3); suma = n1 + n2 + n3; media = suma / 3; escribir (media); El orden en el que se realizan las operaciones es importante: no puede calcularse la media sin antes haber ledo los nmeros.
Pgina 5 de 16
Estructura selectiva o condicional El formato de esta estructura es el siguiente: si (se cumple la condicin) inicio conjunto de acciones; fin sino inicio conjunto de acciones; fin Es decir, primero se examina la condicin: si resulta verdadera, se ejecutan las acciones asociadas al si, en caso contrario se ejecutan las acciones asociadas al sino. La instruccin si no no es obligatoria en una estructura condicional (si no queremos hacer nada en caso que la condicin sea falsa).
Algoritmo que calcula la media de 3 n y devuelve su raz cuadrada. Leer (n1); Leer (n2); Leer (n3); suma = n1 + n2 + n3; media = suma / 3; si (media >= 0) inicio raiz = RaizCuadrada (media); escribir (raiz); fin si no escribir ("No se puede hallar la raiz cuadrada"); Antes de hallar la raz cuadrada hay que ver que la media no es negativa:
Pgina 6 de 16
La estructura condicional permite anidar unas instrucciones en otras. Supongamos que queremos calcular la nota media de la siguiente forma: Si teora >= 5 y practica < 5: media = 0.4 x teora + 0.6 x prctica Si practica >= 5 y teora < 5: media = 0.6 x teora + 0.4 x prctica En cualquier otro caso se calculara su media normalmente.
Leer (teoria); Leer (practica); si (teoria >= 5) inicio si (practica < 5) media = 0.4 * teoria + 0.6 * practica; si no media = (teoria + practica) / 2; fin si no inicio si (practica >= 5) media = 0.6 * teoria + 0.4 * practica; si no media = (teoria + practica) / 2; fin escribir("La media es ", media); fin escribir("La media es ", media); fin si no inicio si (practica >= 5) media = 0.6 * teoria + 0.4 * practica; fin Otra posible solucin sera: Leer (teoria); Leer (practica); media = (teoria + practica) / 2; si (teoria >= 5) inicio si (practica < 5) inicio media = 0.4 * teoria + 0.6 * practica;
Otra forma de resolverlo es usando el operador y en las condiciones. Este operador permite combinar dos condiciones de manera que solo ser verdad si ambas condiciones se cumplen:
Leer (teoria); Leer (practica); si (teoria >= 5 y practica < 5) media = 0.4 * teoria + 0.6 * practica; si no inicio si (practica >= 5 y teoria < 5) media = 0.6 * teoria + 0.4 * practica; si no media = (teoria + practica) / 2; fin escribir("La media es ", media);
Pgina 7 de 16
Adems del operador y tambin existe el operador o el cual permite ejecutar una accin determinada si se verifica una de las condiciones. Leer (edad); si (edad < 16 o edad >= 65) escribir("No puedes trabajar"); si no escribir("Puedes trabajar"); Leer (edad); si (edad >= 16 y edad < 65) escribir("Puedes trabajar"); si no escribir("No Puedes trabajar");
Es decir, solo trabajan los que tengan 16 o ms aos y menos de 65. Estructura iterativa o de repeticin. Esta estructura presenta una serie de variantes que permiten: Estructura mientras Esta estructura permite repetir un conjunto de instrucciones 0 o ms veces, ya que la condicin se verifica antes de entrar en el bucle. El formato de esta estructura es el siguiente: mientras (se cumpla la condicin) inicio conjunto de acciones; fin Es decir, primero se examina la condicin: si resulta falsa, se pasa directamente a la instruccin que haya tras el fin, de manera que nos saltamos todas las instrucciones que haya dentro del bucle. Estructura repetir mientras Esta estructura evala la condicin una vez realizada la accin. Por tanto, las instrucciones que estn dentro se ejecutan al menos una vez. El formato de esta estructura es el siguiente: repetir inicio conjunto de acciones; fin mientras (se cumpla la condicin);
Pgina 8 de 16
Ej: algoritmo que lee por teclado unos nmeros (hasta que introduzcamos un nmero negativo) y calcula su media.
suma = 0; n = 0; leer (numero); escribir("Dame un n no negativo"); mientras (numero >= 0) inicio suma = suma + numero; n = n + 1; escribir("Dame un n no negativo"); fin si (n > 0) inicio media = suma / n; escribir("La media es ", media); fin si no escribir ("La media es 0"); leer (numero);
Pgina 9 de 16
Estructura para Permite realizar una accin un nmero determinado de veces. El formato de esta estructura es el siguiente: para variable de inicio a fin inicio conjunto de acciones; fin En cada iteracin del bucle variable va tomando distintos valores comprendidos entre inicio y fin. En la primera iteracin toma el valor inicio, en la segunda inicio+1, y as sucesivamente hasta el valor fin. Ej: Algoritmo que pide 20 nmeros por teclado y calcula su media.
suma = 0; para n de 1 a 20 inicio escribir("Introduzca n", n); leer (numero); suma = suma + numero; fin media = suma / (n-1); escribir("La media es ", media);
Restamos 1 a n ya que se sale del bucle para cuando la variable n sobrepasa el valor 20. La estructura para puede sustituirse por mientras o por repetir:
suma = 0; n = 0; mientras (n < 20) inicio escribir("Introduzca n", n+1); leer (numero); suma = suma + numero; n = n + 1; fin media = suma / n; escribir(" La media es ", media);
Pgina 10 de 16
Un error muy comn con las estructuras de repeticin consiste en poner mal la condicin de finalizacin u olvidarse de incrementar el contador, dando lugar a bucles infinitos (bucles que no acaban nunca).
suma = 0; n = 1; repetir inicio leer (numero); suma = suma + numero; fin mientras (n <= 20); media = suma / (n-1);
suma = 0; n = 1; repetir inicio leer (numero); suma = suma + numero; n = n - 1; fin mientras (n <= 20); media = suma / (n-1);
Pgina 11 de 16
Ej: Calcular la media de una serie de n positivos dados por teclado. Un valor de 0, como entrada, indicar el final de la serie de nmeros. Pseudocdigo contador = 0; suma = 0; leer(numero);
mientras (numero <> 0) inicio
media = 0; escribir(media);
Ej: Calcular la suma de los N primeros nmeros impares, siendo N un n dado por teclado. suma= 0; suma = 0; impar = 1; c = 1; leer (n); impar = 1; para c de 1 a n leer (n); mientras (c <= n)
inicio inicio
Pgina 12 de 16
EJEMPLOS
Pseudocdigo leer(N); X = 2;
mientras (mod(N / X)<> 0 y X<N) inicio
X = X + 1;
fin si (X < N)
escribir( N no es primo);
sino
escribir(N es primo);
Pseudocdigo SUMA = 0; N = 2;
mientras (N < = 1000) inicio
SUMA = SUMA + N; N = N + 2;
fin
escribir(SUMA);
Pgina 13 de 16
Pgina 15 de 16
2.5.1 Clasificacin de los lenguajes de programacin Los lenguajes de programacin los podemos clasificar en tres grupos: lenguaje mquina (prcticamente no utilizado). Son directamente inteligibles por el ordenador, ya que sus instrucciones son cadenas binarias. Dificultad de codificacin, poca fiabilidad, dificultad grande de verificar y poner a punto, slo ejecutable en el procesador especfico. lenguaje de bajo nivel (ensamblador). Dependen de la mquina en particular y difcil de programar. Son ms fciles de codificar que en lenguaje mquina. Dependen de la mquina particular donde se ejecutan. Son ms difciles de programar que los lenguajes de alto nivel. lenguajes de alto nivel. Son independientes de la mquina, no dependen del diseo del hardware, son muy portables. Ms fciles de programar y entender. La sintaxis usada est ms cerca del lenguaje humano que de la mquina. Inconvenientes: Tiempo de ejecucin mayor y no se aprovechan los recursos internos de la mquina eficientemente. Existen muchos lenguajes de programacin de alto nivel (C/C++, COBOL, Visual Basic, Java, Modula-2, LISP, etc.)
2.5.2 El Lenguaje C. - Es un lenguaje de nivel medio: combina elementos de lenguajes de alto nivel con la funcionalidad del ensamblador. - Permite hacer cosas que otros lenguajes de alto nivel no pueden hacer (manipulacin de bits, bytes, direcciones) y es tan fcil de usar como cualquier otro lenguaje de alto nivel. - Es particularmente adecuado para la programacin de sistemas. - Es muy portable, es decir, es posible adaptar el software escrito para un tipo de ordenador en otro.
Pgina 16 de 16