capitulo 4

Post on 14-Jan-2016

39 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

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

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

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

Arreglos - Arrays

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

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.

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.

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

EjemplosEjemplos

UNIDIMENSIONAL

BIDIMENSIONAL

TRIDIMENSIONAL

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

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.

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.

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!

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

}

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

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.

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

}

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

}

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

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

}

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.

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.

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

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;

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.

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

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

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

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

}

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.

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

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

}

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

}

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

String.h String.h

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.

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

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.

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;

}

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

Ordenamiento BurbujaOrdenamiento Burbuja

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

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

FinFin

Preparando la revancha …

top related