<a class="nonexistent" href="/wikicmat/AyudaDeContenidos">AyudaDeContenidos</a>
General
La pagina del curso es: http://www.cmat.edu.uy/cmat/cursos/introcomp
Esta pagina es para ir poniendo un poco lo que vamos dando clase por clase, asi como para discutir alguna otra cosa.
Información del Teórico
24 de Agosto
En el teórico del martes pasado presente el tema de computabilidad. Presente diversos modelos de computacion, empezando por automatas finitos, siguiendo por automatas a pila y terminando con máquinas de Turing. El objetivo es que ellos tengan claro que el concepto de "procedimiento efectivo" es una idea intuitiva y como tal no se puede formalizar, pero que se han propuesto diferentes formulaciones alternativas a la máquina de Turing que probaron ser equivalentes. Luego presente la tesis de Church. No tuve tiempo para mostrar un ejemplo sencillo de indecidibilidad.
Habia unas 50 - 60 personas en clase.
31 de Agosto
En el teorico di un ejemplo de un problema no decidible y empece a trabajar en el tema "De problemas a programas". Alcance a presentar el ejemplo de los semaforos y presente el modelo de grafos y el problema de colorear un grafo. Comente que el problema es NP Completo.
7 de Setiembre
Termine de presentar los temas de la clase anterior. Comente sobre Tipos Abstractos de Datos y presente refinamiento sucesivos en relacion al problema de colorear un grafo. Presente que es Analisis de Algoritmos y Complejidad Algoritmica y presente lo que son Algoritmos Aproximados. Tambien comente sobre correctitud de programas y Estructura de Datos + Algoritmos = Programas
14 de Setiembre
???
21 de Setiembre
En el teorico empece a trabar el tema de tipos. Defini que es un Tipo Abstracto y defini que es un tipo. Comente 3 maneras que para definir el conjunto subyacente al tipo, y comente sobre que es la sintaxis y la semantica de las operaciones del tipo. Di algunos ejemplos (enteros y booleanos), y deje varios otros tipos para que lean por su propia cuenta. Comente tambien la importancia entre definir una funcion y la de "esconder" la implementacion y representacion de los tipos abstractos y funciones. Al final comente brevemente tambien "overloading" de operadores, y el problema que esto puede ocasionar (por ejemplo el uso de +, -, *). Ademas aclare otra vez la diferencia entre error de compilacion y error de ejecucion. Lo importante es que entiendan porque es importante tener tipos, y para que se usan.
El martes qeu viene presentaria brevemente vectores, matrices y registros y luego daria seleccion, secuencia, iteracion, pero creo que NO me va a dar una clase para dar todo esto.
28 de Setiembre
Di estructuras de control. Presente secuencia y di estructuras alternativas. Presente el if-then y el if-then-else. Al final presente el case. Aproveche a presentar ideas relacionadas con condiciones de error en los datos de entrada y el manejo de excepciones. Este tipo de situaciones se maneja generalmente usando estructuras del tipo if <dato invalido> then ...
5 de Octubre
Presente estructuras iterativas. Discuti a fondo el while y di varios ejemplos. Luego sobre el final presente repeat y el for. Di rapidamente la definicion de vector, aunque hay que retomar el tema. Comente todo lo relacionado con la condicion de finalizacion del while, con inicializacion de variables y con el uso adecuado de las condiciones, para evitar entrar en loop. Di varios ejemplos y los discutimos.
Aproveche y converse un poco sobre el obligatorio, su estructura, y sobre su dinamica. Esto fue al comienzo del teorico y me permitio presentar estructuras iterativas.
12 de Octubre
???
19 de Octubre
???
26 de Octubre
???
9 de Noviembre
???
12 de Noviembre
???
16 de Noviembre
???
23 de Noviembre
???
30 de Noviembre
???
Información del Práctico
Primer Semana
- Nicolas: No tuve clase porque el miercoles fue feriado.
Segunda Semana
- Nicolas (Lunes):
- Hoy lunes charlamos un poco sobre que es computar, conceptos de programas, lenguajes de programacion (diferentes paradigmas y tipos mas especializados, alto y bajo nivel, funcionales logicos e imperativos, etc...) Introdujimos el Pascal y porque lo usabamos. Despues hablamos un poco de ambientes y editores, sobre compilar, interpretar, etc... que debe tener un entorno de programacion y para que sirve.
- Estructura basica de un programa en Pascal y algunos ejemplos de entrada-salida, aca agarraron las maquinas y escribieron un programa tipo 'hello world' compilaron y ejecutaron. Despues experimentamos un poco con lecturas y algo de variables pero casi nada, por ultimo un ejemplito mas elaborado con una iteracion por un ejemplo que habia mencionado antes... (esto ultimo sin explicar nada de iteraciones simplemente con la idea intuitiva de un bucle for).
- No los conte, pensaba hacer esto el miercoles y pasar una hojita para ver quienes tienen maquina en la casa y experiencia previa en programacion. Pero serian aproximadamente unos pocos mas que 20 (trabajaban mas o menos 2-3 por maquina).
- Nicolas (Miercoles):
- Empezamos con el practico 1, hablamos de variables, constantes, tipos de datos, asignacion y operaciones simples. Vimos un ejemplo de diagrama de sintaxis para los identificadores, mostrando como se traducia a un automata finito y como hacia el compilador para parsear el codigo, les comente que en la pagina tenian varios diagramas de sintaxis para vichar.
- Insisti sobre la idea de asignacion para que quede clara. Despues vimos los tipos de datos basicos: enteros, reales, caracteres y booleanos. Hablamos un poco de como se representan en la maquina, en particular de maxint y de punto flotante para los reales y los errores numericos que acarrea esta representacion.
- Casi todos terminaron el practico, lo hicieron desde la pagina en las computadoras y fuimos discutiendo entre todos algunas dudas que surgian. Algunos probaron los ejemplos en el turbo pascal tambien.
Tercer Semana
- Nicolas (Lunes):
- Empece con la pregunta: Como cuento hasta 31 con una sola mano? Repasamos algunas cosas de tipos de datos, y surgieron preguntas sobre la representacion interna de los mismos. Hablamos de representacion de enteros positivos simplemente en base 2 (y vimos como cambiar de base). Despues discutimos como representar enteros, positivo y signo, desplazamiento, negacion y complemento a 2. Comentamos algo sobre caracteres (tabla ascii y unicode)
- Tambien hablamos de representaciones de reales (mantisa y exponente) de la densidad cerca de cero y los grandes espacios, y de los errores de aproximación numerica, por ejemplo 2/3*3 no es igual a 2. Explique porque no tiene sentido usar comparaciones por igual o distinto cuando trabajamos con reales. Algo de esto habia contado la clase anterior.
- Vimos entrada y salida: write, writeln, read, readln. Errores comunes, enganchando con los distintos tipos. Hicieron casi todos los ejercicios del práctico 2. Tambien un poco de formato de campos para escribir en pantalla.
- Nicolas (Miercoles):
- Ejemplo de cambio de base, discutimos bastante, terminamos haciendo uno bastante general, iterativo que va leyendo por caracteres. Estuvo bueno porque tiraron varias ideas, etc... pero se me fue media clase con eso. Vimos ejemplos de errores de ejecucion, entradas invalidas, como validar.
- Despues hablamos un poquito de algebra de boole y empezaron con el practico 3, explique como y para que se usan las estructuras condicionales. Basicamente solo me dio para hablar de if-then, y if-then-else. Nada de anidaciones ni case.
Cuarta Semana
- Nicolas (Lunes):
- Basicamente hicimos el práctico 3, ejemplos de estructuras condicionales, calcular valores de expresiones booleanas, tranformar if-else en case y al reves, juntar varios if en una condicion sola. If-else anidados a que if corresponde el else, etc... Hicieron bastantes ejercicios del practico y los probaron en las maquinas tambien.
- Despues un poco sobre iteraciones, explique como funciona el while y lo usamos para hacer un programa que testea si un numero leido de la entrada es primo o no (criba de eratostenes, usando la cota de la raiz). Pienso complementarlo la clase que viene para transformarlo en un programa que de como salida la descomposicion en factores primos, etc...
- Nicolas (Miercoles):
- Terminaron el practico 3, discutimos un poco el ejercicio de resolver sistemas 2x2 por el metodo de Cramer. Despues explique de nuevo cosas de interaciones (for,while y repeat) discutimos como cambiar de un ciclo a otro, que cosas se pueden hacer, etc... Que el for necesita saber a priori cuantas veces quiero iterar.
- Hicimos entre todos un ejemplo del algoritmo de Euclides para el mcd, explique el algoritmo a mano primero y probamos que mcd(a,b)=mcd(b,r) si a=b*d+r para justificar la correctitud. Lo corrimos a mano en unos ejemplos y despues escribimos el codigo. Insisti en la necesidad de variables auxiliares para copiar los datos anteriores (porque no anda hacer a:=b y despues b:=a mod b) que necesitamos guardar el valor "viejo" en algun lado.
Quinta Semana
- Nicolas(Lunes): Feriado (dia de la universidad)
- Nicolas(Miercoles):
- Hicieron ejercicios del practico 4 de varias iteraciones. Al final entre todos discutimos los ejercicios 8 y 9, uno es leer transacciones (depositos y retirmos) de monto inicial hasta un comando de terminar. El otro es hallar el maximo de una funcion de 3 variables en los valores enteros entre -3 y 3.
- Trabajaron bastante ellos en las maquinas tambien. La idea es comenzar con arreglos en la clase proxima.
Sexta Semana
- Nicolas(Lunes):
- Laboratorio: Leimos la letra, explicamos los conceptos de automata celular (deterministico y estocastico), de vecindad, y los problemas de bordes. Ejemplificamos con un modelo en dimensión 1 de autos que avanzan en una carretera (dependiendo de su posicion adelante, atras, y el azar) para ver los conceptos y hacer algunos dibujos. Despues comentamos brevemente los 3 modelos y que es lo que modelan con algun dibujito tambien para explicar un poco las cosas. Les insisti que piensen por ahora solo en el modelo de crecimiento simple.
- Práctico: Comenzamos con el práctico 5, hablamos de tipos enumerados, subrangos, sets y mas que nada de arrays. Quedo mucha cosa colgada para la clase que viene porque estuvimos mas que nada con el laboratorio. La idea es empezar viendo el bubble sort y producto de matrices la que viene.
- Nicolas(Miercoles):
- Laboratorio: Comentamos algunas cosas sobre la libreria grafica y el uso de random, sobretodo porque ellos preguntaron. Insisti en que no se preocupen en un principio en leer los datos ni en dibujar "bonito" sino que logren hacerlo andar. Discutimos un poco como guardar los datos del modelo de crecimento simple.
- Práctico: Arrays, hicimos un programa que lea 10 numeros y los escriba ordenados, vimos algoritmos para ordenar una lista discutiendo entre todos, salio hallar el minimo en cada iteración y colocarlo en la posición, despues les conte el bubble sort con una condicion de parada cuando ya no halla cambios (mejora si esta medio ordenado), dio hasta para mencionar el quicksort y les parecio interesante el tema (tire "ideas" sobre ordenes, etc...) Despues hicimos otro programa para hacer un producto de matrices, y que ademas leyera las dos matrices de la entrada y escribiera el resultado. Dio para comentar problemas de borde y otras cosas.
Septima Semana
- Nicolas(Lunes):
- Práctico: Introduje las ideas de registros, como se definen y algunos ejemplos. Despues vi cosas de procedimentos porque estaban preguntando como usarlos para el obligatorio. Vi pasaje de parametros por referencia y por valor, y mostre un poco los problemas de scope. Hicimos algunos ejemplos, en particular rescribimos el programa de las matrices de la vez pasada pero con procedimentos.
- Laboratorio: Discutimos donde se podian usar registros, despues hablamos un poco de la estructura del programa, comentamos el procedimiento para leer la entrada (porque habiamos hecho un para leer matrices), depues los convenci de tratar de separar lo mas posible en procedimientos, para dibujar en la pantalla, para iterar, para contagiar, etc... Finalmente me preguntaron dudas sobre como son los sorteos y si ocurre todo a la vez o dibujan despues de cada iteracion, etc...
- Nicolas(Miercoles):
- Práctico: Para redondear y juntar muchas cosas vimos como implementar un TAD lista con arreglos con tope. Mezclamos arreglos, registros, procedimientos y funciones, y en particular trate de vincularlo con lo que vieron en teorico, no hicimos toda la implementacion solo las estructuras y un par de procedimientos. Me parece que podriamos poner algo en el practico despues.
- Laboratorio: El ambiente esta un poco raro, hay gente que esta entendiendo todo y otra que esta medio perdida, por eso trate de dar una mano contando algunas cosas. Arrancamos viendo como hacer para tener una matriz de tamaño indeterminado (vinculandolo con los arreglos con tope). Discutimos el problema que pasa si itero y modifico sobre la misma matriz (crece mas posiciones de las deseadas en la misma iteracion) como solucionarlo usando dos matrices para el estado actual y el siguente. Tambien conversamos distintas posibilidades para terminar la iteracion. Despues discutimos entre todos como seria un esqueleto del programa (procedimientos y funciones) tratar de abstraer lo maximo posible. Basicamente llegamos a partirlo en:
leerConfig(...);
repeat
contagiar(...); {este proc. a su vez llama a otro para sortear a cada vecino}
copiarmatriz(ant,sig);
dibujar(...);
until(not termine(params)); {termine es una fn. booleana}
Octava Semana
- Nicolas(Martes):
- Recuperamos la clase del lunes en un salon sin maquinas. Charlamos un poco mas sobre la estructura del programa, vimos mas ideas, por ejemplo tener un procedimiento que devuelva los vecinos, despues tambien vimos como pasar al modelo de votacion, y se quedaron bastante contentos de que fuera facil de hacerlo, tambien les mostre que podria ser muy engorroso si uno no lo diseñaba bien desde el principio. Despues viche dudas particulares de cada uno, pero en general marchan bien, hay 1 chica que me tiene un poco preocupado porque parece que intenta laburar pero no entiende mucho.
- Nicolas(Miercoles):
- Práctico: Hicimos algunos programas con la libreria grafica, una pelotita que se mueve con velocidad constante y rebota en los bordes de la pantalla, y alguna otra cosa para que vieran como manejarse con los procedimientos para dibujar en pantalla. Despues laburaron un poco con el práctico de procedimientos.
Laboratorio: Dado que tienen el parcial y todavia habia gente que no habia terminado los programas no pude empezar a discutir el modelo de crecimiento fractal, aunque algunos me plantearon dudas concretas y las pensamos entre todos. Pero en general del laboratorio no avanzamos muchos, si me mostraron codigos en las maquinas y errores que estaban teniendo y fui viendo un poco los problemas de cada uno. Un estudiante le agrego al modelo de votacion que escriba en pantalla cuantos en cada estado hay, la diferencia y el cociente, bastante prolijo
Novena Semana
- Nicolas(Lunes):
Laboratorio: Discutimos el modelo de crecimiento fractal. Vimos como aprovechar la estructura de los programas anteriores, tambien discutimos distintas variantes para representar el estado del sistema. Observamos que muchas cosas se reutilizan con pocos cambios, despues pensamos las cosas que si cambian bastante. Por ejemplo la funcion termine, aca lo razonable parece seguir iterando hasta que la concentración de gas sea bastante chica, hicimos el codigo de este procedimiento (#gas/(x*y) < tolerancia). Una observación interesante era que los mover eran multiplicar por una matriz elemental (aunque uno no lo escriba asi). Por ultimo vimos el procedimiento contagiar (o reacccionar).
procedure contagiar(...);
begin
solidificar(...); {este cambia (1,x,0) a (0,x,1) donde las coords son (g1,g2,s) segun los vecinos}
copiarmatriz(ant,sig); {los copiar matriz se pueden poner dentro de solidificar y mover}
mezclar(...); {o intercambiar, mezcla los dos gases}
moverarribaabajo(...); {copia la fila de abajo de ant en sig para g1 y g2 al reves}
copiarmatriz(ant,sig);
solidificar(...);
copiarmatriz(ant,sig);
mezclar(...);
moverizqder(...);
copiarmatriz(ant,sig);
- Nicolas(Miercoles):
- Dudas varias sobre el laboratorio, varios estan bastante atrasados!!! La entrega es el miercoles que viene y todavia no empezaron con el fractal. Vimos con detalle el procedimiento solidificar entre todos, que era el que nos falto discutir la clase pasada.
- Encontre dos errores tipicos uno de ellos medio dificil de detectar, el primero es "too many variables" se soluciona cambiando el tamaño maximo de la matriz o agragando la siguente directiva de compilacion {M$,65520,0,655640} para cambiar el tamaño de memoria a reservar (vichar manuales). El segundo que es el delicado, es "stack overflow" (Error 202) que es error de ejecución, este pasa porque en algun procedimiento pasan las matrices por valor en lugar de referencia entonces no hay espacio suficiente en el stack para copiar toda la matriz!!! A mas de uno le dio dolor de cabeza este error porque el codigo compila y todo pero se cuelga al correrlo.
Decima Semana
- Nicolas(Lunes):
Laboratorio, siguieron arreglando errores y con dudas particulares de cada implementacion, me perdi toda la clase en eso practicamente. Les conte qu se posterga la entrega del fractal, pero que los otros no, y a la gente que habia mas o menos terminado les insiste con que hicieran los ejercicios de practico que les quedaban. Importante: Descubri un error a la hora de usar los archivos de prueba! No se puede usar el modulo crt o sino no funciona redireccionar la entrada, si necesitan hacer un delay les conte como hacerlo con la funcion gettime del modulo dos.
- Nicolas(Miercoles):
- Completar...
Decimo Primer Semana
- Nicolas(Miercoles):
Termino el primer obligatorio, perdimos media clase en errores de última hora antes de entregar. Despues empece recursión, di como ejemplos el factorial y los números de fibonacci, discutimos versiones iterativas, el uso de memoria, la simplicidad de la solución, etc... Les conte lo que era programación dinámica (aunque no lo veamos) y calculamos cuantas veces se llama a fib(i) para calcular fib(j) con j > i
- Nicolas(Viernes):
Recuperé la clase del lunes. Seguimos con recursión e inducción, vimos definiciones inductivas de conjuntos, pruebas por inducción y funciones definidas por recurrencia sobre estos. En particular trabajamos con cadenas, hicimos alguna demostración un poco mas dificil (una doble inclusión, para L={anb2m / n > m} y su definición inductiva). Hicimos alguna operación recursiva con cadenas, por ejemplo eliminar una letra y duplicar todas. Por ultimo hicimos el problema de las torres de Hanoi, y calculamos la cantidad de movimientos.
Decimo Segunda Semana
- Nicolas(Lunes):
Di divide & conquer y backtracking. De divide & conquer conte busqueda binaria, el quicksort (y les deje como ejercicio el mergesort que esta en el práctico) conte el quickselect medio por encima tambien, y la exponenciación rápida (hay varios ejercicios mas en el práctico que viene). De backtracking empece explicando lo que era, probar todos los casos pero ordenarlos tipo árbol e ir podando cuando ya no conduce a una solución, conte las 3 variantes, encontrar una solución, todas las soluciones, o la mejor según algun criterio. Hicimos el problema de las 8 Reinas completo (hallar una solución y todas), les recorde el problema de los semaforos del principio de clases y les conte que vamos a resolver hallar una coloración de grafos por backtracking, y este era un caso donde buscaba un óptimo (la menor cantidad de colores posibles).
- Nicolas(Miercoles):
Trabajaron ellos en los prácticos 8 y 9. Hicimos algun ejercicio de divide & conquer, aunque la mayoria estaba terminando mas el practico 8, algunos empezaron con el 9 y hicieron un par de ejercicios. Los apure un poco porque se larga el obligatorio, parece que se pusieron las pilas, habra que ver que pasa con los temas que vienen.
Decimo Tercer Semana
- Nicolas(Lunes):
- Hicieron práctico y comentamos un poco el laboratorio. Vino menos gente (supongo que por el Pilsen Rock), trabajaron en los ejercicios de backtracking y hicimos entre todos con detalle el de coloración de grafos. Estuvo bueno porque volvimos al problema de los semaforos y todo eso, y aparte es un ejemplo donde uno busca un óptimo y hace la poda según la cantidad de colores usados. Les inisiti que antes de hacer backtracking es importante reducir todo lo posible el espacio de posibilidades, por ejemplo no considerar permutaciones de colores, etc... pero que a veces es dificil.
- En ese sentido les recorde como cambiaba el espacio de soluciones del problema de las 8 reinas si las dejamos en cualquier lado: combinaciones de 64 en 8, si dejamos una por fila 8^8 o si dejamos una por fila y una por columna 8!.
- Nicolas(Miercoles):
- Comentamos ideas para el laboratorio, vi un esquema general de backtracking y que variantes se harian para encontrar todas las soluciones, 1 solucion, la solucion que minimiza o maximiza cierto criterio. En particular despues resolvimos el problema de asignar N tareas a N personas para minimizar el tiempo total que llevan, conocidos los tiempos de cada persona para cada tarea.
- Despues comentamos el problema de hallar una secuencia de ganadas en un torneo con una estrategia tipo mergesort de ir intercalando quienes le ganaron a uno y a otro. Podria haberlo hecho con mas detalle pero no dio el tiempo.
Decimo Cuarta Semana
- Nicolas(Lunes):
- Vi el siguente problema: Tenemos N cursos con sus creditos correspondientes, y previaturas entre ellos, determinar que L cursos debo hacer y en que orden para maximizar la cantidad de creditos. Lo hicimos entre todos modelando el problema definiendo tipos, etc... Es interesante porque era lo ultimo que nos faltaba hacer con backtracking, un ejemplo donde lo que buscamos es maximizar algo (y por lo tanto no cortamos por el costo parcial). La idea es poner un ejercicio parecido en el parcial.
- Al final les conte las operaciones básicas con punteros, y les introduje como se definen listas encadenadas para comenzar con esto el miercoles. Me parece que no vamos a llegar a ver casi nada de arboles, veremos que pasa.
- Nicolas(Miercoles):
- Consteste algunas dudas sobre el obligatorio. Me parece una buena pregunta para el parcial preguntarles porque hay que marcar las casillas, o mas "sutilmente" como evitar entrar dar vueltas en circulos en un mapa que podemos darles dibujado. La impresion general que tengo es que no han empezado mucho a meterle al obligatorio, les insisti con que se pongan las pilas.
Empezamos a ver listas encadenadas, vimos como hacer las operaciones basicas (Null,Cons,Empty,Head,Tail) con punteros, como usarlas para hacer otras mas sofisticadas como IsElement, y como hacerlo directamente accediendo a los punteros, tambien vimos versiones recursivas e iterativas de este, comentamos las diferencias entre versiones funcionales y procedurales, les mostre que problemas podria haber con punteros, que dos listas compartan elementos, que pasa si una borra, etc... Podria hacerse alguna pregunta teorica sobre esto.
Decimo Quinta Semana
- Nicolas(Lunes):
- Conteste algunas dudas del obligatorio. Seguimos con listas, vimos el insert en una lista ordenada, version recursiva e iterativa, un ejemplo tipico de que a veces necesito 2 punteros para iterar (recorrer la lista) porque quiero checkear una condicion pero estar parado en el nodo anterior. Despues vimos el reverse para devolver otra lista al reves. Trate de hacerles una distincion entre la estructura y el tipo que representa, por ejemplo una lista ordenada tiene la misma representación pero un distinto set de operaciones. Aparte les comente algunas cosas sobre correctitud, pre y postcondiciones.
- Empezamos con arboles, comentamos y definimos la estructura y los tipos. Vimos las operaciones básicas (Null,Cons,Empty,Root,Left,Right) y hicimos algo con ellas, despues enseguida les conte arboles de busqueda (diferenciando el tipo de la estructura que es la misma) como usarlos, para que sirven, vimos como deberia insertarse en ellos y llegamos a hablar de recorridas sobre el final (pre,post y en orden).
Ideas para el laboratorio
El primer laboratorio quedo pronto, trata sobre simulaciones con automatas celulares estocasticos. En particular sobre 3 modelos:
- Crecimiento Simple (Epidemias, etc...)
- Competencia o Votacion
- Crecimiento Fractal
El segundo laboratorio es sobre backtracking y soluciones de laberintos.
Alfonso estuvo mirando un poco en la web y yo tambien y encontramos un inconveniente... google. Buscar "conway game of life pascal" da links paginas que tienen codigo fuente del programa (una implementacion particular, pero capaz es malo el facil acceso a una solucion del problema). Algunas ideas que se me ocurren:
- Plantear algun otro automata celular, con otras reglas. Puede ser incluso algo unidimensional, o otros modelos, con distintas vencindades (en lugar de los 8 adyacentes, solo los 4 que comparten una cara, etc...
- Plantear un automata probabilista (no se si se llaman asi) agregarles azar, se que se usan modelos bastante sencillos en areas como epidemiologia para modelos de contagio, etc... Podria ser una matriz con estados (enfermo, sano, curado) y algun fenomeno de contacto pero aleatorio.
- Para mirar algun link:
Automatas Genéticos para optimización
- Alfonso propone plantear un problema sobre el juego de conway, hallar configuraciones periodicas, o algo por el estilo.
Cronograma tentativo de Practico
- Presentar conceptos de computacion, programas y lenguajes. Programa básico en Pascal.(1 clase)
- Variables y constantes. Tipos de datos. Asignación y operaciones basicas. (2 clases)
- Representación interna de datos. Entrada y salida. Formato. (1 clase)
- Algebra booleana. Expresiones condicionales. If, else, case. (2 clases)
- Estructuras Iterativas. While, repeat, for. (2 clases)
- Tipos de datos compuestos. Enumerados, Rangos, Sets, Arreglos. (2 clases)
- Procedimientos y funciones. Pasaje de parámetros. Scope de variables. Diseño descendente. (2 clases)
- Registros. Registros con variantes. (2 clases)
Inducción y Recursión. Divide & Conquer. Backtracking. (2 clases)
- Punteros. Manejo de memoria dinámica. (2 clases)
- Tipos de datos abstractos. Listas, árboles. (4 clases)
- Mas TAD: queue, stack, hash.
- Algoritmos Greedy. Programacion Dinamica.
- Aplicaciones a la matemática. Cálculo numérico.
como haces para contar hasta 31 con una sola mano?
Comentarios Generales y discuciones
Esta seccion es como para poner ideas, algun ejercicio, comentarios, algo del laboratorio, etc...
- Que opinan de ir poniendo un cronograma en la pagina? Podemos sacarlo de aca... simplemente 1 linea que resuma que se vio en esa clase.
Ideas para el Curso 2005
- Conseguir un mejor ambiente de programacion?
- Hacer un practico de automatas?
- Presentar la no computabilidad con un argumento de diagonalizacion?
- Algun ejercicio de representacion interna de datos?
- Ejercicios de mapas de karnaugh, minimizacion, algebra de boole?
- Hacer algun ejercicio en donde tengan que usar Tipos Abstractos de Datos.
