290 likes | 481 Views
TABLAS. Definición . El tipo tabla permite definir objetos formados por un conjunto de elementos del mismo tipo. Ejemplos . El tipo tabla se utiliza para definir puntos en 3-D, vectores, matrices, palabras, etc. TABLAS. Sintaxis
E N D
TABLAS • Definición. El tipo tabla permite definir objetos formados por un conjunto de elementos del mismo tipo. • Ejemplos. El tipo tabla se utiliza para definir puntos en 3-D, vectores, matrices, palabras, etc.
TABLAS • Sintaxis nombre_nuevo_tipo = tabla [rango, rango,...] de nombre_tipo donde rango se define como primer_rango .. ultimo_rangosiendo primer_rango y ultimo_rango expresiones de constantes de tipo entero el número de elementos que se pueden guardar en la tabla es igual a ultimo_rango–primer_rango+1
TABLAS • Ejemplos algoritmo tipo vector = tabla [1..10] dereal palabra = tabla [1..10] decaracteres matriz = tabla [1..20,1..30] deentero ftipo var v1,v2: vector; p:palabra; m:matriz fvar
Operaciones La única operación que se puede realizar con un tipo tabla es la asignación. La asignación puede ser: • Tabla -> Tabla • Componente de la tabla -> variable del tipo base • Objeto del tipo base -> componente Sobre los componentes de la tabla se pueden realizar las mismas operaciones que sobre cualquier objeto del mismo tipo base.
Operaciones Ejemplos tipo vector = tabla [1..10] dereal ftipo var v1,v2: vector ; n: realfvar • Tabla -> Tabla v1 := v2 • Componente de la tabla -> variable del tipo base v1[1] := n • Objeto del tipo base -> componente n := v1[7]
Operaciones Ejemplos Cualquier operación que se puede realizar con el tipo base v1[1] := LeerReal() v1[2] := v1[1] *v2[1] /0.5 EscribirReal (v1[2]) EscribirReal(v1[1]+v2[2])
Convenio de longitud • El número de elementos contenidos en una variable de tipo tabla siempre ha de ser menor o igual a la que aparece en la definición. • Dos tipos de convenios se utilizan para indicar el número de elementos de una tabla: • La marca específica de final (centinela) • El conocimiento explícito de la longitud
Calcular el producto escalar de dos vectores de 25 elementos reales algoritmo producto_escalar const N: entero = 25 fconst tipo vector = tabla[1..N] de real ftipo var v1, v2: vector; j : entero;p: real fvar
Leer los N primeros reales y guardarlos en el vector v1 var v1, v2: vector; j : entero;p: real fvar j:= 1 mientras j <= N hacer v1[j] := LeerReal() j := j+1 fmientras
Leer los N siguientes reales y guardarlos en el vector v2 j:= 1 mientras j <= N hacer v2[j] := LeerReal() j := j+1 fmientras
Multiplicar componente a componente v1 y v2 j:= 1; p := 0 mientras j <= N hacer p := p + v1[j] * v2[j] j := j+1 fmientras EscribirReal (p)
algoritmo producto_escalar const N: entero = 25 fconst tipo vector = tabla[1..N] de real ftipo var v1, v2: vector; j : entero;p: real fvar j:= 1 mientras j < N hacer v1[j] := LeerReal j := j+1 fmientras j:= 1 mientras j < N hacer v2[j] := LeerReal j := j+1 fmientras j:= 1; p := 0 mientras j <= N hacer p := p + v1[j] * v2[j] j := j+1 fmientras EscribirReal (p) falgoritmo
Estructura repetitiva para para indice en [rango_inicial..rango_final] (paso expresión) hacer Sentencias fpara para j en [1..N] hacer v1[j] := LeerEntero() fpara para j en [1..N] paso 2 hacer v1[j] := v1[j] + 10 fpara
Leer los N siguientes reales y guardarlos en el vector v2 para j en [1..N] hacer v2[j] := LeerReal() hacer
Multiplicar componente a componente v1 y v2 p := 0 para j en [1..N] hacer p := p + v1[j] * v2[j] fpara EscribirReal (p)
Lee una secuencia de enteros acabada en 0 y un siguiente entero e indica si este entero aparece en la secuencia anterior algoritmo búsqueda_entero const N: entero = 25 fconst tipo tentero = tabla[1..N] de entero ftipo var t1: tentero; n, j: entero encontrado: booleano fvar
Leer la secuencia de enteros, guardarlos en la tabla t1 y leer el siguiente entero j:= 1; t1[j] := LeerEntero mientras t1[j] != 0 y j < N hacer j := j+1 t1[j] := LeerEntero fmientras n := LeerEntero
Buscar el entero en la secuencia guardada en el la tabla t1 j:= 1; encontrado := falso mientras t1[j] != 0 yno encontrado hacer si t1[j] = n entonces encontrado := cierto fsi j := j+1 fmientras si encontrado entonces EscribirCaracter(‘S’) sino EscribirCaracter(‘N’) fsi
algoritmo búsqueda_entero constN: entero = 25 fconst tipotentero = tabla[1..N] de entero ftipo var t1: tentero; n, j: entero ;encontrado: booleano fvar j:= 1; t1[j] := LeerEntero mientras t1[j] != 0 y j < N hacer j := j+1; t1[j] := LeerEntero fmientras n := LeerEntero; j:= 1; encontrado := falso mientras t1[j] != 0 yno encontrado hacer si t1[j] = n entonces encontrado := cierto fsi j := j+1 fmientras si encontrado entonces EscribirCaracter(‘S’) sino EscribirCaracter(‘N’) fsi falgoritmo
Llegir dos vector de 4 components reals I escriure el vector resultant de sumar els dos vectors component a component • 3 0 -5 0 -1 23 4 12 2 23 -1
Llegir dos vector de N components reals I escriure el vector resultant de sumar els dos vectors component a component algoritme sumar_vectors const N: enter = 4 fconst tipus vector = taula[1..N] de reals ftipus var v1,v2: vector; j: enter fvar
algoritme sumar_vectors constN: enter = 4 fconst tipusvector = taula[1..N] de reals ftipus var v1,v2: vector; j: enter fvar per j en [1..N] fer v1[j] := LlegirReal() fper per j en [1..N] fer v2[j] := LlegirReal() fper per j en [1..N] fer escriureReal (v1[j] + v2[j]) fper falgoritme
Estructura repetitiva per per index en [rang_inicial..rang_final] fer Sentències fper for (index = rang_inicial; index <=rang_final;increment index) { .. Sentències } for (j= 0; j<N; j++) { v1[j] = v1[j + 2]; } Les taules en C comencen a la posició 0
Llegir una seqüència de enters acabada en 0 i escriure-la incrementant cada element amb la mitjana de la seqüència algoritme incrementar_seqüència const N: enter = 25 fconst tipus tenter = taula[1..N] de enter ftipus var t1: tenter; suma,n, j: enter mitjana: real fvar
Llegir la seqüència d’enters, guardarlos en la taula1 i calcular la mitjana j:= 1; t1[j] := LlegirEnter ; suma := t1[j] mentre t1[j] != 0 i j < N fer j := j+1; t1[j] := LlegirEnter suma := suma + t1[j] fmentre mitjana := EnterAReal(suma)/ EnterAReal(j) n := j
Escriure la seqüència dels enters incrementada amb la mitjana per j en [1..n ] fer EscriureReal (EnterAReal(t1[j]) + mitjana) fper
algoritme incrementar_seqüència constN: enter = 25 fconst tipus tenter = taula[1..N] de enter ftipus var t1: tenter; suma,n, j: enter ; mitjana: real; fvar j:= 1; t1[j] := LlegirEnter ; suma := t1[j] mentre t1[j] != 0 i j < N fer j := j+1; t1[j] := LlegirEnter suma := suma + t1[j] fmentre mitjana := EnterAReal(suma)/ EnterAReal(j) n := j per j en [1..n ] fer EscriureReal (EnterAReal(t1[j]) + mitjana) fper falgoritme
Traducció a C # define N 25 typedef int tenter [N]; void main(void) { tenter t1;int suma,num, j; float mitjana, aux; j= 0; cin >> t1[j] ; suma = t1[j]; while (t1[j] != 0 && j < N-1) { j = j+1; cin >> t1[j] ; suma = suma + t1[j]; } mitjana = (float)suma / (float)j; num = j; for (j =0; j< num; j++){ aux = (float) t1[j] + mitjana ;cout << aux <<endl; } system(“PAUSE”); }