Apuntes de Estructuras Simples

13
Algoritmos y Estructuras de Datos Ingeniería en Sistemas 1 ESTRUCTURAS SIMPLES... LAS CADENAS En la primera parte se estudió el concepto de tipo de datos carácter (char) y se definió un carácter como un símbolo del juego de caracteres de la computadora. Una constante carácter se definió como cualquier carácter entre separadores (apóstrofo o dobles comillas). Una cadena (string) de caracteres es un conjunto de caracteres -incluido el blanco- que se almacenan en un área contigua de la memoria. Pueden ser entradas o salidas al desde un terminal. La longitud de una cadena es el número de caracteres que contiene. La cadena que no contiene caracter se denomina cadena vacía o nula, y su longitud es cero; no se debe confundir con una cadena compuesta-sólo de blancos ----espacios en blanco ya que ésta tendrá como longitud el número de blancos de la misma. La representación de las cadenas suele ser con comillas simples o dobles Una secuencia finita de caracteres se denomina normalmente una cadena. SECUENCIA FINITA DE SIMBOLOS PERTENECIENTES A UN CONJUNTO PREDETERMINADO DE CARACTERES. FORMALIZACION: S = A1 A2 A3... An donde cada carácter ai A, siendo A = alfabeto, para 1 i n Las instrucciones básicas en los lenguajes de programación de las cadenas son: asignar y, entrada/salída (leer/escribir) Asignación: Si la variable NOMBRE se ha declarado como tipo cadena var cadena: NOMBRE la instrucción de asignación debe contener en el lado derecho de la asignación una constante tipo cadena o bien otra variable del mismo tipo. Así, NOMBRE ‘Luis Hermenegíldo' significa que la variable NOMBRE toma por valor la cadena 'Luis Hermenegildo’ Entrada/Salida La entrada/salida desde un terminal se puede realizar en modo carácter; para ello bastará asignar -a través del correspondiente dispositivo- una cadena de caracteres a una variable tipo cadena. Así, por ejemplo, si A, B, C y D se han declarado como variables tipo cadena: var cadena: A, B, C, D. read(A,B) write(C;D) Las declaraciones de instrucciones están realizadas en Lenguaje Pascal

description

Estructuras simples

Transcript of Apuntes de Estructuras Simples

Page 1: Apuntes de Estructuras Simples

Algoritmos y Estructuras de Datos

Ingeniería en Sistemas

1

ESTRUCTURAS SIMPLES...

LAS CADENAS

En la primera parte se estudió el concepto de tipo de datos carácter (char) y se definió un carácter como un símbolo del juego de caracteres de la computadora. Una constante carácter se definió como cualquier carácter entre separadores (apóstrofo o dobles comillas).

Una cadena (string) de caracteres es un conjunto de caracteres -incluido el blanco- que se almacenan en un área contigua de la memoria. Pueden ser entradas o salidas al desde un terminal. La longitud de una cadena es el número de caracteres que contiene. La cadena que no contiene caracter se denomina cadena vacía o nula, y su longitud es cero; no se debe confundir con una cadena compuesta-sólo de blancos ----espacios en blanco ya que ésta tendrá como longitud el número de blancos de la misma.

La representación de las cadenas suele ser con comillas simples o dobles

Una secuencia finita de caracteres se denomina normalmente una cadena.

SECUENCIA FINITA DE SIMBOLOS PERTENECIENTES A UN CONJUNTO

PREDETERMINADO DE CARACTERES.

FORMALIZACION:

S = A1 A2 A3... An

donde cada carácter ai A, siendo A = alfabeto, para 1 i n

Las instrucciones básicas en los lenguajes de programación de las cadenas son: asignar y, entrada/salída (leer/escribir)

Asignación: Si la variable NOMBRE se ha declarado como tipo cadena var cadena: NOMBRE la instrucción de asignación debe contener en el lado derecho de la asignación una constante tipo cadena o bien otra variable del mismo tipo. Así, NOMBRE ‘Luis Hermenegíldo' significa que la variable NOMBRE toma por valor la cadena 'Luis

Hermenegildo’

