Programación estructurada

Arreglos

Arreglos

#include <stdio.h>

#define NUMERO_DE_ELEMENTOS 3

int main()
{
	int numeros[3]= {};

	numeros[0]=5;
	numeros[1]=10;
	numeros[2]=20;

	printf("%d\n", numeros[0]);
	printf("%d\n", numeros[1]);
	printf("%d\n", numeros[2]);
	printf("%d\n", numeros[3]);

	return 0;
}

Un arreglo es una estructura de datos que almacena una lista de valores de un mismo tipo

 

En el caso de C, es necesario declarar la cantidad de elementos a almacenar cuando inicializamos un arreglo

 

Esta cantidad de elementos es lo que conocemos como tamaño, o longitud, del arreglo

Arreglos

#include <stdio.h>

#define NUMERO_DE_ELEMENTOS 3

int main()
{
	int numeros[3]= {};

	numeros[0]=5;
	numeros[1]=10;
	numeros[2]=20;

	printf("%lu", sizeof(numeros));

	return 0;
}

Para determinar el tamaño en memoria de un arreglo, utilizamos la función sizeof que regresa un valor entero largo sin signo

Arreglos

#include <stdio.h>

#define NUMERO_DE_ELEMENTOS 3

int main()
{
	int numeros[3]= {};

	numeros[0]=5;
	numeros[1]=10;
	numeros[2]=20;

	printf("%lu", sizeof(numeros));

	return 0;
}

Para determinar el tamaño en memoria de un arreglo, utilizamos la función sizeof que regresa un valor entero largo sin signo

¿Cómo hacemos, entonces, para encontrar la longitud del arreglo?

Arreglos

#include <stdio.h>

#define NUMERO_DE_ELEMENTOS 3

int main()
{
	int numeros[3]= {};

	numeros[0]=5;
	numeros[1]=10;
	numeros[2]=20;

	printf("%lu", sizeof(numeros)/sizeof(numeros[0]));

	return 0;
}

Para determinar el tamaño en memoria de un arreglo, utilizamos la función sizeof que regresa un valor entero largo sin signo

¿Cómo hacemos, entonces, para encontrar la longitud del arreglo?

Para encontrar la longitud de un arreglo basta con dividir su tamaño en memoria entre el tamaño en memoria de cualquiera de los elementos que lo conforman

Arreglos

#include <stdio.h>

#define NUMERO_DE_ELEMENTOS 3

int main()
{
	int numeros[]= {5,10,15};

	printf("%d\n", numeros[0]);
	printf("%d\n", numeros[1]);
	printf("%d\n", numeros[2]);

	return 0;
}

También podemos especificar los valores del arreglo desde que lo inicializamos

Arreglos

#include <stdio.h>

#define NUMERO_DE_ELEMENTOS 3

int main()
{
	int numeros[]= {5,10,15};

	printf("%d\n", numeros[0]);
	printf("%d\n", numeros[1]);
	printf("%d\n", numeros[2]);

	return 0;
}

También podemos especificar los valores del arreglo desde que lo inicializamos

Una vez creado el arreglo es posible modificar su tamaño solicitando directamente al procesador que ajuste el tamaño de memoria necesario para acomodar el nuevo tamaño del arreglo

Arreglos

#include <stdio.h>

#define NUMERO_DE_ELEMENTOS 10

int main()
{
	int numeros[]= {2,3,5,7,11,13,18,19,23,29};
	long unsigned n = sizeof(numeros)/sizeof(numeros[0]);
	int i=0;

	printf("El arreglo tiene %lu elementos\n\n", n);
	for (i=0; i<n; i++)
	{
		printf("El valor del elemento en el offset %i es: %d\n", i,numeros[i]);
	}

	return 0;
}

¿Cuál es el valor incorrecto en la secuencia numérica que se muestra en el ejemplo y cómo lo corregirías?

Arreglos

#include <stdio.h>

#define NUMERO_DE_ELEMENTOS 10

int main()
{
	int numeros[]= {2,3,5,7,11,13,18,19,23,29};
	long unsigned n = sizeof(numeros)/sizeof(numeros[0]);
	int i=0;

	numeros[6]=17;

	printf("El arreglo tiene %lu elementos\n\n", n);
	for (i=0; i<n; i++)
	{
		printf("El valor del elemento en el offset %i es: %d\n", i,numeros[i]);
	}

	return 0;
}

