Lenguaje C

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 30

Lenguaje C

Semana 6

Clase 09
Agenda
1 Memoria 2 Arreglos

3 Caracteres
★ En C, tenemos diferentes tipos de variables que podemos usar
para almacenar datos. Cada variable se almacena con un número
fijo de bytes y cada tipo tiene el siguiente tamaño:

Tipo Tamaño
bool 1 byte

char 1 byte

double 8 bytes

float 4 bytes

int 4 bytes

long 8 bytes

string ? bytes
★ Dentro de nuestras computadoras, tenemos chips llamados RAM ó
memoria de acceso aleatorio, que almacenan ceros y unos.
Podemos pensar en los bytes almacenados en la RAM como si
estuvieran en una cuadrícula, uno tras otro:
★ En realidad, hay millones o miles de millones de bytes por chip.

★ Un char, que ocupa un byte ocupará uno de esos cuadrados en la


RAM. Un int, con 4 bytes, ocupará cuatro de esos cuadrados.

★ Ahora, podemos dar por sentado que los bytes se almacenan en la


memoria, y que podemos trabajar con ellos y construir
abstracciones sobre ellos.
Arreglos
★ Digamos que queremos tomar el promedio de tres variables:
★ Cuando compilamos este programa, obtenemos:

★ Resulta que, dividir tres enteros por otro entero dará como
resultado un entero, y el residuo de la división se eliminará.
★ El diseño del programa no es el ideal, solo tenemos tres variables y
tendríamos que definir más variables para guardar más valores.

★ Mientras nuestro programa se está ejecutando, las tres variables de


tipo entero se almacenan en la memoria:
★ Resulta que podemos referirnos a múltiples variables con un solo
nombre usando una matriz. Con una matriz, podemos almacenar
valores del mismo tipo de manera consecutiva.

★ Por ejemplo, en nuestro programa anterior, podemos usar int


scores[3]; para declarar una matriz de tres enteros en lugar de usar 3
variables.
Los arreglos son una estructura de datos fundamental y son
extremadamente útiles. Utilizamos los arreglos para guardar valores de
un mismo tipo en espacios continuos de memoria.

[ , , , ]
Los datos de un arreglo son comúnmente llamados “elementos”
y se enumeran consecutivamente 0, 1, 2,... etc.

[ 0
,
1
,
2
,
3
]
¡Esta es una de las razones principales por las que comenzamos
a contar desde 0!
★ La numeración de los elementos se denomina índice o subíndice de
un arreglo y sólo determina la posición del elemento dentro del
arreglo y no su valor o contenido.

★ Si un arreglo contiene n elementos, el primer elemento está


localizado en el índice 0. El último elemento está localizado en el
índice (n-1).
★ Actualicemos nuestro programa para usar una matriz:
★ Veamos el ejemplo anterior como un casillero en donde podemos
almacenar “cosas” de un mismo tipo que tendrá un espacio
disponible y para acceder especificamos su índice.

72 73 33
0 1 2
★ Le preguntaremos al usuario por cada puntuación:
★ El diseño de nuestro programa podría mejorarse, ya que vemos tres
líneas que son muy similares, emitiendo una “hediondez del código”
que indica que podríamos mejorarlo de alguna manera.

★ Dado que podemos establecer y acceder a elementos en una matriz


en función de su posición, y esa posición también puede ser el valor
de alguna variable, podemos usar un bucle for:
★ Ahora, en lugar de establecer cada valor, usamos un bucle for y
usamos i como índice de cada elemento de la matriz
★ Podemos asignar una variable n, para el número de puntuaciones:
Arreglos Bidimensionales

★ Hasta ahora las cosas son un poco sencillas, ya que solo hemos visto
arreglos unidimensionales, pero resulta que en C también podemos
tener arreglos bidimensionales.
★ Estos arreglos contienen 2 dimensiones, siendo conocidos
comúnmente como matrices.

★ Por lo tanto estos arreglos tienen más de un subíndice. Su


declaración sería:

tipo nombre [número de filas] [número de columnas];

int matriz[5][6];
★ De una forma gráfica:

Índice 0.0 0.1 0.2

Valor 73 89 10

1.0 1.1 1.2 Índice

13 91 30 Valor
Inicialización de un arreglo bidimensional
int matriz[3][4] = {{10,20,30,110,
{40,50,60,101},
{70,80,90,100}};

Para poder leer o escribir en toda una matriz es necesario


recorrer la misma, para recorrerla es casi igual que como
hicimos con el arreglo unidimensional.
¿Cuál es la diferencia?

La necesidad de al menos dos ciclos, uno para las filas y


otro para las columnas.
//Recorremos e imprimimos el contenido de un arreglo
void recorrer_arreglo(int arreglo[4])
{
for(int i = 0; i < 4; i++)
{
printf(“arreglo[%d] = %d \n”,i,arreglo[i]);
}
}
//Recorremos e imprimimos el contenido de una matriz
void recorrer_matriz(int matriz[3][3])
{
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
printf(“matriz[%d][%d] = %d \n”, i, j, matriz[i][j]);
}
}
}
Caracteres
★ Podríamos tener tres caracteres si queremos imprimir lo siguiente:
★ Veamos qué pasa si cambiamos nuestro programa para que imprima
cómo un entero:
★ Resulta que el printf puede imprimir chars cómo enteros, cada
carácter está almacenado cómo un valor ASCII con ceros y unos.

★ También podemos convertir chars a ints con:


¿Preguntas?

También podría gustarte