Entrada/Salida La entrada/salida desde un terminal se puede realizar en modo carácter; para ello bastará asignar -a través del correspondiente dispositivo- una cadena de caracteres a una variable tipo cadena. Así, por ejemplo, si A, B, C y D se han declarado como variables tipo cadena:

var cadena: A, B, C, D.

read(A,B)

write(C;D)

Las declaraciones de instrucciones están realizadas

en Lenguaje Pascal

Page 2: Apuntes de Estructuras Simples

Algoritmos y Estructuras de Datos

Ingeniería en Sistemas

2

asignarán a A y B las cadenas introducidas por el teclado y visualizarán o imprimirán en el dispositivo de salida las cadenas que representan las variables C y D.

Según el tipo de lenguaje de programación elegido se tendrá mayor o menor facilidad para la realización de operaciones: Funciones predefinidas, o es preciso definirlos por el usuario con la natural complejidad que suponga el diseño del algoritmo correspondiente. En cualquier caso, las operaciones con cadena más usuales son:

cálculo de la longitud,

comparación,

concatenación,

extracción de subcadenas,

búsqueda de información

Longitud La longitud de una cadena, como ya se ha comentado es el número de caracteres de la cadena. Así, ‘Don Quijote de la Mancha’ tiene veinticuatro caracteres. La operación de determinación de la longitud de una cadena se representará por la función Longitud, cuyo formato es:

longitud (cadena)

Comparación La comparación de cadenas (igualdad y desigualdad) es una operación muy importante, sobre todo en la clasificación de datos tipo carácter, que se utiliza con mucha frecuencia en aplicaciones de proceso de datos (clasificaciones de listas, tratamiento de textos, etc.). Los criterios de comparación se basan en el orden numérico del código o juego de caracteres que admite la computadora o el propio lenguaje de programación. En el lenguaje algorítmico se utiliza el código ASCII como código numérico de referencia. Así.

el carácter A' será < el carácter 'C ‘

(código 65) (código 67)

el carácter 8 será < el carácter ' i ‘ (código 56) (codigo 105)

En la comparación de cadenas se pueden considerar dos operaciones más elementales: igualdad y desigualdad. Igualdad

Dos cadenas a y b de longitudes in y n son iguales si,:

el número de caracteres de a y b son los mismos (m n)

cada carácter de a es igual a su Correspondiente de b; si a a,a,...a, y b bIb---.b.. se debe verificar que a, =_ b, para todo i en el rango 1 <= i <* n.

Así: 'EMILIO' = 'EMILIO' es una expresión verdadera ‘EMILIO’ = ‘EMILIA’ el una expresión falsa

LONGITUD

Operando: cadena

Tipo de resultado: entero N = Length(S) S = “dato” Length(S) = 4

Page 3: Apuntes de Estructuras Simples

Algoritmos y Estructuras de Datos

Ingeniería en Sistemas

3

‘EMILIO’ = ‘EMILIO’ expresión falsa, , las longitudes no son iguales Desigualdad

Los criterios para comprobar la desigualdad de cadena utilizan normalmente los operadores de relación <, <= , >=, <> o>< y se ajustan a una comparación de carcteres correspondientes en ambas cadenas hasta conseguir dos caracteres diferentes. De este modo, se pueden conseguir clasificaciones alfanuméricas: 'GARCIA' < 'GOMEZ' ya que las comparaciones sucesivas de caracteres son: G-A-R-C-I-A G - G, A - O ... G-O-M-E-Z una vez que se encuentra una desigualdad, no es preciso continuar; como se observa, las cadenas no tienen por que tener la misma longitud para ser comparadas. En las sucesivas comparaciones se puede apreciar una amplia gama de posibles casos.

‘LUIS’ < 'LUISITO' verdad 'ANA' < 'MARTA' verdad 'TOMAS < 'LUIS' falsa

'BARTOLO' < 'BARTOLOME' verdad ‘CARMONA’ > 'MADRID' falsa ‘ LUIS’ > 'LUIS' verdad Se puede observar de los casos anteriores que la presencia de cualquier carácter -incluso el blanco, se considera mayor siempre que la ausencia. Por eso, 'LUIS es mayor que ' LUIS'.

