Sunteți pe pagina 1din 10

Lenguaje de programacion

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION CAP. 1. MODULARIDAD. TIPOS ABSTRACTOS DE DATOS M. Sc. Ing.
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION
CAP. 1.
MODULARIDAD. TIPOS
ABSTRACTOS DE DATOS
M. Sc. Ing. Lucas Coaquira Cano
1

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

1.1.1

La estructura de un modulo

   
 
Un modulo se caracteriza fundamentalmente por su interfaz y por su implementación.
Un modulo se caracteriza fundamentalmente por su interfaz y por su implementación.
Un modulo se caracteriza fundamentalmente por su interfaz y por su implementación.
Un modulo se caracteriza fundamentalmente por su interfaz y por su implementación.

Un modulo se caracteriza fundamentalmente por su interfaz y por su implementación.

Un modulo se caracteriza fundamentalmente por su interfaz y por su implementación.

Primitivas de acceso Descripción de propiedades de los datos

Atributos

Algoritmos

Representación

Parámetros actuales

Interfaz

Sección

privada

Figura 1.1. Estructura de un modulo

1.1.2 Reglas de modularizacion

Un método de diseño debe ayudar al programador a resolver un problema, dividiendo el problema en subproblemas mas pequeños, que se puedan resolver independientemente unos de otros. También debe ser fácil conectar los diferentes módulos a los restantes

M. Sc. Ing. Lucas Coaquira Cano

3

18/04/2012

La modularidad es la posibilidad de subdividir una aplicación en piezas mas pequeñas (denominadas módulos), cada una de las cuales debe ser tan

independiente como sea posible, considerando la aplicación

como un todo, así como de las otras piezas de las cuales es una parte.

En esencia las abstracciones se implementan en módulos, conocidos en la terminología de Booch como objetos, que se agrupan en una sola entidad:

Un conjunto de datos

Un conjunto de operaciones que actúan sobre los datos

M. Sc. Ing. Lucas Coaquira Cano

2

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION 1.1 MODULARIDAD
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION 1.1 MODULARIDAD

1.1 MODULARIDAD

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION 1.1 MODULARIDAD
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION 1.1 MODULARIDAD
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION 1.1 MODULARIDAD
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION 1.1 MODULARIDAD
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION 1.1 MODULARIDAD
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION 1.1 MODULARIDAD
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION 1.1 MODULARIDAD
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION 1.1 MODULARIDAD
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION 1.1 MODULARIDAD

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

Para obtener módulos con las características anteriores deben seguirse las siguientes reglas:

anteriores deben seguirse las siguientes reglas: Unidades modulares El lenguaje debe proporcionar estructuras
anteriores deben seguirse las siguientes reglas: Unidades modulares El lenguaje debe proporcionar estructuras
anteriores deben seguirse las siguientes reglas: Unidades modulares El lenguaje debe proporcionar estructuras
anteriores deben seguirse las siguientes reglas: Unidades modulares El lenguaje debe proporcionar estructuras
anteriores deben seguirse las siguientes reglas: Unidades modulares El lenguaje debe proporcionar estructuras

Unidades modulares

El lenguaje debe proporcionar estructuras modulares con las cuales se puedan describir las diferentes unidades.

Interfaces adecuados

En la estructuración de un programa en unidades es beneficioso que

existan pocos interfaces y que estos sean pequeños.

Pocos

interfaces

