1 / 38

Capitulo 4

Capitulo 4. Arreglos o Arrays Unidimensionales Bidimensionales Strings Ordenamiento Bubble Sort. Arreglos - Arrays. Supongan que tenemos 10 variables: a; b; c; d; e; f; g; h; i; j Si se desea manipular las variables debemos poner sus nombres cada vez que se requiera.

lloyd
Download Presentation

Capitulo 4

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Capitulo 4 Arreglos o Arrays Unidimensionales Bidimensionales Strings Ordenamiento Bubble Sort

  2. Arreglos - Arrays • Supongan que tenemos 10 variables: a; b; c; d; e; f; g; h; i; j • Si se desea manipular las variables debemos poner sus nombres cada vez que se requiera. • Un enfoque más general es utilizar las variables con el mismo nombre, pero diferenciándolas con un numero. • Semejante a como los libros de matemáticas utilizan los vectores y las tuplas. a1; a2; a3; a4; a5; a6; a7; a8; a9; a10

  3. Arreglos - Arrays • Ahora sumar las variables, es mucho más fácil:

  4. Arreglos - Arrays • Suponer que se quieren leer 5000 enteros y hacer algún tipo de operación con ellos • Con los contenidos que conocemos(¿?) hasta ahora necesitamos utilizar 5000 variables. • Problemas: • De comprensión en la codificación. • De utilización de memoria. • La solución es utilizar ARREGLOS o ARRAYS.

  5. Arreglos - Arrays • Los arreglos son conjuntos de variables que comparten un mismo nombre, permiten almacenar una colección de datos del mismo tipo. • Pueden ser referenciadas de manera individual con ayuda de uno o más índices. • Los arreglos en C, se almacenan en posiciones contiguas de memoria y tienen un tamaño definido en tiempo de compilación. • Tenemos según su dimensionalidad: • Unidimensionales (Ej. Vector Matemático). • Bidimensionales (Ej. Matriz). • Tridimensional (Ej. Cubo). • Multidimensionales.

  6. Ejemplos UNIDIMENSIONAL BIDIMENSIONAL TRIDIMENSIONAL

  7. Ejemplos // Enteros tamaño 4 int numeros [ ] = { 2, 0, 0, 7 }; //arreglo de caracteres de tamaño 5 char alfabeto [ 5 ] = { 'A', 'B', 'C', 'D', 'E' }; //5 filas y columnas a lo mas de 40 caracteres. char nombres [ ][ 40 ] = { “francisco”, “sebastian", “daniela”,“liliana”, “alfonso” }; //arreglo bidimensional de enteros int coordenadas [ 2 ][ 2 ] = { { 0, 0 }, { 1, 1 } };

  8. Observación • En C los índices de los arreglos comienzan en cero. El primer elemento, es el elemento cero. • Todos los elementos son del mismo tipo. • Se debe conocer el largo del arreglo en tiempo de compilación.

  9. Arreglos Unidimensionales • Es una lista o vector. • Declaración • Tipo_dato nom_arreglo [ tamaño ]; • Tipo_dato: de que tipo serán los elementos. • Recordar que todos los elementos son del mismo tipo • nom_arreglo: nombre para la variable tipo arreglos . • [ ]: nos indica que su dimensionalidad es uno • tamaño: la cantidad de elementos que a los más podrá contener el arreglo.

  10. Accediendo los elementos • Un elemento individual dentro de un arreglo es accedido por el uso de un índice. Un índice describe la posición de un elemento dentro de un arreglo. Recordar en C el primer elemento tiene el índice cero!

  11. Ejemplo #include <stdio.h> int main ( ) { int muestra [ 10 ], t; for ( t = 0; t < 10; t ++ ) muestra [ t ] = t * t; for ( t = 0; t < 10; t ++ ) printf ( "muestra [ %d ] = %d", t, muestra [ t ] ); return ( 0 ); }

  12. Trabajando con Arreglos No se puede asignar un arreglo a otro Lo siguiente es ilegal: int a [ 10 ], b [ 10 ]; a = b; //error ilegal En vez, se debe hacer asignaciones por cada elemento : int i; for ( i = 0; i < 10; i ++ ) a [ i ] = b [ i ]; //mas adelante strcpy

  13. Ejemplos 1.- Realizar un programa en el que se ingresen 10 enteros, y luego muestre la suma de ellos y su promedio. 2.- Encontrar el máximo de una lista de 10 elementos. 3.- Desarrolle un programa que calcule el promedio de las notas de un curso.

  14. Solución 1 #include<stdio.h> int main() { int i, max = 0; int list [ 100 ]; for ( i = 0; i < 100 ; i ++ ) list [ i ] = rand ( ); for ( i = 0 ; i < 100; i ++ ) if ( max < list [ i ] ) max = list [ i ]; printf ( "max = %d", max ); return ( 0 ); }

  15. Solución 2 #include <stdio.h> int main() { int x [ 10 ]; int i, suma; printf ( "\n Ingrese 10 números:\n“ ); for ( i = 0; i < 10; i ++ ) scanf ("%d",&x[ i ] ); //lleva & pq es componente a componente suma = 0; for ( i = 0; i < 10; i ++ ) suma += x [ i ]; printf ("\n El resultado de la suma es = %d ", suma ); printf ("\n El resultado del promedio es = %d ", suma / 10 ); return ( 0 ); }

  16. Arreglos Bidimensionales • Un arreglo bidimensional es una lista de arreglos unidimensional • Para declarar un arreglo bidimensional de enteros int matriz[3][4];

  17. Ejemplo #include<stdio.h> int main ( ) { int fila = 3,col = 4,matriz [ fila ][ col ]; for ( fila = 0; fila < 3; fila ++ ) for ( col = 0; col < 4; col ++ ) matriz [ fila ][ col ] = fila * col; return ( 0 ); }

  18. Arreglos Bidimensionales • Por ejemplo: Cada alumno tiene tres notas, una por cada certamen. • Entonces las notas de un alumno pueden contenerse en un arreglo de tamaño tres. • Ahora si queremos mantener las notas de un curso de 52 alumnos. • Podemos mantener las notas en un arreglo de 52 arreglos de tamaño 3.

  19. Notas del curso #include<stdio.h> #define alumnos 52 #define notas 3 int main ( ) { int curso [ alumnos ][ notas ], fila, col; for ( fila = 0; fila < alumnos; fila ++ ) for ( col = 0; col < notas; col ++ ) scanf ( "%d“, &curso [ fila ][ col ] ); return ( 0 ); } • Con lo cual curso [ 10, 2 ] representa la nota del tercer certamen del onceavo alumno.

  20. Ejemplo • Desarrolle un programa que reciba como entrada las notas de cada pregunta del certamen 1 de programación, para todos los alumnos, y muestre como salida un resumen con las notas finales de todos los alumnos

  21. Multidimensionales • No existe un limite lógico definido para la cantidad de dimensiones que puede tener un arreglo, físico sí, la memoria reservada. • C permite arreglos con mas de dos dimensiones • La forma general de una declaración de arreglo es • tipo nombre_var[tamaño1][tamaño2]…[tamañoN] int a = 3, b = 4, c = 5, i , j , k , arr [ a ][ b ][ c ]; for ( i = 0; i < a; i ++) for ( j = 0; j < b; j ++ ) for ( k = 0; k < c; k ++ ) arr [ i ][ j ][ k ] = i + j + k;

  22. String • El uso más común para un arreglo unidimensional es guardar un arreglo de caracteres. Un string esta definido como un arreglo de caracteres terminado por un símbolo null ('\0'). • Para que un arreglo contenga un string de 10 caracteres, es necesario definirlo de largo 11, ya que 11 hace lugar para el null al final del string.

  23. String • Definición • char cadena[tamaño]; • Asignación carácter a carácter cadena[0]='h'; cadena[1]='o'; cadena[2]='l'; cadena[3]='a'; cadena[4]='\0';

  24. String • Inicialización: Se copia directamente en el array todos los caracteres y se incluye automáticamente el carácter '\0' cadena="hola"; • Para asignar un carácter a un char se utiliza la comilla simple • 'a' carácter con comilla simple • "ab“ una string, arreglo de caracteres

  25. Ejemplo #include <stdio.h> int main ( ) { char str [ 80 ]; printf ( "escribir string“ ); scanf ( "%s", str ); //no lleva & return ( 0 ); } /* Lee un string hasta que encuentra un espacio vacío */

  26. Ejemplo #include <stdio.h> int main ( ) { char str [ 80 ]; printf ( "escribir string“ ); gets ( str ); //con espacios return ( 0 ); }

  27. String • La librería string.h, permite hacer operaciones con string. Los más usados son: • strcpy ( ) : copia caracteres de un string a otro. • strcat ( ) : concatenación de strings. • strlen ( ) : largo del string. • strcmp ( ) : comparación de strings.

  28. Ejemplo • Sean s1 y s2 string de largo fijo: • strcpy ( s1, s2 ) copia s2 en s1 y devuelve s1. • strcat ( s1, s2 ) concatena s2 en s1, retorna s1. • strlen ( s1 ) devuelve el la longitud de s1. • strcmp ( s1, s2 ) compara s1 con s2: • Si son iguales devuelve 0 • si s1>s2 devuelve un nº >0 • si s1<s2 devuelve un nº <0

  29. Ejemplo #include <stdio.h> #include <string.h> int main ( ) { char s [ 10 ], c [ 10 ] = { “iwi131“ }; do { printf ( "ingrese su clave "); scanf ( "%s",s); if ( strcmp ( s, c ) != 0 ) printf ( "clave incorrecta, intente nuevamente\n“ ); } while ( strcmp ( s, c ) != 0 ); printf ( "la clave es correcta\n“ ); return ( 0 ); }

  30. Ejemplo #include <string.h> #include <stdio.h> int main ( void ) { char c1 [ 80 ], c2 [ 80 ]; printf ( “\n Ingrese una cadena de caracteres:“ ); scanf ( "%s", c1 ); printf ( "\n Ingrese una cadena de caracteres:“ ); scanf ( "%s", c2 ); printf ( "\n Longitudes: %d %d ", strlen ( c1 ), strlen ( c2 ) ); if ( ! strcmp ( c1, c2 ) ) printf ( "\nLas cadenas son iguales“ ); strcat ( c1, c2 ); printf ( "\n %s", c1 ); return ( 0 ); }

  31. String.h

  32. Ejercicio • Realizar un programa que convierta un string a mayúscula y contar número de dígitos.

  33. Bonus: Cadenas Inmutables • Las cadenas inmutables se declaran como un puntero a un char, representan un string constante y no requieren saber su largo. • Inicializando • char X [ 10 ] = { "hola“ }; • char * Y = "chao"; // En profundidad en Estructura de datos • Asignando • char X [ 10 ]; • char * Y; // En profundidad Est de datos • strcpy ( X, "hola“ ); // X="hola" es un error • Y = "chao“; // En profundidad Est de datos

  34. Ordenamiento Burbuja • Existen numerosos algoritmos para ordenar. A continuación se verá Ordenamiento Burbuja (bublesort). • Idea: vamos comparando elementos adyacentes y empujamos los valores más livianos hacia arriba (los más pesados van quedando abajo). • Idea de la burbuja que asciende, por lo liviana que es.

  35. Ordenamiento Burbuja Código • for ( i = N - 1; i > 0; i -- ) for ( j = 0; j < i; j ++ ) if ( V [ j ] > V [ j + 1 ] ) //lo siguiente se conoce { tmp = *f; //como swap de variables *f = *g; *g = tmp; }

  36. Ordenamiento Burbuja

  37. Ordenamiento Burbuja Código #include <stdio.h> #define N 6 void intercambia ( int * f, int * g ) { int tmp; tmp = *f; *f = *g; *g = tmp; } int main ( ) { int i, j, v [ N ] = { 3, 4, 5, 2, 6, 8 }; for ( i = N - 1; i > 1; i -- ) for ( j = 0; j < i; j ++ ) if ( v [ j ] > v [ j + 1 ] ) intercambia ( &v [ j ], &v [ j + 1 ] ); for ( i = 0; i < N; i ++ ) printf ( "%d\n", v [ i ] ); return ( 0 ); }

  38. Fin Preparando la revancha …

More Related