Concatenación La concatenación es la operación de reunir varias cadenas de caracteres en una sola, pero conservando el orden de los caracteres de cada una de ellas. El símbolo que representa la concatenación varía de unos lenguajes a otros. Los, más utilizados son: * , //, &, o En nuestro libro utilizaremos + y, en ocasiones, Las cadenas para concatenarse pueden ser constantes o variables. 'MIGUEL' 'DE' CERVANTES' = 'MIGUELDECERVANTES' Puede comprobar que las cadenas, en realidad, se «pegan» unas al lado de las otras, por ello, si al concatenar frases desea dejar blancos entre ellas, deberá indicarlos expresamente en alguna de, las cadenas. Así, las operaciones 'MIGUEL 'DE’ 'CERVANTES' 'MIGUEL' DE’ 'CERVANTES' producen el mismo resultado 'MIGUEL DE CERVANTES'

Subcadena Es posible realizar operaciones de concatenación con subcadenas.

CONCATENACION Junta dos cadenas, de extremo a extremo

en una nueva cadena

Operando: 2 cadenas

Tipo de resultado: cadena

S0 = a1a2a3...an

S1 = b1b2b3...bm

A alfabeto con ai A, para 1 i n

B alfabeto con bi A, para 1 i m

Page 4: Apuntes de Estructuras Simples

Algoritmos y Estructuras de Datos

Ingeniería en Sistemas

4

subcadena (' PATO DONALD', 1, 4) & subcadena (' ESTA TIERRA',5, 4) equivale a la cadena ' PATO TIE', La aplicación de la función a una subcadena,

subcadena (cadena- fuente, p,longsub)

