Logo Studenta

RESUMEN_ALGORITMO_2022 - Denii Amaya

¡Este material tiene más páginas!

Vista previa del material en texto

RESUMEN DE ALGORITMO Y RESOLUCION DE PROBLEMAS
EJE N° 1:
Cuales son acciones básicas de una computadora? 
1. Reconocer distintos tipos de datos
2. Almacenar datos en memoria
3. Realizar operaciones aritméticas relacionales y lógicas mediante UAL (Unidad Aritmetica Logica)
4. Reconocer y ejecutar acciones simples y estructuras lógicas de control
ETAPAS DE LA CONSTRUCCION DE UN ALGORITMO:
1| ANALISIS DEL PROBLEMA: La primera parte es Resolver el problema planteado donde se debe analizar con precisión y claridad con complejidad la interpretación del problema a resolver. 
Un desarrollador no comenzara a intentar resolver el problema si no tiene claro las especificaciones del cliente y requerimiento del usuario. 
Debe plantearse correctamente para perder el tiempo en la implemntacion de algoritmos incorrectos.
Para poder definir el problema concreto es conveniente identificar las especificaciones de entrada y salida del problema.
2| DISEÑO DE ALGORITMO: En esta etapa de diseño se debe determinar el procedimiento que se debe realizar para la solución sea precisa y exacta como una secuencia ordenada de acciones que el procesador deberá ejecutar para obtener los resultados prentendidos.
3| CONSTRUCCION DE UN ALGORITMO: Un algoritmo debe traducirse a lenguaje de programación para que sea interpretado por una computadora de ahí obtenerse el “código fuente” este procedimiento se conoce como “CODIFICACION”.
4| COMPILACION Y EJECUCION: Se debe utilizar un editor ejecutable como un IDE (Identificador de Entorno de Desarrollo) que facilita la ejecución de programas. 
El lenguaje que debamos programar se podrá depurar el programa fuente de los errores de sintaxis del lenguaje, es decir que errores de compilación son detectados y muestra un mensaje con un error. 
El programa se ejecuta cuando no aparezca ningún errores de sintaxis.
5| VALIDACION: La validación permite comprobar que un programa cumple con las especificaciones del problema a resolver para el que fue diseñado. 
Existen dos métodos de validación: 
· Metodo por pruebas 
· Metodo por Verificacion Formal 
· METODO POR PRUEBAS: 
El método de prueba permite:
· Coincidir con el resultado esperado 
· Este procedimiento se repite hasta encontrar todos los errores necesarios para ser probado.
· Se hace una validación de control de calidad.
· Se cuentan los casos de pruebas que permitan asegurar que el programa se ejecuta correctamente a cualquier entrada posible.
· En caso que el programa no presente errores de sintaxis entonces puede ocurrir errores de lógica que no se muestra por el código sino es un error visual por el propio programador , es difícil identificarlo cuando un algoritmo esta mal interpretado.
· VALIDACION POR VERIFICACION FORMAL : Consiste en demostrar formalmente que el programa es correcto. Se realiza en análisis sin ejecutar el programa con lo cual asegura que el programa es valido para cualquier valor de los datos.
La facilidad de verificación y depuración de errores de funcionamiento del programa conducen a mejorar su calidad
6| DOCUMENTACION: Consiste en ir registrando todo el proceso desde análisis hasta validación fundamentalmente agregando al algoritmo y al programa construido, los comentarios que faciliten comprensión de lo que hace cada acción. 
Se consigue de esta manera algoritmos y programa mas fáciles de interpretar y mantener. 
Concepto de Algoritmo: 
Es un conjunto finito ordenado de pasos secuenciales que tiene por fin la solución de un problema determinado
PROPIEDADES DE UN ALGORITMO
1. PRESICION: Las acciones deben ser precisas en su significado esto realiza una buena interpretación y una buena lógica al momento de desarrollar algoritmos
2. FINITUD: Debe ejecutar una cantidad finita de veces.
3. EFECTIVIDAD: Un algoritmo es efectivo si sus acciones conducen al resultado buscado y se realiza en un tiempo finito. Se debe tener en cuenta que un algoritmo debe ser FINITO y no EFECTIVO. 
CARACTERISTICAS DE UN ALGORITMO
1. ROBUTEZ: Un algoritmo debe contemplar todas las facetas del problema que requiere resolver es decir debe seguir todos los pasos secuencias para llegar al resultado. Si se logra un algoritmo rubusto, cualquier giro inesperado del problema será controlado por el.
2. CORRECTITUD: Un algoritmo es correcto cuando da una solución al problema y cumple con las especificaciones y alcanza los objetivos planteados.
3. COMPLETITUD: El algoritmo debe cumplir con todos los recursos necsarios para llegar a una solución satisfactoria.
4. EFICACIA: Es eficaz cuando el resultado de la solución es correcto.
5. EFICIENCIA: Es eficiente un algoritmo cuando cumple con las especificaciones y requerimientos necessarios utilizando la menor cantidad de recursos posibles.
DIFERENCIA ENTRE ALGORITMO Y PROGRAMA
	ALGORITMO
	PROGRAMA 
	El algoritmo es un conjunto de pasos ordenandos secuenciales que requiere la solución de un problema 
	El programa es un conjunto de instrucción dentro de ella son aquellas operaciones, acción o funciones que requiere realizar para ejecutar las instrucciones 
	El algoritmo se expresa en lenguaje simbólico PSEUDOCODIGO es interpretado por lenguaje humano 
	El programa se expresa en lenguaje de programación es entendible e interpretado por una computadora 
	Es una técnica de representación para realizar un algoritmo en conjunto con palabras claves/pasos ordenados para dar solución a un problema
	El lenguaje de programación es una técnica para que la computadora entienda y pueda recibir y enviar información desde la UAL al mundo exterior
ESTRUCTURA DE UN ALGORITMO:
Un algoritmo esta compuesto por dos secciones: 
· LA CABECERA : Se escribe el nombre del algoritmo
· Cuerpo: Esta compuesto por :
· Declaracion de variables : Se especifica el tipo de dato, y el identificador que se va a utilizar.
· Las acciones: Describe las instrucciones que debe plantear a resolver el problema. 
ELEMENTOS DE UN ALGORITMO
· DATOS
· EXPRESIONES
· ACCIONES 
¿Qué es un DATO? 
Un dato es una representación de un objeto o elemento de la realidad de tal manera que sea procesado por la computadora.
ATRIBUTOS DE LOS DATOS: 
· Nombre o identificador
· Valor del dato
· Tipo de dato
· Direccion de memoria
VARIABLE Y CONSTANTE
	VARIABLE
	La variable es una posición de memoria que hace referencia al nombre de un dato donde se almacena un valor que puede cambiar durante la ejecución del programa.
	CONSTANTE
	Una constante es un nombre simbólico donde se almacenal valor de un dato y no cambia su valor durante el proceso de ejecución.
DATOS SIMPLES
· DATOS NUMERICOS:
Los datos numéricos son aquellos que representan números aritméticos para realizar alguna operación matemática y relacionales que sean aplicables en la matemática y en la programación, dentro tenemos dos tipos de datos numéricos que son:
· ENTERO: Los datos enteros son los que permite representar tipos de números enteros por lo que se simbolizan edades, códigos numéricos,numero de calle,cantidades.
· REAL: Los datos reales son que permite representar números decimales como puede ser precio de productos, notas, temperatura,etc.
DECLARACION DE VARIABLE
Toda variable debe ser declarada con el tipo de Dato y su identificador 
La declaración de variable permite guardar el dato en una dirección en memoria donde permite reservar el espacio en memoria para almacenar el valor de esa variable 
Debe verificar si las operaciones que se realiza corresponde al tipo de dato declarado. 
· TIPO DE DATO CARÁCTER
· Una variable carácter es tipo “STRING” en programación donde debe almacenar “cadenas de textos” en ella se almacenas carácter de Codigo ASCII 
· El código ASCII cuenta con 128 caracteres que incluye números,letras,minúsculas y mayúsculas y caracteres especiales. 
· La mayoría de los procesadores utilizan código ASCII que cuenta con 256 caracteres entre 0 y 255 se puede clasificar como:
· Caracteres alfanuméricos: Son letras de la A a la Z (minúsculas y mayuscula)
· Caracteres numéricos: Son números dígitos entre (0 y 9) no se puede realizar operación aritméticosporque no son números
· Caracteres Especiales: Son símbolos representados por el lenguaje que permite utilizar en lenguajes programación (@,;$%#””!=())
· TIPO DE DATO LOGICO
Los tipos de datos lógicos se representan al tipo de dato Booleano donde representa dos valores VERDADERO O FALSO 
Tipo de Dato Ordinales: 
TIPO DE DATO ESTRUCTURADOS
TIPO DE DATO CADENA 
Los datos CADENA son aquellos representados por un conjunto de caracteres que son representados como Nombres, Ciudad, Localidad,etc.
En este tipo de caso se requiere un conjunto de carácter con complejidad ya que en lenguaje de programación cuenta con tipo cadena para resolver la situación planteada.
Un tipo de dato cadena puede tomar como valor una cadena de caracteres donde es una secuencia finita de caracteres se representa entre comilla 
EXPRESIONES 
Las expresiones son un calculo formal que permite ser evaluado donde tiene un solo resultado que consitutuye la combinación entre operadores y operandos. 
Dentro de las expresiones se clasifican en :
· Aritmeticcas
· Relacionales 
· Logicas 
EXPRESIONES ARITMETICAS 
Una expresión aritmética describe el calculo matemático de una expresión entre dos números donde se denomina “operandos” por lo cual son considerados constantes o variables y el resultado del mismo es un numero 	
	OPERANDOS
	OPERADORES
	TIPO DE RESULTADO
	Variables o Constante de Tipo Numerico
	· Suma (+)
· Resta (-)
· Multiplicacion (*)
· Division real (/)
· Division entera (div) o (//)
· Raiz (√)
· Resto (%) 
· Potencia (potencia(base,exponente)
	NUMERICO 
EXPRESION RELACIONAL 
Las expresiones relacionales describe formalmente los predicados lógicos donde se le asigna un valor a las variables que se convierte en proposiciones verdaderas o falsas dependiendo si su conclusión es Verdadera o Falso tiene por objetivo su resultado de esa conclusión donde se obtiene un Resultado Booleano 
	OPERANDOS
	OPERADORES
	TIPO DE RESULTADO
	Variables o Constante del mismo dato de tipo:
· Numerico
· Cadena
· Carácter 
	· Mayor (>)
· Menor(<)
· Igual (==)
· Distinto (¡=)
· Mayor o igual (>=)
· Menor o igual (<=)
	BOOLEANO
EXPRESIONES LOGICAS
Las expresiones lógicas es una expresión formal de un predicado compuesto por conectores lógicos que tiene un resultado un valor lógico booleano es Verdadero o Falso.
En una expresión lógica :
	OPERANDOS
	OPERADORES
	TIPO DE RESULTADO
	Variables o Constantes de Tipo Logico 
	· NEGACION (NO)
· CONJUNCION (Y)
· DISYUNCION (O)
	BOOLEANO
ACCIONES
Una accion se define como un conjunto de pasos sucesivos que debe ejecutarse para resolver un problema planteado donde la accion constituye en modificar los datos intervinientes en el proceso algoritmico, con lo cual las variables declarada pueden modificarse al momento de ejecutar el algoritmo.
Existen dos Tipos de acciones : 
· ACCION SIMPLE: Las acciones simples son entendidas en forma inmediata por el procesador y no puede ser descompuesto en otros pasos sensillos. 
· ACCION ESTRUCTURADA: Es un paso compuesto por otras acciones simples. 
ACCION DE LECTURA:
Las acciones de lectura permite almacenar en una variable un valor especifico desde un dispositivo externo como teclado, monitor, mouse, lector de codigo de barra, sensor de huellas digitales,etc. 
Donde la lectura permite introducir al ambiente valores desde el mundo exterior.
El formate de la accion es:
Leer <nombre de la variable,….,…>
Donde nombre representa una o mas variable a leer en el ambiente 
ACCION DE ASIGNACION
La accion de asignacion permite almacenar en una variable un valor proviene de una constante de otra variable o del resultado de una expresion. 
El formato de esta accion es: 
<nombre de la variable> = <valor>
<nombre de la variable> = <expresion>
Ejemplo:Entero result,num1,num2
Num1=10
Num2= 20
Result = num1+num2
ACCION DE ESCRITURA
La accion de escritura permite comunicar al mundo exterior valores almacenados en la memoria de la computadora a traves de un dispositivo extermo como una pantalla , impresora,etc.
Formato de accion escritura:
Escribir <argumento1,argumento2……..argumenton>
Donde los argumentos pueden ser variables o expresiones 
Los pasos para ejecutar la accion es:
· Obtener el argumento, en caso de ser el contenido de otra variable , la UCP va a su direccion de memoria y lo copia, si es una expresion obtiene su resultado
· Muestre el argumento en el dispositivo externo por ejemplo una pantalla.
EJE N° 2 : CONSTRUCCION DE ALGORITMOS Y SUBPROGRAMAS
CONSTRUCCION DE ALGORITMOS SIMPLES
	ETAPA DEL PROCESO
	OBJETIVO
	ANALISIS DEL PROBLEMA
	Se debe comprender principal ¿Qué se debe hacer? ¿Cómo se debe plantear el problema?
	DISEÑO DE ALGORITMO
	Permite explorar soluciones y seleccionar la que debe considerarse la mas adecuada. Se debe determinar como desarrollar el problema, ¿Cómo se debe hacer? Donde debe especificar e indicar la tarea a realizar.
	CODIFICACION – CONSTRUCCION DEL PROGRAMA
	Se traduce el algoritmo de pseudocodigo a lenguaje de progrmacion donde es interpretado y ejecutado por una computadora
	COMPILACION Y EJECUCION
	
	VALIDACION
	Permite comprobar que la solucion obtenido ha sido valida.
	DOCUMENTACION
	Se debe registrar lo que se realiza en todo el proceso y en distintas etapas.
1| ANALISIS DEL PROBLEMA 	
Comprender un problema implica identificar los datos se necesita para resolver el problema y donde se usaran “datos de entrada” y los datos cuyo resultado sera obtenido al finalizar el algoritmo a esto se llama “datos de salida”
· DATOS DE ENTRADA: Los datos de entrada son los conocidos y deben ser proporcionados desde un dispositivo externo como teclado, lector de barra,etc.
· DATOS DE SALIDA: Se denomina datos de salida a los resultados que debe mostrar el usuario según los requerimientos del problema. 
ESTRATEGIA PARA INTERPRETAR EL ENUNCIADO
· Se debe leer detenidamente todo el enunciado
· Comprender claramente el significado de cada palabra y cada frase
· Poner especial atencion a los signos de puntuación
· Identificar la salida o el resultado del problema
· Identificar datos explicitos (relevantes o irelevantes)
· Identificar datos inplicitos(relevantes o ireleantes) y hacer explicitos 
· Detectar impresiciones
· La Primera Lectura: Permite reconocer el problema e identificarlo donde se plantea: Lugar, actores y acciones. 
Ejemplo una fabrica de electrodomésticos , un supermercado posee información
· Segunda Lectura: Permite detectar que datos son “relevantes” para procesa
La importancia de datos de esta función de las especificaciones del enunciado.
Se debe tener en cuenta los puntos de putuacion ya que depende del significado de cada frase y sobre todo destacar un cambio sintactivo leve, puede provocar una variación semántica fundamental.
La clave para identificar el problema es obtener la información útil apartir de ciertos datos que pueden estar “ocultos” donde otras veces los problemas proveen muchos datos y es importante distinguir datos relevantes de aquellos que no lo están.
Un dato esta expresado en formaa explicita cuando es identificable en el contexto que se usa. En cambio esta implicito cuando es parte del problema aunque no se lo exprese directamente surgen inferencias a partir de otros datos detectados y se los transforman en explicitos.
DISEÑO: TECNICA DIVIDE Y VENCERAS:
Esta parte implica resolver un problema complejo a dividirlo o una o mas parte donde determina mas accesible al momento de leer el programa y desarrollarlo donde constituye con las soluciones encontradas donde es mas fácil llegar al resultado a obtener donde se debe combinar varios subproblemas en una solución original para dar comprensión al leer el programa.
ESTRATEGIA DE APLICACIÓN
PASO 1: 
· ¿Qué se debe obtener? : Se identifica los datos de salida y las tareas que se debe realizar.
· ¿Con que datos cuento? : Se debe tener en cuenta los datos de entrada y apartir de la cantidad de veces que se ingresan se debe determinar una estructura de control adecuada.
· ¿Existen restricciones? Las restricciones se reflejan en estructurasde control que ajustan a las entradas, el proceso que se llevara a cabo junto con los datos de salida donde se representa como sub-problemas 
PASO 2: 
Se debe identificar los sub-problemas para buscar una solución adecuada del que debe tener especifico con claridad en la descripción como:
· Nombre de solución (nombre del subprograma)
· Que hacer? Que datos debe recibir es decir con que parámetros cuento (datos de entrada)
· Que resultado produce ( datos de salida) 
PASO 3: 
Se debe elaborar primero el algoritmo principal que contenga el esquema del proceso donde el cual contiene el nombre de la solución con datos de entrada y salida.
PASO 4 : 
A partir de la solución se debe escribir e invocar los subprogramas correspondientes en el algoritmo principal.
SUBPROGRAMA E INVOCACION DE SUBPROGRAMAS
Defincion de Subprograma: 
	SUBPROGRAMA
	 El subprograma se debe definir antes de ser invocado en el algoritmo principal .
El subprograma contiene parámetros de entrada que se coloca junto con el nombre del sub-programa declarando sus variables de entrada dentro de su ambiente tiene que estar además datos de salida.
De esta manera se puede invocar como si fuera un subprograma pre-definido por el lenguaje.
	INVOCACION DEL SUBPROGRAMA DESDE EL ALGORITMO PRINCIPAL
	Para invocar al subprograma se debe realizar dentro de una acción desde el algoritmo principal que puede ser a través de una acción asignación, escritura o invocación. 
DEFINCION DEL SUB-PROGRAMA:
Un subprograma es una función que precede del algoritmo principal que de esta forma al compilar el programa , el subprograma esta definido antes de su primera invocación o llamada de subrutina a esto se compila antes que se encuentre en el programa principal e una sentencia de invocación o llamada del mismo.
Lo cual esta compuesto por: 
	ENCABEZADO DEL SUBPROGRAMA
	El encabezado esta conformado por :
El tipo de dato que se obtendrá y el nombre del subprograma 
Parametros de entrada (se define el tipo de dato, el nombre de la variable) 
Ejemplo : 
Entero calcula(entero n1,entero n2)
	CUERPO DEL SUBPROGRAMA
	Esta conformado por un “comienzo” y un “Fin” que constituye en dos partes y esta constituido por dos partes :
· Ambiente: Es donde esta declarada las variables para realizar las acciones especificas.
· Acciones: Son aquellas acciones que se necesitan para obtener el resultado.
	PARAMETROS
	PARAMETROS FORMALES : 
Son aquellos parámetros que son declarados dentro de la cabecera del sub-programa a esto también se le llama “variables locales”
	
	PARAMETROS REALES: Son aquellos parámetros que son invocados en algoritmo principal en la invocación del sub-programa donde debe coincidir el tipo,orden y cantidad de parámetro formales.
	ACCION RETORNO
	La acción retorno devuelve un resultado o puede no devolver ningún resultado
Ejemplo:
Return(resultado) – Retorna un resultado
Return () – No retorna ningún resultado.
SEGUIMIENTO O TRAZA DE UN ALGORITMO
El seguimiento de un algoritmo se puede definir como la ejecución de las acciones que constituyen en donde consiste en seguir paso a paso las instrucciones del algoritmo con datos concretos de manera de comprobar si la solución adoptada en la fase de diseño resuelve el problema.
El seguimiento permite comprobar que el algoritmo funcióna correctamente donde permite detectar errores o cuando se crea conveniente simplificar para incrementar su eficacia y velocidad.
El seguimeinto se puede realizar utilizando una tabla que muestre los valores que toman las distintas variables declaradas que se ejecutan las acciones. 
SEGUIMIENTO DE ALGORITMOS CON SUBPROGRAMAS
Para realizar el seguimiento de un algoritmo que utilice un subprogramas que debe representar las variables y parámetros en cuadros diferentes según sea el algoritmo principal o de los subprogramas.
EJE N° 3: ACCIONES ESTRUCTURADAS
FLUJO DE CONTROL Y ESTRUCTURA DE CONTROL 
	FLUJO DE CONTROL
	ESTRUCTURA DE CONTROL 
	El flujo de control es el orden que se ejecutan las acciones.
En lenguajes de programación son las instrucciones que se ejecutan en un programa.
Por lo general las acciones se ejecutan secuencialmente a esto se llama “flujo natural”
	La estructura de control consiste el flujo de control especifico donde las acciones se ejecutan en distintos tipos de flujo de control, que se clasifican en tres tipos:
· Secuencial
· Selección
· Iterativo
· SECUENCIA:
Una secuencia esta representada por un conjunto de acciones que se ejecutan una sola vez de forma consecutiva y ordenada.
SELECCIÓN:
El proceso selectivo consiste en una accion estructura que conduce a la ejecucion de una accion entre accion alternativas. Es decir si no se cumple la condicion en la primera opcion debe cumplir en la siguiente y asi sucesivamente pero solo UNA accion debe cumplirse.s 
Las palabras reservadas: 
Si-entonces-Sino-FinSi a esto se llama delimitadores
Dentro de esta estructura se clasifican en tres tipos de procesos selectivos:
	SELECCIÓN SIMPLE
	Los procesos de selección simple son aquellas estructuras donde debe evaluar si la condición se cumple , se ejecutara la acción (1 o N aveces) 
Si es FALSA, no se ejecutara y saldrá del proceso selectivo.
	SELECCIÓN DOBLE
	Este proceso donde evaluar si la CONDICION es VERDADERA O FALSA por lo cual deberá ejecutar la opción a si es verdadera Sino,entonces será la siguiente opción, pero nunca ejecutara ambas.
	SELECCIÓN MULTIPLE
	Esta estructra se utiliza cuando debe tomar una decision de varias opciones lo cual nos permite enumerar de manera ordena y permite selecciónar una opcion dentro de un conjunto de alternativas en el valor almacenado de la variable de control, se debe realizar una accion de todas las alternativas es decir no es repetitiva. 
A esta estructura se llama “SEGÚN-FINSEGUN” 
ITERACCIONES
· Las iteracciones son acciones repetitivas que se utilizan para repetir una o mas acciones que se utilizan dentro de un bucle o ciclo. 
· Las acciones se repiten cuando se llama al cuerpo del ciclo y cada repetición debe estar dentro del cuerpo del bucle o ciclo donde esta compuesta por un flujo de control que controla que bucle del ciclo donde itera un numero de veces 
· Este flujo de control esta controlado por una variable de control o un contador.
ESTRUCTURA PARA-FINPARA
· Las estructura Para-FinPara es una estructura iterativa que representa la ejecución es repetida de una o mas acciones. 
· En esta estructura es el numero de veces que se ejecutan el cuerpo del ciclo donde se conoce el numero fijo que se repite el ciclo con anticipación 
· Este proceso iterativo puede ser controlado por un contador o una variable de control.
· La variable i va iterando en una unidad
· Esta estructura iterativa se representa como : 
· v : variable de control que controla el ciclo
· vi: Indica el punto inicial desde la 1° posición de la variable v donde compara que sea no supere a valor vf donde si es verdadero se ejecutara el cuerpo del ciclo.
· vf: Indica el punto final del ciclo donde vf sea mayor que vi donde si es V se ejecutara el cuerpo del ciclo hasta el valor vf.
MIENTRAS-FINMIENTRAS
Esta estructura se tiene en cuenta que :
· No se sabe anticipadamente el N veces que se repite el ciclo por lo cual es UNA ESTRUCTURA REPETITIVA NO DEFINIDA.
· La condición del Mientras-FinMientras es una expresión relacional o lógico cuyo valor es BOOLEANO a esta condición es una VARIABLE CENTINELA que controla la ejecución del ciclo 
· Si la condición es VERDADERA se ejecutara las acciones del cuerpo del ciclo hasta que la condición sea FALSA. 
· Se saldrá del cuerpo del ciclo y se ejecutara las acciones fuera del cuerpo de Mientras evaluando la condición nuevamente antes de salir del cuerpo del ciclo esto se llama “pre-test” se ejecutaran 0 o mas veces depende de la condición.
HACER-MIENTRAS
· Esta estructura se ejecuta el numero de veces que se ejecuta un conjunto de acciones dependiendo del valor de la condición es evaluada del final del ciclo.
· Se ejecuta de 1 o N veces
BUCLE ANIDADOS:
EJE4: OPERACIONES BASICAS
CONTADORES Y ACUMULADORES
	CONTADOR
	· El contador se utiliza para calcular la frecuencia de un evento 
· Es una variable TIPO ENTERA. 
· Se incrementa de a una , y se le asigna nuevamente a la variable contador.
· Se inicializa en 0 
· Se utiliza para problemas cuando debe contarse la cantidad total de un producto vendido o cantidad de estudiantes de UNSJ
	Entero cont
Cont = 0 
Comienza el proceso iteractivo 
Cont=cont+1
Se utiliza en una acción Escribir.
	ACUMULADOR
	· El acumulador es una variable numérica 
· Es una variable que puede ser de tipo ENTERA O REAL
· Se va incrementando en un valor que no es fijo.
· Se utiliza para realizar sumas sucesivas de distintas iteraciones en un ciclo.
· El sumador se inicializa en 0 (cero) y luego se incrementa su valor en una variable
	Real dato,suma
suma = 0 
Comienza el proceso iteractivo 
Leer dato
Suma = suma+dato
Fin de Proceso Iterativo
Se utiliza en una acción Escribir.
Se puede usar en una expresión.
	MAXIMO
	· Esta variable máximo se utiliza para indicar la máxima cantidad de estudiantes que tiene la carrera de Informatica o máxima cantidad de producto x vendido en el dia
· Sirve para indicar el máximo valor de un conjunto de datos donde se debe determinar dentro de un proceso iterativo
· Para ello se debe declarar con una variable max que inicializar en 0 (cero) donde indica el valor mas pequeño elegido para cualquier otro valor del cual se ingrese será superior.
· Para calcular en un proceso iterativo debe realizar una comparación entre el dato y la variable max donde quedara almacenada el valor máximo procesado. 
	Real max 
Max = 0
Si (Max < Variable)
Entonces 
 Max = Variable 
 [Actualiza la variable y guarda el valor en la variable max]
Aux = Variable2
	MINIMO
	· Para calcular el mínimo se debe realizar el siguiente procedimiento:
· Se inicia en el valor máximo para asegurar que el dato sea mayor que la variable minimo y en la cual debe ser procesado.
· El valor de la variable se actualiza cada vez que el numero procesado sea menor de tal manera que cuando finalice el bucle , se guardara en la variable el dato menor.
	Real min 
Min = 99999
Si (Min> Variable)
Entonces 
 Min = Variable 
 [Actualiza la variable y guarda el valor en la variable max]
Aux = Variable2
	BANDERA LOGICA 
	· La bandera lógica se utiliza para saber si el evento sucedió o no.
· Como saber si en un aula existe persona mayor de 30 años 
· Tiene como resultado booleano o lógico (VERDADERO O FALSO)
· Se debe analizar cada uno de los datos de los alumnos que quieran cumplir la condición si el evento sucedió o no.
· Si se cumple (levanta bandera) – RESULTADO VERDADERO
· Si no sucedió (baja bandera) – RESULTADO FALSO
	Lógico band
Se evalua band
Si (band == verdadero )
Entonces 
 SI SUCEDIÓ EL EVENTO
Sino 
 NO SUCEDIÓ EL EVENTO
EJE 5: ARREGLOS 
¿Qué es un arreglo? 
· Un arreglo es una variable que esta almacenado en una estructura de datos en un conjunto homogeno que son datos identificados que son almacenados en posiciones continuas de memoria. 
· Es decir que son almacenados en posiciones de memoria de manera continua de manera secuencial. 
· Para acceder a una componente del arreglo debe ser accedida de manera directa sin necesidad de recorrer todos los componentes anteriores.
· Un arreglo ocupa una posición fija de memoria que determina la cantidad y el tipo de dato de sus componentes
· Por lo que se conoce como una estructura de datos estatica. 
DECLARACION DE UN ARREGLO
Para declarar una arreglo se declara indicando:
· El tipo de dato con el nombre de la variable y el tamaño del arreglo entre corchetes [N] 
· Tambien se puede declarar con una variable global “CONSTANTE” donde N indica el tamaño del arreglo 
<tipo de dato del arreglo><identificador del arreglo> [<tamaño de arreglo>]
Ejemplo : real venta[20] 
 Constante N = 20
 Real venta[N]
CARGA DE UN ARREGLO
Las cargas de un arreglo se coloca la información del procesamiento en arreglo, dentro de las cargas se diferencia en 2 tipos de cargas
CARGA SECUENCIAL
CARGA ALEATORIA
CARGA DESORDENADA
CARGA ORDENADA
CARGA SECUENCIAL
Una carga secuencial es una carga que debe recorrer cada componente del arreglo de manera secuencial es decir que va a recorrer cada una de las posiciones de memoria, de manera continua y lineal. 
Todos los componentes del arreglo van a ser ingresado de forma ORDENADA y SECUENCIALMENTE
Para realizar una “CARGA SECUENCIAL “ se realiza en 2 formas
POR ACCION DE LECTURA 
POR ACCION DE ASIGNACION 
CARGA POR LECTURA
· La carga secuencia “POR LECTURA” se realiza por N componentes donde se realiza una lectura atraves del teclado de N valores. 
· Esta forma se lee cada uno de los componentes del tamño del arreglo desde el primer componente hasta el ultimo de forma SECUENCIAL y se iran almacenando de forma continua el valor de cada uno de los componentes apartir de la posición 0 
Constante N = 30 //Declara una variable global con el tamaño del arreglo 
Para i desde 0 hasta N – 1 // Se le resta 1 porque las posiciones empiezan en 0 
 Leer venta[i] // i indica el índice de la posición de memoria del arreglo donde se leera cada posición de memoria que recorra el ciclo. 
 FinPara 
CARGA POR ASIGNACION: 
La carga de los elementos de un arreglo se realiza a través de una carga automática donde se le asigna un valor a cada una de las componentes del arreglo
Donde todas las posiciones se le asignara un valor determinado. 
Constante N = 30 //Declara una variable global con el tamaño del arreglo 
//GLOBAL donde va a ser visible para cada subprograma y el programa principal
Para i desde 0 hasta N – 1 // Se le resta 1 porque las posiciones empiezan en 0 
 Venta[i] = 0 // i indica el índice de la posición de memoria del arreglo donde se le asignara el valor 0 a cada una de las componentes del arreglo
 FinPara 
CARGA ALEATORIA (DESORDENADA)
· Las cargas aleatorias se pueden cargar de forma alternada sin especificar el orden ni la distribución de sus componente del arreglo.
· El orden de ingreso no coincide con el orden que se almacenar los datos 
· Se puede realizar las cargas por “ACCION DE LECTURA” O “ACCION DE ASIGNACION” o “ACCESO DIRECTO” 
· Además puede realizar con una ESTRUCTURA ITERATIVA “Para-FinPara” o en caso de no conocer el tamaño del arreglo se utilizara “Mientras-FinMientras” 
ACCION POR LECTURA :
 Se realiza en 2 formas usando Estructura Iterativa “PARA-FINPARA” o “Mientras-FinMientras”
Void carga(real x[N])
Comienzo
Entero num 
Leer num
 Mientras(num!= 0 )
 Leer x[num – 1 ] //x es la posición de memoria donde indica el tamaño del arreglo y num es el contenido ingresado por teclado donde leera el programa que valor tendrá cada posición 
 Leer num
 FinMientras
 Retorna( ) 
 Fin 
Entero pos
Real valor
Escribir “Ingresar posición de la componente y el valor “
Leer pos,valor
Venta[pos – 1 ] = valor //Las posiciones empiezan en 1 
//El índice de las componente en 1 
N = 30
Void carga_aleatoria(real imp[N])
Comienzo
Real imp
Entero num,i 
Para i desde 0 hasta N – 1 
Escribir “Ingrese numero de cajero e importe”
Leer num,imp
Imp[num-1] = imp // El programa va a leer cada numero aleatorio de cajero y a cada num de cajero se le asigna un importe de manera aleatorio. Y se recorrerá todo el arreglo repitiendo los pasos
 FinPara
 Retorna( ) 
 Fin
ACCION POR ASIGNACION: 
Las cargas aleatorias por asignación se puede realizar en dos métodos diferentes: 
· Asignando un valor a a una variable realizando el acceso directo a una posición de memoria del arreglo asignándole un valor a esa posicion:
Ejemplo venta[2] = 18
· Haciendo el acceso directo a una componente donde realiza una operación entre dos componentes
	19
	29
	10
Ejemplo venta[1] = venta[0] + venta[2] 
RECORRIDO UN ARREGLO 
Para recorrer el arreglo debe realizar el recorrido de la primera posición 0 hasta N posiciones ,donde N indica el numero del tamañodel arreglo 
Si se desea escribir alguna componente del arreglo debe colocarse el identificador de la estructura, seguido del índice y entre corchetes
Para i desde 0 hasta N - 1 
 Escribir venta[i] //Mostramos el contenido de la variable venta el contenido del arreglo y se realiza el recorrido hasta la ultima posición.
 FinPara
En la invocaciones de los subprogramas con arreglos se realiza la invocación con sus parámetros formales donde debe colocar solamente el nombre de la variable arreglo
Ejemplo:
 Carga(venta)
 P = promedio(venta)
 Muestra(venta) 
OPERACIONES BASICAS CON ARREGLOS
Contadores:
· En arreglos los contadores se utiliza para contar cantidades,edades, etc.
· Donde en arreglos se le asigna a cada componente del arreglo 0 donde se inicializa para después valla contando incrementando en una unidad
· C[índice] = C[índice] + 1
Para realizar un arreglo de contadores se realiza:
1| CREAR UN SUB-PROGRAMA “CEREA”: Se le asigna cero (0) a cada una de las componentes del arreglo para luego poder incrementar en 1, caso contrario el programa ejecutara mal el resultado del contador
Venta[i] = 0 
2| SE CARGA EL ARREGLO DE CONTADOR: Se realiza una carga donde debe realizar en un proceso iterativo dentro del ciclo se ingresa el número de sucursal donde va a cargar el numero de sucursal de manera aleatoria.
Venta[suc -1 ] //Hace referencia a la 1° componente del arreglo de la posición 0 lo cual los contadores, y se va incrementando en uno
Venta[suc-1] = venta[suc-1] + 1
3| MOSTRAR EL ARREGLO: Se debe mostrar el arreglo dentro de un proceso iterativo , en donde se realiza una acción de escritura en la cual se muestra el contenido del cada componente que se realizo las venta de cada una de las sucursales. 
	Void cerea(entero venta[5])
Comienzo
Entero i 
Para i desde 0 hasta 4
Venta[i] = 0 FinPara
Retorna( ) 
 Fin 
	Void carga(entero venta[5])
Comienzo
Entero i ,suc
Para i desde 0 hasta 200
Escribir “Ingresar N° de sucursal”
Leer suc 
Venta[suc – 1 ] = venta[suc-1] +1
FinPara
Retorna ( ) 
 Fin
	Void muestra(entero venta[5])
Comienzo
Entero i 
Para i desde 0 hasta 4
Escribir “La sucursal N° i+1,”Tiene “,venta[i] , “ventas”
FinPara
Retorna( ) 
Fin 
	/*Algoritmo Principal*/
Comienzo
Entero vent[5]
Cerea(vent)
Carga(vent)
Muestra(vent)
Fin 
ACUMULADORES
Los acumuladores en arreglos se utilizan para sumar números enteros o reales en donde debe sumar como importes, notas,etc
Para realizar un arreglo de contadores se realiza ciertos pasos:
1| Sub-programa “Cerea” : 
· Se debe realizar el proceso dentro de un proceso iterativo dentro del ciclo se le asigna a la variable acumulador 0 
· Se debe asignar a cada componente del arreglo cero (0) recorriendo todas las componente del arreglo.
· Esto es necesario para luego poder utilizar como acumulador y realizar la suma correspondiente. 
2| Sub-Programa “CARGA”: 
· Se define una función “carga” donde carga el arreglo de acumulador
· En esta función se carga las ventas que se realizaron en cada una de las sucursales 
· Imp[suc-1] //hace referencia la posición 0 de la componente 1 donde recorre todas las componente del arreglo y se le sume la venta de la sucursal.
· Es decir que a la sucursal ingresada se le asigne la cantidad de ventas que realizo esa sucursal. 
venta[suc-1] = venta[suc-1] + venta 
· Asi debe recorrer las 200 ventas cargadas 
3| Subprograma “Muestra”: 
En un proceso iterativo se realiza una acción de “ESCRIBIR” debe mostrar el numero de cada sucursal del arreglo cargado y el contenido de la componente es decir la cantidad de ventas que se cargaron. 
	Void cerea(real venta[5])
Comienzo
Entero i 
Para i desde 0 hasta 4
venta[i] = 0 FinPara
Retorna( ) 
 Fin 
	Void carga(real venta[5])
Comienzo
Entero i ,suc
Real vta
Para i desde 0 hasta 200
Escribir “Ingresar N° de sucursal y ventas realizadas”
Leer suc ,vta
venta[suc – 1 ] = venta[suc-1] + vta
FinPara
Retorna ( ) 
 Fin
	Void muestra(real venta[5])
Comienzo
Entero i 
Para i desde 0 hasta 4
Escribir “La sucursal N° “ i+1 “Tiene “venta[i] , “ventas”
FinPara
Retorna( ) 
	/*Algoritmo Principal*/
Comienzo
real venta[5]
Cerea(venta)
Carga(venta)
Muestra(venta)
Fin 
BUSCAR MAXIMO Y BUSCAR MINIMO
Para encontrar el valor mínimo y valor máximo de un arreglo requiere:
· Encontrar un “único valor” en donde debe devolver en el programa principal y guardarlo en una posición de memoria el valor encontrado
· Debe encontrar el “único valor” máximo o mínimo en un proceso iterativo Para-FinPara donde recorra todas las componentes del arreglo
· Dentro del ciclo se realiza un proceso selección “SI-FINSI” donde compara que el valor es mayor a máx. o en mínimo el valor es menor al mínimo
	MAXIMO
	MINIMO
	Entero maxi(entero imp[N])
Comienzo
Entero i ,max 
Max = 0 
Para i desde 0 hasta N – 1 
 Si (Max < imp[i])
Entonces max = imp[i]
 Finsi
Fin Para
Retorna(max) 
Fin
	Entero minimo(entero imp[N])
Comienzo
Entero i ,min 
min = 99999
Para i desde 0 hasta N – 1 
 Si (min< imp[i])
Entonces min = imp[i]
 Finsi
Fin Para
Retorna(min) 
Fin 
· En caso de que deba encontrar varios valor mínimos o máximo y debemos guardarlo y mostrarlo por lo cual debe “repetirse” el arreglo.
· Se debe crear un subprograma Compara donde recorra todo el arreglo y no devuelva valor 
	COMPARA MAXIMO
	COMPARA MINIMO 
	Void compara_max(entero imp[N],entero xmax)
Comienzo 
Entero i 
Para i desde 0 hasta N-1
 Si (imp[i] == xmin)
 Entonces 
 Escribir “El supermercado “ i+1,”tiene el importe máximo de ventas”
 Finsi 
 FinPara
 Retorna( ) 
 Fin
	Void compara_min(entero imp[N],entero xmin)
Comienzo 
Entero i 
Para i desde 0 hasta N-1
 Si (imp[i] == xmin)
 Entonces 
 Escribir “El supermercado “ i+1,”tiene el importe máximo de ventas”
 Finsi 
 FinPara
 Retorna( ) 
 Fin
BANDERA LOGICA EN ARREGLOS
· La bandera lógica en arreglos se identifica si un evento sucedió o no 
· Si el evento sucedió el valor de la bandera será “VERDADERO” 
· Si el evento no sucedió el valor de la bandera será “FALSO”
Si ( edad <30 ) //Pregunta si la condición se cumple o no 
Entonces bandera = VERDADERO //Sucedió el evento retorna valor VERDADERO
 Sino 
 i = i+1 // No sucede entonces debe seguir recorriendo todo el arreglo
 
EJE 6 : SUBARREGLOS & BUSQUEDAS 
SUB-ARREGLOS
· Los subarreglos contienen componentes de otro arreglo original.
· El tipo de dato de un sub-arreglo debe ser del mismo tipo que de un arreglo original.
· Se puede usar toda las componentes del Sub-arreglo o una parte
· En caso de usar una parte debe hacerse en posiciones contiguas y cantidad de componentes usadas debe resguardarse en una variable
	Void carga(real edad[50])
Comienzo
Entero i 
Para i desde 0 hasta 49 
Leer edad[i]
FinPara
Retorna ( ) 
 Fin
	Entero carga_subarre(real edad[49],real sel[50])
Comienzo
Entero i ,c
C = 0
Para i desde 0 hasta 49
 Si (edad[i] >25)
 Entonces sel[c] = edad[i]
 C=c+1
Finsi
 Finpara
 Retorna( c )
 Fin
	Void muestraSub(real sel[50],entero can)
Comienzo
Entero i 
Para i desde 0 hasta 49
 Escribir sel[i]
 FinPara
Retorna( ) 
 Fin
	/*Algoritmo Principal*/
Comienzo
Entero edad[50],selec[50],c
Carga(edad)
C = carga_subarre(edad,selec)
muestraSub(selec,c) 
Fin 
BUSQUEDAS
BUSQUEDA BINARIA
BUSQUEDA SECUENCIA
BUSQUEDA SIMPLE	
BUSQUEDA COMPLEJA
BUSQUEDA SECUENCIAL
Este tipo de busqueda se debe recorrer y examinar cada uno de los elementos de un arreglo, desde el primer hasta el elemento buscado o hasta que examinado todos los elementos del arreglo sin éxito. 
Existen tres forma de realizar una “Busqueda Secuencial” 
 FORMA 1: Con Bandera Logica 
 
· La bandera lógica se utiliza para verificar si el elemento se encontró o no 
· Se inicializa la variable i = 0 y la bandera se inicia en valor booleano en falso 
· Band = falso 
· Se procesa la información en un ciclo iterativo Mientras-FinMientras 
· Se verifica si la variable del arreglo es igual al elemento a buscar 
· Sila condición se cumple la bandera pasa a ser VERDADERO 
· Si la condición no se cumple la variable i va a incrementar en uno i = i+1
· Retorna el ultimo valor de bandera lógica 
En el algoritmo principal :
· Se invoca el sub-programa en una variable booleana 
· En un proceso de selección Si-FinSi 
· Pregunta si la bandera es igual a VERDADERO 
· Si la condición se cumple EL ELEMENTO SE ENCONTRO
· Caso contrario EL ELEMENTO NO SE ENCONTRO 
 FORMA 2: Sin Bandera Logica 
· Este método de búsqueda secuencial su función es ir incrementando en una unidad
· La variable centinela ( i ) se incrementa en uno siempre que cumpla 2 condiciones del ciclo
· El índice (i) sea menor que el tamaño del arreglo y la variable del arreglo sea distinto al elemento a buscar.
· Si estas dos condiciones se cumple se incremente el índice en una unidad 
· Retorna el ultimo valor que obtuvo el (i) 
· En el algoritmo principal se invoca el sub-programa
· Pregunta Si el elemento a buscar es menor al tamaño del arreglo 
· Se debe mostrar la posición que se encuentra en el arreglo 
· Caso contrario no se el elemento en el arreglo. 
FORMA 3: Utilizando un elemento centinela
· La búsqueda secuencial (centinela) se utiliza cuando en un arreglo de N componentes 
· Debe definirse con una componente mas en el arreglo [N+1]
· Se agrega la nueva componente en la ultima posición del arreglo como elemento adicional
· En este metodo , la búsqueda siempre tendrá éxito. 
· No es necesario preguntar en cada pasada si encontró o no el arreglo original
· Si el índice alcanza al valor N esto significa que el elemento no se encontró. 
FORMA 1 
	Void carga(entero xarre[N])
Comienzo
Entero i 
Para i desde 0 hasta N – 1 
 Leer ar[i] 
 FinPara 
 Retorna ( ) 
 Fin
	Booleano buscar(entero ar[N],entero elem)
Comienzo
Entero i 
Booleano esta //variable del elemento a encontrar
i = 0 
esta = falso
Mientras((i<N) y (esta == falso))
 Si (ar[i] == elem)
 Entonces esta = verdadero
 Sino i = i+1
 Finsi
 FinMientras
Retorna(esta)
 Fin
	/*Algoritmo Principal*/
Comienzo
Entero arre[N],elemento
Booleano p 
Carga(arre)
Leer elemento 
P = buscar(arre,elemento)
Si (p == verdadero ) 
Entonces
 Escribir “El elemento fue encontrado “
Sino
 Escribir “El elemento no se encontró”
 Finsi
 Fin
FORMA 2: 
	Void carga(entero xarre[N])
Comienzo
Entero i 
Para i desde 0 hasta N – 1 
 Leer ar[i] 
 FinPara 
 Retorna ( ) 
 Fin
	Entero buscar(entero ar[N],entero elem)
Comienzo
Entero i 
i = 0 
Mientras((i<N) y (ar[i]!= elem)
 i = i +1 
 FinMientras
 Retorna( i ) 
 Fin
	/*Algoritmo Principal*/
Comienzo
Entero arre[N],element,p
Carga(arre)
Leer elemento 
P = buscar(arre,element)
Si (p <N)
Entonces
 Escribir “El elemento fue encontrado en la posicion “,p
Sino
 Escribir “El elemento no se encontró”
 Finsi
 Fin
FORMA 3 : 
	Entero buscar(entero ar[N+1],entero elem)
Comienzo
Entero i 
i = 0 
ar[N]=elem
Mientras (ar[i]!= elem)
 i = i +1 
 FinMientras
 Retorna( i ) 
 Fin
	/*Algoritmo Principal*/
Comienzo
Entero arre[N+1],element,p
Carga(arre)
Leer element
Arre[N]= elemnent
P = buscar(arre,element)
Si (p ==N)
Entonces
 Escribir “El elemento no se encontró”
Sino
 Escribir “El elemento se encontró en la posicion”,p
Finsi
 Fin
BUSQUEDA BINARIA
· La búsqueda binaria sirve para encontrar un elemento dentro de un arreglo ordenado
· Si el arreglo esta ordenada, se divide en 2 partes la búsqueda
· En donde esta búsqueda compara que elemento que se busca esta en el medio del arreglo si coincide “se encontró el elemento buscado y se muestra el contenido de esa posición”
· En caso contrario en caso de no encontrarse en el medio del arreglo entonces:
· Si el elemento a buscar es menor al elemento del medio entonces el arreglo esta ordenado de manera “descendente “ (de menor a mayor) 
· Si el elemento a buscar es mayor al elemento del medio entonces el arreglo esta ordenado de manera "ascendente” (de mayor a menor)
· Si el elemento a buscar es menor al elemento medio entonces se comienza a buscar de la 1° componente del arreglo de izquierda a derecha donde debe encontrarse en alguna posicion antes de llegar a la posición del medio
· Se divide en 2 donde el resultado de esa división, es la posición que debería estar el elemento a buscar 
 Medio (inf+sup) div 2 //medio = 0+4 //2 = 2 //la posición 2 es el medio del arreglo de la búsqueda 
Elemento = 7 
	2
	7
	15
	20
	25
 0 1 2 3 4 
1| Se realiza la carga de una búsqueda donde debe tener en cuenta que el arreglo sea ordenado.
2| En un subprograma Buscar se declara el infimo y supremo donde infimo se inicia en 0 y el supremo se le asigna N – 1
	Inf = 0 //indica posición 0 del arreglo 
Sup = N-1 //Indica la ultima posición del arreglo 
3| En un proceso iterativo Mientras-FinMientras utiliza una variable centinela donde 
La búsqueda comienza desde la posición 0 y sigue recorriendo todos los elementos del arreglo de manera secuecial 
Compara el valor con el elemento en el medio donde “medio” es el elemento que se encuentra en la “mitad” del arreglo 
	Void carga(entero xar[N],entero elem)
Comienzo
Entero i 
Para i desde 0 hasta N-1
 Leer ar[i]
FinPara
 Retorna( )
 Fin
	Entero buscar(entero xar[N],entero elem)
Comienzo
Entero inf,sup,medio
Inf = 0 
Sup = N-1
 Medio = (inf+sup)div 2 
Mientras((inf<=sup) y (elem!= xar[medio]))
 Si(elem<xar[medio] ) 
Entonces sup = medio -1
Sino inf = medio+1
Finsi
 Medio = (inf+sup)div 2
 FinMientras
Si (inf<=sup)
Entonces retorna(medio)
Sino retorna(-1)
 Finsi
Fin 
	/*Algoritmo Principa*/
Comienzo
Entero arre[N],p,elem
Carga(arre)
P = buscar(arre,elem)
Si (p!=-1)
Entonces 
 Escribir “El elemento se encuentra en la posición”,p
Sino 
 Escribir “El elemento no se encontró”
Finsi
 Fin
EJE 7 : REGISTROS CON ARREGLOS 
¿Qué son los registros? 	
· Un registro es una estructura de datos que permite almacenar una colección finita de datos 
· No es necesario que sea del mismo tipo 
· Un registro ocupa celdas consecutivas de memoria. 
· Permite almacenar un conjunto de datos de diferente tipo en un REGISTRO
· Cada elemento de este conjunto de valor se almacena dentro de una SOLA VARIABLE 
A esto se llama Registro alumno
· A cada elemento o dato almacenado dentro de un registro se lo denomina "CAMPO” 
REGISTRO alumno 
	Denise
	Rivadavia 540 
	37742723
	2646712924
	20627
	Nombre
	Direccion
	DNI
	Celular
	Matricula
	CAMPO 
	Cada uno de los datos almacenados en el REGISTRO se llama “CAMPO” ,cada especificificador indica el nombre de la variable y el tipo de dato
 
¿Cómo se declara los registros? Se DEFINE REGISTRO en donde se especifica la estructura del nombre del registro que va estar estructurado, trabaja como tipo de Dato 
Dentro del cuerpo del registro se encuentro elementos o datos almacenados dentro de los registro con el tipo de dato y su identificador a esto se le llama CAMPOS 
<tipo de dato> . <tipo de identificador del campo>
Registro sueldos 
 } entero DNI
 Real importe 
 Cadena nombre
 Entero celular 
 Entero edad
 } 
 Sueldo Emp
Se DECLARA el registro con una variable y se utilizara para realizar los procesos necesarios. 
<identificador registro> <identificador Variable-Registro>
Registro <identificador de registro> 
 { <tipo de dato> <identificador del campo1>
 <tipo de dato><identificador del campo2>
 ……………………………………..
 ……………………………
 <tipo de dato><identificador del campoN>
 } 
<identificador registro> <identificador Variable-Registro>
¿ Como se accede a cada campo del registro?
	Denise
	20.589 
	37742723
	2646712924
	27
	Nombre
	Importe
	DNI
	Celular
	EdadAcceso al Campo del registro 
 Emp.nombre
 Nombre del Registro 	 Nombre del campo
Para tener acceso a los campos se puede acceder de manera directa, teniendo uso de “acceso directo” utilizando el identificador del campo en vez de utilizar la posición de memoria 
Donde se accede haciendo uso del nombre declarado del registro concatenado con un punto (.) y el identificador del campo 
El acceso a los campos se realiza de la siguiente manera: 
<identificador del registro> . <identificador del campo>
Ejemplo emp.nombre
 Emp.direccion
 Emp.DNI
¿Cómo se cargan los datos en un registro?
Los datos en un registro se cargan a través de una lectura o con una asignación 
CARGA A TRAVEZ DE LECTURA: 
Los datos se carga a través:Leer emp.nomb
Leer emp.importe
Leer emp.DNI
Leer emp.celular
Leer emp.edad
SE CARGAN TODOS LOS CAMPOS, UNO POR UNO DE MANERA CONSECUTIVA
INGRESA ACCESO DE CAMPO, UNO POR UNO
	
 
CARGA A TRAVEZ DE ESCRITURA :
Escribir emp.nomb
Escribir emp.importe
Escribir emp.DNI
Escribir emp.celular
 Escribir emp.edad
Se realiza una “ESCRITURA” para mostrar por pantalla el contenido de cada campo donde debe MOSTRAR 
CARGA A TRAVEZ DE ASIGNACION 
La acción de asignación esta permitida en el uso de REGISTROS donde si declaramos dos variable del mismo tipo de Registro Sueldo donde las variable se declaran A y B donde A=B donde los valores del campo A se lo asigna a la variable B se realiza una copia de los datos del A 
Si se declara dos variable emp y persona 
La asignación con registro seria de esta forma:
emp.nomb = persona.nomb
emp.importe = persona.importe
 emp.DNI = persona.DNI
emp.celular = persona.celular
emp.edad = persona.edad 
La ASIGNACION copia todos los valores asociados con el registro emp al registro persona 
ANIDAMIENTO DE REGISTROS
· Los campos de un registros pueden ser a su vez un registro que se puede anidar teniendo en cuenta el registro anterior
· En este ejercicio se van agregando campos al registro y se cierran entre llaves { } 
· Lo cual el indica el incio y cierre de campos del registro. 
· Los anidamientos sirve para agregar nuevos campos al registro este y se declara al final en registro que estuvo declarado previamente. 
· Este método sirve en caso que se necesite agregar mas información a cada registro.
Registro Sueldo 
 { entero DNI
 Real importe 
 Cadena nombre
 Entero celular 
 Entero edad
 Registro A 
 { entero hra
 Entero num_emp
 Carácter categ 
 } 
 Real prec_hora
 } 
 Sueldo emp
 
ARREGLOS COMO CAMPOS DE REGISTRO
Los campos de un registro pueden contener arreglos.
Se supone que en lugar de un único precio se necesite registrar todas las horas correspondiente por jornada de 8 horas en el dia al empleado 
Registro Sueldo 
 { entero DNI
 Real importe 
 Cadena nombre
 Entero celular 
 Entero edad
 Registro A 
 { entero hra
 Entero num_emp
 Carácter categ 
 } 
 Real prec_hora[8]
 } 
 Sueldo emp
 
Para leer o mostrar en una carga secuencial (ordenada) debe realizar a traves de una estructura iterativa Para-FinPara 
Asi como : 
 Para i desde 0 hasta 7
 Leer emp.prec_hora[i] 
 FinPara 
 
ARREGLOS DE REGISTROS
· Los registro sirve para guardar datos de un conjunto de datos y deben ser almacenados
· Los arreglos son un conjunto de datos homogéneos esto significa que cada componente debe ser del mismo tipo,
· Esta definición aplica para los registros que debe guardar información de Ejemplo varios empleados o varios alumnos
· Cada una de las componentes del registro , es un REGISTRO DEL ARREGLO 
· Varia entre 0 hasta N – 1 
· Las componentes no son variables como en Arreglos sino “LAS COMPONENTES TOMA VALOR DE UN REGISTRO”
· Guardar datos de los ALUMNOS o EMPLEADOS 
PASO 1 : Lo primero que debe realizar es definir el tipo de registro : 
 Registro alumno 
 { cadena nomb
 Entero dni 
 Real nota 
 }
PASO 2 : Se debe declarar al finalizar de cargar todos los campos dentro de registro y ahí cerramos { } “llaves” se declara con el tipo de registro y el nombre de registro asignado y el tamaño del arreglo
Cada posición de memoria equivale a los campos almacenados. 
 
 Alumno Alu[80] 
 
	Denise
	37742723
	8.5
	
	
	
	
	
	
	
	
	Nombre
	DNI
	Nota 
	Nombre
	DNI
	Nota 
	
	
	Nombre
	DNI
	Nota 
 
Alu[0]	Alu[1] Alu[79] 
 
¿Como acceder a cada componente del arreglo y cada campo del registro?
1° | Definir P como variable del Tipo de Arreglo Alu[N]
	Denise
	37742723
	8.5
	
	
	
	
	
	
	
	
	Nombre
	DNI
	Nota 
	Nombre
	DNI
	Nota 
	
	
	Nombre
	DNI
	Nota 
	Alu[0] Alu[1] Alu[N-1] 
Cada componente del arreglo almacena datos de un solo alumno donde en cada componente se obtiene cada campo 
Dentro de los campos se obtiene información sobre el alumno :
· Nombre
· DNI
· Nota 
 Alu[0]. Nombre
Nombre del Arreglo 
Indice de la componente del arreglo 
Nombre del campo 
Como se declara Esta variable? Algoritmo Empresa
Constante N = 30 
Registro Sueldo 
 { entero DNI
 Real importe 
 Cadena nombre
 Entero celular 
 Entero edad
 } 
 Sueldo emp[N]
 
Esta constante Global donde toma un valor y trabajara tanto para los Registros,Sub-Programas y el Algoritmo Principal 
Debemos trabajar con el mismo tamaño del arreglo 
Al definir una constante N estamos trabajando con una ZONA GLOBAL 
 
DECLARA LA VARIABLE DE ARREGLOS DE REGISTROS 
Sueldo Emp 
DEFINE EL TIPO DE REGISTRO 
 
¿Cómo se cargan los datos en Arreglos de Registros?
· Se puede carga atraves de una carga secuencia 
· En un proceso iterativo Para-FinPara donde se ingresa todos los campos del registro que va desde 0 hasta N – 1
· Dentro del cuerpo del proceso iterativo se ingresan:
· Acciones de lectura donde se va a acceder a la componente emp y dentro de la componente se debe acceder a cada campo del registro.
Para i desde 0 hasta N – 1 
 Leer emp[i].DNI
 Leer emp[i].importe
 Leer emp[i].nombre
 Leer emp[i].celular
 Leer emp[i].edad
 FinPara 
 
Como se utiliza los Sub-Programas?
1° Paso : Se define una constante N componente donde N indica el tamaño que va a trabajar el registro de arreglos. 
2° Paso: Se define el tipo de registro que se va a trabajar y dentro del registro se ingresa los campos que después se podrá acceder a cada uno de ellos. 
3° Paso: Se carga los datos del registro en un subprograma Carga 
4 ° Paso: En el algoritmo Principal se declara el registro con el tamaño N y por ultimo se invoca el sub-programa CARGA
ARREGLOS DE REGISTROS CON CONTADORES Y ACUMULADORES
Para trabajar con CONTADORES & SUMADORES se necesita resolver el siguiente problema: El departamento de informática ha propuesto 5 talleres, pero cada inscripto de manera voluntaria puede realizar un aporte de dinero para cubrir gastos que genera la organización de eventos. 
En la inscripción se solicita a cada participante : Informar el numero de taller (1….15) y el dinero que aporto 
Construir un algoritmo que indique:
a) Cantidad de aspirante por cada taller
b) Dinero recaudado para cada uno de los talleres
Algoritmo Taller
Contante N = 5 
Registro Alumno 
 { entero cantidad
 Real impT}
 Void cerea(Alumno A[N])
