Descargar

Algoritmos para resolver problemas computacionales (página 2)

Enviado por Pablo Turmero


Partes: 1, 2
edu.red

Ejemplo de programa BASIC 430 LET f=f(m): LET c=c(m): PRINT AT f,c;a$(m,8);AT f+1,c;a$(m,14);AT f+2,c;a$(m,20): PRINT AT f,c;a$(m,7 TO 8);AT f+1,c;a$(m,13 TO 14);AT f+2,c;a$(m,19 TO 20): BEEP .01,-10: PRINT a$(m): BEEP .02,0: BRIGHT 0: GO TO 350 440 BEEP .07,15: BEEP .06,25: BEEP .07,35: BEEP .07,35: BEEP .09,40: RETURN 450 INK 8: LET xx=c(n)*8-2: LET yy=177-(f(n)*8): PLOT xx,yy: DRAW 27,0: DRAW 0,-27: DRAW -27,0: DRAW 0,27 460 LET xx=c(m)*8-2: LET yy=177-(f(m)*8): PLOT xx,yy: DRAW 27,0: DRAW 0,-27: DRAW -27,0: DRAW 0,27: INK 0: RETURN 470 RESTORE 260: FOR n=1 TO 22 475 IF n=17 THEN LET g$(6,2)=".": GO TO 540 480 READ p$ 490 FOR m=0 TO 7: READ f: POKE USR p$+m,f: NEXT m 520 IF n<12 THEN LET g$(n,1)=p$ 530 IF n>11 THEN LET g$(n-11,2)=p$ 540 NEXT n: RETURN 700 PAPER 5: LET y$=b$(k,1): LET t$=b$(k,2): LET f=f(k): LET c=c(k): BEEP u,25: PRINT AT f,c+2;t$;AT f+1,c+2;" ";AT f+2,c+2;" ": BEEP u,49: BEEP u,25 710 PRINT AT f,c+1;t$;" ";AT f+1,c+1;" ";y$;AT f+2,c+1;" v": BEEP u,49: BEEP u,25 720 PRINT AT f(k),c(k);b$(k,2);" ";b$(k,2);AT f(k)+1,c(k);" ";b$(k,1);" ";AT f(k)+2,c(k);" v ": BEEP u,49: PAPER 7: RETURN ¿?

edu.red

Lenguajes de bajo nivel No existen procedimientos ni funciones No existen registros ni tipos definidos por el usuario No existen bloques estructurados (while, repeat, etc.) En definitiva: no hay abstracciones

Y sin embargo… funciona: http://dis.um.es/~ginesgm/museo.html

edu.red

Evolución e historia de la programación Lenguajes de bajo nivel

(Basic, Fortran, Ensamblador, …) Lenguajes estructurados

(Pascal, C,Modula, ADA, …)

edu.red

Lenguajes estructurados UNIT calculo;

INTERFACE

const NMAX= 10; MAX_GUARDA= 2000;

type TDatosEnt= array [1..NMAX] of integer; TDatosSal= record NPasos: Shortint; Paso: array [1..NMAX-1] of record O1: byte; O2: byte; Fn: byte; end; end;

procedure Operar (var Arr: TDatosEnt; O1, O2, Func, Nivel: byte; var Vale: boolean); forward; procedure CalculaCifras (var Entrada: TDatosEnt); forward; procedure CalculaCifrasRec (var Entrada: TDatosEnt; PA, PB, Func, Nivel: byte); forward;

Concepto de módulo/unidad Separación de interface/implementación Tipos definidos por el usuario Procedimientos y funciones

edu.red

Lenguajes estructurados IMPLEMENTATION

var suma, num: integer; CopiaOrden: TDatosEnt;

procedure OrdenaComb (var Entrada: TDatosEnt; Nivel: byte); var i, j, maxim, pmaxim, tmp: integer; begin CopiaOrden:= Entrada; num:= Nivel; for i:= 1 to Nivel-1 do begin maxim:= CopiaOrden[i]; pmaxim:= i; j:= i+1; while j<=Nivel do begin if CopiaOrden[j]>maxim then begin maxim:= CopiaOrden[j]; …. end; end; end; Procedimiento con parámetros Bloques de control estructurados Separación interface/ implementación