interfaces y que estos sean pequeños . Pocos interfaces Muchos interfaces Figura 1.2. Interfaces adecuados (pocos

Muchos

interfaces

estos sean pequeños . Pocos interfaces Muchos interfaces Figura 1.2. Interfaces adecuados (pocos – muchos) M.

Figura 1.2. Interfaces adecuados (pocos muchos)

M.

Sc. Ing. Lucas Coaquira Cano

4

Lenguaje de programacion

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION Parte Interfaces visible grandes Parte visible Interfaces pequeños
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION
Parte
Interfaces
visible
grandes
Parte
visible
Interfaces
pequeños
Figura 1.3. Interfaces adecuados (grandes – pequeños)

M. Sc. Ing. Lucas Coaquira Cano

5

LENGUAJE DE PROGRAMACION

 

1.2

DISEÑO DE MODULOS

DISEÑO DE MODULOS Acoplamiento de módulos
DISEÑO DE MODULOS Acoplamiento de módulos

Acoplamiento de módulos

1.2 DISEÑO DE MODULOS Acoplamiento de módulos
1.2 DISEÑO DE MODULOS Acoplamiento de módulos
1.2 DISEÑO DE MODULOS Acoplamiento de módulos

1.2.1

El acoplamiento es una medida de interdependencia entre módulos, es decir, el modo en que un modulo esta afectado por la estructura interna de otro modulo.

1.2.2 Cohesión de módulos

La cohesión describe la naturaleza de las interacciones dentro de un módulo software. Es decir un módulo cohesivo solo hace (idealmente) una cosa (o realizar una sola función relacionada con el problema).

Tabla 1.1

Clasificación del acoplamiento de módulos

Tipo de acoplamiento

Grado de acoplamiento

Grado de mantenibilidad

Por contenido

Alto (fuerte)

Bajo

Común De control Por sellado (estampado) Datos Sin acoplamiento

Bajo (débil)

Alto

M. Sc. Ing. Lucas Coaquira Cano

7

18/04/2012

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION Interfaces explícitos
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION
Interfaces explícitos

El interfaz o parte visible externamente de un modulo se debe declarar y describir explícitamente; el programa debe especificar cuales son los datos y procedimientos que un modulo trata y cuales deben permanecer ocultos del exterior.

Ocultación de la información

Todos los módulos deben seguir el principio de ocultación de la información.

M. Sc. Ing. Lucas Coaquira Cano

6

LENGUAJE DE PROGRAMACION

LENGUAJE DE PROGRAMACION Tabla 1.2 Clasificación de cohesión de módulos Bajo

Tabla 1.2 Clasificación de cohesión de módulos

LENGUAJE DE PROGRAMACION Tabla 1.2 Clasificación de cohesión de módulos Bajo
LENGUAJE DE PROGRAMACION Tabla 1.2 Clasificación de cohesión de módulos Bajo
Bajo
Bajo
LENGUAJE DE PROGRAMACION Tabla 1.2 Clasificación de cohesión de módulos Bajo

Tipo de cohesión

Grado de cohesión

Grado de mantenimiento

Por coincidencia

Lógica

Bajo

Por procedimientos

Por comunicaciones

Secuencial

Funcional

Informacional

Alto

Alto

Idealmente, se busca módulos altamente cohesivos y débilmente acoplados.

1.3 TIPOS DE DATOS

Un tipo de dato es un conjunto de valores y un conjunto de

operaciones definidas por esos valores.

Representación + Operaciones

M. Sc. Ing. Lucas Coaquira Cano

8

Lenguaje de programacion

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION Los tipos de datos que se construyen en un compilador de
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION Los tipos de datos que se construyen en un compilador de
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION Los tipos de datos que se construyen en un compilador de
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION Los tipos de datos que se construyen en un compilador de
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION Los tipos de datos que se construyen en un compilador de

Los tipos de datos que se construyen en un compilador de este modo se conocen como tipos de datos fundamentales (predefinidos) y, por ejemplo, en C y C++ son entre otros, int, char y float.

1.4 ABSTRACCION EN LENGUAJES DE PROGRAMACION

Los lenguajes de programación (LP) son las herramientas mediante las cuales los diseñadores de lenguajes pueden implementar los modelos abstractos.

La abstracción ofrecida por los LP se puede dividir en dos categorías:

Abstracción de control y Abstracción de datos.

M. Sc. Ing. Lucas Coaquira Cano

9

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

1.4.1

Abstracciones de control

DE LENGUAJE DE PROGRAMACION 1.4.1 Abstracciones de control Los primeros lenguajes de programación de alto nivel
DE LENGUAJE DE PROGRAMACION 1.4.1 Abstracciones de control Los primeros lenguajes de programación de alto nivel
DE LENGUAJE DE PROGRAMACION 1.4.1 Abstracciones de control Los primeros lenguajes de programación de alto nivel
DE LENGUAJE DE PROGRAMACION 1.4.1 Abstracciones de control Los primeros lenguajes de programación de alto nivel
DE LENGUAJE DE PROGRAMACION 1.4.1 Abstracciones de control Los primeros lenguajes de programación de alto nivel

Los primeros lenguajes de programación de alto nivel introdujeron las estructuras de control: sentencias de bifurcación (if) y bucles (for, while, do-loop, etc.).

Abstracción procedimental (por procedimientos)

Utilización de procedimientos o funciones

Otros mecanismos de abstracción de control

Tales como manejo de excepciones, corrutinas, unidades concurrentes, plantillas (Genericidad). Estas construcciones son soportadas por LP basados y orientados a objetos: C++, Java, Ada, etc.

1.4.2 Abstracción de datos

Es la técnica de programación que permite inventar o definir nuevos tipos de datos (tipos de datos definidos por el usuario) adecuados a la aplicación que se desea realizar.

Los nuevos tipos de datos definidos por el usuario se llaman tipos abstractos de datos.

M.

Sc. Ing. Lucas Coaquira Cano

11

18/04/2012

La abstracción como proceso natural mental Las persona comprenden mejor el mundo construyendo modelos mentales
La abstracción como proceso natural mental
Las persona comprenden mejor el mundo construyendo modelos mentales
Abstracción
Propiedad que permite representar las características mas esenciales de un
objeto, sin preocuparse de las restantes características (no esenciales).
M. Sc. Ing. Lucas Coaquira Cano
10

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

 
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION  
La implementación de un tipo abstracto de dato consta de: 1. La representación: elección de
La implementación de un tipo abstracto de dato consta de: 1. La representación: elección de
La implementación de un tipo abstracto de dato consta de: 1. La representación: elección de
La implementación de un tipo abstracto de dato consta de: 1. La representación: elección de

La implementación de un tipo abstracto de dato consta de:

1. La representación: elección de las estructuras de datos.

2. Las operaciones: elección de los algoritmos.

1.5 TIPO ABSTRACTO DE DATO (TAD)

Un tipo definido por el programador se denomina tipo abstracto de dato, TAD (Abstract Data Type).

La modularizacion de un programa utiliza la noción de tipo abstracto de dato (TAD) siempre que sea posible. Si el TAD soporta los tipos que desee el usuario y el conjunto de operaciones sobre cada tipo, se obtiene un nuevo tipo de dato denominado objeto.

M. Sc. Ing. Lucas Coaquira Cano

12

Lenguaje de programacion

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

 
Un TAD se compone de estructuras de datos y los procedimientos o funciones que manipulan
Un TAD se compone de estructuras de datos y los procedimientos o funciones que manipulan
Un TAD se compone de estructuras de datos y los procedimientos o funciones que manipulan
Un TAD se compone de estructuras de datos y los procedimientos o funciones que manipulan

Un TAD se compone de estructuras de datos y los procedimientos o funciones que manipulan esas estructuras de datos.

Un TAD se compone de estructuras de datos y los procedimientos o funciones que manipulan esas

TAD = Representación (datos) + Operaciones (funciones y procedimientos)

La estructura de un tipo abstracto de dato (clase), desde un punto de vista global, se compone del interfaz publico y de la implementacion.

Método 1 Método 2 Método 3 Método 4 Interfaz público Representación: Estructuras de datos (variables
Método 1
Método 2
Método 3
Método 4
Interfaz público
Representación:
Estructuras de datos
(variables de instancia)
Implementación de métodos:
Código del método 1
Código del método 2
Código del método 3
Código del método 4
Implementación privada
M.
Sc. Ing. Lucas Coaquira Cano

Figura. Estructura de un TAD

13

Formato de un TAD

Formato de un TAD Una descripción de un TAD incluye una cabecera con el nombre del
Formato de un TAD Una descripción de un TAD incluye una cabecera con el nombre del
Formato de un TAD Una descripción de un TAD incluye una cabecera con el nombre del
Formato de un TAD Una descripción de un TAD incluye una cabecera con el nombre del
Formato de un TAD Una descripción de un TAD incluye una cabecera con el nombre del

Una descripción de un TAD incluye una cabecera con el nombre del TAD, una descripción del tipo de datos y una lista de operaciones

TAD Nombre_TAD es

Datos Describir la estructura de los datos. Operaciones Constructor Valores iniciales: Datos utilizados para iniciar objeto

Proceso

: Iniciar el objeto

Operación

Entrada

: Datos del cliente

Precondiciones

: Estado necesario del sistema antes de ejecutar la acción

Salida

: Acciones ejecutadas con los datos

Postcondiciones : Estado del sistema después de ejecutar la operación.

Operación2

Operación3

Fin TAD Nombre_TAD

M. Sc. Ing. Lucas Coaquira Cano

15

18/04/2012

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

 
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION  

1.5.1

Ventajas de los tipos abstractos de datos
Ventajas de los tipos abstractos de datos

Ventajas de los tipos abstractos de datos

1. Permite una mejor conceptualizacion y modelado del mundo real.
1. Permite una mejor conceptualizacion y modelado del mundo real.

1. Permite una mejor conceptualizacion y modelado del mundo real.

2. Mejora la robustez del sistema.

3. Mejora el rendimiento.

4. Separa la implementación de la especificación.

5. Permite la extensibilidad del sistema.

1.5.2 Abstracción de datos y TAD

La abstracción define el dominio y estructura de los datos, junto con una colección o conjunto de operaciones que acceden a los datos.

La idea fundamental de la abstracción de datos conduce a la separación de la especificación de una estructura de datos (lo que hace) de la

implementación (como lo hace). Esta idea se representa en el tipo

abstracto de dato.

M. Sc. Ing. Lucas Coaquira Cano

14

Ejemplo de TAD

Ejemplo de TAD Describir el TAD Circulo (conjunto de puntos equidistante de un punto llamado centro).

Describir el TAD Circulo (conjunto de puntos equidistante de un punto llamado

Circulo (conjunto de puntos equidistante de un punto llamado centro). Incluye operaciones de calcular la longitud
Circulo (conjunto de puntos equidistante de un punto llamado centro). Incluye operaciones de calcular la longitud
Circulo (conjunto de puntos equidistante de un punto llamado centro). Incluye operaciones de calcular la longitud
Circulo (conjunto de puntos equidistante de un punto llamado centro). Incluye operaciones de calcular la longitud

centro). Incluye operaciones de calcular la longitud de la circunferencia y el área del círculo.

TAD Circulo es

Datos Numero real no negativo que especifica radio de circulo Operaciones Constructor Valores iniciales: El radio del círculo

Proceso Area Entrada Precondiciones Proceso Salida Postcondiciones Circunferencia Entrada Precondiciones Proceso Salida Postcondiciones Fin TAD Circulo

: Asigna valor inicial al circulo

: Ninguna : Ninguna : Calculo del área del circulo : Devuelve el área : Ninguna

: Ninguna : Ninguna : Calcular la circunferencia : Devuelve la circunferencia

: Ninguna

M. Sc. Ing. Lucas Coaquira Cano

16

Lenguaje de programacion

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

 

1.3

IMPLEMENTACION DE TIPOS ABSTRACTOS DE

DATOS EN C

DATOS EN C

DATOS EN C
DATOS EN C
DATOS EN C
DATOS EN C

TAD Números complejos. Ejemplo TAD complejo

NUMEROS COMPLEJOS

Son aquellos elementos del sistema los cuales se representan mediante:

Z = a + bi

El conjunto cumple con todos los axiomas de R con excepción de la relación de

o

Z = (a, b)

orden.

Donde:

 

a

:

Es la componente real

b : Es la componente imaginaria

i

Z Es la variable compleja

a bi : Es el numero complejo

: Es la unidad imaginaria establecida por:

:

+

(a, b) : Es el numero o par complejo

M.

Sc. Ing. Lucas Coaquira Cano

por: : + (a, b) : Es el numero o par complejo M. Sc. Ing. Lucas

1 i i 2  1

17

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION Algebra de los números complejos: Se realizan mediante los axiomas
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION
Algebra de los números complejos:
Se realizan mediante los axiomas del conjunto R
Ejemplo:
Adición:
(2+15i) + (3+8i) = (2+3) + (15+8)i = 5 + 23i
Sustracción:
(5+7i) – (9+2i)
= (5 – 9) + (7 – 2)i = -4 + 5i
2
Multiplicación:
 4  5
(4+3i) (2+11i)
= 8 + 44i + 6i + 33i
2 = 8 + 50i – 33 = -25 + 50i
 3  i i
  
4 3   5 i i 3 3   i i
 
 
12 4 i 9  15 i i 5 i
2
17 10  11 10 i
División:
2
Para dividir expresiones complejas, se expresa el cociente en forma de fracción
y se racionaliza el denominador de esta fracción, multiplicando ambos términos
de la fracción por la conjugada del denominador.
Si
Z = a + bi
es un numero complejo
Z = a – bi
es el complejo conjugado
M.
Sc. Ing. Lucas Coaquira Cano
19

18/04/2012

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION Ejemplo: Z = 3 + 17i = (3, 17) es
FUNDAMENTOS DE LENGUAJE DE PROGRAMACION
Ejemplo: Z = 3 + 17i = (3, 17) es un numero complejo
Definiciones:
(1o) Si: Z = a + bi es un numero complejo
Z = a – bi es el complejo conjugado
Z* = - a – bi es el complejo opuesto
(2o) Igualdad de números complejos
si: a + bi = m + ni
 a = m
y
b = n
(3o) Nulidad de números complejos
si: a + bi = 0
 a = 0
y
b = 0
Potencias de i
i
1
 i
i
2
 1
i
3
 i
i
4
 1
En general i
:
4 k
1,
i
4 1
k
i
1
M. Sc. Ing. Lucas Coaquira Cano
;
i
4 
k m
i
m
18

FUNDAMENTOS DE LENGUAJE DE PROGRAMACION

 

1.4

IMPLEMENTACION DE TIPOS ABSTRACTOS DE
IMPLEMENTACION DE TIPOS ABSTRACTOS DE
IMPLEMENTACION DE TIPOS ABSTRACTOS DE
IMPLEMENTACION DE TIPOS ABSTRACTOS DE

IMPLEMENTACION DE TIPOS ABSTRACTOS DE

IMPLEMENTACION DE TIPOS ABSTRACTOS DE

DATOS EN C++

 

En C++ la herramienta de abstracción de datos que permite la creacion de nuevos tipos se denomina clase (class). Una clase es un tipo de dato que incluye datos y operaciones que manipulan esos datos. La clase es la entidad

principal de los lenguajes de programación orientados a objetos.

Ejemplo: Clase complejo

M. Sc. Ing. Lucas Coaquira Cano

20

Lenguaje de programacion

//Archivo: complejo.h class complejo{ private:
//Archivo: complejo.h
class complejo{
private:

float r, i; public:

complejo nuevo_complejo(float x, float y); float real(complejo c); float imag(complejo c); complejo sumar(complejo a, complejo b);

};

M. Sc. Ing. Lucas Coaquira Cano

21

complejo complejo::sumar(complejo a, complejo b)
complejo complejo::sumar(complejo a, complejo b)
complejo complejo::sumar(complejo a, complejo b)
complejo complejo::sumar(complejo a, complejo b)

complejo complejo::sumar(complejo a, complejo b)

{

 

complejo c; c.r = a.r + b.r; c.i = a.i + b.i;

 

return c;

}

M. Sc. Ing. Lucas Coaquira Cano

{   complejo c; c.r = a.r + b.r; c.i = a.i + b.i;   return

23

18/04/2012

//archivo: complejo.cpp #include "complejo.h" complejo complejo::nuevo_complejo(float x, float y) { complejo
//archivo: complejo.cpp
#include "complejo.h"
complejo complejo::nuevo_complejo(float x, float y)
{
complejo c;
c.r = x;
c.i = y;
return c;
}
float complejo::real(complejo c)
{
return c.r;
}
float complejo::imag(complejo c)
{
return c.i;
}
M. Sc. Ing. Lucas Coaquira Cano
22

//Archivo: Prueba.cpp #include <iostream> #include "complejo.h“ using namespace std; void main()

"complejo.h“ using namespace std; void main() {   complejo x, y, z;   x =
"complejo.h“ using namespace std; void main() {   complejo x, y, z;   x =
"complejo.h“ using namespace std; void main() {   complejo x, y, z;   x =

{

 

complejo x, y, z;

 

x = x.nuevo_complejo(4, 6);

 

y

= y.nuevo_complejo(3, 5);

cout << "x= “ << “(“ << x.real(x) <<“,” << x.imag(x) << “)” << endl; cout << “y= “ << “(“ << y.real(y) <<“,” << y.imag(y) << “)” << endl;

z

= z.sumar(x, y);

cout << "x+y= “ << “(“ << z.real(z) <<“,” << z.imag(z) << “)”

 
 

<< endl;

}

 

M.

Sc. Ing. Lucas Coaquira Cano

24

Lenguaje de programacion

18/04/2012

/*Tipo Abstracto de Datos en C*/ /*archivo: complejo.h*/ #ifndef COMPLEJO #define COMPLEJO typedef struct{ float
/*Tipo Abstracto de Datos en C*/
/*archivo: complejo.h*/
#ifndef COMPLEJO
#define COMPLEJO
typedef struct{
float r, i;
}complejo;
complejo nuevo_complejo(float x, float y);
float real(complejo c);
float imag(complejo c);
complejo sumar(complejo a, complejo b);
#endif
M. Sc. Ing. Lucas Coaquira Cano
25
 
#include "complejo.h" complejo nuevo_complejo(float x, float y)
#include "complejo.h" complejo nuevo_complejo(float x, float y)
#include "complejo.h" complejo nuevo_complejo(float x, float y)

#include "complejo.h" complejo nuevo_complejo(float x, float y)

  #include "complejo.h" complejo nuevo_complejo(float x, float y)
  #include "complejo.h" complejo nuevo_complejo(float x, float y)

{

 

complejo c; c.r = x; c.i = y; return c;

 

}

 

float real(complejo c)

 

{

 

return c.r;

 

}

 

float imag(complejo c)

 

{

 

return c.i;

 

}

M.

Sc. Ing. Lucas Coaquira Cano

26

{

complejo c; c.r = a.r * b.r - a.i * b.i; c.i = a.r *
complejo c; c.r = a.r * b.r - a.i * b.i; c.i = a.r *

complejo c; c.r = a.r * b.r - a.i * b.i; c.i = a.r * b.i + a.i * b.r;

{ complejo c; c.r = a.r * b.r - a.i * b.i; c.i = a.r *
{ complejo c; c.r = a.r * b.r - a.i * b.i; c.i = a.r *
{ complejo c; c.r = a.r * b.r - a.i * b.i; c.i = a.r *

return c;

}

complejo dividir(complejo a, complejo b)

 

{

 

complejo c; float denom = b.r * b.r + b.i * b.i; c.r = (a.r * b.r + a.i * b.i)/denom; c.i = (a.i * b.r - a.r * b.i)/denom;

 

return c;

}

 

M.

Sc. Ing. Lucas Coaquira Cano

28

/*archivo: complejo.c*/ c; }   M. Sc. Ing. Lucas Coaquira Cano 28 complejo sumar(complejo a, complejo b) {

complejo sumar(complejo a, complejo b) { complejo c; c.r = a.r + b.r; c.i =
complejo sumar(complejo a, complejo b)
{
complejo c;
c.r = a.r + b.r;
c.i = a.i + b.i;
return c;
}
complejo restar(complejo a, complejo b)
{
complejo c;
c.r = a.r - b.r;
c.i = a.i - b.i;
return c;
}
int igual(complejo a, complejo b)
{
return (a.r == b.r && a.i == b.i);
}
M. Sc. Ing. Lucas Coaquira Cano
27

complejo multiplicar(complejo a, complejo b)int igual(complejo a, complejo b) { return (a.r == b.r && a.i == b.i); } M.

Lenguaje de programacion

18/04/2012

/*archivo: prueba.c*/

/*archivo: prueba.c*/ #include <cstdio> #include "complejo.h" void main() { complejo x, y, z;
/*archivo: prueba.c*/ #include <cstdio> #include "complejo.h" void main() { complejo x, y, z;

#include <cstdio>

#include "complejo.h"

void main()

{

complejo x, y, z;

 
void main() { complejo x, y, z;   1.5 IMPLEMENTACION DE TIPOS ABSTRACTOS DE DATOS EN
void main() { complejo x, y, z;   1.5 IMPLEMENTACION DE TIPOS ABSTRACTOS DE DATOS EN
void main() { complejo x, y, z;   1.5 IMPLEMENTACION DE TIPOS ABSTRACTOS DE DATOS EN
1.5 IMPLEMENTACION DE TIPOS ABSTRACTOS DE DATOS EN JAVA //Archivo Complejo.java public class Complejo{ private

1.5

1.5 IMPLEMENTACION DE TIPOS ABSTRACTOS DE DATOS EN JAVA //Archivo Complejo.java public class Complejo{ private double
1.5 IMPLEMENTACION DE TIPOS ABSTRACTOS DE DATOS EN JAVA //Archivo Complejo.java public class Complejo{ private double
1.5 IMPLEMENTACION DE TIPOS ABSTRACTOS DE DATOS EN JAVA //Archivo Complejo.java public class Complejo{ private double
1.5 IMPLEMENTACION DE TIPOS ABSTRACTOS DE DATOS EN JAVA //Archivo Complejo.java public class Complejo{ private double

IMPLEMENTACION DE TIPOS ABSTRACTOS DE

DATOS EN JAVA

//Archivo Complejo.java

public class Complejo{ private double r, i;

 

x = nuevo_complejo(2, 3);

   

Complejo(double x, double y)

{

 

y = nuevo_complejo(4, 5);

 

r

= x;

 

i

= y;

 

printf("x = (%f, %f)\n", real(x), imag(x)); printf("y = (%f, %f)\n", real(y), imag(y));

z

printf("(x + y) = (%f, %f)\n", real(z), imag(z));

= sumar(x, y);

   

}

public double real() { return r;

}

 

}

M.

Sc. Ing. Lucas Coaquira Cano

29

public double imag(){ return i;

M.

Sc. Ing. Lucas Coaquira Cano

30

 

}

 
public static Complejo suma(Complejo x, Complejo y) { Complejo temp = new Complejo(0, 0); temp.r
public static Complejo suma(Complejo x, Complejo y) { Complejo temp = new Complejo(0, 0); temp.r
public static Complejo suma(Complejo x, Complejo y) { Complejo temp = new Complejo(0, 0); temp.r
public static Complejo suma(Complejo x, Complejo y) { Complejo temp = new Complejo(0, 0); temp.r

public static Complejo suma(Complejo x, Complejo y)

{

Complejo temp = new Complejo(0, 0);

temp.r = x.r + y.r; temp.i = x.i + y.i; return temp;

}

temp.r = x.r + y.r; temp.i = x.i + y.i; return temp; } //Archivo: Prueba.java public
//Archivo: Prueba.java public class Prueba { public static void main(String args[]) { Complejo a =
//Archivo: Prueba.java public class Prueba { public static void main(String args[]) { Complejo a =

//Archivo: Prueba.java public class Prueba { public static void main(String args[])

class Prueba { public static void main(String args[]) { Complejo a = new Complejo(40,56); Complejo b

{

class Prueba { public static void main(String args[]) { Complejo a = new Complejo(40,56); Complejo b

Complejo a = new Complejo(40,56); Complejo b = new Complejo(10,12); Complejo c = new Complejo(0, 0);

args[]) { Complejo a = new Complejo(40,56); Complejo b = new Complejo(10,12); Complejo c = new
   

c

= Complejo.suma(a, b);

}

System.out.println("a + b = (" + c.real() + " ," + c.imag() + ")");

}

}

 

M.

Sc. Ing. Lucas Coaquira Cano

31

 

M.

Sc. Ing. Lucas Coaquira Cano

32

Lenguaje de programacion

#ifndef COMPLEJO2 #define COMPLEJO2
#ifndef COMPLEJO2
#define COMPLEJO2

class complejo{

private:

public:

float r, i;

complejo nuevo_complejo(float x, float y); float real(complejo c);

float imag(complejo c);

complejo sumar(complejo a, complejo b); complejo restar(complejo a, complejo b); complejo multiplicar(complejo a, complejo b); complejo dividir(complejo a, complejo b); }; #endif

M. Sc. Ing. Lucas Coaquira Cano

33

complejo complejo::sumar(complejo a, complejo b)
complejo complejo::sumar(complejo a, complejo b)
complejo complejo::sumar(complejo a, complejo b)
complejo complejo::sumar(complejo a, complejo b)

complejo complejo::sumar(complejo a, complejo b)

{

 

complejo c; c.r = a.r + b.r;

 

c.i = a.i + b.i;

return c;

}

= a.r + b.r;   c.i = a.i + b.i; return c; } complejo complejo::restar(complejo a,

complejo complejo::restar(complejo a, complejo b)

{

}

complejo c; c.r = a.r - b.r; c.i = a.i - b.i; return c;

M. Sc. Ing. Lucas Coaquira Cano

35

18/04/2012

//archivo: complejo2.cpp #include "complejo2.h" complejo complejo::nuevo_complejo(float x, float y) { complejo
//archivo: complejo2.cpp
#include "complejo2.h"
complejo complejo::nuevo_complejo(float x, float y)
{
complejo c;
c.r = x;
c.i = y;
return c;
}
float complejo::real(complejo c)
{
return c.r;
}
float complejo::imag(complejo c)
{
return c.i;
}
M. Sc. Ing. Lucas Coaquira Cano
34
complejo complejo::multiplicar(complejo a, complejo b)
complejo complejo::multiplicar(complejo a, complejo b)
complejo complejo::multiplicar(complejo a, complejo b)
complejo complejo::multiplicar(complejo a, complejo b)

complejo complejo::multiplicar(complejo a, complejo b)

complejo complejo::multiplicar(complejo a, complejo b)

{

 

complejo c;

 

c.r = a.r * b.r - a.i * b.i; c.i = a.r * b.i + a.i * b.r; return c;

}

complejo complejo::dividir(complejo a, complejo b)

{

complejo c; float denom = b.r * b.r + b.i * b.i; c.r = (a.r * b.r + a.i * b.i) / denom; c.i = (a.i * b.r - a.r * b.i) / denom; return c;

}

M. Sc. Ing. Lucas Coaquira Cano

36

Lenguaje de programacion

#include "complejo2.h" #include <iostream> using namespace std;
#include "complejo2.h"
#include <iostream>
using namespace std;

void main()

{

complejo x, y, z; float a, b, c, d; cout << "Ingrese el primer numero complejo: "; cin >> a >> b;

cout << "Ingrese el segundo numero complejo: ";

cin >> c >> d;

x = x.nuevo_complejo(a, b);

y = y.nuevo_complejo(c, d);

cout << "x= " << "(" << x.real(x) <<"," << x.imag(x) << ")" << endl;

cout << "y= " << "(" << y.real(y) <<"," << y.imag(y) << ")" << endl;

z = z.dividir(z.restar(z.dividir(x, y), x);

cout << "(x/y + x)/x = " << "(" << z.real(z) <<"," << z.imag(z) << ")" <<

endl;

} M. Sc. Ing. Lucas Coaquira Cano

37

18/04/2012