puede producir los siguientes resultados: 1. Si longsub no existe, entonces la subcadena comienza en el mismo carácter posición y termina con el último carácter. 2. Si longsub -<= 0, el resultado es una cadena vacía. 3. Si p >longitud (cadena_fuente), la subcadena resultante será vacía. subcadena ('MORTIMER', 9, 2) produce una cadena vacía. 4. Si p < = 0, el resultado es también una cadena vacía. subcadena ( 'valdez’, 0, 4) y subcadena 'valdez' ,8) proporcionan cadenas nulas.

Formas de representación de las cadenas

La forma de almacenar una cadena involucra tanto la representación de cada carácter de la cadena como la

representación de la combinación de caracteres que forman la cadena.

La cadenas se almacenan en memoria es direcciones contiguas o adyacentes físicamente, por lo tanto el espacio

físico utilizado será igual a la longitud de la cadena.

LOS ARREGLOS Supongamos que nos enfrentamos a un problema como este: Una empresa que cuenta con 150 empleados, desea establecer una estadística sobre los salarios de sus empleados, y quiere saber cual es el salario promedio, y también cuantos de sus empleados gana entre $1250.00 y $2500.00.

Si tomamos la decisión de tratar este tipo de problemas con datos simples, pronto nos percataríamos del enorme desperdicio de tiempo, almacenamiento y velocidad. Es por eso que para situaciones de este tipo la mejor solución son los datos estructurados.

Un arreglo puede definirse como un grupo o una colección finita, homogénea y ordenada de elementos. Los arreglos pueden ser de los siguientes tipos:

De una dimensión.

De dos dimensiones.

De tres o más dimensiones.

Un arreglo unidimensional es un tipo de datos estructurado que está formado de una colección finita y ordenada de datos del mismo tipo. Es la estructura natural para modelar listas de elementos iguales.

Un arreglo es una colección de dos o más celdas de memoria

adyacentes —los elementos del arreglo— asociadas con un nombre

simbólico particular.

Page 5: Apuntes de Estructuras Simples

Algoritmos y Estructuras de Datos

Ingeniería en Sistemas

5

El tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir, podemos acceder a cualquier elemento del arreglo sin tener que consultar a elementos anteriores o posteriores, esto mediante el uso de un índice para cada elemento del arreglo que nos da su posición relativa.

Para implementar arreglos unidimensionales se debe reservar espacio en memoria, y se debe proporcionar la dirección base del arreglo, la cota superior y la inferior.

Operaciones Con Arreglos

Las operaciones en arreglos pueden clasificarse de la siguiente forma:

Lectura

Escritura

Asignación

Actualización

Ordenación

Búsqueda

REPRESENTACION EN MEMORIA

Los arreglos se representan en memoria de la forma siguiente:

x : array[1..5] of integer

Para calcular la dirección de memoria de un elemento dentro de

un arreglo se usa la siguiente formula:

A[i] = base(A) + [(i-li) * w]

donde :

A = Identificador único del arreglo li = Límite inferior

i = Indice del elemento w = Número de bytes tipo componente

ARREGLOS BIDIMENSIONALES Este tipo de arreglos al igual que los anteriores es un tipo de dato estructurado, finito

ordenado y homogéneo. El acceso a ellos también es en forma directa por medio de un par

de índices.

Los arreglos bidimensionales se usan para representar datos que pueden verse como una

tabla con filas y columnas. La primera dimensión del arreglo representa las columnas, cada

elemento contiene un valor y cada dimensión representa una relación

La representación en memoria se realiza de dos formas :

Almacenamiento por columnas o

Almacenamiento por renglones.

Para determinar el número total de elementos en un arreglo

bidimensional usaremos las siguientes fórmulas:

RANGO DE RENGLONES (R1) = Ls1 - Li1+1

RANGO DE COLUMNAS (R2) = Ls2 - Li2+1 No. TOTAL DE COMPONENTES = R1 * R2

Page 6: Apuntes de Estructuras Simples

Algoritmos y Estructuras de Datos

Ingeniería en Sistemas

6

REPRESENTACION EN MEMORIA POR COLUMNAS

x : array [1..5,1..7] of integer

Para calcular la dirección de memoria de un elemento se usan la siguiente formula:

A[i,j] = base (A) + [((j - li2) R1 + (i + li1))*w]

REPRESENTACION EN MEMORIA POR RENGLONES

x : array [1..5,1..7] of integer

Para calcular la dirección de memoria de un elemento se usan la siguiente formula:

A[i,j] = base (A) + [((i - li1) R2 + (j + li2))*w]

donde:

i = Indice del renglón a calcular

j = Indice de la columna a calcular

li1 = Límite inferior de renglones

li2 = Límite inferior de columnas

w = Número de bytes tipo componente

Arreglos Multidimensionales

Este también es un tipo de dato estructurado, que está compuesto por n dimensiones. Para hacer referencia a cada componente del arreglo es necesario utilizar n índices, uno para cada dimensión.

Para determinar el número de elementos en este tipo de arreglos se usan las siguientes fórmulas:

RANGO (Ri) = lsi - (lii + 1)

No. TOTAL DE ELEMENTOS = R1 * R2* R3 * ...* Rn

donde:

i = 1 ... n

n = No. total de dimensiones

Para determinar la dirección de memoria se usa la siguiente formula:

LOC A[i1,i2,i3,...,in] = base(A) + [(i1-li1)*R3*R4*Rn + (i2-li2)*R3*R2*... (in - lin)*Rn]*w

Para procesar los datos almacenados en un arreglo, tenemos que hacer referencia a cada elemento individual

– especificando el nombre del arreglo

– identificando el elemento deseado

Arreglo

tridimensional

Page 7: Apuntes de Estructuras Simples

Algoritmos y Estructuras de Datos

Ingeniería en Sistemas

7

Subíndices

El entero entre [ y ] es el subíndice del arreglo; los usamos para

– diferenciar entre los elementos individuales de un arreglo

– especificar cuál elemento del arreglo queremos manejar

Podemos usar cualquier expresión de tipo entera como subíndice:

– para que la referencia sea válida, el valor del subíndice debe estar entre 0 y uno menos que el tamaño declarado del arreglo (o el número de elementos del arreglo)

– es esencial entender la diferencia entre el valor de un subíndice de un arreglo y el valor de un elemento del arreglo

Un polinomio, p(x), es una función matemática de la forma p(x) = a0 + a1x + a2x

2 + … + an–1xn–1

en que x es la variable del polinomio

a0, a1, a2, …, an–1 son coeficientes reales constantes n–1, en que n es un entero, es el grado del polinomio (an–1 ≠ 0)

Podemos representar un polinomio por su grado y por sus coeficientes; almacenamos los coeficientes en un arreglo.

Una operación típica sobre polinomios es la evaluación del polinomio para un determinado valor de la variable x:

Por ejemplo si el valor de x = 3 para el polinomio Polin1 = x5 + 5x

3 + 6x

2 + 1, la evaluación consiste

en reemplazar el valor de x por 3

Polin1 = 35 + 5.3

3 + 6.3

2 + 1

Los polinomios constituyen un caso especial en el estudio de listas ordenadas, especialmente con aquellos que utlizan para su

representación arreglos unidimensionales.

Hemos visto la forma de escribir un polinomio:

A(x) = an xn + an-1 x

n-1 + an-2 x

n-2 + ........

+ a1 x

+ a0

donde an 0 el el grado de A es n

Podemos representar A(x) como una lista ordenada de coeficientes, usando un arreglo

unidimensional de largo n + 2

Page 8: Apuntes de Estructuras Simples

Algoritmos y Estructuras de Datos

Ingeniería en Sistemas

8

A = ( n, an, an-1, ......., a1, a0 )

El primer elemento es el grado de A y le siguen los n+1 coeficientes en orden decreciente del valor

de los exponentes.- Esta solución da una forma muy sencilla para realizar la sima y la

multiplicación de los polimonios. El valor del exponente esta dado por el índice, ya que conocemos

el grado.

Sin embargo, estudiemos que desventajas tiene esta forma de representación.-Sea por ejemplo el

polimonio:

X1000

+ 1

Este requiere para su representación. Un vector de 1002 elementos, donde 999 de ellos son iguales

a cero. Esto nos lleva a considerar otro esquema de representación.-Supongamos que tomamos el

polinomio A(x) y consideramos de él, solo los coeficientes distintos de cero. Esto nos resultará en el

siguiente polimonio:

bm-1 xe m-1

+ bm-2 xe m-2

+ .........+ b0xe 0

donde cada bi es un coeficiente distinto de 0 del polinomio A y los exponentes ei están en orden

decreciente, del que em-1 > em-2 >

em-3 > ......... >

e0

Si todos los coeficientes distinto de A son distintos de 0, luego m = n + 1, ei – i y bi =

ai para 0 i n.-

Alternativamente, si solo a0 0, entonces m = 1, b0 = an y e0 = n

Esto se puede representar en una lista de largo 2m + 1

( m , em-1 , bm-1 , em-2 , bm-2 , em-3 , bm-3 , ..........., e0 , b0 )

El primer elemento es el número de términos distintos de cero. Luego cada término tiene dos

elementos representando el par (exponente, coeficiente).-

Cabe hacerse la pregunta, ¿este método, es más eficiente que el que

representamos en el primer término? Evidentemente, resuelve mejor el caso del

problema x1000 +1, que lo representemos como (2, 1000, 1, 0, 1).-Sin embargo para

el ejemplo:

X4

+ 10 x3 3x

2 + 1

la representación puede hacerse en las dos formas:

i) (4 , 1 , 10 , 3 , 0 , 1) ò ii) (4 , 1 , 10 , 3 , 0 , 1)

