• No se han encontrado resultados

registros

N/A
N/A
Protected

Academic year: 2020

Share "registros"

Copied!
72
0
0

Texto completo

(1)

Introducci´

on a registros

Francisco Soulignac

Tecnicatura en Programaci´on Inform´atica, Universidad Nacional de Quilmes

Introducci´on a la Programaci´on

(2)

Hoy en Introducci´

on a la Programaci´

on

1 Registros b´asicos

Motivaci´on Declaraci´on

Valores, expresiones y tipos Operador punto

Ejercicios

2 Inicializaci´on y modificaci´on

Registros con registros

(3)

Hoy en Introducci´

on a la Programaci´

on

1 Registros b´asicos

Motivaci´on Declaraci´on

Valores, expresiones y tipos Operador punto

Ejercicios

2 Inicializaci´on y modificaci´on

Registros con registros

(4)

Registros b´asicos Motivaci´on

Motivaci´

on

Lenguaje de programaci´on

Comunicaci´on Humano-Computadora Comunicaci´on Humano-Humano

Abstracci´on→describir el problema en t´erminos del dominio.

(5)

Registros b´asicos Motivaci´on

Idea de los registros

Unregistro es una forma de agrupar un conjunto de valores (datos).

Siempre tiene la misma cantidad de valores. Los valores pueden ser de tipos diferentes.

Los valores se corresponden con un identificador (campo) y no hay un orden entre ellos.

Objetivo: modelar entidades del dominio de aplicaci´on.

Abstracci´on, reutilizaci´on

Ejemplos:

Posici´on:{int fila; int columna;}

(6)

Registros b´asicos Motivaci´on

Idea de los registros

Unregistro es una forma de agrupar un conjunto de valores (datos).

Siempre tiene la misma cantidad de valores. Los valores pueden ser de tipos diferentes.

Los valores se corresponden con un identificador (campo) y no hay un orden entre ellos.

Objetivo: modelar entidades del dominio de aplicaci´on.

Abstracci´on, reutilizaci´on

Ejemplos:

Posici´on:{int fila; int columna;}

(7)

Registros b´asicos Motivaci´on

Idea de los registros

Unregistro es una forma de agrupar un conjunto de valores (datos).

Siempre tiene la misma cantidad de valores. Los valores pueden ser de tipos diferentes.

Los valores se corresponden con un identificador (campo) y no hay un orden entre ellos.

Objetivo: modelar entidades del dominio de aplicaci´on.

Abstracci´on, reutilizaci´on

Ejemplos:

Posici´on:{int fila; int columna;}

(8)

Registros b´asicos Motivaci´on

Idea de los registros

Unregistro es una forma de agrupar un conjunto de valores (datos).

Siempre tiene la misma cantidad de valores. Los valores pueden ser de tipos diferentes.

Los valores se corresponden con un identificador (campo) y no hay un orden entre ellos.

Objetivo: modelar entidades del dominio de aplicaci´on.

Abstracci´on, reutilizaci´on

Ejemplos:

Posici´on:{int fila; int columna;}

(9)

Registros b´asicos Declaraci´on

Declaraci´

on de registros I

Para utilizar un registro es necesario declararsu estructura.

Fuera de toda funci´on o procedimiento.

Antesdel primer uso de un registros con dicha estructura. Con la palabra clavestruct.

Especificando cada uno de loscampos(valores posibles) de un registro. Identificador: primer letra enmay´uscula.

Acordarse del punto y coma final.

Ejemplos de declaraciones:

1. structPosicion{ 2. int fila;

3. int columna;

4. };

