Arreglos y Subrangos

Documentos relacionados
Arreglos y Subrangos

Ordinales, Enumerados y Conjuntos

Registros. Programación 1. InCo - FING. Programación 1 Registros InCo - FING 1 / 20

Estructuras de Control. Secuencia y Selección

U nidad 6: A rreglos: U nidim ensionales y m ultidim ensionales

Repetición Condicional

Primer Parcial. Programación 1 Instituto de Computación Año 2017

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

Estructuras de Control. Secuencia y Selección

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28

Manual de turbo pascal

APUNTES DE CÁTEDRA: ARREGLOS MULTIDIMENSIONALES

Módulo. = Asignación = = Comp. de igualdad!= Com. de desigualdad <= Comp. menor o igual >= Comp. mayor o igual AND lógico OR lógica.

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN

1. ESTRUCTURA DE UN PROGRAMA PASCAL Todo programa escrito en lenguaje Pascal, del más simple al más complejo, tiene la siguiente estructura:

EXAMENES RESUELTOS DE PROGRAMACION I

Resolución de Problemas y Algoritmos

FUNDAMENTOS DE OBJECT PASCAL

3.2. Programación estructurada. Principal. Modulo 1 Modulo 2 Modulo 3 Modulo 4. Modulo Modulo Modulo 3 1 Modulo 4 1 Modulo 4 2. Pág.

Procesadores de lenguaje Tema 5 Comprobación de tipos

Primer Parcial. Programación 1 Instituto de Computación Año 2011

EXAMENES RESUELTOS DE PROGRAMACION I

TEMA 7. ARRAYS (LISTAS Y TABLAS).

Array con tope y Registros variantes

ALGORÍTMICA. Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid.

PASCAL y TURBO PASCAL

Lenguajes de Programación. Capítulo 4. Expresiones.

2.2 Nombres, Ligado y Ámbito

Datos en Turbo Pascal

DESCRIPCIÓN DEL LENGUAJE DE PROGRAMACIÓN P-0

Índice del capítulo. Capítulo 4. Expresiones. Las expresiones. Indice de la sección. Lenguajes de Programación. Introducción. 2.

Estructura de datos Tema 2: Tipos Abstractos de Datos (TADs)

FUNDAMENTOS DE PROGRAMACIÓN LABORATORIO SESIÓN 2

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

DEFINICIONES BÁSICAS DE LAS ESTRUCTURAS DE DATOS

Unidades en PASCAL (Units)

Tema 5. Soporte lógico de computadoras.

EXAMENES RESUELTOS DE PROGRAMACION I

PASCAL y TURBO PASCAL

Unidad 4. Arreglos y Cadenas

Introducción al lenguaje C

SUBRANGO ENUMERADOS CONJUNTOS

Introducción al Lenguaje de Programación Ada

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:

Análisis léxico. Formalización y desarrollo. Procesadores de Lenguajes. Ingeniería Técnica superior de Ingeniería Informática

ESTRATEGIAS PARA LA RESOLUCIÓN DE PROBLEMAS CON MATRICES N-DIMENSIONALES

Estructura de Datos ARREGLOS

Inicio del programa. Entrada de datos. Proceso de datos. Salida de datos. Fin del programa

JavaScript: Variables

INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN. Métodos Numéricos Carlos Zotelo

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

Dra. Jessica Andrea Carballido

Resolución de Problemas y Algoritmos Clase 6: Repetición (continuación)

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Lenguajes de Programación I

Compiladores: Análisis Semántico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inès Alvarez V.

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

6. Estructuras básicas de control 1. Pseudocódigo

FUNDAMENTOS DE INFORMÁTICA

Datos Elementales y formato de un programa en Java

Porque usar Arreglos?

Tipo de Dato: Arreglos

Laboratorio 5 Tema 7. Tipos de Datos Estructurados: Arreglos, Registros y Archivos

GENERACIÓN DE CÓDIGO ORIENTADO A OBJETOS

UNIDAD IV Programación Funcional. Lic. Jesús Germán Andrés PAUTSCH - FCEQyN - UNaM

Fundamentos de Programación

Donde Condicion es una expresión booleana, es decir, que puede tomar el valor verdadero (true) o falso (false).

Programación Web Tema 3.2 Java Script Estructura del Lenguaje. Ramón Alcarria ETSI en Topografía, Geodesia y Cartografía - UPM

{ acceso } tipo-de-dato nombre-de-la-variable { d1,..., dn } { = { lista-de-valores } }

Para crear un arreglo de cualquier tipo de elementos la sintaxis es:

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

Algoritmos y Programación Orientada a Objetos I. Contenedoras de tamaño variable y uso de ciclos en otros contextos

Transcripción:

Arreglos y Subrangos Programación 1 InCo - FING Contents 1 Tipo subrango 2 1.1 Subrangos de enteros......................... 2 1.2 Subrangos de caracteres....................... 2 1.3 Operaciones con subrangos..................... 3 1.4 Subrangos en general......................... 3 2 Arreglos 3 2.1 Tipos estructurados......................... 3 2.2 Motivación.............................. 4 2.3 Declaración de un arreglo...................... 4 2.4 Ejemplos de arreglos......................... 4 2.5 Tipos Anónimos........................... 4 2.6 Representación de un arreglo en la memoria............ 5 2.7 Accediendo un arreglo........................ 5 2.8 Inicialización............................. 6 2.9 Recorridas de arreglos........................ 6 2.10 Búsqueda en un arreglo....................... 6 2.11 Búsqueda (2)............................. 7 2.12 Búsqueda (3)............................. 7 2.13 Búsqueda (4)............................. 7 2.14 Evaluación de booleanos....................... 8 1

2.15 Booleanos con circuito corto..................... 8 2.16 Búsqueda con circuito corto..................... 8 2.17 Búsqueda (5)............................. 9 2.18 Búsqueda (6)............................. 9 2.19 Búsqueda contextual......................... 10 2.20 Otro ejemplo............................. 10 2.21 Arreglos Multidimensionales..................... 10 1 Tipo subrango 1.1 Subrangos de enteros Se puede restringir el tipo de los enteros de forma de acotar los valores en un rango especificado: type (* tipos definidos por el programador *) natural = 0..MaxInt; decimal = 0..9; mes = 1..12; dia = 1..31; otro = 1000..13890; 1.2 Subrangos de caracteres type letra = A.. Z ; digito = 0.. 9 ; decimal = 0..9; Los subrangos de caracteres se basan en el orden predefinido en el tipo CHAR (en Free Pascal la tabla ASCII). Notar la diferencia entre los tipos digito y decimal 2

1.3 Operaciones con subrangos Constantes, expresiones, variables de un tipo subrango se comportan como el tipo base que lo contiene. Si una variable de un tipo subrango toma un valor fuera del rango especificado se produce un error en tiempo de ejecución. El compilador Free Pascal requiere ser configurado para que se haga la verificación de rango. Puede dar un error de compilación si es posible advertir una violación del rango. 1.4 Subrangos en general La declaración de un tipo subrango tiene esta forma: type identificador = C1.. C2; donde C1 y C2 deben ser constantes del mismo tipo ordinal. Es posible definir subrangos de cualquier tipo ordinal: integer, char, boolean, enumerado (Tipos enumerados se ven más adelante) (A los tipos ordinales también se les llama escalares) 2 Arreglos 2.1 Tipos estructurados Cada elemento del tipo está formado por un conjunto de valores (una estructura) Tipos estructurados de Pascal: Arreglos (array) Registros (record) Conjuntos (set) 3

2.2 Motivación Almacenar un conjunto de valores bajo un mismo nombre de variable. Cada uno de los valores se puede acceder independientemente utilizando un índice (generalmente un subrango) Está inspirado en la notación habitual en matemáticas para secuencias finitas: a 1, a 2,..., a n donde a sería el nombre genérico de todos los valores y el subíndice es utilizado para identificar un valor en particular. 2.3 Declaración de un arreglo Los tipos arreglo se declaran en la sección type del programa: type nombre = array [tipo_indice] of tipo_base; donde: tipo_indice debe ser un tipo ordinal, generalmente es un subrango de enteros. tipo_base es cualquier tipo de Pascal. 2.4 Ejemplos de arreglos type rango = 33..90; arr1 = array [char] of integer; (* 256 celdas *) arr2 = array [33..90] of real; arr3 = array [integer] of char; (* demasiado grande! *) arr4 = array [ 0.. 9 ] of arr3;(* matriz *) arr5 = array [rango] of boolean; 2.5 Tipos Anónimos Son tipos que se utilizan sin asignarles un nombre. 4

type (* indice anonimo *) arreglo = array [0..9] of real; var (* arreglo anonimo *) a : array [ A.. Z ] of boolean; Los tipos anónimos se utilizan comúnmente cuando un tipo sólo aparece una vez. 2.6 Representación de un arreglo en la memoria Un arreglo ocupa tantas celdas de memoria como el cardinal de su tipo índice: const MaxArreglo = 9; type RangoArreglo = 1..MaxArreglo; Arreglo1 = array [RangoArreglo] of integer; var a : Arreglo1; (* ocupa 9 celdas *) La variable a ocupa 9 celdas: *------*------*------*------*-----*-----*-----*-----*-----* 23 34 0-12 6 9 11-2 34 *------*------*------*------*-----*-----*-----*-----*-----* 1 2 3 4 5 6 7 8 9 2.7 Accediendo un arreglo Cada celda del arreglo se puede acceder como una variable independiente. Suponemos a del tipo array [1..10] of integer (* asignaciones *) a[1]:= 12; a[10]:= 90;... a[i]:= i+1; (* i en el intervalo [1,10] *) a[i+4]:= 20; (* i+4 en el intervalo [1,10] *) a[200]:= 23; (* error, fuera de rango *) a:= 0; (* error *) 5

2.8 Inicialización Para inicializar un arreglo es necesario asignar cada celda por separado: (* todas las celdas en cero *) for i:= 1 to 10 do a[i]:= 0; (* 2,4,6,...,20 *) for i:= 1 to 10 do a[i]:= 2 * i; (* desde la entrada *) for i:= 1 to 10 do ReadLn(a[i]); 2.9 Recorridas de arreglos La estructura de control for es la adecuada para recorrer completamente un arreglo (* hallar la suma de todos los elementos *) suma:= 0; for i:= 1 to M do suma:= suma + a[i]; (* hallar el maximo *) max:= a[1]; for i:= 2 to M do if a[i] > max then max:= a[i]; (* desplegar un arreglo *) for i:= 1 to M do WriteLn(a[i]); (* desplegar separados por comas *) write(a[1]); for i:= 2 to M do write(,,a[i]); 2.10 Búsqueda en un arreglo Buscar un elemento que sea igual a X. i:= 1; repeat exito:= (a[i] = X); until (i > M) or exito; 6

if exito then WriteLn( fracaso ) 2.11 Búsqueda (2) Usando while i:= 1; exito:= false; while (i<=m) and not exito do begin exito:= (a[i] = X); end; if exito then WriteLn( fracaso ) 2.12 Búsqueda (3) No es correcto utilizar for (aunque anda ). (* INCORRECTO! *) exito:= false; for i:= 1 to M do if (a[i] = X) then exito:= true; if exito then WriteLn( fracaso ) 2.13 Búsqueda (4) Por qué usar la bandera exito? 7

exito:= false; while (i<=m) and not exito do begin exito:= (a[i] = X); end; Se podría escribir directo la condición (i <= M) and (a[i] <> X)? Respuesta: Depende de cómo se evalúen las expresiones booleanas. 2.14 Evaluación de booleanos Pascal estándar: Circuito completo Para evaluar (E1 and E2) 1. Se evalúa E1. Sea v1 su valor. 2. Se evalúa E2. Sea v2 su valor. 3. Se evalúa (v1 and v2). Análogamente para el or. 2.15 Booleanos con circuito corto Free Pascal con circuito corto: Para evaluar (E1 and E2) 1. Se evalúa E1. Sea v1 su valor. 2. Si v1 es false no se evalúa E2 y el resultado es false. 3. Si v1 es true se evalúa E2. Sea v2 su valor. 4. El resultado es v2. Análogamente para la evaluación del or. La mayoría de los lenguajes de programación evalúan por circuito corto. 2.16 Búsqueda con circuito corto En este curso consideramos que disponemos de evaluación de expresiones booleanas por circuito corto. 8

i:= 1; (* circuito corto *) while (i <= M) and (a[i] <> A) do if i<=m then WriteLn( fracaso ); Free Pascal evalúa siempre con circuito corto. Cuando i toma el valor M+1, no se accede a a[i] 2.17 Búsqueda (5) El siguiente código funciona aún sin circuito corto ( por qué?): i:=1; while (i < M) and (a[i]<>a) do if a[i] = A then WriteLn( fracaso ) 2.18 Búsqueda (6) El siguiente código no funciona aún con circuito corto ( por qué?). (* INCORRECTO! *) i:= 1; while (a[i] <> A) AND (i<=m) do if i <= M then WriteLn( fracaso ); 9

2.19 Búsqueda contextual Encontrar un elemento tal que el inmediato siguiente sea A. i:=1; (* circuito corto *) while (i < M) and (a[i+1] <> A) do if i < M then WriteLn( exito:, a[i]) WriteLn( fracaso ) 2.20 Otro ejemplo Verificar si todos los elementos son pares. i:=1; (* circuito corto *) while (i <= M) and (a[i] mod 2 = 0) do if i > M then WriteLn( Son todos pares ) WriteLn( No todos son pares ); La solución con for es incorrecta. 2.21 Arreglos Multidimensionales Pueden considerarse como arreglos de arreglos o como arreglos con un índice múltiple: type nombre = array [1..20, 1..15] of char; datos = array [ 0.. 9, 1..10] of integer; tabla = array [-10..10, 1..15] of char; Para acceder a una celda de un arreglo a bidimensional se utiliza alguna de las siguientes formas: 10

a[i][j] a[i,j] La segunda es la más utilizada. Mas sobre arreglos multidimensionales: Sección 9.3 de Konvalina* 11