400 likes | 754 Views
INFORMATICA I. Arreglos 2. CLASE 18. Definición. Definición: Un array es una colección de variables del mismo tipo de datos con un mismo nombre. En l os arrays : Hay un número de piezas de datos contenidos en el mismo nombre.
E N D
INFORMATICA I Arreglos 2 CLASE 18
Definición Definición: • Un array es una colección de variables del mismo tipo de datos con un mismo nombre. • En los arrays: • Hay un número de piezas de datos contenidos en el mismo nombre. • Hay un método ordenado para la extracción de datos individuales del array
Accediendo a los arreglos Un array así como las variables ordinarias debe ser declarado antes de ser usado. int edad[10]; Nombre Subíndices Valores Número de elementos = 10 Cada dato de un arreglo puede ser utilizado como si fuera una variable mas. edad[i] Un dato de un arreglo se referencia así: índice Nombre del arreglo
ACCESO A LOS ELEMENTOS DE UN ARRAY m= a[9]; n = a[3]; LECTURA nombreVariable = nombreArray[indice] m = 33; a[2]=m; m=33/11; a[0]=m; a[4]=10; ESCRITURA nombreArray[indice] = valor 3 33 10
CADENAS DE CARACTERES Lectura y Escritura de Cadenas • Leer una cadena introducida por teclado: • letra=getchar; //igual que scanf (“%c”,&letra); • gets(linea); // cadena completa hasta '\n' • scanf(“%s”, palabra); // 1 palabra Sin espacios • Escribiruna cadena en la pantalla: • putchar(letra); //Igual que printf(“%c”,letra); • puts(palabra); • printf(“%s”,palabra);
CADENAS DE CARACTERES FUNCIONES PARA MANIPULAR CADENAS
AGENDA 2 3 1 1 Funciones y arreglos Ejemplo repaso arreglos Arreglos multidimensionales Ejemplo repaso arreglos
EJEMPLO REPASO ARRAY Ejemplo 0 • Programa que almacena 10 números en un vector, y luego halla cual es el mayor de todos y su posición dentro del vector.
EJEMPLO REPASO ARRAY Ejemplo #include <stdio.h> #define SIZE 10 intmain (void){ intarray[SIZE]; int i, mayor=0,posMayor=0; for (i=0; i < SIZE; i++){ //Ciclo para llenar el array printf(“Ingrese el valor: %d”, i); scanf(“%d”,&array[i]); } for(i=0; i <= SIZE-1; i++){ //Ciclo para hallar Mayor if(mayor < array[i]){ mayor = array[i]; posMayor=i; } } printf(“El mayor es: %d y su posicion es %d. \n”, mayor,posMayor); return 0; } • Programa que almacena 10 numeros en un vector, y luego halla cual es el mayor de todos y su posición dentro del vector.
EJEMPLOS Ejemplo 1 • Crear un programa que cuente cuantas vocales tiene una cadena.
EJEMPLOS Ejemplo 1 #include <stdio.h> #include <string.h> intmain (void){ charnom[20]; int i, vocal=0, tam; printf(“Ingrese su nombre: ”); scanf(“%s”,nom); tam=strlen(nom); for (i=0; i<tam; i++){ if(nom[i]==‘a’||nom[i]==‘e’||nom[i]==‘i’||nom[i]==‘o’||nom[i]==‘u’) vocal++; } printf(“El numero de vocales es: %d\n”,vocal) return 0; }
CADENAS DE CARACTERES Ejemplo 2 • Escribir un programa en C que lea una secuencia de caracteres ASCII y que escriba este mensaje codificado. Si el carácter es una letra o dígito, será reemplazado por el siguiente carácter en el conjunto de caracteres, excepto Z que será reemplazado por A, z por a y 9 por 0. Por tanto, 1 se transforma en 2, C en D, p en q, etc. Cualquier carácter que no sea letra o dígito será reemplazado por un punto (.).
#include <stdio.h> #define MAXCAR 60 voidmain() { charLIN[MAXCAR], LOUT [MAXCAR]; int i; puts("INGRESE TEXTO A CODIFICAR: \n"); gets(LIN); puts("EL TEXTO CODIFICADO ES: \n"); for (i= 0; LIN[i] != '\0'; i++) { if (((LIN[i] >='0')&&(LIN[i] < '9'))||((LIN[i] >='A‘)&&(LIN[i] < 'Z'))|| ((LIN[i] >='a') && (LIN[i] < 'z'))) { LOUT[i]= LIN[i] + 1; } elseif (LIN[i] == '9') LOUT[i]='0'; elseif (LIN[i] == 'Z') LOUT[i]='A'; elseif (LIN[i] == 'z') LOUT[i]='a'; else LOUT[i]='.'; putchar(LOUT[i]); } putchar('\n'); } CADENAS DE CARACTERES Ejemplo 2
EJEMPLOS Ejemplo 3 • Crear un programa que invierta un nombre.
EJEMPLOS #include <stdio.h> //#include <string.h> intmain (void){ charnombre[20]; charinvertido[20]; int i, j, largo=0; printf(“Ingrese su nombre: ”); scanf(“%s”,nombre); //largo=strlen(nombre); for (i=0; nombre[i]!=‘\0’; i++){ largo++; } for (i=0,j=largo-1; j>=0; j--, i++){ invertido[i]= nombre[j]; } printf(“El nombre invertido es: %s\n”) return 0; }
AGENDA 2 3 1 2 Funciones y arreglos Ejemplo repaso arreglos Arreglos multidimensionales Arreglos multidimensionales
ARREGLOS MULTIDIM ArreglosMultidimensionales • Es posible crear arrays de tantas dimensiones como requieran sus aplicaciones. • Se declaran siguiendo el patrón de la declaración de un vector: tipo nombre [d1] [d2] [d3]… [dN];
ARREGLOS MULTIDIMENSIONALES Arreglos de 2 Dimensiones • Declaración • Ejemplo: tipo nombre [fila] [columna]; intA[2] [3]; Nombre A[0][0] A[0][1] A[0][2] Filas = 2 A[1][1] A[1][0] A[1][2] Columnas = 3
Representación en memoria Realmente todo arreglo de mas de una dimensión queda representado en memoria simplemente como un vector de 1 sola dimensión A[0][2] A[0][0] A[0][1] A[1][2] A[1][0] A[1][1] A[0][0] A[0][1] A[0][2] A[1][0] A[1][1] A[1][2]
ARREGLOS MULTIDIMENSIONALES Inicialización Fila 0 Fila 1 intmatrizA [2] [3] = { {3,5,7} , {8,6,4} }; A[0][0] A[0][1] A[0][2] 3 5 7 A[1][0] A[1][1] A[1][2] 8 6 4 intmatrizA [2] [3] = { {3,5,7} , {8,6,4} }; intmatrizA [2] [3] = { 3,5,7,8,6,4 };
Arreglos de 3 Dimensiones tipo nombre [fila] [columna] [Plano]; • Declaración IntmatrizB[2] [3] [3]; B[0][1][2] B[0][2][2] B[0][0][2] Planos = 3 B[0][1][1] B[0][2][1] B[0][0][1] B[1][2][2] B[1][0][1] B[1][1][1] Nombre B[0][1][0] B[0][2][0] B[0][0][0] B[1][2][1] B[1][0][1] B[1][1][1] Filas = 2 B[1][2][0] B[1][0][0] B[1][1][0] Columnas = 3
Arreglos de 3 Dimensiones Fila 0 Fila 1 Plano 0 • intmatrizA [2] [3] [3]={ {{1,3,5}, {7,9,11}}, • {{2,4,6}, {8,10,12}}, • {{3,7,11}, {15,19,23}} }; Plano 1 Plano 2 Plano 0 Plano 1 Plano 2 F0 1 3 5 2 4 6 3 7 11 F1 7 9 11 8 12 15 19 23 10 C0 C1 C2 C0 C0 C1 C2 C1 C2
ARREGLOS MULTIDIMENSIONALES Ejercicios Crear programa que llene una matriz de un tamaño fijo. Los valores se le piden al usuario. Columnas (j) Filas(i) Programa que suma los elementos de las filas de una Matriz Programa que suma los elementos de las Columnas de una Matriz
ARREGLOS MULTIDIMENSIONALES EJEMPLO: Crear un programa que verifique que una matriz de 5x5 enteros es una matriz identidad. Columnas (j) Posición??? [1][2] i = 1, j = 2 Filas (i)
ARREGLOS MULTIDIMENSIONALES #include <stdio.h> #define FILAS 5 #define COLUMNAS 5 intmain (void){ intmatriz [FILAS][COLMUNAS]; int i, j, indent = 1; for(i=0; i < FILAS; i++){ for(j=0; j < COLUMNAS; i++){ printf(“Ingrese el valor: (%d,%d)”, i, j); scanf(“%d”,&matriz [i][j]); } } for(i=0; i < FILAS, ident == 1; i++){ for(j=0; j < COLUMNAS, ident == 1; i++){ if(i==j){ if(matriz [i][j]==1) { indent = 1; } else{ indent = 0;} }else{ if(matriz [i][j]==0) {indent = 1; } else{ indent = 0; } } } } if(ident==1) { printf(“La matriz SI es la Identidad”); } else { printf(“La matriz NO es la Identidad”); } return 0; } Para recorrer la matriz es necesario utilizar dos ciclos. 1. Recorre las filas (externo) 2.Recorre las columnas (interno)
ARREGLOS MULTIDIMENSIONALES Ejercicios: Programa que suma o multiplica dos vectores (verifique que las dimensiones sean correctas). Programa que sume o multiplique dos matrices (Verifique que las dimensiones sean correctas).
AGENDA 2 3 1 3 Funciones y arreglos Ejemplo repaso arreglos Arreglos multidimensionales Funciones y arreglos
FUNCIONES Y ARREGLOS Arreglos como Parámetros a Funciones • Los parámetros se le pasan a una función: • El paso de parámetros porvalorsignifica que la función solo esta recibiendo el valor de la variable. Se le realiza una copia en otro lugar de memoria. • En el paso de parámetros por referencia, se le pasa la dirección de la variable, esto significa que la función tiene acceso a la variable original.
FUNCIONES Y ARREGLOS Arreglos como Parámetros a Funciones • En C todos los arraysse pasan por REFERENCIA(dirección). Esto significa que cuando se llama a una función y se utiliza un array como parámetro la función accede a los valores del arreglo original. tipoRetornofuncion (tipoDatovector[]); tipoRetornofuncion (tipoDatomatriz[][SIZE]);
FUNCIONES Y ARREGLOS Arreglos como Parámetros a Funciones Siempre que tengamosunarray como parámetro a una función, éstadebe saber hasta donde vael arreglo, ya que se le está pasandoel inicio del arreglo. Generalmente se envia eltamañodel arreglo. tipoRetornofuncion(tipoDatovector[], intfila); tipoRetornofuncion(tipoDatomatriz[][colum] , intfila);
FUNCIONES Y ARREGLOS Tener en cuenta… • Cuando se utiliza una variable array como argumento, la función receptora puede no conocer cuántos elementos existen en el array. Sin su conocimiento una función no puede utilizar el array. • Aunque la variable array puede apuntar al comienzo de él, no proporciona ninguna indicación de donde termina el array
FUNCIONES Y ARREGLOS Arrays como Parámetros a Funciones • 1.Situar un valor de señal al final del array, que indique a la función hasta donde va el arreglo; • 2.Pasarle un segundo argumento que indica el número de elementos del array. tipoRetornofuncion (tipoDatovector[]); funcion (nombreVector); tipoRetornofuncion (tipoDatovector[], intsize); funcion (nombreVector, tamaño);
FUNCIONES Y ARREGLOS Ejemplo Programa que sume los elementos de un arreglo. UtliceunaFunción que lleve a cabo la suma
#include <stdio.h> voidleerDatos (intvect [], intsize); intsumarDatos (intvect [], intsize); intmain (void){ intdatos [5]; int suma; leerDatos (datos, 5); suma = sumarDatos (datos, 5); printf(“La suma de los datos es: %d\n”, suma); return 0; } voidleerDatos (intvect[ ], intsize) { int i; for(i=0; i < size; i++){ printf(“Ingrese el valor: (%d)”, i); scanf(“%d”, &vect [i]); } } intsumarDatos (intvect[ ], intsize) { int i, acum=0; for(i=0; i < size; i++){ acum = acum + vect [i]; } returnacum; } FUNCIONES Y ARREGLOS Prototipo Main Función 1 Función 2
Arreglos Ordenación de Vectores • Una tarea muy importante en los sistemas de computo es la ordenación de datos - Numericos, caracteres. (BASES DE DATOS). 90 34 17 12 6 5 5 6 12 17 34 90 12 6 5 17 90 34
Arreglos Ordenación de Vectores Ejercicio: Realizar un programa para ordenar en forma ascendente un vector dado. 5 6 12 17 34 90 12 6 5 17 90 34 BUSCAR: Existen numerosos algoritmos de ordenación de arrays: inserción, burbuja, selección, rápido (quicksort), fusión (merge), montículo (heap), shell, etc.
Arreglos Ejercicios Programa que convierte una matriz en su transpuesta. • Programa que permita visualizar el triángulo de Pascal: • 1 • 1 2 1 • 1 3 3 1 • 1 4 6 4 1 • 1 5 10 10 5 1 • 1 6 15 20 15 6 1
Bibliografía • Joyanes Aguilar, Luis. PROGRAMACIÓN EN C. Metodología, algoritmos y estructura de datos Capitulo8. • Google