1. structJugador{ 2. int puntos;

3. int vidas;

4. Dir movimiento;

(10)

Registros b´asicos Declaraci´on

Declaraci´

on de registros I

Para utilizar un registro es necesario declararsu estructura.

Fuera de toda funci´on o procedimiento.

Antesdel primer uso de un registros con dicha estructura. Con la palabra clavestruct.

Especificando cada uno de loscampos(valores posibles) de un registro. Identificador: primer letra enmay´uscula.

Acordarse del punto y coma final.

Ejemplos de declaraciones:

1. structPosicion{ 2. int fila;

3. int columna;

4. };

1. structJugador{ 2. int puntos;

3. int vidas;

4. Dir movimiento;

(11)

Registros b´asicos Declaraci´on

Declaraci´

on de registros I

Para utilizar un registro es necesario declararsu estructura.

Fuera de toda funci´on o procedimiento.

Antesdel primer uso de un registros con dicha estructura.

Con la palabra clavestruct.

Especificando cada uno de loscampos(valores posibles) de un registro. Identificador: primer letra enmay´uscula.

Acordarse del punto y coma final.

Ejemplos de declaraciones:

1. structPosicion{ 2. int fila;

3. int columna;

4. };

1. structJugador{ 2. int puntos;

3. int vidas;

4. Dir movimiento;

(12)

Registros b´asicos Declaraci´on

Declaraci´

on de registros I

Para utilizar un registro es necesario declararsu estructura.

Fuera de toda funci´on o procedimiento.

Antesdel primer uso de un registros con dicha estructura. Con la palabra clavestruct.

Especificando cada uno de loscampos(valores posibles) de un registro. Identificador: primer letra enmay´uscula.

Acordarse del punto y coma final.

Ejemplos de declaraciones:

1. structPosicion{ 2. int fila;

3. int columna;

4. };

1. structJugador{ 2. int puntos;

3. int vidas;

4. Dir movimiento;

(13)

Registros b´asicos Declaraci´on

Declaraci´

on de registros I

Para utilizar un registro es necesario declararsu estructura.

Fuera de toda funci´on o procedimiento.

Antesdel primer uso de un registros con dicha estructura. Con la palabra clavestruct.

Especificando cada uno de loscampos(valores posibles) de un registro. Identificador: primer letra enmay´uscula.

Acordarse del punto y coma final.

Ejemplos de declaraciones:

1. structPosicion{ 2. int fila;

3. int columna;

4. };

1. structJugador{ 2. int puntos;

3. int vidas;

4. Dir movimiento;

(14)

Registros b´asicos Declaraci´on

Declaraci´

on de registros I

Para utilizar un registro es necesario declararsu estructura.

Fuera de toda funci´on o procedimiento.

Antesdel primer uso de un registros con dicha estructura. Con la palabra clavestruct.

Especificando cada uno de loscampos(valores posibles) de un registro. Identificador: primer letra enmay´uscula.

Acordarse del punto y coma final.

Ejemplos de declaraciones:

1. structPosicion{ 2. int fila;

3. int columna;

1. structJugador{ 2. int puntos;

(15)

Registros b´asicos Declaraci´on

Declaraci´

on de registros II

En general, si los campos de un registro son

T1v1;T2v2;. . .;Tkvk;

entonces la declaraci´on del registro se escribe

1. structIdentificador{

2. T1v1; //campo de nombrev1con tipoT1

3. T2v1; //campo de nombrev2con tipoT2

4.

. . .

(16)

Registros b´asicos Declaraci´on

Documentaci´

on de registros

Junto con la declaraci´on.

//Posicion modela una celda del tablero de acuerdo a la fila //y la columna en que se encuentra.

1. structPosicion{ 2. int fila; int columna;

3. };

//Un jugador se modela con la cantidad de puntos y vidas actuales //y la direcci´on en la que en la que se mover´a en el siguiente turno.

1. structJugador{

2. int puntos; int vidas; Dir movimiento;

(17)

Registros b´asicos Declaraci´on

Ejercicios

Declarar los siguientes registros.

Rectangulo:int base; int altura;

Avion:Dir movimiento; int velocidad; int altura;

Guerrero:int fuerza; int vidas; Color raza;

(18)

Registros b´asicos Valores, expresiones y tipos

Valores, expresiones y tipos (repaso)

Valores: Rojo, Norte, -1, 1, True, Nilhinti(), Cons(1, Nilhinti()), etc.

Cada valor esiguala s´ı mismo, ydiferentedel resto de los valores.

Expresiones: formas de denotarvalores; evaluaci´on.

Tipos: conjunto de valores a los que se les pueden aplicar las mismas operaciones.

(19)

Registros b´asicos Valores, expresiones y tipos

Tipos definidos por el usuario

Cada registro define un nuevo tipoen CGobstones.

Tipos:Posicion, Guerrero, Jugador, etc.

Valores de un registro: combinaci´on arbitrariade valores de los campos.

Valores de registros (escritos en un papel)

{fila: 15; columna: 1;} {fila: 3; columna: 2}

{puntos: 10; vidas: 2; movimiento: Este}

{fuerza: 12; vidas: 2; raza: Azul}

(20)

Registros b´asicos Valores, expresiones y tipos

Tipos definidos por el usuario

Cada registro define un nuevo tipoen CGobstones.

Tipos:Posicion, Guerrero, Jugador, etc.

Valores de un registro: combinaci´on arbitrariade valores de los campos.

Valores de registros (escritos en un papel)

{fila: 15; columna: 1;} {fila: 3; columna: 2}

{puntos: 10; vidas: 2; movimiento: Este}

{fuerza: 12; vidas: 2; raza: Azul}

(21)

Registros b´asicos Valores, expresiones y tipos

Tipos definidos por el usuario

Cada registro define un nuevo tipoen CGobstones.

Tipos:Posicion, Guerrero, Jugador, etc.

Valores de un registro: combinaci´on arbitrariade valores de los campos.

Valores de registros (escritos en un papel)

{fila: 15; columna: 1;} {fila: 3; columna: 2} {puntos: 10; vidas: 2; movimiento: Este} {fuerza: 12; vidas: 2; raza: Azul}

(22)

Registros b´asicos Valores, expresiones y tipos

Tipos definidos por el usuario

Cada registro define un nuevo tipoen CGobstones.

Tipos:Posicion, Guerrero, Jugador, etc.

Valores de un registro: combinaci´on arbitrariade valores de los campos.

Valores de registros (escritos en un papel)

{fila: 15; columna: 1;} {fila: 3; columna: 2} {puntos: 10; vidas: 2; movimiento: Este} {fuerza: 12; vidas: 2; raza: Azul}

(23)

Registros b´asicos Valores, expresiones y tipos

Invariante de representaci´

on

Cada registro define un nuevo tipo en CGobstones.

//Posicion modela una celda del tablero de acuerdo a la fila //y la columna en que se encuentra.

1. structPosicion{ 2. int fila; int columna;

3. };

¿Es v´alida la posici´on{fila: -1, columna: 0}?

(24)

Registros b´asicos Valores, expresiones y tipos

Invariante de representaci´

on

Condiciones que satisfacen los valores v´alidos de un registro.

Dependen del dominio del problema.

Se escriben junto a la declaraci´on del registro.

//PROPOSITO: Posicion modela . . .

//INVARIANTE REPRESENTACION:fila>0,columna>0 1. structPosicion{

2. int fila; int columna;

(25)

Registros b´asicos Valores, expresiones y tipos

Invariante de representaci´

on

Condiciones que satisfacen los valores v´alidos de un registro.

Dependen del dominio del problema.

Se escriben junto a la declaraci´on del registro.

//PROPOSITO: Posicion modela . . .

//INVARIANTE REPRESENTACION:fila>0,columna>0 1. structPosicion{

2. int fila; int columna;

(26)

Registros b´asicos Valores, expresiones y tipos

Invariante de representaci´

on

Condiciones que satisfacen los valores v´alidos de un registro.

Dependen del dominio del problema.

Se escriben junto a la declaraci´on del registro.

//PROPOSITO: Posicion modela . . .

//INVARIANTE REPRESENTACION:fila>0,columna>0 1. structPosicion{

2. int fila; int columna;

(27)

Registros b´asicos Valores, expresiones y tipos

Par´

ametros y variables de registros.

Se puede usar un par´ametro de registro como cualquier otro

par´ametro.

Se pueden retornar valores de registro.

void IrAPosicion(Posicion pos) Posicion mkPosActual()

Las variables de registro se declaran como las variables b´asicas.

Posicion pos; Guerrero conan; Jugador mario; Jugador luigi;

Como los par´ametros/variables b´asicas. . .

(28)

Registros b´asicos Valores, expresiones y tipos

Par´

ametros y variables de registros.

Se puede usar un par´ametro de registro como cualquier otro

par´ametro.

Se pueden retornar valores de registro.

void IrAPosicion(Posicion pos) Posicion mkPosActual()

Las variables de registro se declaran como las variables b´asicas.

Posicion pos; Guerrero conan; Jugador mario; Jugador luigi;

Como los par´ametros/variables b´asicas. . .

(29)

Registros b´asicos Valores, expresiones y tipos

Par´

ametros y variables de registros.

Se puede usar un par´ametro de registro como cualquier otro

par´ametro.

Se pueden retornar valores de registro.

void IrAPosicion(Posicion pos) Posicion mkPosActual()

Las variables de registro se declaran como las variables b´asicas.

Posicion pos; Guerrero conan; Jugador mario; Jugador luigi;

Como los par´ametros/variables b´asicas. . .

(30)

Registros b´asicos Operador punto

Uso de los registro

Operador punto (.) permite acceder a los valores de los campos.

Si res una expresi´on que denota un registro, entoncesr.campoy es

unaexpresi´on.

MoverN(posicion.fila);

if(conan.raza == Azul) ....

return rectangulo.base * rectangulo.altura;

if(dameUnGerrero().raza == Azul) ....

Cuandores una variable, r.campoes unavariable.

Se puede asignar el campo, con la sem´antica habitual.

Pos p; p.x = 5; p.y = 7; ....

Guerrero conan = dameUnGerrero(); conan.fuerza = 10000;

(31)

Registros b´asicos Operador punto

Uso de los registro

Operador punto (.) permite acceder a los valores de los campos.

Si res una expresi´on que denota un registro, entoncesr.campoy es

unaexpresi´on.

MoverN(posicion.fila);

if(conan.raza == Azul) ....

return rectangulo.base * rectangulo.altura;

if(dameUnGerrero().raza == Azul) ....

Cuandores una variable, r.campoes unavariable.

Se puede asignar el campo, con la sem´antica habitual.

Pos p; p.x = 5; p.y = 7; ....

Guerrero conan = dameUnGerrero(); conan.fuerza = 10000;

(32)

Registros b´asicos Operador punto

Uso de los registro

Operador punto (.) permite acceder a los valores de los campos.

Si res una expresi´on que denota un registro, entoncesr.campoy es

unaexpresi´on.

MoverN(posicion.fila);

if(conan.raza == Azul) ....

return rectangulo.base * rectangulo.altura;

if(dameUnGerrero().raza == Azul) ....

Cuandores una variable, r.campoes unavariable.

Se puede asignar el campo, con la sem´antica habitual.

Pos p; p.x = 5; p.y = 7; ....

Guerrero conan = dameUnGerrero(); conan.fuerza = 10000;

(33)

Registros b´asicos Operador punto

Uso de los registro

Operador punto (.) permite acceder a los valores de los campos.

Si res una expresi´on que denota un registro, entoncesr.campoy es

unaexpresi´on.

MoverN(posicion.fila);

if(conan.raza == Azul) ....

return rectangulo.base * rectangulo.altura;

if(dameUnGerrero().raza == Azul) ....

Cuandores una variable, r.campoes unavariable.

Se puede asignar el campo, con la sem´antica habitual.

Pos p; p.x = 5; p.y = 7; ....

Guerrero conan = dameUnGerrero(); conan.fuerza = 10000;

(34)

Registros b´asicos Operador punto

Resumen

Registro: tipo definido por el usuario que combina distintoscampos.

Valores de registros: combinaci´on de valores de los campos.

Invariante de representaci´on: qu´e valores son v´alidos.

Variables de registro: se pueden usar como las otras variables. Operador punto: permite acceder a los campos de un registro.

(35)

Registros b´asicos Ejercicios

Ejercicios

Escribir un procedimiento IrAPosicion que, dada una posici´on, mueva

el cabezal a dicha posici´on.

void IrAPos(Posicion p){

//IrAFila(f) e IrAColumna(c): ver pr´actica

1. IrAFila(p.fila);

2. IrAColumna(p.columna);

(36)

Registros b´asicos Ejercicios

Ejercicios

Escribir un procedimiento IrAPosicion que, dada una posici´on, mueva

el cabezal a dicha posici´on.

void IrAPos(Posicion p){

//IrAFila(f) e IrAColumna(c): ver pr´actica

1. IrAFila(p.fila);

2. IrAColumna(p.columna);

(37)

Registros b´asicos Ejercicios

Ejercicios

Escribir un procedimiento mkPosActual que indique la posici´on del

cabezal.

Posicion mkPosActual(){

//fila() y columna(): ver pr´actica 3

1. Posicion p;

2. p.fila = fila();

3. p.columna = columna();

4. return p;

(38)

Registros b´asicos Ejercicios

Ejercicios

Escribir un procedimiento mkPosActual que indique la posici´on del

cabezal.

Posicion mkPosActual(){

//fila() y columna(): ver pr´actica 3

1. Posicion p;

2. p.fila = fila();

3. p.columna = columna();

4. return p;

(39)

Registros b´asicos Ejercicios

Ejercicios

Considere el siguiente registro:

//PROPOSITO: modela un desplazamiento del cabezal //(hacia el norte o el este).

//INVARIANTE REPRESENTACION: no hay condiciones.

1. structDesplazamiento{ 2. int este; int norte;

3. };

(40)

Registros b´asicos Ejercicios

Ejercicios

Escribir un procedimiento Desplazar que, dado un desplazamiento, mueva el cabezal de forma acorde.

void Desplazar(Desplazamiento d){

1. Posicion p = mkPosActual();

2. p.fila = p.fila + d.norte;

3. p.columna = p.columna + d.este;

4. IrAPos(p);

(41)

Registros b´asicos Ejercicios

Ejercicios

Escribir un procedimiento Desplazar que, dado un desplazamiento, mueva el cabezal de forma acorde.

void Desplazar(Desplazamiento d){

1. Posicion p = mkPosActual();

2. p.fila = p.fila + d.norte;

3. p.columna = p.columna + d.este;

4. IrAPos(p);

(42)

Registros b´asicos Ejercicios

Ejercicios

Considere el siguiente registro:

//PROPOSITO: modela una l´ınea de “porotochop”. //INVARIANTE REPRESENTACION:longitud>0.

1. structLinea{ 2. int longitud;

3. Color color;

4. Dir orientacion;

5. };

(43)

Registros b´asicos Ejercicios

Ejercicios

Escribir un procedimiento RenderLinea que dibuje una linea.

void RenderLinea(Linea l){

1. int punto = 0;

2. while(punto < l.longitud) {

3. Poner(l.color);

4. Mover(l.orientacion);

5. punto = punto + 1;

6. }

7. MoverN(opuesto(l.orientecion), l.longitud);

(44)

Registros b´asicos Ejercicios

Ejercicios

Escribir un procedimiento RenderLinea que dibuje una linea.

void RenderLinea(Linea l){

1. int punto = 0;

2. while(punto < l.longitud) {

3. Poner(l.color);

4. Mover(l.orientacion);

5. punto = punto + 1;

6. }

7. MoverN(opuesto(l.orientecion), l.longitud);

(45)

Registros b´asicos Ejercicios

Ejercicios

Escribir un procedimiento mkLinea que, dada una longitud, un color y una orientaci´on, construya la l´ınea correspondiente.

Linea mkLinea(int lin, Color c, Dir o){

1. Linea ret;

2. ret.longitud = lin;

3. ret.color = c;

4. ret.orientacion = o;

5. return ret;

(46)

Registros b´asicos Ejercicios

Ejercicios

Escribir un procedimiento mkLinea que, dada una longitud, un color y una orientaci´on, construya la l´ınea correspondiente.

Linea mkLinea(int lin, Color c, Dir o){

1. Linea ret;

2. ret.longitud = lin;

3. ret.color = c;

4. ret.orientacion = o;

5. return ret;

(47)

Registros b´asicos Ejercicios

Ejercicios

Escribir un procedimiento redimensionarLinea que, dada una linea l y

un entero n, incremente la longitudl enn puntos.

Linea redimensionarLinea(Linea l, int n){

1. return mkLinea(l.longitud + n, l.color, l.orientacion);

(48)

Registros b´asicos Ejercicios

Ejercicios

Escribir un procedimiento redimensionarLinea que, dada una linea l y

un entero n, incremente la longitudl enn puntos.

Linea redimensionarLinea(Linea l, int n){

1. return mkLinea(l.longitud + n, l.color, l.orientacion);

(49)

Registros b´asicos Ejercicios

Ejercicios

¿Qu´e hace el siguiente procedimiento?

void StairwayToHeaven(){

1. IrAlExtremo(Norte); IrAlExtremo(Este);

2. Linea l = mkLinea(1, Azul, Oeste);

3. while(puedeMover(Sur)) {

4. RenderLinea(l);

5. l = redimensionarLinea(l, 1);

6. l.color = siguiente(l.color);

7. Mover(Sur);

8. }

9. RenderLinea(l);

(50)

Inicializaci´on y modificaci´on

Inicializaci´

on de registros

Inicialmente, un registro tiene basura.

Inicializaci´on campo a campo (poco modular).

Procedimientos de inicializaci´on (modularizaci´on).

se prefijan conmk.

Linea mkLinea(int lin, Color c, Dir o){

1. Linea ret;

2. ret.longitud = lin;

3. ret.color = c;

4. ret.orientacion = o;

5. return ret;

(51)

Inicializaci´on y modificaci´on

Inicializaci´

on de registros

Inicialmente, un registro tiene basura.

Inicializaci´on campo a campo (poco modular).

Procedimientos de inicializaci´on (modularizaci´on).

se prefijan conmk.

Linea mkLinea(int lin, Color c, Dir o){

1. Linea ret;

2. ret.longitud = lin;

3. ret.color = c;

4. ret.orientacion = o;

5. return ret;

(52)

Inicializaci´on y modificaci´on

Inicializaci´

on de registros

Inicialmente, un registro tiene basura.

Inicializaci´on campo a campo (poco modular).

Procedimientos de inicializaci´on (modularizaci´on).

se prefijan conmk.

Linea mkLinea(int lin, Color c, Dir o){

1. Linea ret;

2. ret.longitud = lin;

3. ret.color = c;

4. ret.orientacion = o;

5. return ret;

(53)

Inicializaci´on y modificaci´on

Inicializaci´

on de registros

Inicialmente, un registro tiene basura.

Inicializaci´on campo a campo (poco modular).

Procedimientos de inicializaci´on (modularizaci´on).

se prefijan conmk.

Linea mkLinea(int lin, Color c, Dir o){

1. Linea ret;

2. ret.longitud = lin;

3. ret.color = c;

4. ret.orientacion = o;

5. return ret;

(54)

Inicializaci´on y modificaci´on

Inicializaci´

on de registros

Los procedimientos de inicializaci´on pueden poner valores por defecto.

Posicion mkPosOrigen(){

1. Posicion ret;

2. ret.fila = 0;

3. ret.columna = 0;

4. return ret;

(55)

Inicializaci´on y modificaci´on

Modificaci´

on de registros

Campo por campo.

¡Cuidado con el invariante!

A trav´es de procedimientos.

Se pueden incluir la precondici´on, o se pueden controlar los efectos.

Posicion desplazarPosicion(Posicion p, Desplazamiento d){

1. Posicion ret;

2. ret.fila = ret.fila + d.norte;

3. ret.columna = ret.columna + d.este;

4. if(ret.fila < 0) {ret.fila = 0;} 5. ...

6. return ret;

(56)

Inicializaci´on y modificaci´on Registros con registros

Registros con registros

Un registro puede tener adentro otros registros. En ese caso, el operador punto denota otro registro.

1. structRectangulo{ 2. Posicionvertice;

3. Desplazamientotamanio;

4. };

1. structVehiculo{ 2. Motormotor;

3. Color color;

4. int chapa;

5. };

En caso quer sea una variable de registro,r.regInterno.campoes

unavariable

(57)

Inicializaci´on y modificaci´on Registros con registros

Registros con registros

Un registro puede tener adentro otros registros. En ese caso, el operador punto denota otro registro.

1. structRectangulo{ 2. Posicionvertice;

3. Desplazamientotamanio;

4. };

1. structVehiculo{ 2. Motormotor;

3. Color color;

4. int chapa;

5. };

(58)

Inicializaci´on y modificaci´on Registros con registros

Inicializaci´

on

En lugar de acceder a los campos de un registro interno. . .

. . .usamos funciones que accedan.

Para inicializar un registro interno, usar mkRegInterno.

Rectangulo mkCuadrado(Posicion v, int t){

1. Rectangulo ret;

2. ret.vertice = v;

3. ret.tamanio = mkDesplazamiento(t,t);

4. return ret;

(59)

Inicializaci´on y modificaci´on Registros con registros

Inicializaci´

on

En lugar de acceder a los campos de un registro interno. . .

. . .usamos funciones que accedan.

Para inicializar un registro interno, usar mkRegInterno.

Rectangulo mkCuadrado(Posicion v, int t){

1. Rectangulo ret;

2. ret.vertice = v;

3. ret.tamanio = mkDesplazamiento(t,t);

4. return ret;

(60)

Inicializaci´on y modificaci´on Registros con registros

Inicializaci´

on

En lugar de acceder a los campos de un registro interno. . .

. . .usamos funciones que accedan.

Para inicializar un registro interno, usar mkRegInterno.

Rectangulo mkCuadrado(Posicion v, int t){

1. Rectangulo ret;

2. ret.vertice = v;

3. ret.tamanio = mkDesplazamiento(t,t);

4. return ret;

(61)

Inicializaci´on y modificaci´on Registros con registros

Inicializaci´

on

En lugar de acceder a los campos de un registro interno. . .

. . .usamos funciones que accedan.

Para inicializar un registro interno, usar mkRegInterno.

Rectangulo mkCuadrado(Posicion v, int t){

1. Rectangulo ret;

2. ret.vertice = v;

3. ret.tamanio = mkDesplazamiento(t,t);

4. return ret;

(62)

Inicializaci´on y modificaci´on Registros con registros

Modificaci´

on de los registros internos

Al utilizar un procedimiento que modifica el registro interno. . ..

. . .es facil garantizar el invariante de representaci´on.

Rectangulo DesplazarRectangulo(Rectangulo r, Desplazamiento d) {

1. Rectangulo ret;

2. ret.vertice = Desplazar(ret.vertice, d);

3. return ret;

(63)

Inicializaci´on y modificaci´on Registros con registros

Modificaci´

on de los registros internos

Al utilizar un procedimiento que modifica el registro interno. . ..

. . .es facil garantizar el invariante de representaci´on.

Rectangulo DesplazarRectangulo(Rectangulo r, Desplazamiento d) {

1. Rectangulo ret;

2. ret.vertice = Desplazar(ret.vertice, d);

3. return ret;

(64)

Inicializaci´on y modificaci´on Registros con registros

Modificaci´

on de los registros internos

Al utilizar un procedimiento que modifica el registro interno. . ..

. . .es facil garantizar el invariante de representaci´on.

Rectangulo DesplazarRectangulo(Rectangulo r, Desplazamiento d) {

1. Rectangulo ret;

2. ret.vertice = Desplazar(ret.vertice, d);

3. return ret;

(65)

Inicializaci´on y modificaci´on Registros con registros

Typedef

El comandotypedef permite dar un nuevo nombre a un tipo

existente.

Se escribetypedef tipoViejo tipoNuevo;

T´erminos del dominio del problema: mayor abstracci´on.

typedef int Fila;

typedef Dir Orientacion; typedef int Sueldo; typedef Pos Celda;

Es equivalente usar tipoViejo quetipoNuevo

(66)

Inicializaci´on y modificaci´on Registros con registros

Typedef

El comandotypedef permite dar un nuevo nombre a un tipo

existente.

Se escribetypedef tipoViejo tipoNuevo;

T´erminos del dominio del problema: mayor abstracci´on.

typedef int Fila;

typedef Dir Orientacion; typedef int Sueldo; typedef Pos Celda;

Es equivalente usar tipoViejo quetipoNuevo

(67)

Inicializaci´on y modificaci´on Registros con registros

Typedef

El comandotypedef permite dar un nuevo nombre a un tipo

existente.

Se escribetypedef tipoViejo tipoNuevo;

T´erminos del dominio del problema: mayor abstracci´on.

typedef int Fila;

typedef Dir Orientacion; typedef int Sueldo; typedef Pos Celda;

Es equivalente usar tipoViejo quetipoNuevo

(68)

Inicializaci´on y modificaci´on Registros con registros

Typedef

El comandotypedef permite dar un nuevo nombre a un tipo

existente.

Se escribetypedef tipoViejo tipoNuevo;

T´erminos del dominio del problema: mayor abstracci´on.

typedef int Fila;

typedef Dir Orientacion; typedef int Sueldo; typedef Pos Celda;

(69)

Inicializaci´on y modificaci´on Registros con registros

Estructuras (`

a la C)

CGobstonespermite declarar estructuras de la siguiente forma.

1. typedef struct{ 2. T1v1;

3. T2v1;

4.

. . .

5. Tkvk;

6. }Tipo;

1. typedef struct{ 2. int fila;

3. int columna;

(70)

Inicializaci´on y modificaci´on Registros con registros

Conclusiones y lo que viene

Registros: forma de combinar valores Motivaciones:

Describir el problema en t´erminos del dominio. Organizar los datos de acuerdo a su pertinencia.

Tipos de registro, valores, par´ametros/variables, operador punto.

Registros con registros.

La clase que viene

Listas con registros y registros con Listas. Listas de listas.

(71)

Inicializaci´on y modificaci´on Registros con registros

Conclusiones y lo que viene

Registros: forma de combinar valores Motivaciones:

Describir el problema en t´erminos del dominio. Organizar los datos de acuerdo a su pertinencia.

Tipos de registro, valores, par´ametros/variables, operador punto.

Registros con registros.

La clase que viene

Listas con registros y registros con Listas. Listas de listas.

(72)

Inicializaci´on y modificaci´on Registros con registros

Conclusiones y lo que viene

Registros: forma de combinar valores Motivaciones:

Describir el problema en t´erminos del dominio. Organizar los datos de acuerdo a su pertinencia.

Tipos de registro, valores, par´ametros/variables, operador punto.

Registros con registros.

La clase que viene

Referencias

Documento similar

Si bien en el sistema de cavidades nos centr´ abamos en unos par´ ametros espec´ıficos tales como el factor de forma y de calidad, en esta parte del proyecto los par´ ametros que

Con estos par´ametros, observe en el osciloscopio la se˜nal de salida para diferentes valores de retardo y ganancia del eco. An´alisis

Utilizaci´on de filtros interpolatorios dependientes de un par´ametro con idea de considerar el valor del par´ametro que ofrezca mejores medidas de calidad espacial y espectral para

• Nivel nacional (Registros nacionales) con traslado a base europea EUDAMED.. Registros de Responsables

Artículo 1 º.Queda incluida en las disposiciones de la Ley Nº 18.237 de 20 de diciembre de 2007 de Expediente Electrónico Judicial, en lo concerniente al gobierno

EL PAPEL DE LA POLITICA FISCAL EN EL CRECIMIENTO Y DESARROLLO ECONOMICO DE MEXICO 1982-2014, UNA. PERSPECTIVA PARA EL CORTO PLAZO

#### Leal Camacho Jessica Berenice Jiménez Vázquez Miguel Angel 15-ago-11 30527780-2 Análisis del Crédito al Consumo en México; 1995-2010 Tesis Escolarizado. #### Ledezma Pedraza

Nuestro sistema de gestión de registro aplica este principio cuando se determina que los registros son elegibles para la legalidad de la certificación sobre la base de los requisitos