¿Cuál es el valor incorrecto en la secuencia numérica que se muestra en el ejemplo y cómo lo corregirías?

Siempre podemos modificar el valor de cualquier elemento de un arreglo siempre que conozcamos su índice

Arreglos

#include <stdio.h>

#define NUMERO_DE_ELEMENTOS 10

int main()
{
	int matriz[2][3]= {{1,2,3},{4,5,6}};
	long unsigned m = sizeof(matriz)/sizeof(matriz[0]);
	long unsigned n = sizeof(matriz[0])/sizeof(matriz[0][0]);
	int i=0;
	int j=0;


	printf("La matriz tiene %lu filas\n\n", m);
	for (i=0; i<m; i++)
	{
		printf("La fila %d tiene %lu columnas\n", i, n);

		for (j=0; j<n; j++)
		{
			printf("El valor del elemento en la posiciC3n matriz[%d,%d] es: %d\n", i,j,matriz[i][j]);
		}
		printf("\n");
	}

	return 0;
}

También podemos tener arreglos de más de una dimensión

 

La forma más simple de pensar en arreglos multidimensionales es como si fueran arreglos cuyos elementos son, a su vez, arreglos

Arreglos

#include <stdio.h>

#define NUMERO_DE_ELEMENTOS 10

int main()
{
	int matriz[2][2][4]= {{{1,2,3,4},{5,6,7,8}},{{9,10,11,12},{13,14,15,16}}};
	long unsigned m = sizeof(matriz)/sizeof(matriz[0]);
	long unsigned n = sizeof(matriz[0])/sizeof(matriz[0][0]);
	long unsigned o = sizeof(matriz[0][0])/sizeof(matriz[0][0][0]);
	int i=0;
	int j=0;
	int k=0;


	for (i=0; i<m; i++)
	{
		for (j=0; j<n; j++)
		{
			for (k=0; k<o; k++)
			{
				printf("El valor del elemento en la posición matriz[%d,%d,%d] es: %d\n", i,j,k,matriz[i][j][k]);
			}
		}
	}

	return 0;
}

También podemos tener arreglos de más de una dimensión

 

La forma más simple de pensar en arreglos multidimensionales es como si fueran arreglos cuyos elementos son, a su vez, arreglos

Podemos seguir extendiendo esa idea hasta llegar a n dimensiones

Cadenas

#include <stdio.h>
#include <string.h>

int main()
{
	char cadena[] = "Hola, mundo";
	int longitud = strlen(cadena);

	printf("%s\n", cadena);
	printf("La cadena tiene una kongitud de %d caracteres", longitud);

	return 0;
}

Una cadena no es otra cosa que un arreglo de caracteres de tipo char

Cadenas

#include <stdio.h>
#include <string.h>

int main()
{
	char cadena[] = {'H','o','l','A',',',' ','m','u','n','d','o','\0'};

	cadena[3]='a';
	printf("%s\n", cadena);

	return 0;
}

Una cadena no es otra cosa que un arreglo de caracteres de tipo char

Lo anterior quiere decir que podemos operar con una cadena (casi) como lo hacíamos con los arreglos...

Cadenas

#include <stdio.h>
#include <string.h>

int main()
{
	char cadena1[50] = "Hola, ";
	char cadena2[] = "mundo";
	char cadena3[50];
	int igual=0;


	strcat(cadena1, cadena2);
	printf("%s\n\n", cadena1);


	strcpy(cadena3, cadena1);
	printf("%s\n\n", cadena3);

	igual=strcmp(cadena1, cadena2);
	printf("La comparaciC3n entre cadena1 y cadena2 es: %d\n\n",igual);

	igual=strcmp(cadena1, cadena3);
	printf("La comparaciC3n entre cadena1 y cadena3 es: %d\n\n",igual);

	return 0;
}

Una cadena no es otra cosa que un arreglo de caracteres de tipo char

Lo anterior quiere decir que podemos operar con una cadena (casi) como lo hacíamos con los arreglos...

... y que podemos usar funciones específicas para cadenas