En el peor caso, el esquema ii) requiere por lo menos el doble del almacenamiento que el esquema

i) (cuando el grado es n y todos los n+1 coeficientes son distintos de cero) Pero

el esquema i) puede ser muy despilfarrador de espacio, como para X1000

+ 1.

Casi siempre se trabaja con el esquema ii)

Page 9: Apuntes de Estructuras Simples

Algoritmos y Estructuras de Datos

Ingeniería en Sistemas

9

Otro problema de desperdicio de almacenamiento .... MATRICES SPARSE

No existe una definición precisa de cuando una matriz se llamará SPARSE (esparcida o rala). Pero este concepto se pude reconocer intuitivamente. Observemos la siguiente matriz... Esto ocurre porque en la practica, mucha de las matrices con que trabajamos son sumamente grandes, por ejemplo de 1000 x 1000, pero a la vez son sparse, es decir que solo 1000 elementos del millón que suman el total son distintos de cero. Este tipo de matriz, si se representa como un arreglo bidimensional, excedería la capacidad de almacenamiento o bien realizaría una utilización ineficiente de los recursos del computador. La representación alternativa será entonces almacenar EXPLICITAMENTE SOLO LOS ELEMENTOS DISTINTOS DE CERO. Cada elemento de una matriz esta unívocamente caracterizado por su fila y su columna i, j.- Luego

