La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Capitulo 4 Arreglos o Arrays Unidimensionales Bidimensionales Strings

Presentaciones similares


Presentación del tema: "Capitulo 4 Arreglos o Arrays Unidimensionales Bidimensionales Strings"— Transcripción de la presentación:

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 #include <stdio.h> int main ( ) {
Ejemplo #include <stdio.h> int main ( ) { int muestra [ 10 ], t; for ( t = 0; t < 10; t ++ ) muestra [ t ] = t * 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; 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 #include<stdio.h> int main ( ) {
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 Asignación carácter a carácter
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 Para asignar un carácter a un char se utiliza la comilla simple
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 #include <stdio.h> int main ( ) {
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 Preparando la revancha …
Fin Preparando la revancha …


Descargar ppt "Capitulo 4 Arreglos o Arrays Unidimensionales Bidimensionales Strings"

Presentaciones similares


Anuncios Google