Estructura de Datos ARREGLOS

Documentos relacionados
TIPOS DE DATOS ESTRUCTURADOS

CAPÍTULO 3 ESTRUCTURAS DE DATOS ESTÁTICAS

Arreglos. Tema 8a. Arreglos. Arreglos. Arreglos. Arreglos. Un computador no sirve para sacar promedios de 3 notas. Arreglos

Tema 10: Arreglos estáticos en C

Algoritmos y Programación I

Los tipos de datos que con mayor frecuencia se utilizan en Informática son:

ALGORITMOS Y PROGRAMACIÓN I Unidad 3

TEMA 7. ARRAYS (LISTAS Y TABLAS).

Arreglos Estructura (struct)

Tema 14: Arreglos estáticos en C

Tipo de Dato: Arreglos

UNIDAD IV ESTRUCTURA DE DATOS ESTÁTICAS MATRICES

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES.

Unidad IV Arreglos y estructuras. M.C. Juan Carlos Olivares Rojas

Informática Ingeniería en Electrónica y Automática Industrial

Punteros. Programación en C 1

Informática Lección 5. Arreglos (vectores) Curso Pedro Álvarez y José Ángel Bañares 2/11/2010. Dpto. Informática e Ingeniería de Sistemas.

1.1 Tipos de Datos Primitivos. 1.2 Tipos de datos estructurados. 1.3 Definición de estructura de datos

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

Teoría 8: Segunda Parte. Estructuras de Datos y Funciones de Entrada en Lenguaje C

Unidad 4. Arreglos y Cadenas