debemos almacenar una matriz sparse como una lista de 3-tuplas de la forma:

(i , j , valor)

Los registros

Un registro, en programación, es un tipo de dato estructurado formado por la unión de varios

elementos bajo una misma estructura. Estos elementos pueden ser, o bien datos elementales

(entero, real, carácter,...), o bien otras estructuras de datos. A cada uno de esos elementos se le

llama campo.

15 0 0 22 0 -15

0 -11 3 0 0 0

0 0 0 -6 0 0

0 0 0 0 0 0

-91 0 0 0 0 0

0 0 28 0 0 0

1 2 3

A(0) 6 6 8 A(1) 1 1 15 A(2) 1 4 22 A(3) 1 6 -15 A(4) 2 2 11 A(5) 2 3 3 A(6) 3 4 -6 A(7) 5 1 91 A(8) 6 3 28

Es fácil comprender que solo 8 de los 36 posibles valores son distintos de cero. La cantidad de datos distintos de ceros es muy pequeña comparando con la cantidad total de elementos, De este modo una matriz sparse requiere que se considere una forma alternativa de representación.

De este modo la matriz del ejemplo, se almacenara en otra matriz A(0:t, a:3) donde t = 8 y equivale al numero de términos distintos de cero. Los elementos A(0,1) y A(0,2) contienen el numero de filas y columnas de la matriz original y A(0,3) contiene el numero de elementos distintos de cero.

Page 10: Apuntes de Estructuras Simples

Algoritmos y Estructuras de Datos

Ingeniería en Sistemas

10

Un registro se diferencia de un vector en que éste es una colección de datos iguales, es decir, todos

del mismo tipo, mientras que en una estructura los elementos que la componen, aunque podrían

serlo, no tiene porque ser del mismo tipo.

o Registros es un tipo de datos formado por una colección finita de elementos no necesariamente homogéneos . o El acceso se realiza a través de una referencia al nombre del registro seguido del campo específico al que se

desea acceder y delimitado por un punto.

Notación Algorítmica de un Registro:

REGISTRO Auto

codigo : entero

marca : cadena

precio : real

FIN_REGISTRO

Var: AUTOMOVILES : Auto

Vista Gráfica de un Registro

Código Marca Precio

50078 Corsa swing 1.4 58.600

Un registro se puede representar gráficamente en función de sus campos:

Ejemplo: Empleado:

Nombre DNI Domicilio Sueldo

Tipo cadena Tipo entero Tipo cadena Tipo real

Declaración en Pascal: Type Empleado = record Nombre : string[30] DNI :integer Domicilio :string[40] Salario :real End Operaciones con registros. Los procedimientos de lectura y escritura no permiten más que números, caracteres o cadenas. Un registro al ser una estructura compuesta es preciso efectuar las operaciones de lectura y escritura individualmente. Ejemplos de Manejo de Registros en Pascal

Escribir un programa en Pascal que almacene en un array de registros los nombres de los alumnos, sus notas parciales y finales. Hallar la nota media y mostrar un mensaje de APTO si el

alumno supera o iguala la calificación de 5 o NO APTO si no lo alcanza. Hacerlo para un número de 5 alumnos.

Nombre de Registro

Tipo de datos

Campo

Referencia al Archivo Autos

Page 11: Apuntes de Estructuras Simples

Algoritmos y Estructuras de Datos

Ingeniería en Sistemas

11

