Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ejemplo
PROBLEMA: Calculo de la nota final de una materia : Dadas la nota del parcial y la el trabajo practico, la nota final es el promedio de ambas
LEXICO
NotaParcial : Real;
NotaPractico : Real; NotaFinal : Real
ALGORITMO
Leer (NotaParcial, NotaPractico); NotaFinal <- (NotaParcial + NotaPractico) / 2; Escribir(NotaFinal); FIN
Introduccion la Programacin Magister Oscar R. BRUNO
Apredizaje de programacion
Observar el universo real y trasladarlo al universo computacional requiere un gran esfuerzo de abstraccin. Es por eso que el aprendizaje de programacin se hace tan complejo Se da en etapas pero es recursivo
Introduccion la Programacin Magister Oscar R. BRUNO
Riesgos
La informacin se transforma en una carga indigesta si no se la entiende Aprender es vincular la informacin nueva con elementos previos. Informacin poco clara, desorganizada o carente de sentido afectan al uso de conocimientos previos. Se debe evitar un conocimiento inerte
Introduccion la Programacin Magister Oscar R. BRUNO
Sugerencias
No es suficiente con los conocimientos tericos o con el anlisis de lo que otro escribi, como toda actividad constructiva REQUIERE DE PRACTICA. Pero no se debe transformar en programador compulsivo: adquiera el hbito de pensar la solucin antes de escribir cdigo.
Algoritmo
Secuencia finita de instucciones, reglas o pasos que describen en forma precisa las operaciones que una computadora debe realizar para llevar a cabo una tarea en tiempo finito [Knuth, 1968]. Descripcin de un esquema de comportamiento expresado mediante un repertorio finito de acciones y de informaciones elementales, identificadas, bien comprendidas y realizables a priori. Este repertorio se denomina lxico[Scholl, 1988].
Introduccion la Programacin Magister Oscar R. BRUNO
Algoritmo
Esta formado por reglas, pasos e instrucciones. Las reglas especifican operaciones. La computadora es el agente ejecutor. La secuencia de reglas y la duracin de la ejecucin son finitas.
Algoritmo
Finitud: en longitud y duracin. Precisin: Determinar sin ambigedad las operaciones que se deben ejecutar. Efectividad: las reglas pueden ejecutarse sin el ordenador obtenindose el mismo resultado. Generalidad: Resolver una clase de problema y no un problema particular.
Introduccion la Programacin Magister Oscar R. BRUNO
Lenguajes de programacin
Lenguajes Naturales - Formales. Lenguajes de programacin: Notacion que permite escribir programas a mayor nivel de abstraccin que los lenguajes de mquina. Sus instrucciones deben ser traducidas a lenguaje de mquina. Lenguaje de mquina: Instrucciones que son ejecutables por el hardware de una computadora.
Introduccion la Programacin Magister Oscar R. BRUNO
Paradigmas de programacin
Paradigma: Coleccin de conceptos que guan el proceso de construccion de un programa. Estos conceptos controlan la forma en que se piensan y formulan los programas. Imperativo Procedural Objetos. Declarativo Funcional Lgico.
Introduccion la Programacin Magister Oscar R. BRUNO
Problema
Enunciado con una incgnita, la solucin es encontrar el valor de esa incgnita. Problema computacional o algortmico: tarea ejecutada por una computadora con una especificacin precisa de los datos de entrada y de los resultados requeridos en funcion de estos.
Introduccion la Programacin Magister Oscar R. BRUNO
Clase de problemas
No computables: No existe un algoritmo. Computables
Tratables: Existe un algoritmo eficiente. Intratable: No existe algoritmo eficiente.
Especificacin Implementacin
Especificacin: Es el proceso de analizar los problemas del mundo real y determinar en forma clara y concreta el objetivo que se desea alcanzar. El modelo debe ser interpretado sin errores por un autmata. Implementacin: Traducir a un conjunto de instrucciones permitidas y definidas por sus reglas sintcticas y valor semntico lo que fue especificado.
Introduccion la Programacin Magister Oscar R. BRUNO
Variables Constantes
Variables: Denotan una magnitud o indicador del proceso. Se caracteriza por un nombre, un tipo de dato y el valor que tiene en un momento determinado. Utilizadas para los datos de entrada, intermedios y de salida. Constante: Nombre asociado a un valor que permanece sin modificacin durante todo el proceso
Introduccion la Programacin Magister Oscar R. BRUNO
Tipos de Datos
Identifica o determina un dominio de valores y el conjunto de operaciones aplicables sobre esos valores. Primitivos. Derivados. Abstractos. Concordancia entre valores y operaciones. Baca la vuela Errores sintacticos, errores gramaticales La vaca vuela Error de concordancia entre objeto vaca y operacin volar
Introduccion la Programacin Magister Oscar R. BRUNO
3.
Comprender el problema. Identificar informacin y acciones a incluir en el lexico (constantes, tipos, variables y acciones). Encontrar un camino de secuenciar las acciones para obtener el resultado, es decir para alcanzar la postcondicin a partir del estado inicial que cumple con la precondicin.
Introduccion la Programacin Magister Oscar R. BRUNO
Acciones primitivas
Asignacion:
De entrada: permite cambiar el valor de una variable. Ya sea en forma interna o a travs de algun dispositivo de entrada. De salida: Permite mostrar el valor de una variable a travs de algun dispositivo de salida.
Acciones primitivas
Analisis de casos: Permiten especificar la particin del dominio de datos.
Instruccin segn: Especifica la particin en varios subdominios y asocia acciones a cada uno de ellos. Instruccin si entonces si_no: cuando en un anlisis de casos solo se tienen dos.
Acciones primitivas
Repeticiones: permiten ejecutar una determinada cantidad de veces una accion o conjunto de acciones.
Exactas: se conoce con precisin la cantidad de veces que las acciones se repetiran. No exactas: la finalizacin del ciclo depende de alguna condicin, pueden ser pre o pos condicionales.
Ejemplo
PROBLEMA: Dada una temperatura en grados Fahrenheit, escribir un algoritmo que obtenga la temperatura en grados Celsius.
LEXICO {Nombres significativos para identificadores significativos} tempFahrenheit tempCelsius : Real // Contiene el valor que representa la temperatura en F : Real // Contiene el valor que representa la temperatura en C
CERO_ABSOLUTO = -459.58 // Representa el valor del cero absoluto en F ConvertirFahrenheitCelsius : Accion PRE {TempFahrenheit >= CERO_ABSOLUTO} POS {Convierte a Celsius una temp. En Fahrenheid} tempCelsius = (5.0 / 9.0) * (tempFahrenheit 32.0) FIN ConvertirFahrenheitCelsius ALGORITMO Leer (tempFahrenheit) ConvertirFahrenheitCelsius Escribir(La temp. En Celsius es : , tempCelcius) FIN Introduccion la Programacin Magister Oscar R. BRUNO
Ejemplo
PROBLEMAS no algoritmicos. AA + BB = CBC DONALD + GERALD = ROBERT El papa de Rebeca tiene 5 hijos chacha, cheche, chichi, chuchu, como se llama el otro hijo Un granjero tenia 20 ovejas, todas menos nueve escaparon. Cuantas le quedaron? Una botella de vino cuesta 10 $, el vino vale 9 $ mas que la botella. Cuanto vale cada cosa? Matriz cuadrada impar N*N colocar N2 dgitos sin repetir 8 1 6 3 5 7 4 9 2 2 + 7 118 = 129
Introduccion la Programacin Magister Oscar R. BRUNO
Problemas
Paramo de posibilidades
Meseta aparente sin indicios
Ejemplo en Pascal
Program Calculo; var notaTeoria, notaPractica, notaFinal : real; begin writeln; writeln('***** Calculo de la nota final*****'); write('Nota de teoria: '); readln(notaTeoria); write('Nota de practicas: '); notaFinal := (notaTeoria + notaPractica) / 2;
Ejemplo en C
#include <stdio.h> #include <conio.h> int main () { float notaTeoria, notaPractica; float notaFinal; printf(" Calculo de la nota final de una asignatura\n"); printf("Nota de teoria: "); scanf(" %f",¬aTeoria); printf("Nota de practicas: "); scanf(" %f",¬aPractica); notaFinal = (notaTeoria + notaPractica)// 2. 0; printf("La nota final es: %.2f\n", notaFinal); printf("\nPulse enter para continuar"); getchar(); return 0;
}
Introduccion la Programacin Magister Oscar R. BRUNO
Bibliografa
Behrouz Forouzan. Introduccin a la ciencia de la computacin. 2005. Ciencias e Ingenieria. De Giusti. Algoritmos datos y programas. 2001. Prentice Hall Garcia Molina. Una introduccin a la programacin. 2005. Thomson. Kernighan - Ritchie. El lenguaje de programacion C. 1988. Pearson Kerighan Pike. La practica de la programacion. 2000. Pearson Perkins David. La baera de Arquimedes y otras historias del descubrimiento cientifico. Paidos 2004 Iranzo, j. Logica simbolica para informaticos. 2006. Alfaomega. Perez M. Matematica discreta y algoritmos. 2005. Answer. Material didactico disponible en la red
Contenido Clase 2
Analisis de casos
Instruccin SEGUN Instruccin SI ENTONCES SI_NO
Acciones y funciones
Sin parametros Con parametros
Composicion secuencial
Tecnica de descomposicion algoritmica que disminuye la complejidad de un problema mediante la division en probemas mas pequeos, cuya solucion se puede abordar en forma independiente y la secuenciacion parcial permite alcanzar la solucion final.
Introduccion la Programacin Magister Oscar R. BRUNO
Ejemplo
PROBLEMA: Dada una temperatura en grados Fahrenheit, escribir un algoritmo que obtenga la temperatura en grados Celsius.
LEXICO {Nombres significativos para identificadores significativos} tempFahrenheit tempCelsius : Real // Contiene el valor que representa la temperatura en F : Real // Contiene el valor que representa la temperatura en C
CERO_ABSOLUTO = -459.58 // Representa el valor del cero absoluto en F ConvertirFahrenheitCelsius : Accion PRE {TempFahrenheit >= CERO_ABSOLUTO} POS {Convierte a Celsius una temp. En Fahrenheid} tempCelsius = (5.0 / 9.0) * (tempFahrenheit 32.0) FIN ConvertirFahrenheitCelsius ALGORITMO Leer (tempFahrenheit); ConvertirFahrenheitCelsius; Escribir(La temp. En Celsius es : , tempCelcius); FIN Introduccion la Programacin Magister Oscar R. BRUNO
Analisis de casos
Consiste en descomponer el dominio de los datos en varios subdominios o casos y asociar a cada uno de ellos con una o mas acciones. Cada caso es especificado mediante expresiones logicas mutuamente excluyentes y la union de los casos debe cubrir el dominio inicial de los datos.
Introduccion la Programacin Magister Oscar R. BRUNO
Analisis de casos
Los estados iniciales de cada caso deben cubrir el dominio de los datos de entrada. Debe existir un caso para cualquier posible entrada. Las condiciones de cada caso deben ser mutumente excluyentes.
Analisis de casos
Ejemplo de posibles descomposiciones de valores entre 1 y 10
1. 0 <= N < 5
2. 0 <= N<=5
3. 0 <= N < 5
Instruccin segun
Especifica la particion del dominio de datos en varios subdominios y asocia acciones a cada uno de ellos. SEGN c1 ... cn e1 : a1
e2 : a2
... en : an FIN_SEGUN
FIN_SEGUN
PROBLEMA: Desarrollar un programa que simule una calculadoa simple. Que ingrese dos oprandos y un operador. Segn el operador que muestre la suma, resta, multiplicacion o division.
ALGORITMO
Leer (Operando1, Operando2, Operador); SEGN Operador
PROBLEMA: Desarrollar un programa que simule una calculadoa simple. Que ingrese dos oprandos y un operador. Segn el operador que muestre la suma, resta, multiplicacion o division.
ALGORITMO
Leer (Operando1, Oprando, Operador); SEGN Operador
LEXICO x, z, mayor : Entero; ALGORITMO PRE { ( x = X) y ( z = Z)} POST { (( x>=z) (Mayor = X)) y ((z>x)(Mayor=Z)) } Leer (x, z);
SI x >= z
ENTONCES Mayor x SI_NO Mayor z;
FIN_SI
Escribir(`El mayor es : ,mayor); FIN
Introduccion la Programacin Magister Oscar R. BRUNO
ALGORITMO
PRE { ( x = X) y ( z = Z)} POST { (( x>=z) ->(Mayor = X)) y ((z>x)(Mayor=Z)) }
LEXICO dia, mes, ao : Entero >0 ; EsBisiesto, FechaValida : Booleano ; AoBisiesto : una accion POST {AoBisiesto V si ao es bisiesto F en caso contrario}
ALGORITMO
EsBisiesto (ao Mod 400 = 0) o ((ao Mod = 0)y(ao mod 100<>0)) FIN AoBisiesto
SI (dia < 1 )
ENTONCES FechaValida Falso SI_NO SEGN mes
FIN_SEGUN
FIN_SI Escribir (La fecha , dia, /, mes,/.ao, : ); SI FechaValida
FIN
Ejercicios
Escriba algoritmos que : 1. Dado un peso en libras calcularlo en Kg. 1 libra = 0.453952 Kg. 2. Dado un numero binario de 4 digitos imprima su valor en base 10. 3. Dado un numero entero en pesos lo desglose segn los billetes legales. 4. Dado un numero entero <= 106 descomponerlo en dd hh mm ss.
Introduccion la Programacin Magister Oscar R. BRUNO
Acciones y Funciones
El concepto de accin est muy ligado al concepto de abstraccin. Se analiza como abstraccin por parametrizacin y abstraccin por especificacin.
Acciones
El lxico establece el nivel de abstraccin de un algoritmo. Es decir, introduce las variables, las constantes, los tipos de datos y las acciones con que se construye el algoritmo. Ahora se profundizara sobre el estudio de las acciones.
Introduccion la Programacin Magister Oscar R. BRUNO
Utilizacin de acciones
Accin es una secuencia de instrucciones que se identifica por un nombre y que puede ser invocada desde un algoritmo principal o desde otra accin. Una accin debe tener un efecto bien definido, debe ser cohesiva. Entre una accin y el algoritmo que la invoca se debe producir una comunicacin de valores. Los parmetros son el mecanismo que posibilita escribir acciones generales, aplicables a cualquier valor de la entrada, e independientes del lxico del algoritmo.
Introduccion la Programacin Magister Oscar R. BRUNO
ALGORITMO Leer (salarioBase, antiguedad); CalcularSalarioBruto; CalcularDescuentos; CalcularSalarioNeto; Escribir (El sueldo neto es:, salarioNeto)
FIN
ALGORITMO
numeroQuinquenios = antiguedad DIV 5;
< x, y> P1
P2
P3
P4
PROBLEMA:Calcular el permetro de un cuadriltero definido por los cuatro puntos del plano que constituyen sus vrtices
LXICO Coordenada = TIPO Real; Punto = TIPO < X : Coordenada; Y : Coordenada > p1, p2, p3, p4, po, pd : Punto; dist, permetro : Real; Distancia : una accin
ALGORITMO Leer (p1, p2, p3, p4) ; perimetro = 0.0 ; // E0 po = p1 ; pd = p2 ; Distancia; permetro = dist; // E1 po = p2 ; pd = p3 ; Distancia; permetro = permetro + dist; Introduccion la Programacin // E2 Magister Oscar R. BRUNO
po = p3 ; pd = p4 ; Distancia; permetro = permetro + dist; // E3 po = p4 ; pd = p1 ; Distancia; permetro = permetro + dist; // Ef : Escribir (El permetro del cuadriltero es: , permetro) FIN
Introduccion la Programacin Magister Oscar R. BRUNO
Parametros
Un parmetro permite la comunicacin entre una accin y el algoritmo que la invoca. A los parmetros que proporcionan un valor de entrada se los llaman Parmetros dato, y a los que, adems de recoger un valor, retornan un resultado, se los llama dato-resultado. Distancia (dato po, pd : punto; datoresultado dist : real) : una accin
Paso de parametros
Se denomina paso de parmetros al modo en que se establece la comunicacin entre los argumentos pasados a la accin desde el algoritmo y los parmetros de la accin; en la llamada se pasan los datos de entrada, y en el retorno se devuelven los resultados. Cada argumento se liga con el parmetro que ocupa la misma posicin en la declaracin de la accin y ambos deben coincidir en tipo.
PROBLEMA:Calcular el permetro de un cuadriltero definido por los cuatro puntos del plano que constituyen sus vrtices Version 2
LXICO Coordenada = TIPO Real; Punto = TIPO < X : Coordenada; Y : Coordenada > p1, p2, p3, p4 : Punto; permetro, d1, d2, d3, d4 : Real; Distancia(dato po, pd : Punto; dato-resultado dist : Real): una accin PRE { po y pd almacenan dos puntos } POST {dist almacena la distancia entre los puntos} ALGORITMO Dist = RaizCuadrada ( Cuadrado (pd.x po.x) + Cuadrado(pd.y po.y)); FIN
Introduccion la Programacin Magister Oscar R. BRUNO
ALGORITMO Leer(p1, p2, p3, p4); Distancia(p1, p2, d1); Distancia(p2, p3, d2); Distancia(p3, p4, d3); Distancia(p4, p1, d4); permetro = d1 + d2 + d3 + d4 Escribir(El permetro del cuadriltero es: , permetro) FIN
Introduccion la Programacin Magister Oscar R. BRUNO
Abstracciones
Abstraccin se refiere a eliminar detalles, como resultado se obtiene un modelo El concepto de accin conjuga dos tcnicas de abstraccin que son la parametrizacin y la especificacin. La parametrizacin es un mecanismo por el cual se generaliza una declaracin para que no sea aplicado a un nico caso, sino que sirva para cualquier valor que pueda tomar cierto parmetro La abstraccin por especificacin es la separacin entre el Qu y el Cmo).
Introduccion la Programacin Magister Oscar R. BRUNO
Funciones
Las funciones devuelven un nico valor. La funcin supone extender el conjunto de operadores primitivos. Nombre_funcion (par1 : td1 ; ... ; parn : tdn) : tr : una funcin
Una funcin no debe tener efectos laterales. Es decir, debe limitarse a calcular un valor y no modificar ninguno de los que se describen en el momento de la invocacin. Siempre deben utilizarse dentro de una expresin.
Introduccion la Programacin Magister Oscar R. BRUNO
PROBLEMA:Calcular el permetro de un cuadriltero definido por los cuatro puntos del plano que constituyen sus vrtices Version 3
LXICO idem anterior Distancia(po, pd : Punto) Real: una funcin ALGORITMO Distancia = RaizCuadrada ( Cuadrado (pd.x po.x) + Cuadrado(pd.y po.y)); FIN ALGORITMO Leer (p1, p2, p3, p4); Perimetro = Distancia (p1, p2) + distancia (p2, p3) + distancia (p3, p4) + distancia (p4, p1) Escribir(El permetro del cuadriltero es:, permetro) FIN
Introduccion la Programacin Magister Oscar R. BRUNO
Max2(a, b : Entero) Entero : una funcin ALGORITMO SI a>= b ENTONCES Max2 = a SI_NO
Max2 = b
FIN Max3(a, b ,c: Entero) Entero : una funcin
ALGORITMO
Max3 = Max2(c, Max2(b, a)) FIN
Introduccion la Programacin Magister Oscar R. BRUNO
Ejemplo
PROBLEMAS no algoritmicos. Soluciones propuestas AA + BB = CBC A=9, B=2, C=1 DONALD + GERALD = ROBERT
A 4, B 3, D 5, E 9, G 1, L 8, N 6, O 2, R 7, T 0.
El papa de Rebeca tiene 5 hijos chacha, cheche, chichi, chuchu, como se llama el otro hijo REBECA, lo dice al principio Un granjero tenia 20 ovejas, todas menos nueve escaparon. Cuantas le quedaron?
2 + 7 118 =
Contenido Clase 3
Iteracin
Composicion MIENTRAS Composicion REPETIR Composicion PARA Composicion ITERAR
Comenzar (S), Avanzar (S), EA (S), Crear(S), Registrar (S, e), Marcar (S)
Introduccion la Programacin Magister Oscar R. BRUNO
PROBLEMA: Dada una secuencia con solo ceros y unos, calcular el nmero de ceros y unos que contiene. LXICO S: Secuencia de carcter; NumCeros, NumUnos : Entero;
ALGORITMO
NumCeros = 0; NumUnos = 0; Comenzar (S); MIENTRAS EA (S) < > MarcaFin HACER SI EA (S) = 0 ENTONCES numCeros = numCeros + 1 SI_NO numUnos = numUnos + 1 FIN_SI;
AVANZAR (S)
FIN_MIENTRAS; Escribir(Ceros = , numCeros,unos = , numUnos) FIN
Introduccion la Programacin Magister Oscar R. BRUNO
EJERCICIO
Dado un conjunto de valores enteros, calcular e imprimir : promedio de los valores positivos, sumatoria de negativos. El lote termina cuando se ingresa un valor cero.
LEXICO SumaPos, CanPos, SumaNeg, Numero : Entero; ALGORITMO SumaPos 0; CanPos 0; SumNeg 0; Leer(Numero); MIENTRAS Numero <> 0 HACER SI Numero > 0 ENTONCES Inc(CanPos); SumaPos = SumaPos + Numero; SI_NO SumaNeg = SumaNeg + Numero FIN_SI FIN_MIENTRAS; Escribir(SumaPos, SumaNeg); FIN.
Introduccion la Programacin Magister Oscar R. BRUNO
Otros Ejemplos
Escriba algoritmos que : 1. Dado un numero entero en pesos lo desglose segn los billetes legales. 2. Dado un numero entero <= 106 descomponerlo en dd hh mm ss.
LEXICO B100, B50, B20, B10, B5, B2, Monedas, Num : Entero; MAXIMO = 65000; Leer(Num) MIENTRAS Numero > 0 HACER
SEGN Num Num 100 .. MAXIMO : B100Num Div 100; NumNum B100*100; Num 50 .. 99 : B50Num Div 50; NumNum B50*50; Num 20 .. 49 : B20Num Div 20; NumNum B20*20; Num 10 .. 19 : B10Num Div 10; NumNum B10*10; Num 5 .. 9 : B5Num Div 5; NumNum B5*5; Num 2 .. 4 : B2Num Div 2; NumNum B2*2; Num 1 : Monedas = 1; Num = 0;
FIN_SEGUN FIN_MIENTRAS
Introduccion la Programacin Magister Oscar R. BRUNO
LEXICO DD, HH, MM, SS; Num : Entero; MAXIMO = 1000000; Leer(Num) MIENTRAS Numero > 0 HACER
SEGN Num Num 86400..MAXIMO Num 3600..86399 Num 60.. 3599 Num 1 .. 59 : DDNum Div 86400; NumNum DD*86400; : HHNum Div 3600; NumNum HH*3600; : MMNum Div 60; NumNum MM*60; : SS = Num; Num = 0;
FIN_SEGUN FIN_MIENTRAS
Composicion PARA
Permite expresar el numero de veces que se ejecuta el cuerpo del ciclo. Este numero esta expresado por el recorrido de un intervalo de valores de tipo ordinal.
LXICO S : Secuencia de Real; Suma : Real; NumElem : Entero; ALGORITMO Comenzar (S);
Suma = 0;
NumElem = 0; //Eini : suma = 0 y numElem = 0 y ea = Primero (S) y INV = verdadero
ALGORITMO MIENTRAS EA (S) < > MarcaFin HACER suma = suma + EA (S) numElem = numElem + 1 Avanzar (S) FIN_MIENTRAS; //Efin : INV y (EA (S) = MarcaFin) SI numElem > 0 ENTONCES Escribir(Valor medio de las notas = , suma/num) SI_NO Escribir(Secuencia Vaca) FIN_SI FIN
Introduccion la Programacin Magister Oscar R. BRUNO
EJERCICIOS
Dado un conjunto de valores enteros, calcular e imprimir : cuantos valores cero hubo, promedio de los valores positivos, sumatoria de negativos Resolver el problema para : 100 valores enteros. N valores, N debe ser ledo previamente. El conjunto termina con un valor igual al anterior. Se dan N valores, pero el proceso deber finalizar si se procesan todos los valores o la cantidad de ceros supera a cuatro.
Introduccion la Programacin Magister Oscar R. BRUNO
Ejercicios
Dado un conjunto de tringulos representados por sus lados L1, L2 y L3 que finaliza con un tringulo con un lado nulo, determinar e imprimir la cantidad de tringulos equilteros, issceles y escalenos. Dados dos valores N y M determinar e imprimir cuantos mltiplos de M hay dentro del conjunto 1 a N. Dados dos valores enteros A y B determinar e imprimir el producto de ambos obtenido por sumas sucesivas. Dado un valor M, determinar e imprimir los M primeros mltiplos de 3 que no lo sean de 5, Introduccion la Programacin dentro del conjunto de nmeros naturales. Magister Oscar R. BRUNO
TP2
TP3
TP4
La presentacin ser individual, utilizando la notacin algoritmica desarrollada en el curso, debe incluir: Caratula con datos del estudiante y fecha presentacion Enunciado, Lexico y algoritmo.
Introduccion la Programacin Debe enviarse via a correo electronico y antes de la ultima clase. Magister Oscar R. BRUNO
Recursividad
Una funcion con sentencias entre las cuales se encuentra una llamada a si misma se dice que es recursiva. Divide el problema original en subproblemas mas pequeos. Cuando es lo suficientemente chico se resuelve directamente y se combinan soluciones del subproblema hasta que queda resuelto el problema.
Introduccion la Programacin Magister Oscar R. BRUNO
Requerimientos
El flujo de controlde una funcion recursiva requiere tres condiciones para una terminacion normal: 1 Un test para detener o continuar con la recursion. 2 una llamada recursiva para continuar la recursion 3 un caso base para terminar la recursion
Introduccion la Programacin Magister Oscar R. BRUNO
A tener en cuenta
Define el problema en terminos de un problema mas simple de la misma naturaleza. Debe disminuir el espacio del problema en cada llamada recursiva Hay una instancia particular que se conoce como caso base o caso degenerado
Introduccion la Programacin Magister Oscar R. BRUNO
Iteracion vs Recursion
Considerar solucion recursiva solo si una solucion iterativa sencilla no es posible. Solo utilice recursividad dentro de limites aceptables de ejecucion y uso de memoria. Si son posibles las soluciones iterativas y recursivas esta ultima requerira mas tiempo y mas recursos de memoria. En ciertos problemas la recursion produce soluciones mas simples de leer. Los beneficios de la claridad compensan el costo extra Ambas implican repeticion. iteracion explicitamente y recursion con llamadas repetidas. Ambas consideran un test de salida. Iteracion en la condicion, recursividad en el caso base
Introduccion la Programacin Magister Oscar R. BRUNO
Ejemplo
Factorial (dato N : Entero) Entero : Funcion ALGORITMO SI N = 0 Entonces Factorial = 1 SI_NO Factorial = N * Factorial (N 1) FIN_SI FIN.
Introduccion la Programacin Magister Oscar R. BRUNO
Contenido Clase 4
Estructuras
Registros Listas Tablas Archivos
Tipo Registro
Compuesto por una enumeracion de otros valores de tipo ya definidos. El termino campo refire a cada elemento del registro. El operador de acceso a cada miembro es el operador . (punto). NombreEstructura.NombreCampo. La cardinalidad de un tipo es el numero de valores de su dominio.
Introduccion la Programacin Magister Oscar R. BRUNO
Definicion de tipos
LEXICO NombreDelTipo = TIPO <c1 : Td1; c2 : Td2; ............. cn : tdn >; Punto = TIPO <abs: Real ; ord: Real>
Introduccion la Programacin Magister Oscar R. BRUNO
Asignacin
Interna:
Campo campo Estructura completa (de igual tipo);
Externa
De entrada - salida
Campo a campo (dispositivo std) Estructura completa (otro dispositivo)
Tablas
Los lenguajes de programacion usan el termino array para referirse a tablas. Permite almacenar coleccin de valores y asociar un indice a cada valor almacenado. Es posible el acceso indexado. Son posiciones contiguas de datos homogeneos y de tamao fijo. El operador de acceso es [ ]. Cada subordinacion incrementa la dimension. Tamao logico y fisico.
Introduccion la Programacin Magister Oscar R. BRUNO
Declaraciones
NombreTipo = TIPO Tabla [li, lf] de TipoBase TVR = TIPO Tabla [1, 100] de Real La variacion del indice determina la cantidad de elementos, el tipoBase de que tipo es cada componente. TR = TIPO <absc : Real; ord : Real> TVR = TIPO tabla [1, 50] de TR Tabla : TVR
Introduccion la Programacin Magister Oscar R. BRUNO
Operaciones basicas
Asignacion
ESQUEMA DE RECORRIDO
PARA i [li, ls] HACER // INV = V f(i) FIN_PARA
Tablas vs Registros
Registro permite agrupar datos no homogeneos, la tabla homogeneos. Las tablas permiten el acceo directo a sus miembros por un indice y los registros por el operador punto. En un registro el numero de miembros lo de sus campos en una tabla el intervalo de los indices.
Introduccion la Programacin Magister Oscar R. BRUNO
Ingresar un valor N (< 25). Generar un arreglo de N componentes en el cual las mismas contengan los primeros nmeros naturales pares e imprimirlo. Ingresar un valor entero N (< 30) y a continuacin un conjunto de N elementos. Si el ltimo elemento del conjunto tiene un valor menor que 10 imprimir los negativos y en caso contrario los dems. Ingresar un valor entero N (< 25). A continuacin ingresar un conjunto VEC de N componentes. Si la suma de las componentes resulta mayor que cero imprimir las de ndice par, sino las de ndice impar. Introduccion la Programacin
Magister Oscar R. BRUNO
Ejercicios
Tablas Multidimensionales
Si una tabla representa una funcion de un argumento las tablas multidimensionales representan una funcion de n argumentos, uno por cada dimension. Se utilizan para representar colecciones de objetos de la misma naturaleza a los que se puede acceder mediante un conjunto de indices. La nocion matematica de matriz se puede representar mediante un atabla de dos dimensiones. Introduccion la Programacin
Magister Oscar R. BRUNO
Declaraciones
NombreTipo = TIPO Tabla [fi, fj; ck,cl] de TipoBase TTR = TIPO Tabla [1, 100; 1,10] de Real El producto del intervalo de sus indices determina la cantidad de elementos, el tipoBase de que tipo es cada componente. El tipo puede ser primitivo o derivado.
Introduccion la Programacin Magister Oscar R. BRUNO
ESQUEMA DE RECORRIDO
INV = T PARA i [1, nfilas] HACER INV = T A = f(fila(i)) PARA j [1, ncol] HACER INV = T A = f(fila(i),col(j) FIN_PARA FIN_PARA Introduccion la Programacin
Magister Oscar R. BRUNO
Ejercicios
Ingresar dos valores, M = 30 y N = 25. A continuacin por filas todos los componentes de una matriz MATRIZA de M filas y N columnas. Desarrollar un programa que: Imprima la matriz MATRIZA por columnas. Calcule e imprima el valor promedio de los componentes de la matriz. Genere e imprima un vector VECMAXFIL donde cada componente sea el valor mximo de cada fila.
Introduccion la Programacin Magister Oscar R. BRUNO
Ejemplo
LEXICO FILAS = 30; COLUMNAS = 25; TVM = TIPO Tabla [1, COLUMNAS] de Entero // Vector de maximos TME = TIPO Tabla [1, FILAS; 1,COLUMNAS] de Entero; MATRIZA : TME; VECMAXFIL : TVM; Promedio : Real; CargarMatrizPorFila(Dato Resultado Matriz : TME) : una accion LEXICO i , j : Entero; ALGORITMO PARA i[1,FILAS] HACER PARA j[1,COLUMNAS] HACER Leer(Matriz[i, j]; FIN_PARA FIN_PARA Introduccion la Programacin FIN //accion CargarMatrizPorFila
Magister Oscar R. BRUNO
ImprimirMatrizPorColumna(Dato Matriz : TME) : una accion LEXICO i , j : Entero; ALGORITMO PARA i[1,COLUMNAS HACER PARA j[1,FILAS] HACER Escribir(Matriz[i, j]; FIN_PARA FIN_PARA FIN //accion ImprimirMatrizPorColumna CalcularImprimirPromedio(Dato Matriz : TME) : una accion LEXICO i , j , Total : Entero; ALGORITMO Total = 0; PARA i[1,COLUMNAS HACER PARA j[1,FILAS] HACER Total = Total + Matriz[i, j] ; FIN_PARA FIN_PARA Escribir (El pomedio es : ,Total / Columnas / Filas FIN //accion ImprimirMatrizPorColumna
Introduccion la Programacin Magister Oscar R. BRUNO
CargarVectorMaxFil(Dato Resultado Vector : TVM; Dato Matriz:TME) : una accion LEXICO i , j, : Entero; ALGORITMO PARA i[1,COLUMNAS] HACER Vector[i] = Matriz[i, 1]; PARA j[2,FILAS] HACER SI Matriz[i, j] > Vector[i] ENTONCES Vector[i] = Matriz[i, j] FIN_SI FIN_PARA FIN_PARA FIN //accion CargarVectorMaxFil
MostrarVectorMaxFil(Dato Vector : TVM) : una accion LEXICO i : Entero; ALGORITMO PARA i[1,COLUMNAS] HACER Escribir(Fila : , i,Valor maximo : ,Vector[i]); FIN_PARA //accion MostrarVectorMaxFil
ALGORITMO // Algoritmo principal CargarMatrizPorFila(MATRIZA); ImprimirMatrizPorColumna(MATRIZA); CalcularImprimirPromedio(MATRIZA); CargarVectorMaxFil(MATRIZA, VECMAXFIL); MostrarVectorMaxFil(VECMAXFIL); Introduccion la Programacin FIN
Magister Oscar R. BRUNO
Ejercicios
Ingresar un valor N = 20 y luego por filas una matriz cuadrada CUADRA de N filas y columnas. Desarrollar un programa que determine e imprima: Todos los elementos de la diagonal principal o secundaria segn de cual resulte mayor la sumatoria de elementos. Los elementos del cuarto (N/2 filas y N/2 columnas) cuya sumatoria resulte mayor (considerando que N es par). Los elementos de la triangular superior o inferior dependiendo de cual tenga mayor sumatoria de elementos.
Introduccion la Programacin Magister Oscar R. BRUNO
ARCHIVOS
Coleccin de datos almacenada en unidad externa, por ejemplo disco que se asocia con un nombre. Puede ser de texto o binario. El acceso puede ser secuencial o indexado.
Contenido Clase 5
Algoritmos puntuales
Recorridos. Busquedas. Ordenamientos.
Definiciones de tipos
MAX_FIL Tinfo TinfoC TVector Tinfo; = 100; = TIPO Entero; = TIPO <C1 : Td1, C2 : Td2> = TIPO Tabla [1,MAX_FIL] de
Busqueda Secuencial
BusqSecEnVector(Dato V: Tvector; Dato N: Entero; Dato Clave:Tinfo; Dato_resultado Posic: Entero): una acccion LEXICO Pre: V: Vector en el que se debe buscar Clave : Valor Buscado N : Tamao logico del vector Pos:Posic: Posicion donde se encuentra la clave, 0 ( Cero) si no esta. j : Entero;
Introduccion la Programacin Magister Oscar R. BRUNO
ALGORITMO Posic = 0; J = 1; MIENTRAS (j <= MAX_FIL y j <= N y V[j] <> Clave) HACER Inc (j) FIN_MIENTRAS; SI (j > N) ENTONCES Posic =0 // No encontro la clave buscada SI_NO Posic = j // Encontro la clave en la posicion de indice j FIN_SI; FIN. // Busqueda secuencial En Vector
Introduccion la Programacin Magister Oscar R. BRUNO
Buscar Mximo
BusqMaxEnVector(Dato V: Tvector; Dato N: Entero; Dato_resultado Maximo :Tinfo; Dato_resultado Posic: Entero): una acccion LEXICO Pre: V: Vector en el que se debe buscar N : Tamao logico del vector Pos: Posic: Posicion donde se encuentra el Maximo : Valor maximo del vector. j : Entero;
Introduccion la Programacin Magister Oscar R. BRUNO
maximo
ALGORITMO Posic = 1; Maximo = V[1]; PARA j [2, MAX_FIL] HACER SI (v[j] > Maximo) ENTONCES Posic = j; Maximo = v[j]; FIN_SI; FIN_PARA; FIN. // Busqueda maximo En Vector
Introduccion la Programacin Magister Oscar R. BRUNO
LEXICO j : Entero;
ALGORITMO Posic = 0; J = 1; MIENTRAS (j <= MAX_FIL y j <= N y V[j] <> Clave) HACER Inc (j) FIN_MIENTRAS; SI j > MAX_FIL ENTONCES Posic = 0 SI_NO Posic = j: SI (j > N) ENTONCES Enc =FALSE; // No encontro la clave buscada Inc(N); V[N] = Clave; SI_NO Enc = True // Encontro la clave en la posicion de indice j FIN_SI; FIN_SI Introduccion la Programacin FIN. // Carga sin repetir en vector Magister Oscar R. BRUNO
Busqueda Binaria
BusquedaBinariaEnVectorV1(Dato V: Tvector; Dato N: Entero; Dato Clave:Tinfo; Dato_resultado Posic: Entero; Dato_resultado Pri : Entero): una acccion LEXICO
Pre: V: Vector en el que se debe buscar con clave sin repetir Clave : Valor Buscado N : Tamao logico del vector Pos: Posic: Posicion donde se encuentra la clave, o 0 (cero) si no esta Pri : Retorna la posicion del limite inferior J,u,m : Entero;
Introduccion la Programacin Magister Oscar R. BRUNO
ALGORITMO Posic = 0; Pri = 1; U = N; MIENTRAS (Pri < = U y Pos = 0) HACER M = (Pri + U ) div 2 SI V[M] = Clave ENTONCES Posic = M; SI_NO SI Clave > V[M] ENTONCES Pri = M+1 SI_NO U=M1 FIN_SI FIN_SI FIN_MIENTRAS; FIN. // Busqueda binaria en vector
Introduccion la Programacin Magister Oscar R. BRUNO
ALGORITMO // Version con clave repetida 1ra ocurrencia de la clave Posic = 0; Pri = 1; U = N; MIENTRAS (Pri < U ) HACER M = (Pri + U ) div 2 SI V[M] = Clave ENTONCES Posic = M; U = M; SI_NO SI Clave > V[M] ENTONCES Pri = M+1 SI_NO U=M1 FIN_SI FIN_SI FIN_MIENTRAS; FIN. // Busqueda binaria enIntroduccion vector
la Programacin Magister Oscar R. BRUNO
Ordenamiento Vector
OrdenarVectorBurbuja(Dato_Resultado V: Tvector; Dato N: Entero): una acccion LEXICO Pre: V: Vector en el que se debe ordenar N : Tamao logico del vector Pos: Vector ordenado por clave creciente I,J, : Entero; Aux : Tinfo;
Introduccion la Programacin Magister Oscar R. BRUNO
ALGORITMO // Metodo burbuja PARA i [1, N - 1] HACER PARA j [1, N - i] HACER SI (v[j] > v[j + 1]) ENTONCES Aux = v[j]; V[j] = v[j + 1]; V[j + 1] = Aux; FIN_SI; FIN_PARA; FIN_PARA; FIN
Introduccion la Programacin Magister Oscar R. BRUNO
ALGORITMO // Metodo burbuja mejorado j = 0; REPETIR Inc (j); Ord = True: PARA j [1, N - i] HACER SI (v[j] > v[j + 1]) ENTONCES Aux = v[j];V[j] = v[j + 1]; V[j + 1] = Aux; Ord = False; FIN_SI; FIN_PARA; HASTA_QUE ( J = N 1 o Ord); FIN
Introduccion la Programacin Magister Oscar R. BRUNO
N Mejores
ALGORITMO SI (N < MAX-FIL) ENTONCES Inc (N); V[n] = Clave SI_NO BusqMaxEnVector(V,N, Maximo, Posic); SI (Clave > Maximo) ENTONCES V[Posic] = Clave; FIN_SI; FIN_SI; FIN. // Carga los N mejores en vector
Introduccion la Programacin Magister Oscar R. BRUNO
Ejemplo
LEXICO TVE = TIPO Tabla [1, 100] de Entero; Tabla : TVE; i, N : Entero; ALGORITMO REPETIR // leer tamao logico del vector Leer(N); HASTA_QUE (N > 0 y N <= 25); PARA i[1,N] HACER // Cargar vector hasta tamao logico Tabla[i] = 2 * i; FIN_PARA PARA i[1,N] HACER Escribir(Tabla[i]); //Muestra contenido del vector FIN_PARA Introduccion la Programacin FIN
Magister Oscar R. BRUNO
Volver