Comienzo
 Entero i 
Para i desde 0 hasta N-1
 A[i].cantidad = 0
 A[i].impT = 0
FinPara
Retorna()
 Fin
Void carga(alumno A[N])
Comienzo
Entero num
Real importe
Leer num
MientraS(num!=0)
Escribir “Ingresar dinero que realizo el importe”
Leer importe
A[num-1].cantidad = A[num-1].cantidad +1 //Contador
A[num-1].impT = A[num-1].impT + importe //sumador
Leer num
 Finmientras
Retorna() 
Fin
Void muestra(alumno A[N])
Comienzo
Para i desde 0 hasta N – 1
 Escribir “la cantidad de inscriptos del taller es de “,A[i].cantidad
 Escribir “El importe recaudado por el taller es de “A[i].impT
FinPara
Retorna()
Fin
/*Algoritmo Principal*/
Comienzo
Alumno A[N]
Cerea(A)
Carga(A)
Muestra(A)
Fin 
Para resolver este problema :
Para cada taller se carga el aporte de cada uno de los talleres 
EJE N° 8 : EFICIENCIA & VERIFICACION FORMAL 
EFICIENCIA
¿Qué es Eficiencia? 
La eficiencia de un algoritmo es: 
· Es resolver la problemática concisa de un algoritmo 
· Crear una solución exacta y precisa del problema planteado.
· Alcanzar el resultado deseado en un tiempo de corto plazo 
· Se utiliza la menor cantidad de recursos físicos posibles (hace referencia al hardware de PC, como memoria, procesador, almacenamiento,etc) 
· Los resultados obtenido en la ejecución , sean los deseados y lograr que sean CORRECTOS.
· Depende del tipo de procesador que se tiene, se realizara mas rapido y eficiente el proceso.
· Un algoritmo es mas eficiciente cuando se optimiza los recursos de sistema en el que se ejecuta en la resolución de un determinado problema
LOS PRINCIPALES RECURSOS RECURSOS SON
ALMACENAMIENTO EN MEMORIA 
TIEMPO DE EJECUCION 
COMPLEJIDAD ESPACIAL
COMPLEJIDAD TEMPORAL 
Es la medida de la cantidad de almacenamiento ocupado por un programa
Es una medida de la cantidad de tiempo que requiere la ejecución de un programa
EL TIEMPO DE EJECUCION DEPENDE DE 2 TIPO DE FACTORES:
	FACTOR EXTERNO
	DATOS DE ENTRADA
	Los datos de entrada son aquellos datos que ingresan al procesador y son procesados por el ordenador.
	FACTORES INTERNOS
	COMPLEJIDAD
	La complejidad de algoritmo significa los recursos necesarios para ejecutar el algoritmo 