PROGRAM ALUMNOS; Uses Crt; Const numalumnos = 5; Type tnotas = record nombre2 : String; n_parcial2, n_final2: Real; {Nota parcial y final} end; {Hacemos una fila dividida en 4 partes: tnotas, nombre2, n_parcial2, n_final2. Es como una tabla de Word, la cual iremos rellenando con los datos obtenidos} notas = Array[1..numalumnos] of tnotas; {Ahora la copiamos tantas veces como numero de alumnos hay, es decir, obtenemos 5 filas iguales} var clase : notas; var nombre: String; var n_parcial, n_final, n_media: Real; var i: Integer; Begin ClrScr; For i := 1 to numalumnos Do Begin WRITE('Introduzca el nombre del alumno ',i,' : '); READLN(nombre); WRITE('Introduzca su nota parcial: '); READLN(n_parcial); WRITE('Introduzca su nota final: '); READLN(n_final); WRITELN; With clase[i] Do Begin n_parcial2 := n_parcial; n_final2 := n_final; nombre2 := nombre; End; End; ClrScr; WRITELN('NOMBRE':25,'Parcial':8,'Final':8,'Media':8, 'CALIFICACION':15); WRITELN;

For i := 1 to numalumnos do With clase[i] do Begin n_media := (n_parcial2 + n_final2) / 2; WRITE(nombre2:25,n_parcial2:8:2,n_final2:8:2); textcolor(14); WRITE(n_media:8:2); If n_media >= 5 then Begin textcolor(11); WRITELN ('APTO :-)':15); End Else Begin textcolor(1); WRITELN ('NO APTO :-(':15);

Page 12: Apuntes de Estructuras Simples

Algoritmos y Estructuras de Datos

Ingeniería en Sistemas

12

End; textcolor(7); End; End.

Escribir un programa en Pascal que almacene en un array de registros las características de cada persona: nombre, sexo, edad, peso, color de pelo, color de piel, color de ojos, nacionalidad y teléfono. PROGRAM PERFIL; Uses Crt; Const numpersonas = 1; {Cambiando este valor lo podremos hacer para el numero de personas que deseemos} Type caracteristicas = record nombre2, nacionalidad2: String;

edad2: Integer; sexo2, c_pelo2, c_ojos2: Char; tf2: Longint; {Creamos una fila con diferentes apartados} end;

personas = Array[1..numpersonas] of caracteristicas; {La copiamos tantas veces como personas haya} var persons : personas; nombre, nacionalidad: String; edad, i: Integer; sexo, c_pelo, c_ojos: Char; tf: Longint; Begin ClrScr; For i := 1 to numpersonas do Begin WRITELN('Introduzca los datos de la persona numero ',i,' : '); WRITELN; WRITE('Nombre: '); READLN(nombre); WRITE('Edad: '); READLN(edad); WRITE('Nacionalidad: '); READLN(nacionalidad); Repeat WRITE('Sexo (H, M): '); READLN(sexo); Until (sexo = 'H') or (sexo = 'M'); WRITE('Telefono: '); READLN(tf); Repeat WRITE('Color de ojos (A, V, M): '); READLN(c_ojos); Until (c_ojos = 'A') or (c_ojos = 'V') or (c_ojos = 'M'); Repeat WRITE('Color de pelo (R, M, C): '); READLN(c_pelo); Until (c_pelo = 'R') or (c_pelo = 'M') or (c_pelo = 'C'); WRITELN; With persons[i] do Begin nombre2 := nombre; edad2 := edad; nacionalidad2 := nacionalidad; sexo2 := sexo; tf2 := tf; c_ojos2 := (c_ojos);

Page 13: Apuntes de Estructuras Simples

Algoritmos y Estructuras de Datos

Ingeniería en Sistemas

13

c_pelo2 := (c_pelo); {Almacenamos los datos dentro del array de registro} End; End; textcolor(11); WRITELN('Nombre':15,'Edad':6,'Nacionalidad':15,'Sexo':6, 'Telefono':12,'Color ojos':12,'Color pelo':12); textcolor(7); For i := 1 to numpersonas do Begin with persons[i] do Begin WRITE(nombre2:15,edad2:6,Nacionalidad2:15, sexo2:6,tf2:12,c_ojos2:12,c_pelo2:12); End; End;