Capitulo 4

38
Departamento de Informática Departamento de Informática Universidad Técnica Federico Santa María Universidad Técnica Federico Santa María Capitulo 4 Capitulo 4 Arreglos o Arrays •Unidimensionales •Bidimensionales •Strings •Ordenamiento Bubble Sort

description

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. - PowerPoint PPT Presentation

Transcript of Capitulo 4

Page 1: Capitulo 4

Departamento de InformáticaDepartamento de InformáticaUniversidad Técnica Federico Santa MaríaUniversidad Técnica Federico Santa María

Capitulo 4Capitulo 4

Arreglos o Arrays•Unidimensionales•Bidimensionales•Strings•Ordenamiento Bubble Sort

Page 2: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

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

Page 3: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

Arreglos - Arrays

• Ahora sumar las variables, es mucho más fácil:

Page 4: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

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.

Page 5: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

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.

Page 6: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

EjemplosEjemplos

UNIDIMENSIONAL

BIDIMENSIONAL

TRIDIMENSIONAL

Page 7: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

EjemplosEjemplos

// 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 } };

Page 8: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

ObservaciónObservació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.

Page 9: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

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.

Page 10: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

Accediendo los elementosAccediendo 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!

Page 11: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

EjemploEjemplo

#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 );

}

Page 12: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

Trabajando con ArreglosTrabajando 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

Page 13: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

EjemplosEjemplos

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.

Page 14: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

Solución 1 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 );

}

Page 15: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

Solución 2Solució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 );

}

Page 16: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

Arreglos Bidimensionales

• Un arreglo bidimensional es una lista de arreglos unidimensional

• Para declarar un arreglo bidimensional de enteros int matriz[3][4];

Page 17: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

EjemploEjemplo

#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 );

}

Page 18: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

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.

Page 19: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

Notas del curso

#include<stdio.h> #define alumnos 52#define notas 3int 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.

Page 20: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

EjemploEjemplo

• 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

Page 21: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

MultidimensionalesMultidimensionales

• 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;

Page 22: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

StringString

• 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.

Page 23: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

StringString

• Definición– char cadena[tamaño];

• Asignación carácter a caráctercadena[0]='h';

cadena[1]='o';

cadena[2]='l';

cadena[3]='a';

cadena[4]='\0';

Page 24: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

StringString

• 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

Page 25: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

EjemploEjemplo

#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 */

Page 26: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

EjemploEjemplo

#include <stdio.h>

int main ( )

{ char str [ 80 ];

printf ( "escribir string“ );

gets ( str ); //con espacios

return ( 0 );

}

Page 27: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

StringString

• 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.

Page 28: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

EjemploEjemplo

• 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

Page 29: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

EjemploEjemplo

#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 );

}

Page 30: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

EjemploEjemplo

#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 );

}

Page 31: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

String.h String.h

Page 32: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

EjercicioEjercicio

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

Page 33: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

Bonus: Cadenas Inmutables 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

Page 34: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

Ordenamiento BurbujaOrdenamiento 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.

Page 35: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

Ordenamiento Burbuja CódigoOrdenamiento 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;

}

Page 36: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

Ordenamiento BurbujaOrdenamiento Burbuja

Page 37: Capitulo 4

Programación de Computadores IWI-131Programación de Computadores IWI-131

Ordenamiento Burbuja CódigoOrdenamiento 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 ); }

Page 38: Capitulo 4

Departamento de InformáticaDepartamento de InformáticaUniversidad Técnica Federico Santa MaríaUniversidad Técnica Federico Santa María

FinFin

Preparando la revancha …