Algoritmos

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 22

Algoritmos

 Introducción

El proceso de resolución de un problema con una computadora implica el desarrollo de un


programa y a su ejecución en la misma. Aunque el proceso de diseñar programas es,
esencialmente, un proceso creativo, se puede considerar una serie de fases o pasos
comunes, que generalmente deben seguir todos los programadores.

Las fases de resolución de un problema con computadora son:

  
 Análisis del problema.  Verificación.
 Diseño del algoritmo.  Depuración.
 Codificación.  Mantenimiento.
 Compilación y ejecución.   Documentación.

Las características más sobresalientes de la resolución de problemas son:

 Análisis.. Consiste en hacer una serie de preguntas acerca de lo que establece el problema,


para poder detectar si se cuenta con los elementos suficientes para realizar la solución del
mismo.

 Diseño. Una vez analizado el problema, se diseña una solución (algoritmo)  que resuelva el
problema.

Codificación (implementación). Consiste en escribir la solución del problema en la sintaxis


de un lenguaje de programación de alto nivel y se obtiene un programa fuente que que se
compila a continuación.

Ejecución, verificación y depuración. El programa se ejecuta, se comprueba rigurosamente


y se eliminan todos los errores (denominados “bugs”, en inglés) que puedan aparecer.

Mantenimiento. El programa se actualiza y modifica, cada vez que sea necesario, de modo
que se cumplan todas las necesidades de cambio de sus usuarios.

Documentación. Escritura de las diferentes fases del ciclo de vida del software,
esencialmente el análisis, diseño y codificación, unidos a manuales de usuario y de
referencia, así como normas para el mantenimiento.

 Estas fases son esenciales para el proceso de programación y solución de problemas.  La
parte fundamental es el diseño del algoritmo.
La palabra algoritmo se deriva de la traducción al latín de la palabra Alkhô-warîzmi2,
nombre de un matemático y astrónomo árabe que escribió un tratado sobre manipulación
de números y ecuaciones en el siglo IX.

Un algoritmo es un método para resolver un problema mediante una serie de pasos o


instrucciones precisos, definidos y finitos.

En términos de programación, un algoritmo es una secuencia de pasos lógicos que permiten


solucionar un problema.

1. Características de un algoritmo

Las características fundamentales que debe cumplir todo algoritmo son:

 Un algoritmo debe ser preciso: tiene que indicar el orden de realización de cada paso.

 Un algoritmo debe estar definido: Si se sigue un algoritmo dos veces, se debe obtener el


mismo resultado cada vez.

 Un algoritmo debe ser finito: el algoritmo se debe terminar en algún momento; o sea,


debe tener un número finito de pasos.

  Un algoritmo debe ser legible: El texto que lo describe debe ser claro, tal que
permita entenderlo y leerlo fácilmente.

2. Partes de un algoritmo

Todo algoritmo debe cumplir con la estructura básica de un sistema, es decir:


entrada, proceso y salida.

Donde:

Entrada Es la información dada al algoritmo o los valores con los que se va a trabajar para
ofrecer los resultados esperados.

Proceso Son los cálculos o pasos necesarios para que a partir de un dato de entrada se
pueda llegar a un resultado de solución del problema o la situación planteada
Salida Son los resultados finales o la transformación de la entrada a través del proceso.

3. Herramientas para representar un algoritmo

Para expresar la solución de un problema se pueden usar diferentes


herramientas de programación:

 Diagrama de Flujo de Datos


 Diagrama Nassi-Schneiderman
 PSeudocódigo

4. Pseudocódigo

Es un conjunto de instrucciones (palabras reservadas) que permite


representar un algoritmo, similar al lenguaje natural, fácil de entender y
amigable.

5. Prueba de escritorio

La prueba de escritorio es una prueba manual que se encarga de visualizar el


comportamiento de los estados de las variables en el transcurso de la
ejecución de un algoritmo

6. Estructura de un algoritmo

La estructura de un algoritmo sirve para organizar a los elementos que aparecen en él. En


pseudocódigo, todos los algoritmos tienen la misma estructura, la cual viene definida por
tres secciones: cabecera, declaraciones y cuerpo.
Elementos de Programación
7. Dato