Dentro de la complejidad existe 2 tipos 
	
	COMPILADOR
	· El compilador es la naturaleza y rapidez de las instrucciones de maquina empleadas en la ejecución.
· Dentro de este compilador puede haber un código objeto
· Es decir un consjunto de instrucciones y datos entendidos por el ordenador que es CODIGO BINARIO proviene de un código FUENTE (internamente)
· Requiere generar la calidad del código compilado
	
	
	COMPLEJIDAD ESPACIAL
La complejidad espacial significa que se tiene en cuenta los espacios en memoria que se va a utilizar, cuanto espacio de memoria
	
	MAQUINA
	· La naturaleza y rapidez de las instrucciones de maquina que se utiliza
· Se puede tratar de cualquier tipo de maquina (ordenador) sea nueva o mas vieja va variar el tipo de memoria, procesadores y hardware en general que va a trabajar
· mientras mas renovada y mas actual sea el procesador mas rapido va a trabajar y va a procesar las instrucciones y datos
	
	
	COMPLEJIDAD TEMPORAL:
La complejidad temporal es la cantidad de tiempo que requiere para desarrollar un algoritmo en el menor tiempo posible, o en el mayor tiempo dependiendo si su eficiencia es existosa o no
RECURSOS ALGORITMICOS
 Optimizacion de Recusos del Sistema
