Upload
lalo-pina
View
218
Download
0
Embed Size (px)
DESCRIPTION
,jb,bm
Citation preview
15/10/2015 Conoce300 :: Pascal con Free Pascal :: Introducción a la programación orientada a objetos I :: Respuestas a las preguntas y ejercicios
http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1010R.php 1/6
PASCAL CON FREE PASCAL
10. Introducción a la programación orientada a objetos I.
10.10. Respuestas a las preguntas y ejercicios. anterior :: indice :: siguiente 10.1. ¿Qué es la programación Orientada aObjetos?.10.2. Un programa de ejemplo.10.3. Constructores y Destructores.10.4. Sobrecarga de métodos Polimorfismo porsobrecarga.
10.5. Herencia Polimorfismo por sobreescritura Compatibilidad entre objetos.10.6. Encapsulación (Private, Strict private,Protected, Strict Protected, Public).10.7. Polimorfismo por sobreescritura con enlaceposterior.
10.8. Parametros opcionales y uso de self.10.9. Preguntas y ejercicios.10.10. Respuesta a las preguntas y ejercicios.
1.
¿ Qué es la Programación Orientada a Objetos ? La programación Orientada a Objetos, es un paradigma de programación, basado en identificar los objetos y la acciónreciproca entre los mismos, que se presentan en un determinado problema.
2.
¿ Qué es un Objeto ? Es cualquier cosa real o abstracta, del cual siempre tenemos una idea particular que nos permite definir su aspecto ycomportamiento.
3.
¿ Qué es una clase ? Es un tipo de objeto o una categoría de objetos.
4.
¿ Al usar la directiva de compilación {$mode objfpc}, que cambio tiene sobre el tipo de dato integer ? Este aumenta de tamaño de 2 a 4 bytes.
5.
¿ Qué son los atributos de una clase ? Son los campos de una clase que definen el aspecto de un objeto.
6.
¿ Qué son los métodos ? Son las funciones y procedimientos que definen el comportamiento de un objeto.
7.
¿ Cuál es la función de un constructor y un destructor ? Los constructores son los métodos que se encargan de crear un objeto en el montículo, y los destructores son losmétodos que se encargan de retirarlos del montículo.
8.
¿ Cuál es el constructor y destructor predeterminado de toda clase ? Create y Destroy.
9.
¿ Qué es el Polimorfismo por sobrecarga ? Es la característica en la cual un objeto puede tener distinto comportamiento dependiendo de cual método sesobrecargue.
10.
¿ Qué es la Herencia ? La herencia es una característica, que permite que una clase nueva se puede crear a partir de otra existente.
11. ¿ Qué es el polimorfismo por sobreescritura ?
LENGUAJES DE PROGRAMACIÓN
Trabajo: Arca ContinentalAccede a sus ofertas de empleo.Checa las vacantes y postúlate.
15/10/2015 Conoce300 :: Pascal con Free Pascal :: Introducción a la programación orientada a objetos I :: Respuestas a las preguntas y ejercicios
http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1010R.php 2/6
Es la característica en la cual un objeto puede tener distinto comportamiento cuando se sobreescribe el método de laclase padre.
12.
¿ Qué es el polimorfismo por sobreescritura por enlace posterior ? Es la característica en la cual un objeto puede tener distinto comportamiento cuando se sobreescribe el métodovirtual de la clase padre.
13. Termine de construir la clase TComplejo, y añada los métodos de las operaciones faltantes, sustracción, división ypotencia. Se recomienda usar la unidad math y para calcular la potencia de un número complejo, debe convertir elnúmero complejo a su representación polar
{$codepage utf8}{$mode objfpc}UNIT Complejos;INTERFACEUSES math;TYPE TComplejo = CLASS PRIVATE ParteReal,ParteImag:double;
PUBLIC
CONSTRUCTOR Crear(i:double); //Crea un imaginario puro CONSTRUCTOR Crear(r,i:double); FUNCTION ObtReal:double; FUNCTION ObtImag:double; PROCEDURE PonReal(n:double); PROCEDURE PonImag(n:double); FUNCTION ObtCad(dec:integer=0):string; FUNCTION PonCad(n:string):integer; PROCEDURE Adicion(n:TComplejo); PROCEDURE Sustracion(n:TComplejo); PROCEDURE Multiplicacion(n:TComplejo);virtual; PROCEDURE Division(n:TComplejo); PROCEDURE Cuadrado(n:TComplejo); PROCEDURE Cuadrado;
FUNCTION modulo:double; FUNCTION argumento:double;
PROCEDURE Potencia(n:integer); END;
IMPLEMENTATION
CONSTRUCTOR TComplejo.Crear(i:double); BEGIN ParteReal:=0; ParteImag:=i END;
CONSTRUCTOR TComplejo.Crear(r,i:double); BEGIN ParteReal:=r; ParteImag:=i; END;
FUNCTION TComplejo.ObtReal:double; BEGIN ObtReal:=ParteReal END;
FUNCTION TComplejo.ObtImag:double; BEGIN ObtImag:=ParteImag END;
PROCEDURE TComplejo.PonReal(n:double); BEGIN ParteReal:=n; END;
PROCEDURE TComplejo.PonImag(n:double); BEGIN ParteImag:=n END;
FUNCTION TComplejo.ObtCad(dec:integer=0):string; VAR aux1,aux2,p:string; BEGIN p:=''; Str(ParteReal:0:dec,aux1); Str(ParteImag:0:dec,aux2); IF ParteImag>=0 THEN p:='+'; ObtCad := aux1 + p + aux2 + 'i'; END;
FUNCTION TComplejo.PonCad(n:string):integer; VAR aux:string;
15/10/2015 Conoce300 :: Pascal con Free Pascal :: Introducción a la programación orientada a objetos I :: Respuestas a las preguntas y ejercicios
http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1010R.php 3/6
p,i,error:integer; PR,PI:string; encontro:boolean; BEGIN aux:=n; ParteReal:=0; ParteImag:=0; error:=0; IF (aux[length(aux)]='i') AND (NOT(aux[length(aux)‐1]IN['0'..'9'])) THEN aux:=Copy(aux,1,length(aux)‐1)+'1i'; IF aux[length(aux)]='i' THEN BEGIN delete(aux,length(aux),1); IF aux[length(aux)] IN ['0'..'9'] THEN BEGIN i:=length(aux); encontro:=FALSE; p:=0; WHILE (NOT encontro) AND (i>1) DO BEGIN IF (aux[i]='+') OR (aux[i]='‐') THEN BEGIN encontro:=TRUE; p:=i END; i:=i‐1 END; PR:=Copy(aux,1,p‐1); delete(aux,1,p‐1); PI:=aux; Val(PR,ParteReal,error); Val(PI,ParteImag,error); IF error<>0 THEN BEGIN ParteReal:=0; ParteImag:=0 END END; END ELSE BEGIN Val(aux,ParteReal,error); END; PonCad:=error END;
PROCEDURE TComplejo.Adicion(n:TComplejo); BEGIN PonReal(ObtReal+n.ObtReal); PonImag(ObtImag+n.ObtImag) END;
PROCEDURE TComplejo.Sustracion(n:TComplejo); BEGIN PonReal(ObtReal‐n.ObtReal); PonImag(ObtImag‐n.ObtImag) END;
PROCEDURE TComplejo.Multiplicacion(n:TComplejo); VAR PR,PI:double; BEGIN PR:=(ObtReal*n.ObtReal)‐(ObtImag*n.ObtImag); PI:=(ObtReal*n.ObtImag)+(ObtImag*n.ObtReal); PonReal(PR); PonImag(PI) END;
PROCEDURE TComplejo.Division(n:TComplejo); VAR aux:double; PR,PI:double; BEGIN aux:=sqr(n.ObtReal)+sqr(n.ObtImag); PR:=(((ObtReal*n.ObtReal)+(ObtImag*n.ObtImag))/aux); PI:=(((ObtImag*n.ObtReal)‐(ObtReal*n.ObtImag))/aux); PonReal(PR); PonImag(PI) END;
PROCEDURE TComplejo.Cuadrado(n:Tcomplejo); BEGIN PonReal(n.obtReal);PonImag(n.ObtImag); Multiplicacion(n) END;
PROCEDURE TComplejo.Cuadrado; BEGIN Multiplicacion(self) END;
FUNCTION TComplejo.modulo:double; BEGIN modulo:=sqrt(sqr(ParteReal)+sqr(ParteImag)); END;
15/10/2015 Conoce300 :: Pascal con Free Pascal :: Introducción a la programación orientada a objetos I :: Respuestas a las preguntas y ejercicios
http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1010R.php 4/6
FUNCTION TComplejo.argumento:double; BEGIN argumento:=arctan2(ParteImag,ParteReal) END;
PROCEDURE TComplejo.Potencia(n:integer); VAR rn:double; PR:double; PI:double; BEGIN rn:=modulo ** n; PR:=rn*cos(argumento*n); PI:=rn*sin(argumento*n); ParteReal:=PR; ParteImag:=PI END;END.
14.
Cree las siguientes clases:A) Una clase padre, al que se denominará TMatriz, que permite implementar una matriz de mxn dimensiones, estaclase debe permitir las siguientes operaciones adición, sustracción, multiplicación y multiplicación por un escalar deuna matriz.B) Un clase TMatrizCuadrada, que es una subclase de la clase TMatriz, que tendrá los métodos Determinante2x2 yDeterminante3x3, que permite calcular el determinante de una matriz de orden 2 y 3 dimensiones.
A)
{$codepage utf8}{$mode objfpc}UNIT Matriz;INTERFACEUSES math;TYPE
TMatriz=CLASS PRIVATE matriz:ARRAY OF ARRAY OF double; filas,columnas:longint; PUBLIC CONSTRUCTOR Crear(m,n:longint); FUNCTION ObtElemento(m,n:longint):double; PROCEDURE PonerElemento(m,n:longint;k:double); FUNCTION ObtFilas:longint; FUNCTION ObtColumnas:longint; PROCEDURE LLenar(m:ARRAY OF double);virtual; PROCEDURE Mostrar(dec:byte=0);virtual; PROCEDURE Adicion(n:TMatriz); PROCEDURE Sustracion(n:TMatriz); PROCEDURE Multiplicacion(n:TMatriz); PROCEDURE Multiplicacion(k:double); END;
IMPLEMENTATION
CONSTRUCTOR TMatriz.Crear(m,n:longint); BEGIN filas:=m; columnas:=n; SetLength(matriz,m,n); END;
FUNCTION TMatriz.ObtElemento(m,n:longint):double; BEGIN ObtElemento:=matriz[m,n] END;
PROCEDURE TMatriz.PonerElemento(m,n:longint;k:double); BEGIN matriz[m,n]:=k END;
FUNCTION TMatriz.ObtFilas:longint; BEGIN ObtFilas:=filas END;
FUNCTION TMatriz.ObtColumnas:longint; BEGIN Obtcolumnas:=columnas END;
PROCEDURE TMatriz.LLenar(m:ARRAY OF double); VAR i,j:longint; BEGIN FOR i:=0 TO filas‐1 DO FOR j:=0 TO columnas‐1 DO matriz[i,j]:=m[i*columnas+j] END;
PROCEDURE TMatriz.Mostrar(dec:byte=0); VAR i,j:longint; BEGIN
15/10/2015 Conoce300 :: Pascal con Free Pascal :: Introducción a la programación orientada a objetos I :: Respuestas a las preguntas y ejercicios
http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1010R.php 5/6
FOR i:=0 TO filas‐1 DO BEGIN FOR j:=0 TO columnas‐1 DO write(matriz[i,j]:5:dec,' '); writeln; END; END;
PROCEDURE TMatriz.Adicion(n:TMatriz); VAR i,j:longint; BEGIN IF ((n.ObtFilas=filas) AND (n.ObtColumnas=columnas)) THEN BEGIN FOR i:=0 TO filas‐1 DO FOR j:=0 TO columnas‐1 DO matriz[i,j]:=matriz[i,j]+n.ObtElemento(i,j) END END;
PROCEDURE TMatriz.Sustracion(n:TMatriz); VAR i,j:longint; BEGIN IF ((n.ObtFilas=filas) AND (n.ObtColumnas=columnas)) THEN BEGIN FOR i:=0 TO filas‐1 DO FOR j:=0 TO columnas‐1 DO matriz[i,j]:=matriz[i,j]‐n.ObtElemento(i,j) END END;
PROCEDURE TMatriz.Multiplicacion(n:TMatriz); VAR i,j,k:longint; aux:TMatriz; BEGIN IF (columnas=n.ObtFilas) THEN BEGIN aux:=TMatriz.Crear(filas,n.obtcolumnas); FOR i:=0 TO filas‐1 DO FOR j:=0 TO n.obtcolumnas‐1 DO BEGIN aux.PonerElemento(i,j,0); FOR k:=0 TO columnas‐1 DO aux.PonerElemento(i,j,aux.ObtElemento(i,j)+matriz[i,k]*n.ObtElemento(k,j)) END; Setlength(matriz,filas,n.obtcolumnas); filas:=filas; columnas:=n.obtcolumnas; matriz:=aux.matriz; END; END;
PROCEDURE TMatriz.Multiplicacion(k:double); VAR i,j:longint; BEGIN FOR i:=0 TO filas‐1 DO FOR j:=0 TO columnas‐1 DO matriz[i,j]:=k*matriz[i,j] END;
END.
B)
{$codepage utf8}{$mode objfpc}UNIT MatrizCuadrada;INTERFACEUSES math,Matriz;TYPE
TMatrizCuadrada=CLASS(TMatriz) CONSTRUCTOR Crear(m:longint); FUNCTION Determinante2x2:double; FUNCTION Determinante3x3:double; END;
IMPLEMENTATION
CONSTRUCTOR TMatrizCuadrada.Crear(m:longint); BEGIN inherited Crear(m,m) END;
FUNCTION TMatrizCuadrada.Determinante2x2:double; BEGIN Determinante2x2:=0; IF (obtfilas=2) AND (Obtcolumnas=2) THEN BEGIN Determinante2x2:=(ObtElemento(0,0)*ObtElemento(1,1)) ‐ (ObtElemento(0,1)*ObtElemento(1,0)) END; END;
FUNCTION TMatrizCuadrada.Determinante3x3:double;
15/10/2015 Conoce300 :: Pascal con Free Pascal :: Introducción a la programación orientada a objetos I :: Respuestas a las preguntas y ejercicios
http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap1010R.php 6/6
BEGIN Determinante3x3:=0; IF (obtfilas=3) AND (Obtcolumnas=3) THEN BEGIN Determinante3x3:=+(ObtElemento(0,0)*ObtElemento(1,1)*ObtElemento(2,2)) +(ObtElemento(0,1)*ObtElemento(1,2)*ObtElemento(2,0)) +(ObtElemento(0,2)*ObtElemento(1,0)*ObtElemento(2,1))
‐(ObtElemento(0,2)*ObtElemento(1,1)*ObtElemento(2,0)) ‐(ObtElemento(0,0)*ObtElemento(1,2)*ObtElemento(2,1)) ‐(ObtElemento(0,1)*ObtElemento(1,0)*ObtElemento(2,2)); END END;
END.
Tweet 0
anterior :: indice :: siguiente
SUGERENCIAS
"Agradezco que se tomen su tiempo, para escribirme una sugerencia. Toda sugerencia que meescriba me ayuda a mejorar los contenidos de la web acorde a sus necesidades. Las sugerencias, serecibirán siempre y cuando ingrese al menos su nombre o seudónimo y la sugerencia. Lassugerencias son de uso interno y no serán publicadas en la web Conoce3000" Nombre o seudónimo :
Correo Electrónico :
Sugerencias :
Deseo recibir una copia del mensaje. Enviar
PORTADA | LIBROS | APUNTES | ARTÍCULOS
Todos los textos, imágenes y videos de Conoce3000 estan colocados bajo una licencia :Creative Commons ReconocimientoNoComercial 3.0 Unported License.
0Recomendar