El primer objetivo de toda computadora es el manejo de la información o datos. Estos datos


pueden ser las cifras de ventas de un supermercado o las calificaciones de una clase. 

Un dato es una representación del mundo real.  Un dato  es la expresión general que


describe los objetos con los cuales opera una computadora. La mayoría de las
computadoras pueden trabajar con varios tipos de datos. Los algoritmos y los programas
correspondientes operan sobre esos tipos de datos.

8. Identificadores

Un identificador es el nombre que se le da a un elemento de un algoritmo (o programa). Por


ejemplo, el tipo de dato entero hace referencia a un tipo de dato que es distinto a todos los
demás tipos de datos, es decir, los valores que puede tomar un dato de tipo entero, no son los
mismos que los que puede tomar un dato de otro tipo.

9. Constantes y Variables

10. Operación de asignación

La operación de asignación es el modo de almacenar valores a una variable. La operación de


asignación se representa con el símbolo u operador ←

Estructuras de Control

EJ
Ejemplo:

En un estacionamiento cobran Bs. 3.50 por hora o fracción. Diseñar un algoritmo que
determine cuanto debe pagar un cliente por el estacionamiento de su vehículo, conociendo
el tiempo de estacionamiento en horas y minutos.

Solución:
1. Análisis del problema

Definir el problema
Nombre del problema: pago estacionamiento
Delimitación: determinar cuanto debe pagar un cliente por el estacionamiento de su
vehículo conociendo el tiempo de estacionamiento en horas y minutos.
Resultado deseado:  costo por el estacionamiento de un vehículo.

 Datos de entrada

hora : hora de estacionamiento de un vehículo (Entero)

min:  minuto de estacionamiento de un vehículo (Entero)

 Formulas necesarias 

        si  los minutos estacionamiento de un vehículo > 0 entonces hora =hora + 1


         pago =  hora de estacionamiento de un vehiculo*3,5

 Datos de salida
       pago: pago por el estacionamiento de un vehículo (Real)

2. Diseño del algoritmo

Algoritmo pago
Var  hora, min :  Entero
        pago: Real
Inicio
       Leer hora
       Leer min
       si min > 0 entonces
             hora ←  hora + 1
      fin _si
      pago ←  hora*3,5
      Imprimir ( "el pago del estacionamiento es :" &  pago)
Fin// algoritmo

3.Prueba de escritorio

mi
 instrucciones       hora   min > 0 pago  pantalla 
n

Leer hora 10

Leer min 5

si min >0 entonces  verdadero


mi
 instrucciones       hora   min > 0 pago  pantalla 
n

  hora ←  hora + 1     11

 pago ←  hora*3,5        38.5  

 Imprimir ( "el pago del estacionamiento es :" &   el pago del estacionamiento es: 
       
pago) 38.5

Ejemplo:

         Diseñar un algoritmo que verifique si un número es par positivo.

Solución:

1. Análisis del problema

Definir el problema

Nombre del problema: par_positivo


Delimitación: determinar si el numero  es par y positivo dado  un numero leído desde
teclado.
Resultado deseado:  mensaje que muestre si el numero es par y positivo

 Datos de entrada
      N : numero (Entero)

 Formulas necesarias 
        si  el  (numero Mod 2 = 0) y (numero  > 0 )entonces  numero es par y positivo

  Datos de salida

       mensaje que indique que el numero es par positivo

2. Diseño del algoritmo

Algoritmo par_positivo
Var  N :  Entero
Inicio
      Leer N
      si (N Mod 2 = 0) And (N > 0) entonces
                 Imprimir ( N &  "es par positivo" ) 
     sino
                 Imprimir (N &  "No es par positivo" ) 
     fin _si
Fin// algoritmo

3.Prueba de escritorio

   (N Mod 2 =
 instrucciones    N   N > 0 pantalla 
N. 0)

1 Leer N  10

si (N Mod 2 = 0) And (N > 0)    verdadero verdadero