Son técnicas de Escribir Algoritmos Eficientes, para verificar si un algoritmo es eficiente se debe tener en cuenta de ante mano los requisitos del cliente.
· Debe tener en cuenta que el resultado deseado sea el correcto
· Se toma en cuenta que función correctamente
· Se deba utilizar los recursos necesarios para crear algoritmos.
· Realizara en el menor tiempo posible
Dentro de Optimizacion del Recursos de Sistema se tiene en cuenta: 
TIEMPO DE EJECUCION ALMACENAMIENTO 
Esta relacionado a las instrucciones o comondas que se vallan ejecutando al momento de ejecutar el programa
El tiempo de ejecución, esta relacionado también en función de: 
xTAREAS Y NO TAMAÑO DE CODIGO
 
COMPARACIONES & ASIGNACIONES 
· Ocupan Memoria interna del dispositivo 
· Las Comparaciones :Ocupan almacenamiento interno de la UAL 
· Las asignaciones : Ocupan almacenamiento en memoria
	
 
 
TIEMPO DE EJECUCION DE UN ALGORITMO:
Existe dos metdos de estimar el tiempo de ejecución de un Algoritmo : 
· METODO DE ANÁLISIS EMPIRICO
· METODO DE ANÁLISIS TEORICO
ANALISIS EMPIRICO
El análisis empirico depende de DATOS EXPERIMENTALES :
· Consiste en realizar las comparaciones de los tiempos de ejecución a través de distintos algoritmos que resuelven un solo problema realizando diferentes lotes de pruebas logrando saber cual algoritmo es el indicado y da resultado correcto.
· Puede realizar una búsqueda de un elemento con una búsqueda secuencial y se plantea 3 casos que pueden suceder: 
1° MEJOR CASO: Donde el elemento a buscar se encuentre en la primera componente y terminaría la búsqueda sin necesidad de recorrer los demás componentes.
2° PEOR CASO: Se encuentro en la ultima componente del arreglo recorriendo todos los componente del arreglo o que no se encuentre directamente en el arreglo. 
3° CASO MEDIO : Se encuentra el elemento en el medio del arreglo. 
En este analisis se depende del LENGUAJE DE PROGRAMACION:
· Se debe calcular los tiempos de ejecucion mediante todas las acciones o instrucción que se ejecutaran desde el comienzo hasta finalizar el proceso de ejecucion.
· Se obtiene una medida real del tiempo en un entorno de desarrollo de aplicación.
El analisis empirico depende del PROCESADOR: 
· Depende del tipo de procesador que trabaje el ordenador es la velocidad en tiempo de ejecucion.
· Ademas depende de los factores externos e internos.
· Puede ser que se modifique algunas acciones, o dentro del proceso de datos pueda ocasionar resultados diferentes lo que no seria eficiencia empirica absoluta.
ANALISIS TEORICO
· El analisis teorico requiere ciertas tecnicas que verifican a traves de una expresion matematica que aumenta el tamaño del problema.
· A esto se denomina #TAMAÑO DEL PROBLEMA al numero de datos del problema
Ejemplo : Si desea ordenar un arreglo de N componente el tamaño N es el problema del algoritmo. 
· “instancia de un problema” hace referencia a un caso particular-
· Se tiene en cuenta que debe acudir a diversas tecnicas para verificar la eficiencia dependiendo de la situacion donde se encuentra el elemento a buscar en un arreglo
· Se tinen en cuenta 3 situaciones a plantear en el análisis teorico 
1° EL MEJOR CASO: Es cuando en un arreglo esta ordenado de forma creciente (de menor a mayor).
2° EL CASO MEDIO : Esta dentro datos de entrada que tenga mayor probabilidad que otros , no es el promedio de peor caso ni mejor caso sino que implica realizar calculos de probabilidad de situaciones que queda fuera del alcance 
3° EL PEOR CASO: En los sistemas de tiempos real que se utiliza en la medicina, home-banking, e-commerce son controlados por un software donde cuyas respuestas son problemas planteados en respuestas cirticas. 
· Donde requiere tecnicas mas avanzadas de abordaje sobre una base teorica para dar inicio a la introduccion a la programcion.
ORDEN DE COMPLEJIDAD DE UN ALGORITMO – EFICIENCIA ASINTOTICA
El orden de complejidad determina la comparacion de diferentes soluciones algoritmicas.
Para obtener (Orden de Complejidad) se debe : 
	T(N)
	1. Calcular el Tiempo de Ejecucion representando por una funcion T(N)
	
	2. T(N) Representa las medidas de unidades de tiempo (segundo,milisegundo…..) 
	
	3. T(N) Corresponde al tiempo de ejecucion de un ordenador donde cada sentencia simple consume una unidad de tiempo.
· Accion de Escribir
· Accion de Lectura
· Accion de Asignacion 
Las formasde calcular el tiempo de ejecución son de dos formas:
1. Se calcula donde cada sentencia consume una unidad
2. Aplicando las reglas establecidas
CONSIDERANCION DE UNIDAD DE TIEMPO DEL COMPUTADOR
1.- Las declaraciones no consume unidad de tiempo
2.- Tiempo de Ejecucion de sentencia simple (1 unidad de tiempo) 
3.- Expresion aritméticas (1 unidad de tiempo)
4.- Expresion relacional (1 unidad de tiempo)
5.- Acceso a la componente del arreglo (1 unidad de tiempo) 
Que es la Complejidad de un Algoritmo?
La complejidad de un algoritmo se basa en la medida de recursos que se requiere en un algoritmo para que funcione correctamente. 
Se basa en función del tamaño del problema que se necesita resolver que dentro de los recursos se clasifican en TIEMPO & ESPACIO 
· ESPACIO: La complejidad es la cantidad en MEMORIA que se requiere utilizar para la ejecución del problema, hace referencia a la estructura de datos utilizados para su implementación.
· TIEMPO: La complejidad se asocia a la cantidad de tiempo que el algoritmo toma para ejecutar operaciones, es decir el tiempo que se demora en ejecutar el programa
En este ejemplo : 
Las iteraciones Para-FinPara 
Generalmente este proceso iterativo se ejecuta 2N + 2 
1 = indica la inicialización de 0 
N+1 = N+1 = Recorre hasta N veces + 1 incrementa la ultima posición del arreglo y compara
N = i va incrementando las veces N-1 
2N = acceso a la componente y acción de asignación
Es un desplazamiento en memoria para acceder a la componente y asignar un valor a esa componente demora 2N 
1 ut = La acción retorna aun retorne un valor o no , la accion es una unidad de tiempo 
	Void carga(entero xarre[N])
Comienzo
Entero i, num
Para i desde 0 hasta N-1 1 + (N+1) + N = 2N+2 
 Leer num 1N 
 Arre[i] = num 2N
 FinPara
 Retorna( ) 1 
 Fin 
2N + 2 + 3N + 1 = 5N +3
	 Void carga2(entero xarre[N])
Comienzo 
 Entero i 
 Para i desde 0 hasta N-1 1 + (N+1) + N = 2N + 2 
 Leer xarre[i] 2N
 FinPara
 Retorna( ) 1 ut
 Fin 
2N + 2 + 2N + 1 = 4N + 3 
La eficiencia asintótica se utiliza para problemas algoritmos de gran tamaño de complejidad
Este análisis clasifica las funciones T(N) en:
Clases constituidas por funciones que crecen de la misma forma, es decir que pueden compararse entre si las funciones donde resuelven el mismo problema. 
La notación matemática que utiliza para representar el orden de complejidad de un algoritmo es cuando el tamaño del problema es grande (notación asintonica) se expresa O(f(N)) 
O representa a la cota superior 
Ω representa a la cota inferior 
EFICIENCIA ASINTOTICA EN EL PEOR CASO – NOTACION O 
El tiempo de ejecución de un algoritmo se expresa de esta forma:
T : Representa de orden f(N) y se simboliza T € O (f(N)) 
T € O (f(N)) significa que exista una función matemática que tenga acceso a N componentes 
N : Representa al conjunto de datos que realiza el procesamiento ,además dependiendo de la cantidad de datos que se ejecute en el tiempo de ejecución. 
ORDEN DE COMPLEJIDAD 
El orden de complejidad es una familia de funciones que tienen el mismo comportamiento asintótico. 
· El comportamiento asintótico es cuando N tiene al números infinitos siendo N cantidad de datos que se van a ejecutar durante el proceso de ejecución en el tiempo de ejecución. 
· Mientras mas datos tenga al ejecutar un programa , mas grande y complejo será el proceso en función de cantidad de datos. 
· A medida que aumenta la cantidad de datos , se aumenta el tiempo de proceso. 
· Asintotico significa que todas las clasificaciones del orden tienden a crecer 
ORDEN DE COMPLEJIDAD DE UN ALGORITMO
(ORDEN DEL TIEMPO DE RESPUESTA)
Siendo T = O (f(N))
· En este ejemplo , N va creciendo en su exponente donde N va aumentando
· Comparando dos algoritmo diferentes con el mismo resultado, se calcula T(N) siendo N >1 
· Obteniendo esta expresión es fácil comparar dos algoritmos diferentes
	O(1)
	Complejidad Constante
	Si el tiempo de ejecucion de un algoritmo resuelve un caso tamaño N donde N no supera a c (constante) donde debe ser un tiempo lineal de procesamiento. 
Este algoritmo no requiere iteraccion para el procesamiento de datos. 
Un algoritmo O(1) tiene complejidad constante ya que suelen ser mas eficientes
Este algortimo procesa los datos de manera SECUENCIAL
	O(long2 n)
	Complejidad Logaritmica
	Esta función hace referencia a la “búsqueda binaria” se calcula en mitad de N 
El tiempo de ejecución de un algoritmo es proporcional. 
Por lo cual la búsqueda binaria divide la mitad el algoritmo y va dividiendo obteniendo la mitad. 
	O(n)
	Complejidad Lineal 
	Un orden O(N) indica la “complejidad lineal” donde el tiempo de ejecución crece en forma directa al crecimiento de N
Consiste en un algoritmo con una sola iteraccion, donde verifica cuantas veces se ejecutara el proceso de N veces. este proceso iterativo se realiza con Para-FinPara
Caso de realizar una iteraccion dentro de otra iteraccion, se va ejecutando todo el cuerpo del ciclo y van ejecutando las acciones dentro de ese cuerpo de ciclo.
Se ejecutara 2N porque tenemos dos iteracciones en un solo cuerpo porque ambos se ejecutan Para i desde 0 hasta N 
	O (n long n)
	Complejidad Cuasi-lineal
	Un orden cuasilineal (N long N) si se duplica su tamño del problema se duplicara el tiempo de ejecución.
	O (n2)
	Complejidad Cuadrada
	 Un orden de complejidad 
	O(n3)
	Complejidad Cubica 
	Un orden O(N3) donde N se va duplicando en un bucle anidado , donde el tiempo de ejecución aumenta cuatro veces 
Para un tiempo de ejecución cubico, el tiempo de ejecución se multipla por ocho
	O(na)
	Complejidad Polinomica
	Los problemas de orden polinomial neceistan mucho tiempo para resolver el problema y crece relativamente poco en tamaño y son considerado tratable. 
Los programas tienen complejidad polinómica O(Na) donde N es la variable y a es una constante >=1
	O (2n)
	Complejidad Exponencial
	
RELACION ENTRE ORDENES DE COMPLEJIDAD	
	O < O