Tipos de Arreglos. Notación Algoritmica de los Arreglos multidimensionales tipo_dato nombre[dim 1. , dim 2. ,..., dim n

Objetivos. Conocer y saber utilizar diferentes tipos de datos. estructurados: cómo se definen. cómo están organizadas sus componentes

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Principal material bibliográfico utilizado

identificador: Es el nombre que le damos a la variable matriz y por el cual la referenciaremos en nuestro programa.

Apuntadores en C/C++ INTRODUCTION TO PROGRAMMING

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

Arreglos. Donde en cada posición del array se puede guardar un elemento. tipo_dato nombre_array[cant_elem];

Formatos para prácticas de laboratorio

Programación I Teoría III.

DEFINICIONES BÁSICAS DE LAS ESTRUCTURAS DE DATOS

PUNTEROS (APUNTADORES)

Punteros. Lenguaje C ANSI

Informática II Vectores y Matrices

2. APUNTADORES. Programación 2, FCFM, BUAP

PUNTEROS (Apuntadores)

Formato para prácticas de laboratorio

Estructura de Datos. Arreglos. Experiencia Educativa de Algorítmica ESTRUCTURA DE DATOS - ARREGLOS 1

Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Definición. Procesamiento de Arreglos. Paso de Parámetro a funciones. Arreglos multidimensionales 8/28/2013. Arreglos Unidad 0 Programación AVANZADA

Instituto Tecnológico de Celaya

Formato para Prácticas de Laboratorio

Lenguaje C. Estructuración de Datos: Arreglos. Funciones de Entrada y de Salida. Segundo Cuatrimestre 2015

Tema 18: Memoria dinámica y su uso en C

Programación I. Arreglos. Prof. Lisbeth Pérez Rivas

En un arreglo x de n elementos los elementos del arreglo son: El número de índices determina la dimensionalidad del arreglo.

TEMA 5: ESTRUCTURAS ESTÁTICAS

FUNDAMENTOS DE PROGRAMACIÓN

ARREGLOS UNIDAD 2 PROGRAMACIÓN. Primavera 2009

Max-1

Fundamentos de Informática

REPRESENTACIÓN DE DATOS

Porque usar Arreglos?

Apuntadores (Punteros)

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

Laboratorio de Arquitectura de Redes. Tipos de datos definibles en lenguaje C

PROGRAMACIÓN EN LENGUAJE C VARIABLES Y CONSTANTES

CAPITULO 2: VARIABLES Y CONSTANTES

LENGUAJE. Tema 4 Vectores, Matrices y Cadenas de caracteres.

Programación Orientada a Objetos

ASIGNATURA PROGRAMACIÓN EN C++ GUÍA: 1 DOCENTE. LIZETH CORTÉS VARIABLES C++

Definición de estructuras. Estructuras, uniones y enumeraciones. Declaración. Definición y declaración. (struct, union y enum)

Tema 13: Apuntadores en C

Tipos de Datos Estructurados

ESTRUCTURAS. Struct Identificador_ tipo_estructura { Tipo miembro_1; /*Declaración de los miembros*/

Programación. Test Autoevaluación Tema 3

Guía práctica de estudio 10: Arreglos unidimensionales y multidimensionales

Programación I Teoría II.

PUNTEROS EN C (APUNTADORES)

Arreglos. Juan Pablo Cobá Juárez Pegueros Algoritmos y Programación Básica Bioingeniería Médica Facultad de Medicina 2015

Estructuras de Datos Estáticas. Diseñar y programar en lenguaje C soluciones utilizando estructuras de datos estáticas

Programación Estructurada

Universidad del Papaloapan

Laboratorio de Técnicas Informáticas FACULTAD DE FÍSICAS

ARRAYS (ARREGLOS O FORMACIONES) UNIDIMENSIONALES EN C. DECLARACIÓN. LÍMITES. (CU00512F)

Informática Ingeniería en Electrónica y Automática Industrial

Tema 11: Manejo de cadenas en C

Un puntero no es más que una variable estática cuyo contenido es una dirección de memoria.

Cadenas y Caracteres. Universidad Católica de Honduras Nuestra Señora Reina de la Paz. Asignatura. Programación Científica. Tema de Exposición

Razón de ser Computadora Programa Programador Análisis y solución de problemas (Metodología) Algoritmo Diagrama de flujo

UA.- Estructura de Datos. Unidad de Competencia I Tema 1.2 Arreglos: Vectores, matrices, multidimensionales

Estructuras de datos: vectores en C. Clase 7 y 8 Introducción a la Computación Patricia Borensztejn

Tipos de datos y Operadores Básicos

Unidad 2: Estructuras de Datos estáticas y dinámicas.

Tema 8 Vectores y Matrices

Análisis y escritura de las estructuras de control

Departamento de Electrónica

Elementos de un programa en C

Introducción al lenguaje C

Programación 1 Grado de Ingeniería Robótica

Capítulo 11 INTRODUCCIÓN A LA CODIFICACIÓN EN C. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

Tema 3. Estructuras de control

Lenguaje de programación C. Introducción

Conceptos Básicos. Programación

Diseño Estructurado de Algoritmos

4. Estructuras (registros) Programación II, FCFM, BUAP

Transcripción:

Estructura de Datos ARREGLOS

ESTRUCTURAS DE INFORMACIÓN Una estructura de datos o de información es una colección de datos que pueden ser caracterizados por su organización y las operaciones que se definen sobre ellos. Las estructuras de datos se utilizan generalmente para procesar una colección de valores que están relacionados entre sí por algún método. Las estructuras de datos básicas que soportan la mayoría de los lenguajes de programación son las estructuras estáticas. 2

ESTRUCTURAS ESTÁTICAS Una estructura de datos estática es aquella en la que el tamaño ocupado en memoria se define antes de que el programa se ejecute y no puede modificarse dicho tamaño durante la ejecución del programa. Entre las estructuras de datos estáticas se encuentran los arreglos (vectores y matrices), registros, archivos y cadenas de caracteres. 3

ARREGLOS Un arreglo es un conjunto finito y ordenado de elementos homogéneos. Ordenado: cada elemento puede ser identificado de manera individual. Homogéneo: todos los elementos son del mismo tipo de dato. 4

ARREGLOS De esta manera se puede decir que un arreglo es un conjunto de elementos del mismo tipo agrupados en una sola variable, donde: Se usa un índice para ingresar a cada elemento en particular. Los elementos del arreglo se almacenan en espacios consecutivos en memoria. 5

ARREGLOS Particularidades y consideraciones: Los arreglos ó conjuntos de datos ordenados (arrays) recolectan variables del mismo tipo, guardándolas en forma secuencial en la memoria. La cantidad máxima de variables que pueden albergar está sólo limitada por la cantidad de memoria disponible. El tipo de las variables involucradas puede ser cualquiera de los ya vistos, con la única restricción de que todos los componentes de un arreglo deben ser del mismo tipo. 6

ARREGLOS Por sí mismo, el nombre del arreglo apunta a la dirección del primer elemento del arreglo. Se puede referenciar a cada elemento, en forma individual, tal como se ha hecho con las variables anteriormente. El subíndice designa la posición del elemento en el vector. 7

ARREGLOS El tamaño o cantidad de elementos en un arreglo siempre debe ser constante. No se pueden utilizar variables para especificar el tamaño. 8

ARREGLOS UNIDIMENSIONALES El arreglo unidimensional o vector es el tipo de arreglo más simple. Sintaxis: tipo_dato identificador[tamaño]; o bien: tipo_dato nombre_variable[cantidad de elementos]; 9

Ejemplos: ARREGLOS UNIDIMENSIONALES int variable1[8]; char nombre_completo[50]; float calificaciones[10]; double cantidades[30]; 10

ARREGLOS UNIDIMENSIONALES int cantidad = 1000; int numeros[cantidad]; /* ERROR */ #define CANTIDAD 1000 int numeros[cantidad]; /* CORRECTO */ 11

ARREGLOS UNIDIMENSIONALES Operaciones: las operaciones que se pueden realizar con los vectores son: inicialización, asignación, lectura, escritura, recorrido, actualización (insertar, borrar, modificar), ordenación, búsqueda, etc. 12

ARREGLOS UNIDIMENSIONALES La inicialización de un arreglo local, puede realizarse en su declaración, dando una lista de valores iniciales: int numeros[8] = {2, 6, 5, -2, 3, 6, 8, 9}; Obsérvese que la lista está delimitada por llaves. Otra posibilidad, sólo válida cuando se inicializan todos los elementos del arreglo, es escribir: int numeros[] = {-3, -2, -1, 0, 1, 2, 3, 4, 5, 6}; donde, se obvia la declaración de la cantidad de elementos, ya que está implícita en la lista de valores constantes. 13

ARREGLOS UNIDIMENSIONALES También se puede inicializar parcialmente un arreglo, por ejemplo: int numeros[10] = {1, 1, 1}; en éste caso los tres primeros elementos del mismo valdrán 1, y los restantes 0. Se puede usar también un ciclo para inicializar todos los elementos de un arreglo a un valor determinado. int arreglo[10]; for (i = 0; i < 10; i++) arreglo[i] = -1; 14

ARREGLOS UNIDIMENSIONALES Asignación identificador[posición] = valor; arreglo[3] = 8; Lectura scanf( %d,&arreglo[6]); Escritura printf( El valor en la posición 6 es: %d,arreglo[6]); 15

Inserción: ARREGLOS UNIDIMENSIONALES /*Insertar un nuevo elemento k en la posición p, i corresponde al índice del último elemento*/ while (i >= p) { arreglo[i + 1] = arreglo[i]; i--; } arreglo[p] = k; 16

Eliminación: ARREGLOS UNIDIMENSIONALES /*Eliminar el elemento en la posición j, n corresponde al índice del último elemento*/ for (i = j; i < n; i++) arreglo[i] = arreglo[i + 1]; 17

#include <stdio.h> #include <conio.h> ARREGLOS UNIDIMENSIONALES int main(void) { int numeros[10]; for(int i = 0; i < 10; i++) { numeros[i] = i; printf("%d\n",numeros[i]); } getch(); return 0; } 18

ARREGLOS UNIDIMENSIONALES #include <stdio.h> #include <conio.h> #define N 10 int main(void) { int numeros[n]; int i = -1; double sum = 0.0; for(i = 0; i < N; i++) { printf( Elemento %d,i); scanf("%d",&numeros[i]); sum+=numeros[i]; } printf( La suma de los elementos es: %lf,sum); getch(); return 0; } 19

ARREGLOS BIDIMENSIONALES Un arreglo bidimensional o matriz se puede considerar como un vector de vectores. Es decir, un conjunto de elementos homogéneos y ordenados en el que se necesita especificar dos subíndices para poder identificar cada elemento del arreglo. 20

Sintaxis: ARREGLOS BIDIMENSIONALES tipo_dato identificador[filas][columnas]; o bien: tipo_dato nombre_variable[filas][columnas]; 21

ARREGLOS BIDIMENSIONALES Por ejemplo, si se declara: int matriz[3][4]; esquemáticamente la disposición espacial de los elementos sería: columnas: 0 1 2 3 filas: 0 [0][0] [0][1] [0][2] [0][3] matriz[0] 1 [1][0] [1][1] [1][2] [1] [3] matriz [1] 2 [2][0] [2][1] [2][2] [2] [3] matriz [2] 22

ARREGLOS BIDIMENSIONALES Operaciones: Las operaciones que se pueden realizar con matrices son: Inicialización, asignación, lectura, escritura, recorrido, actualización (insertar, borrar, modificar), ordenación, búsqueda, etc. 23

ARREGLOS BIDIMENSIONALES Inicialización: la inicialización de los arreglos bidimensionales o matrices sigue las mismas reglas ya vistas para los otros tipos de variables, es decir: Si se declaran como globales (afuera del cuerpo de las funciones y procedimientos) cada uno de sus elementos será automáticamente inicializado a cero. Si su declaración es local (dentro de una función o procedimiento), no se realiza ninguna inicialización, quedando a cargo del programa cargar los valores de inicio o bien a manos de programador dar los valores iniciales. 24

ARREGLOS BIDIMENSIONALES La inicialización de una matriz local, puede realizarse en su declaración, dando una lista de valores iniciales: int matriz[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; Obsérvese que la lista está delimitada por llaves. Otra posibilidad, sólo válida cuando se inicializan todos los elementos del arreglo, es escribir: int matriz[][3] = {{-3, -2, -1}, {0, 1, 2}, {3, 4, 5}}; donde, se obvia la declaración de la cantidad de filas, ya que está implícita en la lista de valores constantes, pero no así la de las columnas. 25

ARREGLOS BIDIMENSIONALES También se puede inicializar parcialmente una matriz, por ejemplo: int matriz[3][10] = {{1, 1, 1}, {2, 2, 2}, {3, 3, 3}}; en éste caso los tres primeros elementos de cada fila son inicializados y los restantes valdrán 0. Se pueden usar también los ciclos para inicializar todos los elementos de una matriz a un valor determinado. int matriz[2][2]; for (i = 0; i < 2; i++) for (j = 0; j < 2; j++) matriz[i][j] = -1; 26

ARREGLOS BIDIMENSIONALES Asignación identificador[fila][columna] = valor; arreglo[1][3] = 8; Lectura scanf( %d,&arreglo[3][2]); Escritura printf( El valor en la posición 2,3 es: %d,arreglo[2][3]); 27

#include <stdio.h> #include <conio.h> ARREGLOS BIDIMENSIONALES int main(void) { int matriz[3][4]; int cantidad = 1; for(int i = 0; i < 3; i++) for(int j = 0; j < 4; j++) { matriz[i][j] = cantidad; printf( %d,matriz[i][j]); cantidad*=2; } getch(); return 0; } 28

CADENAS DE CARACTERES Los conjuntos ordenados de caracteres o cadenas de caracteres (strings) son simplemente arreglos de caracteres, tal como se han visto hasta ahora, con el agregado de un último elemento constante: el carácter NULL (ASCII == 0, simbolizado por la secuencia de escape \0 o \x0). Éste agregado permite a las funciones que procesan a los mismos, determinar fácilmente la finalización de los datos. 29

CADENAS DE CARACTERES Se puede declarar una cadena de caracteres como: char cadena1[5] = {'A', 'B', 'C', 'D', 0}; char cadena2[] = { a', b', c', d', '\0'}; char cadena3[3 + 1] = { 1', 2', 3', '\0'}; Ambas maneras son equivalentes. Sin embargo hay, en el lenguaje C, una forma más compacta de declararlas: char cadena1[5] = "ABCD"; char cadena2[] = abcd"; char cadena3[3 + 1] = 123"; 30

CADENAS DE CARACTERES int texto[] = "renglón 1 \n renglón 2 \n "; /* ERROR */ Un caso interesante es el de la línea anterior (comentada como ERROR), con el fin de poder almacenar al carácter "\n" (ASCII 179) se intentó asignar a un arreglo de enteros una cadena constante de caracteres. Esto no es permitido por el compilador, que lo rechaza como una asignación inválida, ya que la cadena constante usada como valor derecho en la asignación es un apuntador a char y no a int. 31

CADENAS DE CARACTERES La solución más común para este caso es, declarar el arreglo como unsigned char, con lo cual se lleva el alcance de sus elementos a 255. unsigned char texto[] = "renglón 1 \n renglón 2 \n "; /* CORRECTO */ Si se tuviera el caso de tener que almacenar en la cadena el carácter EOF (-1) y al mismo tiempo con caracteres ASCII mayores que 127, se podría definir el arreglo como int, pero su inicialización se tendrá que hacer obligatoriamente usando llaves, como se vio anteriormente. Se deduce entonces, que una cadena de caracteres sigue siendo un arreglo de caracteres, con la salvedad del agregado de un terminador de cadena (carácter nulo). 32

#include <stdio.h> #include <conio.h> int main(void) { char palabra[5] = Hola ; for(int i = 0; i < 5, i++) printf("%c",palabra[i]); printf("\n"); printf("%s\n",palabra); getch(); return 0; } CADENAS DE CARACTERES 33

#include <stdio.h> #include <conio.h> CADENAS DE CARACTERES int main(void) { int i; char palabra[11]; for(int i = 0; i < 10; i++) palabra[i] = 65 + i; printf("%s\n",palabra); palabra[4]=0; printf("%s\n",palabra); getch(); return 0; } 34

CADENAS DE CARACTERES #include <stdio.h> #include <conio.h> #include <string.h> int main(void) { int i; char palabra1[25], palabra2[25]; printf( Dame la primer palabra: ); scanf("%s",palabra1); printf( Dame la segunda palabra: ); scanf("%s",palabra2); printf("%s vs %s\n",palabra1,palabra2); printf( Iguales? %s\n", (strcmp(palabra1,palabra2) == 0?"si":"no")); printf( Longitudes: %d y %d\n", strlen(palabra1), strlen(palabra2)); printf("concatenadas: %s\n", strcat(palabra1, palabra2)); getch(); return 0; } 35

ARREGLOS MULTIDIMENSIONALES Un arreglo puede ser definido de tres dimensiones, cuatro dimensiones, hasta de n- dimensiones. En general, un arreglo de n- dimensiones requiere que los valores de los n- subíndices puedan ser especificados a fin de identificar un elemento individual del arreglo. 36

Sintaxis: ARREGLOS MULTIDIMENSIONALES tipo_dato n]; identificador[dimensión 1][dimensión 2]...[dimensión o bien: tipo_dato nombre_variable[dimensión 1][dimensión 2]...[dimensión n]; int matriz[2][3][4][5]; 37

ARREGLOS MULTIDIMENSIONALES Se pueden realizar las mismas operaciones ya vistas en las variantes anteriores de los arreglos. 38