Imprimir ( N &  "es par positivo" )    10 es par positivo

 sino   Imprimir (N &  "No es par


       
positivo" ) 

   

 2  Leer N  5      

   si (N Mod 2 = 0) And (N > 0)    falso  verdadero  

   Imprimir ( N &  "es par positivo" )         

 sino   Imprimir (N &  "No es par


         5 No es par positivo
positivo" ) 

Ejemplo:

       Diseñar un algoritmo en pseudocódigo,  que permita leer un numero entero y verifique si es


número positivo,                 negativo o neutro.

Solución:

Algoritmo numero

Var  N :  Entero
Inicio

      Leer N

      si N > 0  entonces

                     Imprimir ( N &  "es  positivo" ) 

      sino

               si N  < 0  entonces

                               Imprimir ( N &  "es  negativo" ) 

               sino

                            Imprimir (N &  "es neutro" ) 

              fin _si

      fin _si

Fin// algoritmo

Solución:

1. Análisis del problema

Definir el problema

Nombre del problema: numero


Delimitación: determinar si el numero  es positivo, negativo o neutro dado  un numero entero
leído desde teclado.
Resultado deseado:  mensaje que muestre si el numero positivo, negativo o neutro.

 Datos de entrada
       N : numero (Entero)

 Formulas necesarias 
         si  el  (numero  > 0 )entonces  numero  positivo

       si  el  (numero  < 0 )entonces  numero  negativo

       si  el  (numero  = 0 )entonces  numero  neutro

   Datos de salida
        mensaje que indique que el numero es positivo, negativo o neutro

2. Diseño del algoritmo

Algoritmo numero
Var  N :  Entero
Inicio
      Leer N
      si N > 0  entonces
                     Imprimir ( N &  "es  numero positivo" ) 
      sino
               si N  < 0  entonces
                               Imprimir ( N &  "es numero negativo" ) 
               sino
                            Imprimir (N &  "es numero neutro" ) 
              fin _si
      fin _si
Fin// algoritmo

3.Prueba de escritorio

   instrucciones 
    N   N > 0 N<0  N=0  pantalla 
N.

              

Leer N
1    10      

si (N > 0) 


    verdadero      

  Imprimir ( N &  "es numero  positivo" )         10 es numero positivo

si (N < 0)
           

     Imprimir (N &  " es numero negativo" )         

     sino  Imprimir (N &  " es numero neutro" )           


   instrucciones 
    N   N > 0 N<0  N=0  pantalla 
N.

              

 2    Leer N -5        

     si (N > 0)    falso      

     Imprimir ( N &  "es numero  positivo" ) 

si (N < 0)  verdader


     
o

      Imprimir (N &  " es numero negativo" )           -5  es numero negativo

     sino  Imprimir (N &  " es numero neutro" )          

Estructuras de Control Repetitivas


Un contador es una variable que se utiliza para contar algo. Normalmente  se utiliza un
contador dentro de un ciclo y cambiamos su valor sumándole o restándole una constante,
es decir, siempre se le suma o resta la misma cantidad. El caso más utilizado es incrementar
la variable en uno.

Un acumulador es una variable que se utiliza para sumar valores. Al igual que el contador,
se utiliza normalmente dentro de un ciclo pero cambiamos su valor sumándole una variable,
es decir, no siempre se le suma la misma cantidad.

e tiene dos tipos:

 Mientras y Repetir ( While/Repeat)  para iteraciones condicionales


 Para (For) para iteraciones definidas.

Ejemplo: estructura mientras

Diseñar un algoritmo en pseudocódigo, que permita mostrar  los dígitos de un numero entero
positivo leído desde teclado.
Solución:
1. Análisis del problema

Definir el problema

Nombre del problema:  dígitos de un numero entero. 


Delimitación:  obtener los dígitos de un numero  entero positivo. 
Resultado deseado:  dígitos de un numero.

 Datos de entrada

  N : numero  (Entero)

  d:  digito de un numero (Entero)

 Formulas necesarias 

        si  numero positivo N> 0  (condición del problema)


                  mientras el numero sea mayor que 0 (N> 0)
                                d= N Mod 10 
                                N=N Div 10

 Datos de salida
       d: digito de un numero entero (entero)

2. Diseño del algoritmo

Algoritmo digitos
Var  N, d :  Entero
Inicio
   Leer N
           si   N > 0 entonces
                             imprimir ("el numero " & n & "  tiene los dígitos: " )
                             mientras N > 0
                                          d ←  N  Mod 10
                                          imprimir (d)
                                          N  ←  N Div 10
                          fin_mientras
          sino
                          imprimir (" solo números positivos" )
         fin _si
         imprimir ("fin del algoritmo ")
Fin// algoritmo

3.Prueba de escritorio
 N.  instrucciones        N   N > 0 d  pantalla 

 1 Leer N 50

verdader
  si N >0 entonces
o

  imprimir ("el numero " & n & "  tiene los dígitos: " )   el numero 50 tiene los dígitos:

verdader
    N > 0   
o

   d ←  N  Mod 10      0  

   imprimir (d)       0

    N  ←  N Div 10  5      

verdader
   N > 0  
o

d ←  N  Mod 10    5  

     imprimir (d) 5

   N  ←  N Div 10  0      

   N > 0    falso    

    imprimir ("fin del algoritmo ")        fin del algoritmo

Ejemplo Estructura Repetitiva Para

Diseñar un algoritmo en pseudocódigo, que verifique si un número es primo o número


compuesto.

 Número primo: todo número natural mayor que 1 que cumple que sus únicos divisores son el 1
y el propio número. Ejemplos: 2, 3, 5,…

Número compuesto: todo número natural mayor que 1 que no es primo. Ejemplos: 4, 6, 10, …

Solución:
1. Análisis del problema
Definir el problema

Nombre del problema:   numero primo.


Delimitación:  verificar si un numero entero positivo es numero primo o numero compuesto. 
Resultado deseado:   mensaje si el numero es primo o compuesto.

  Datos de entrada

    N : numero  (Entero)

  Datos auxiliares:

  cd:  contador de dígitos de un numero (Entero)

   i :    divisor del numero (Entero)

  Formulas necesarias 

         si  numero positivo N>1  (condición del problema)


                      para i = 1  hasta que sea menor igual a N
                              si N Mod i = 0 entonces (i es  divisor de N, si fuese así contamos la cantidad
de divisores del Numero)
                                        cd=cd +1 

                     si cd= 2 entonces N es primo


                    caso contrario es compuesto

 Datos de salida
        mensaje si el numero es primo o compuesto

2. Diseño del algoritmo

Algoritmo primo

Var  N, i, cd :  Entero

Inicio

   Leer N

   si  N > 1 entonces

                  cd ←  0

                  para i ← 1 , i  ≤ N ,  i  ←  i + 1 

                           si  N Mod i = 0 entonces 


                                             cd ←  cd  +  1

                           fin_si

                 fin_para

                 si  cd = 2  

                          imprimir (N & " es numero primo")

                 sino 

                          imprimir (N & " es numero compuesto")

                fin_si

    sino

           imprimir (" No existen números primos menores a 2" )

   fin _si

Fin// algoritmo

3.Prueba de escritorio

 N    N Mod i =
 instrucciones       N > 1  cd i i<=N   cd = 2 pantalla 
. N  0

 1 Leer N 3        

si N >1 entonces
  verdadero        

  cd ←  0  0      

 
   i ←  1              
1

 verdader
   i < = N              
o

    si N Mod i = 0            verdadero    

   cd ←  cd +1  1      

 i ←  i + 1 2       
 N    N Mod i =
 instrucciones       N > 1  cd i i<=N   cd = 2 pantalla 
. N  0

     i < = N verdadero  

   si N Mod i = 0 falso  

 
 i ←  i + 1          
3

 verdader
   i < = N              
o

   si N Mod i =0            verdadero    

   cd ←  cd +1      2          

 
   i ←  i + 1              
4

   i < = N          falso      

 verdader
   si cd = 2 entonces              
o

 3  es numero
    imprimir (N & " es numero primo")              
primo

    imprimir (N & " es numero compuesto")                

  imprimir (" No existen números primos


                 
menores a 2" )

Subprogramas
Un subprograma, sin embargo, se utiliza por el programa para un propósito específico. El subprograma
recibe datos desde el programa y le devuelve resultados. Haciendo un símil con una oficina, el problema
es como el jefe que da instrucciones a sus subordinados —subprogramas—; cuando la tarea se termina,
el subordinado devuelve sus resultados al jefe. Se dice que el programa principal llama o invoca al
subprograma. El subprograma ejecuta una tarea, a continuación devuelve el control al programa. Esto
puede suceder en diferentes lugares del programa. Cada vez que el subprograma es
llamado, el control retorna al lugar desde donde fue hecha la llamada (ver gráfico adjunto).
Un subprograma puede llamar a su vez a sus propios subprogramas.
11. Funciones

Las funciones son diseñadas para realizar tareas específicas: toman una lista de valores —
llamados argumentos— y devolver siempre un único valor.

Función que lee un numero entero positivo

entero funcion  LeerNumero (  )
          var N  : entero
           inicio
                    leer N
                    mientras N ≤ 0
                              imprimir (“ingrese numero entero positivo
")
                              leer N
                    fin-mientras
                    devolver (N )
         fin _funcion

Función que verifica si un numero es primo

booleano funcion primo (n: entero)
              var i, cd: entero
                    res: booleano
               inicio
                   cd ← 0
                   para i ← 1, i ≤ n, i ← i + 1 
                            si n Mod i =
0 entonces 
                                      cd ← cd + 1
                            fin_si
                   fin_para
                   si cd = 2 entonces
                               res ← verdadero
                   sino
                               res ← falso
                  fin_si          
          devolver (res)
      fin-funcion
Un procedimiento es un subprograma que ejecuta un proceso específico, como ser: calculo
de varios resultados en vez de uno solo, o que realice la ordenación de una serie de
números, etc.

En algunos lenguajes de programación los procedimientos pueden devolver 0,1, n valores y


en forma de lista de parámetros, pero para el  presente curso se asume  que los
procedimientos  No devuelven ningún valor.

Procedimiento que muestra el siguiente numero primo de un numero N

procedimiento sigprimo (n: entero)
var   m:  entero
Inicio
     m←n
     n←n+1
          mientras ( primo (n) = falso )
          n←n+1
          fin_mientras
          imprimir (“el siguiente primo de “& m    " es “ &
n)
fin-procedimiento

Procedimiento que muestra los dígitos de numero

procedimiento dígitos (n : entero )
var d :  entero
inicio
            mientras n > 0 entonces
                        d ← n  Mod 10
                        imprimir ("digito“ & 
d)
                        n  ←  n Div 10
            fin_mientras
fin-procedimiento
12. Ejemplo de subprogramas

Problema
Diseñar un algoritmo, utilizando la técnica divide y vencerás, que permita leer un numero entero
positivo.  Verificar si el número es primo, si fuese así encontrar el siguiente numero primo. Caso
contrario mostrar los dígitos que tiene dicho número.
Ejemplos

 si N= 3, es número primo   entonces el   siguiente primo es 5


 Si N= 14, no es número primo   entonces mostrar   los dígitos son 1, 4
 si N= 2, es número primo  entonces el  siguiente primo es 3

Análisis del problema

Utilizando la técnica divide y vencerás, se puede identificar los siguientes subproblemas:

N Subproblema Subprograma (Solución)
Función LeerNumero() que devolverá un numero
1 leer un numero entero positivo.
entero positivo leído desde teclado.
Función primo(N) devolverá verdadero si el númer
2 Verificar si número es primo
primo, caso contrario falso.
Procedimiento  sigprimo(N) encontrara y mostrara e
3 Encontrar el siguiente número primo
siguiente número primo de N.
Procedimiento  digitos(N) mostrara los dígitos del
4 mostrar los dígitos que tiene dicho numero
numero N.
Siguiente página

Solución
Programa principal

algoritmo ejemplo
var N :  entero
Inicio
     N ← LeerNumero( )
     si primo (N) = verdadero entonces
             Llamar_ a sigprimo (N)
     sino
             Llamar_ a digitos (N)
    fin _si
Fin// Algoritmo
Subprogramas

entero funcion  LeerNumero (  )
          var N  : entero
           inicio
                    leer N
                    mientras N ≤ 0
                              imprimir (“ingrese numero entero positivo
")
                              leer N
                    fin-mientras
                    devolver (N )
         fin _funcion
booleano funcion primo (n: entero)
              var i, cd: entero
                     res: booleano
               inicio
                    cd ← 0
          para i ← 1, i ≤ n, i ← i + 1 
                    si n Mod i =
0 entonces 
                              cd ← cd + 1
                    fin_si
          fin_para
          si cd = 2 entonces
                    res ← verdadero
                           sino
                     res ← falso
          fin_si          
          devolver (res)
 fin_funcion
procedimiento sigprimo (n: entero)
var   m:  entero
Inicio
     m←n
     n←n+1
          mientras ( primo (n) = falso )
          n←n+1
          fin_mientras
          imprimir (“el siguiente primo de “& m    " es “ &
n)
fin-procedimiento
procedimiento dígitos (n : entero )
var d :  entero
inicio
            mientras n > 0 entonces
                        d ← n  Mod 10
                        imprimir ("digito“ & 
d)
                        n  ←  n Div 10
            fin_mientras
fin_procedimiento

13. Ámbito: Variables Locales y Globales

Las variables utilizadas en los programas principales y subprogramas se clasifican en dos


tipos:

• variables locales;
• variables globales

Variables Locales

Una variable local es aquella que está declarada y definida dentro de un subprograma, en el
sentido de que está
dentro de ese subprograma y es distinta de las variables con el mismo nombre declaradas
en cualquier parte del
programa principal.

Variables Globales

Una variable global es aquella que está declarada para el programa o algoritmo principal,
del que dependen todos
los subprogramas.

La parte del programa/algoritmo en que una variable se define se conoce


como ámbito o alcance (scope, en inglés).
El uso de variables locales tiene muchas ventajas. En particular, hace a los subprogramas
independientes, con la
comunicación entre el programa principal y los subprogramas manipulados
estructuralmente a través de la lista de
parámetros.

La comunicación entre un programa y un subprograma debe realizarse a través


de parámetros, y no de variables globales.

Problema: Diseñar un algoritmo en pseudocódigo, utilizando la técnica divide y vencerás,


que permita leer dos números enteros positivos diferente. Si el primer número es mayor que
el segundo mostrar el cociente y residuo de dichos números. Caso contrario calcular la
multiplicación de los números, a través de sumas sucesivas.
Análisis del problema

Utilizando la técnica divide y vencerás, se puede identificar los siguientes subproblemas:

N Subproblema Subprograma (Solución)

Función LeerNumero() que devolverá un numero
1 leer un numero entero positivo.
entero positivo leído desde teclado.

Procedimiento CocRes(N,M)  calculara el cociente y


2 Mostrar cociente y residuo residuo de los dos números y visualizara el resultado d
las mismas.

Procedimiento  Multiplicacion(M,N) calcular y
3 mostrar la multiplicación de los dos números mostrará la multiplicación de los números a través de
sumas sucesivas.

EJEMPLO 2

Algoritmo o programa principal:

Algoritmo ejemplo
Var N, M: entero
Inicio
        N ←LeerNumero()
        M ←LeerNumero()
        mientras N=M
                  N ←LeerNumero()  // caso que N y M son iguales
        fin_mientras
        si N>M entonces
                      Llamar a CocRes(N, M)
       sino
                      Llamar a multiplicacion(M,N)
      fin_si
fin//algoritmo

  Suprogramas:
entero funcion  LeerNumero (  )
          var N  : entero
           inicio
                    leer N
                    mientras N <= 0
                              imprimir (“ingrese numero entero positivo ")
                              leer N
                    fin-mientras
                    devolver (N )
fin _funcion

procedimiento CocRes (N1: entero, N2: entero)


var   Res, Coc:  Entero
Inicio
          Coc-← N1 Div N2
          Res ← N1 Mod N2
          imprimir (“el residuo es: “& Res )
          imprimir (“el cociente es: “& Coc)
fin_procedimiento

procedimiento Multiplicacion (A: entero, B: entero)


var   res:  entero
inicio
     res ← 0
     para i ← 1, i<=B, i←i+1
            res ← res +A
    fin_para
    imprimir (“la multiplicación es: “& res)
fin_procedimiento

También podría gustarte