Download - Capitulo 4
![Page 1: Capitulo 4](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/6.jpg)
Programación de Computadores IWI-131Programación de Computadores IWI-131
EjemplosEjemplos
UNIDIMENSIONAL
BIDIMENSIONAL
TRIDIMENSIONAL
![Page 7: Capitulo 4](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/29.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/30.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/31.jpg)
Programación de Computadores IWI-131Programación de Computadores IWI-131
String.h String.h
![Page 32: Capitulo 4](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/32.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/33.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/34.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/35.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/36.jpg)
Programación de Computadores IWI-131Programación de Computadores IWI-131
Ordenamiento BurbujaOrdenamiento Burbuja
![Page 37: Capitulo 4](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/37.jpg)
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](https://reader033.vdocuments.co/reader033/viewer/2022051417/56814863550346895db56fdb/html5/thumbnails/38.jpg)
Departamento de InformáticaDepartamento de InformáticaUniversidad Técnica Federico Santa MaríaUniversidad Técnica Federico Santa María
FinFin
Preparando la revancha …