· Mientras exista la necesidad de resolver problemas cada vez mas grandes se producirá una situación casi paradójica.
· A medida que las computadora aumentan su rapidez disminuirán su precio, como toda seguirdad seguirá sucediendo también el deseo de resolver problemas mas grandes y complejidad que seguirá creciendo.
· La importancia del descubrimiento y empleo de los algoritmos eficientes quellos cuya velocidad de crecimientos de crecimiento sean pequeños iran aumentando cada vez mas.
ANALISIS TEORICO DEL TIEMPO DE EJECUCION
REGLAS PARA CALCULAR EL TIEMPO DE EJECUCION DE UN ALGORITMO 
· Las declaraciones no consumen tiempo 
· Tiempo de ejecución de secuencia simple: Dentro de estas tenemos 
· Acciones simples : Escritura, Lectura y Asignación
· Las operaciones aritméticas requieren 1 ut (una unidad de tiempo)
· El acceso a una componente de un arreglo consume 1 ut (una unidad de tiempo) 
Bucles condicionales: 
· Si la cantidad de iteraciones varia en función del valor de la variable de control.
· El calculo del tiempo se expresa como una sumatoria. 
· Se calcula el tiempo de procesar la condición del Si 
· Se calcula la máxima unidad de tiempo que tarda en ejecutar.
Como pasa en el Bucle Si-Sino-Finsi 
· Si la condición se cumple , se redirige a la acción del entonces y calcula el tiempo 
· Y Si no se cumple se calcula el tiempo de la acción del SiNo
· La acción que se demora mas en ejecutar es el Tiempo de Ejecucion del Si
· Es el máximo Tiempo que demora entre T1 y T2 
· Se toma la peor opción donde demora mas tiempo en ejecución 
Selección Simple
 Si (condición)
 Entonces S1 à t1 
 Sino S2 à t2
 FinSi 
Bucle incondicional: 
· Si la cantiddad de iteraciones es fija; el tiempo de ejecucion se obtiene como el producto de tiempo de ejecucion de sentencias que estan dentro del bloque por la cantidad de iteraciones que se debe realizar.
· A este tiempo debe agregarse el de inicializacion de variables, testeos e incrementos de variables de control
· El bucle demora dependiende del Numero de iteraciones,dependiendo de eso , va a depender la cantidad de datos a procesar.
· Siendo Para-FinPara procesar los datos dependiendo de cuantas veces se ejecuta. 
· Utiliza 1 ut (unidad de tiempo) para la inicializacion , N+1 unidades para el testeo (N es la cantidad de datos que se procesaran) por lo tanto el numero de veces que se ejecuta el ciclo 
N unidades para el incremento de la variable del ciclo. 
ACCIONES MULTIPLE 
 Para el caso de acciones multiples , se adiciona al tiempo de evaluación.
Se debe evaluar el valor de la condiciones teniendo en cuenta el tiempo de ejecución máximo que se ejecutara.
Es decir la máxima cantidad de veces que se ejecutara del peor caso de distintas alternativas.
El análisis del algoritmo comienza desde adentro hacia afuera.
Primero determina el tiempo requerido para las instrucciones individuales y luego corresponde a la estructura de control que contiene estas condiciones.
REGLAS PARA DETERMINAR EL ORDEN DE COMPLEJIDAD
El orden de complejidad se calcula según las reglas para su determinación: 
1) Hace pasaje de términos y realiza una reducción teniendo en cuenta ambas comparaciones siendo N un numero natural (entero)
2) Siendo T2(N) > T1(N) seria el análisis sea incorrecto , y el algoritmo planteado es incorrecto, por lo cual es una desigualdad es un absurdo donde nunca se cumplirá la condiciones donde N es numero natural 
3) Si esa condición se convierte en una expresión artimetica, se evalua en un algoritmo muy fácil y es mas eficiente
1. REGLA DE LA SUMA U ORDEN CORRESPONDIENTE A BLOQUES CONSECUTIVOS CON TIEMPO DE EJECUCION DE DISTINTO ORDEN 
El tiempo de ejecución de T1 (N) + T2(N) = O((f(N),h(N))), es el tiempo de ejecución total donde el orden coincida con el máxima función entre todos. 
Siendo 
	T1 = O(f(N) y T2 = O(h(N))
	T1 + T2 = c * máximo (O(f(N)) , O(h(N)))
T1 es orden de la función de N y T2 es el orden de una función de h de N ente T1 y T2 
La sumatoria de T1 y T2 esto es igual a constante por el máxima orden de complejidad 
2.- REGLAS DE APLIACION 
La regla de la suma puede usarse para calcular el tiempo de ejecución de algoritmo por bloques. 
Donde en un algoritmo se puede dividir por bloque como puede:
Dividir una parte del algoritmo de orden O(N) y otro bloque de O(N2) y un tercer bloque de O(N*long N) 
El tiempo de ejecución máximo entre 3 bloques es el O(N2) porque el resultado menos eficiente y que demora mas tiempo en procesar los datos , por esto se llama “tiempo máximo”
Ejemplo: 
REGLA DE PRODUCTO: 
Se aplica cuando dos bloques de códigos estan anidados donde tienen eficiencia entre si O(f(n) y O(h(n)) tiene la eficiencia del código completo es: 
	O(f(n) * h(n))
El orden de complejidad de producto de dos funciones es igual al producto de ordenes de complejidad de cada una de ellas. 
Se utiliza cuando dos iteraciones están anidadas y tiene la misma cantidad de iteraciones 
entonces esto un orden O(N2) y son iguales
En caso que sea distinta cantidad de iteraciones, entonces significa que el O(N) resultante es el producto de las 2 iteraciones 
O(lg n) El orden lógico completo es el Orden de complejidad donde n es el anidamiento de diferente cantidad fija, de logaritmos de n esto equivale a O(n.lgn)
3. LA COMPLEJIDAD DE UNA CONSTANTE POR UNA FUNCION 
O(C* log(n)) = O(log(n)) --------------------- O(2500 * N) siendo C = 2500 es una O(N) Siendo N un numero fijo de paquete de datos en memoria.
4. Los algortimos sin ciclos y sin recursos tienen complejidad constante , y son O(1) 
Se dice que representan una cantidad constante en el tiempo de ejecución y no tiene iteraciones
La recursión es un algoritmo que no tiene iteraciones y por lo cual se produce un bucle
5. Los lazos o ciclos anidados tienen complejidad polinómica O(Nk)
Cuando las iteraciones pueden estar anidadas deben tener la misma cantidad de iteraciones 
Caso contrario se aplica la regla de producto.
EFICIENCIA EN BUSQUEDAS 
· Los algoritmos de búsqueda son aquellos que permiten ubicar un dato en un conjunto determinado.
· La búsqueda se utiliza cuando se busca un elemento en concreto en un algoritmo de un conjunto de datos.
· Tiene dependencia diecta de la forma que organiza los datos.
· Ademas depende si el arreglo esta ordenado o no siendo asi se utiliza BUSQUEDA BINARIA
EFICIENCIA DE BUSQUEDA LINEAL : PEOR CASO 
· El análisis teorico debe estar basado en contabilizar
· La cantidad de veces que se realiza alguna acción que resulte esencial en el algoritmo
· La búsqueda lineal consiste en comparar elementos de búsqueda entre:
· Numero de comparaciones 
· Cantidad de componentes del arreglo
· Se debe buscar una funciones que relacione las variables:
· Variables dependientes: Numero de comparaciones
· Variables independientes: Cantidad de componentes
· Donde debe plantearse en 3 situaciones
· PEOR CASO: En el peor de los casos es que elemento se encuentra al final del arreglo o no esta en el arreglo.
· MEJOR CASO: Se encuentra en el arreglo y se encuentra en la primera posición 
· CASO MEDIO : Se encuentra en medio del arreglo.
La búsqueda secuencial tiene orden de complejidad O(N) Complejidad Lineal
Tiene una sola iteracion que recorre el arreglo hasta encontrar el elemento 
Porque compara si el elemento a buscar es distinto al elemento del arreglo y va iterar las veces sea necesarias hasta encontrar el elemento
En el peor caso recorre todas las componentes del arreglo como puede encontrarse en el ultimo componente del arreglo o no encontrarse. 
Debe consultar si N(o N+1) elementos constituyen.
En este caso el tiempo de búsqueda es directamente proporcional a numero de elementos del arreglo 
Determina que el tiempo es el orden N T € O(N) 
Siendo la función de la eficiencia del algoritmo se representa f(n) donde el tiempo de búsqueda es proporcional al numero de elementos 
	T = k * N ,siendo o < k < = 1
El tiempo máximo de una busquda lineal es : 
	T € O(N) 
BUSQUEDA BINARIA
La búsqueda binaria se contabiliza la cantidad de veces que se realiza alguna acción que resulte esencial.
La búsqueda binaria es la relación entre el numero de elementos del arreglo y la cantidad de comparaciones 
 Cada comparación se divide en dos mitades el arreglo. 
Mientras mas comparaciones o pasadas se realiza se reduce mas el conjunto de datos del arreglo
Al terminar el proceso: 
El tamaño del subarreglo será mayor o igual a 1 
Donde se encuentre o no el elemento buscado 
Se llama K al numero de comparaciones y se verifica que : 
 
	1 < = si el elemento se encuentra tiene valor de siendo k la cantidad de veces que se divide
	Si se hace pasaje de términos queda entonces es la cantidad de veces que se divide N
	Si se tiene N = 50 elementos se tiene claro que no se realizara 50 comparaciones recorriendo todo el conjunto de datos 
Sino se realizara las comparaciones necesarias hasta encontrar el elemento y termina de buscar.
Donde N siempre va a hacer mayor a 2k comparaciones 
Se aplica el logarimo en base 2 a ambos miembros: 
	 
ORDENAMIENTO EN EFICIENCIA
· Orden un vector es necesario realizar un orden secuencial 
· Debe realizar con un criterio determinado en orden ascendente o descendente.
· Existen dos criterios para determinar la eficiencia de un ordenamiento.
· Uso eficiente de memoria:
· Para ordenar los vectores se utiliza un arreglo auxiliar
· Solo utilizan el arreglo original donde se intercambian los elementos que estan desordenados de modo optimizar el almacenamiento
· Eficiencia de tiempo: La rapidez del metodo depende de : 
· Numero de comparaciones 
· Numero de intercambios 
EFICIENCIA DE LOS METODOS DE ORDENAMIENTOS 
PROCESO PARA CACULAR LA EFICIENCIA
Paso 1 : 
· El numero de comparaciones
· El numero de intercambios
Paso 2 : 
Hacer un seguimiento para verificar cual seria el mejor y peor caso
Por cada pasada se realiza un conteo en una tabla 
	Pasadas 
	Comparaciones
	1
	N-1
	2
	N-2
	3
	N-3
	-----
	---
	N-1
	1
Paso 3 : 
Usar valores anotados y aplicar la propiedad de la serie 
Paso 4 : 
Se compara las formulas de cada

Continuar navegando

Materiales relacionados

8 pag.
Resumen Parcial Recursividad - Denii Amaya

User badge image

Desafío COL y ARG Veintitrés

85 pag.
resumen final - Denii Amaya

User badge image

Desafío COL y ARG Veintitrés

48 pag.
UNIDAD 1 - Denii Amaya

User badge image

Desafío COL y ARG Veintitrés