Arrays

Anuncio
Introducción a la
Programación
5. Arrays (tensor, arreglo...) y Funciones
Roberto Marabini — Introduccin a la programacin — ETS – p.1/??
Objetivo de esta clase
Vamos a escribir un programa que genere 10
números aleatorios y los ordene. Para ello haremos uso de una nueva variable denominada
Array
Roberto Marabini — Introduccin a la programacin — ETS – p.2/??
Array
Un array nos facilita trabajar con un conjunto de
variables del mismo tipo. Si se desea trabajat
con cinco enteros unoo puede declararlos directamente:
int a, b, c, d, e;
En teoría se puede hacer lo mismo si se necesitan 1000 pero es más sencillo hacer lo siguiente:
int a[5];
Roberto Marabini — Introduccin a la programacin — ETS – p.3/??
Array
Se puede acceder a cualquiera de los
elementos de un array usando un índice
El indice empieza en 0
Así int a[5] contiene 5 enteros que se
acceden como sigue:
int a[5];
a[0]
a[1]
a[2]
a[3]
a[4]
=
=
=
=
=
12;
9;
14;
5;
1;
Roberto Marabini — Introduccin a la programacin — ETS – p.4/??
Array
Una de las ventajas de usar arrays es que se
pueden inicializar facilmente usando un bucle.
Por ejemplo, para inicializar a[5] a zero:
int a[5];
int i;
for (i=0; i<5; i++)
a[i] = 0;
Roberto Marabini — Introduccin a la programacin — ETS – p.5/??
Array
El programa siguiente inicializa el array al valor del indice
y lo imprime por pantalla (array1.c)
#include <stdio.h>
int main()
{
int a[5];
int i;
for (i=0; i<5; i++){
a[i] = i;
printf("a[%d] = %d\n", i, a[i]);
}
return 0;
}
Roberto Marabini — Introduccin a la programacin — ETS – p.6/??
Rand program
Un ejemplo un poco más complicado del uso de arrays:
#include <stdio.h>
#define MAX 10
long a[MAX];
long rand_seed=11;
int my_rand(){
rand_seed = rand_seed * 1103515245 +12345;
return (unsigned int)(rand_seed / 65536) % 32768;
}
int main(){
long i,t,x,y;
/* fill array */
for (i=0; i < MAX; i++){
a[i]=my_rand();
printf("%d\n",a[i]);
}
/* more stuff will go here in a minute */
return 0;
}
Roberto Marabini — Introduccin a la programacin — ETS – p.7/??
Rand program
La línea #define declara una constante llamada MAX. Los
nombres de constantes se escriben tradicionalmente en
Mayúscula (facilita portabilidad y legibilidad)
#include <stdio.h>
#define MAX 10
long a[MAX];
long rand_seed=11;
int my_rand(){
rand_seed = rand_seed * 1103515245 +12345;
return (unsigned int)(rand_seed / 65536) % 32768;
}
int main(){
long i,t,x,y;
/* fill array */
for (i=0; i < MAX; i++){
a[i]=my_rand();
printf("%d\n",a[i]);
}
/* more stuff will go here in a minute */
Roberto Marabini — Introduccin a la programacin — ETS – p.8/??
return 0;
Rand program
Hay código fuera de main. La línea int my_rand()
declara una función. El programa empieza en main
y al llegar a la línea a[i]=my_rand() ejecuta int
my_rand(){}
#include <stdio.h>
#define MAX 10
long a[MAX];
long rand_seed=11;
int my_rand(){
rand_seed = rand_seed * 1103515245 +12345;
return (unsigned int)(rand_seed / 65536) % 32768;
}
int main(){
long i,t,x,y;
/* fill array */
for (i=0; i < MAX; i++){
a[i]=my_rand(); // LLAMA A LA FUNCION MY_RAND
printf("%d\n",a[i]);
Roberto Marabini — Introduccin a la programacin — ETS – p.9/??
}
/* more stuff will go here in a minute */
Rand program
La línea a[MAX] declara una variable global. Esto, accesible des cualquiera de las funciones
#include <stdio.h>
#define MAX 10
long a[MAX];
long rand_seed=11; // use time
int my_rand(){
rand_seed = rand_seed * 1103515245 +12345;
return (unsigned int)(rand_seed / 65536) % 32768;
}
int main(){
long i,t,x,y;
/* fill array */
for (i=0; i < MAX; i++){
a[i]=my_rand(); // LLAMA A LA FUNCION MY_RAND
printf("%d\n",a[i]);
}
/* more stuff will go here in a minute */
return 0;
Roberto Marabini — Introduccin a la programacin — ETS – p.10/??
}
Rand program
La línea int rand_seed=11 declara otra variable global.
rand_seed es inicializado a 11 cada vez que se ejecuta el
programa.
#include <stdio.h>
#define MAX 10
long a[MAX];
long rand_seed=11; // use time
int my_rand(){
rand_seed = rand_seed * 1103515245 +12345;
return (unsigned int)(rand_seed / 65536) % 32768;
}
int main(){
long i,t,x,y;
/* fill array */
for (i=0; i < MAX; i++){
a[i]=my_rand(); // LLAMA A LA FUNCION MY_RAND
printf("%d\n",a[i]);
}
/* more stuff will go here in a minute */
Roberto Marabini — Introduccin a la programacin — ETS – p.11/??
return 0;
Rand program
main es bastante normal.
Se declaran 4 enteros localmente
Se rellena el array a usando un bucle
a[0] se refiere al primer entero del array, a[1] al segundo, etc.
y como todos recordais /* */ y // son comentarios
more stuff goes here in a minute (rand1.c)
int main(){
long i,t,x,y;
/* fill array */
for (i=0; i < MAX; i++){
a[i]=my_rand(); // LLAMA A LA FUNCION MY_RAND
printf("%d\n",a[i]);
}
/* more stuff will go here in a minute */
return 0;
}
Roberto Marabini — Introduccin a la programacin — ETS – p.12/??
Rand program
Este código ordena los números de menor a mayor.
(rand2.c)
/* bubble sort the array */
for (x=0; x < MAX-1; x++)
for (y=0; y < MAX-x-1; y++)
if (a[y] > a[y+1])
{
t=a[y];
a[y]=a[y+1];
a[y+1]=t;
}
/* print sorted array */
printf("--------------------\n");
for (i=0; i < MAX; i++)
printf("%d\n",a[i]);
Veámoslo en detalle
Roberto Marabini — Introduccin a la programacin — ETS – p.13/??
Ejercicio
Reescribe el programa de forma que bubble
sort the array sea una funcion. poner turboC
Pistas:
La funcion debe declararse como: void
bubble_sort()
Copia entre llaves {} el código
Añade las variables locales necesarias
Roberto Marabini — Introduccin a la programacin — ETS – p.14/??
Erores típicos
C no comprueba si el valor del índice es
válido. Si el índice es ilegal el programa no
funcionará correctamente. array2.c
Cuando llames a una función usa “()” incluso
aunque no haya que pasar parámetros. C
aceptará a[i]=rand; pero no llamara a la
función sino que almacenará el valor del
puntero a la función en a[i].funcion.c
Roberto Marabini — Introduccin a la programacin — ETS – p.15/??
Resumen de Arrays
arrayplu.c
int a[5];
int a[]={2,3,4,5,6};
a[i], 0<=i<4
—————
punteros
reserva dinámica de memoria
Roberto Marabini — Introduccin a la programacin — ETS – p.16/??
Descargar