edu.red

Lenguajes estructurados Procedimientos y funciones son abstracciones de control Los tipos definidos por el usuario son abstracciones de datos Las unidades, módulos o paquetes son abstracciones de nivel superior: abstracciones de funcionalidades

edu.red

Lenguajes estructurados Inconvenientes: Los datos y los procedimientos de manipulación sobre los mismos van por separado. Es necesario garantizar la ocultación de la implementación. Proliferación de variables globales. ¿Qué papel juegan? Los programas son cada vez más complejos y difíciles de mantener.

edu.red

Evolución e historia de la programación Lenguajes de bajo nivel

(Basic, Fortran, Ensamblador, …) Lenguajes estructurados

(Pascal, C,Modula, ADA, …) Lenguajes orientados a objetos

(Smalltalk, C++, Java, Eiffel, …)

edu.red

Lenguajes orientados a objetos // Interface

class Timer { private: double StartTime; double ClockRate; public: Timer (void); bool StartTimer (void); double ReadTimer (void); bool Exists; };

class Elipse { protected: double Fcx, Fcy; double Frx, Fry, Fang; void FsetXY (int x1, int y1, int x2, int y2); public: Elipse (int x1, int y1, int x2, int y2); Elipse * Clonar (void); void Pinta (IplImage *image, int color= 0, int ancho= -1); }; Encapsulación de datos y operaciones Los datos son privados Las operaciones son públicas Una clase es un Tipo Abstracto de Datos

edu.red

Lenguajes orientados a objetos // Implementación

Timer::Timer (void) { LARGE_INTEGER *QW= new LARGE_INTEGER; Exists= QueryPerformanceFrequency(QW); ClockRate= QW->LowPart; delete QW; }

bool Timer::StartTimer (void) { LARGE_INTEGER *QW= new LARGE_INTEGER; bool res= QueryPerformanceCounter(QW); StartTime= QW->LowPart; delete QW; return res; } Separación interface/ implementación

edu.red

Lenguajes orientados a objetos Una clase encapsula los datos de un tipo y las operaciones sobre el mismo Una clase es, al mismo tiempo, un tipo abstracto de datos y un módulo que encierra un conjunto de funciones relacionadas Separación clara entre interface (parte visible desde fuera) e implementación (oculta)

edu.red

Resolución de problemas ¿Cómo resuelve un problema de programación un ingeniero?

A) Tecleando código en una máquina.

B) Siguiendo un proceso metódico.

edu.red

Resolución de problemas Estudio de viabilidad, análisis del terreno, requisitos pedidos, etc. Diseñar los planos del puente y asignar los materiales. Poner los ladrillos de acuerdo con los planos. Supervisión técnica del puente. ¿Cómo construye un puente un arquitecto? 1. Análisis del problema 2. Diseño del programa (alg. y estr.) 3. Implementación (programación) 4. Verificación y pruebas ARQUITECTO INFORMÁTICO

edu.red

Observación.

Hipótesis.

Experimentación.

Verificación. MÉTODO CIENTÍFICO INFORMÁTICO 1. Análisis del problema 2. Diseño del programa (alg. y estr.) 3. Implementación (programación) 4. Verificación y pruebas Resolución de problemas

edu.red

Conclusiones Proceso de análisis/diseño. No empezar tecleando código como locos. Usar abstracciones, respetando los dos principios básicos: Encapsulación: las funciones relacionadas deben ir juntas (clases, módulos, paquetes, etc.). Ocultación de la implementación: los aspectos de implementación no son visibles fuera del módulo, clase, etc.

edu.red

Ejercicios para casa Leer el capítulo 1, y las secciones 2.1 y 2.2 del texto guía. Preparar un resumen en un folio por las dos caras (una cap. 1 y otra para 2.1 y 2.2), ESCRITO A MANO. Entregar la semana que viene, en clase. Nombre del alumno, AED, Grupo 3, Cap.1, Fecha (horas estim.)

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente