Vous êtes sur la page 1sur 26

Unidad V Arreglos o variables con ndice.

Fundamentos de Programacin.
Ingeniera en Sistemas Computacionales.
Departamento: Sistemas y Computacin ITV.
Arreglos o variables con ndice.


Arreglos unidimensionales

Arreglos Bidimensionales.

Aplicaciones.
Temas :
Lgica de Programacin.
Definicin.
Un arreglo es una secuencia de datos, todos del
mismo tipo, unidos bajo un identificador comn.

Permiten agrupar informacin relacionada.

Por ejemplo.
int c[6];

Reserva menora para seis elementos del tipo entero.
Lgica de Programacin.
Ingeniera en Sistemas Computacionales ITV
Elementos del arreglo.
Cada objeto o dato del arreglo est asignado a una
posicin concreta dentro de l, designada por un
ndice.

c[0]
ndice 1
er.
Elemento = 0 c[1]
c[2]
c[3]
c[4]
c[5]

0
3
8
5
-4
Longitud del
arreglo
-7
5
0
3
6
9
ndice del ultimo elemento = longitud -1
Indice= expresin entera: 0 <= ndice <= longitud - 1
Lgica de Programacin.
Declaracin de arreglos unidimensionales.
Sintaxis.
Tipo_dato nombreArreglo[ expresion_cte_int] ;
Donde:

Tipo_dato : Cualquier tipo valido en C (char, int, float, o previamente definido
por el usuario).

nombreArreglo: Cualquier identificador valido en C.

expresion_cte_int : Expresin entera basada en constantes. Es el tamao
del arreglo tiene que indicarse en el momento de su
declaracin y no puede cambiarse despus.

Lgica de Programacin.
Accediendo a los elementos individuales
de un arreglo
int calificacion[20];
calificacion
calificacion[0]
calificacion[1]
calificacion[19]
calificacion[2] = 85
Indice -> expresin entera
Contenido
Se reserva memoria para 20 elementos
del tipo entero
Indexacin

Acceso a los elementos del arreglo a travs de su ndice.
El ndice siempre tiene un rango entre 0 y N-1 siendo N el tamao del
arreglo.
nombreArreglo[indice]
Lgica de Programacin.
85
Ejemplo 1.
En el siguiente programa se declara un arreglo de 10 elementos del
tipo entero, cuyos elementos sern proporcionados por el usuario y
posteriormente estos elementos se mostraran en la pantalla.
#include <stdio.h>
#include <conio.h>

void main(void)
{
// declaracin del arreglo.

int numero[10];

// variables auxiliares.

int numeroElementos, indice;

printf("Numero de elemntos (menor de 10) : ");
scanf("%i", &numeroElementos);
// Lectura de los elementos del arreglo.

for(indice =0 ; indice < numeroElementos ; indice++)
{ printf("Dame el elemento No . %i : ", indice+1);
scanf( "%i", &numero[indice] );
}

// Se muestran los elementos del arreglo.

for(indice = 0 ; indice < numeroElementos ; indice++)
printf(" %5i ", numero[indice] ) ;

getch();
}
Lgica de Programacin.
Inicializacin de arreglos.
Podemos inicializar los elementos de un arreglo con valores
propios cuando lo declaramos y al mismo tiempo determinar
cuantos elementos tendr.

Por ejemplo, podemos definir e inicializar un arreglo con la siguiente
sentencia:

int numeros [] = {5,1,4,6,3,2,7};

Mediante esta sentencia creamos un arreglo numeros e
inicializamos los valores de los elementos; siete en este caso. La
longitud del arreglo se determina por el nmero inicial de valores.




Lgica de Programacin.
Ejemplo 2
El siguiente programa muestra el numero de das que tiene un
determinado mes.

Se supone que el mes nmero 2 tiene 28 das.
#include <stdio.h>
#include <conio.h>

void main(void)
{
int dias[] = { 31 , 28 , 31 , 30 , 31 , 30 ,31, 31 , 30 , 31, 30, 31 };
int mes ;

printf ("Dame el numero de mes (1,12) ; ");
scanf("%i",&mes);

printf("El mes numero %i tiene %i dias ", mes, dias[mes-1]);
getch();
}
Lgica de Programacin.
Ejemplo 3.
El siguiente programa determina el promedio de un alumno.
#include "stdio.h"
#include "conio.h"

void main(void)
{
char nombre[40];
float calificacion[100] ;
float promedio , suma ;
int numeroCalificaciones, i ;

printf("Dame el nombre : ");
gets(nombre);

printf("Numero de Calificaciones : ");
scanf("%i", &numeroCalificaciones);





// Lectura de las calificaciones.

for(i =0 ; i < numeroCalificaciones ; i++)
{ printf("Calificacion NO. %i = ",i+1);
scanf("%f", &calificacion[i] );
}

// Acumulacion de las calificaciones.

suma = 0.0f;

for(i =0 ; i < numeroCalificaciones; i++)
suma += calificacion[i];

// determinacion del promedio.
promedio = suma / numeroCalificaciones;

printf("%-40s promedio = %6.1f %%", nombre, promedio);
getch();
}
Lgica de Programacin.
#include "stdio.h"
#include "conio.h"
#include "math.h"



void main(void)
{
float x[100] ;
float media, desvStd, suma ;
int numeroElementos, i ;

printf("Numero de Elementos : ");
scanf("%i", &numeroElementos);

// Lectura de los Elementos.

for(i =0 ; i < numeroElementos ; i++)
{ printf("Elemento [ %i ] = ",i+1);
scanf("%f", &x[i] );
}

// Calculo de la Media.

suma = 0.0f;

for (i = 0 ; i < numeroElementos ; i++)
suma += x[i];

media = suma / numeroElementos;

// Calculo de la Desviacin Estndar.

suma = 0.0f;

for( i = 0; i < numeroElementos ; i++)
suma += pow( x[i] - media , 2);

desvStd = sqrt( suma /( numeroElementos -1 ) ) ;

printf("La media = %10.4f \n", media );
printf("Desviacion estandar = %10.4f", desvStd);
getch();
}
Ejemplo.- Para un conjunto de valores numricos. Elabore un programa
que determine la media y desviacin estndar del conjunto.
n
x
media
n
i
i

1

1
1
2

n
media x
n
i
i

Lgica de Programacin.
Mximos y mnimos.
Ejemplo. Elabore un programa que obtenga el vector normalizado de un
vector de nmeros enteros.
#include "stdio.h"
#include "conio.h"
#include "math.h"

void main(void)
{ int x[100];
float xn[100];
int n, maximo , i ;

printf("No de elementos : ");
scanf("%i", &n);

// lectura de los elementos.

for( i = 0 ; i < n ; i++)
{ printf(" x[ %i ] = ", i+1);
scanf("%i", &x[i] );
}
// Determinacion del maximo.

maximo = fabs (x[0]) ;
for(i=1 ; i < n ; i++)
if ( fabs(x[i]) > maximo)
maximo = fabs(x[i]);

// Obtencion del vector normalizado.

for(i = 0 ; i < n ; i++)
xn[i] = (float) x[i] / maximo;
n i
x
x
x
i
i
o normalizad
,.... 2 , 1
max

// Salida del vector normalizado.

printf(" x n = { ");
for(i =0 ; i < n ; i++)
printf("%5.1f", xn[i] );
printf(" } " );
getch();
}

Vector:
Original

Normalizado
Lgica de Programacin.
Ordenacin.
#include "stdio.h"
#include "conio.h"
#include "math.h"

void main(void)
{ int x[100];
int n , paso , k,i ;
int temp ;

printf("No de elementos : ");
scanf("%i", &n);

// lectura de los elementos.

for( i = 0 ; i < n ; i++)
{ printf(" x[ %i ] = ", i+1);
scanf("%i", &x[i] );
}

// Ordenacin del vector (BURBUJA).

for(paso = 1; paso < n ; paso++)
for(k = 0 ; k < n-paso; k++)
if ( x[k] > x[k+1] )
{ temp = x[k];
x[k] = x[k+1];
x[k+1] = temp;
}

// Salida del vector ordenado.

printf(" x n = { ");
for(i =0 ; i < n ; i++)
printf("%5i", x[i] );
printf(" } " );
getch();
}
Ejemplo.- El siguiente programa ordena en forma ascendente un
conjunto de valores enteros
Lgica de Programacin.
Arreglos de caracteres.
Una cadena de caracteres no es sino un vector de tipo char, con alguna
particularidad que conviene resaltar. Las cadenas suelen contener texto
(nombres, frases, etc.), y ste se almacena en la parte inicial de la cadena (a
partir de la posicin cero del vector). Para separar la parte que contiene texto
de la parte no utilizada, se utiliza un carcter nulo ('\0') segn el cdigo ASCII.

Este carcter se introduce automticamente al leer o inicializar las cadenas de
caracteres, como en el siguiente ejemplo:

char ciudad[20] = "San Sebastin";

donde a los 13 caracteres del nombre de esta ciudad se aade un
decimocuarto: el '\0'. El resto del espacio reservado hasta la posicin
ciudad[19] no se utiliza. De modo anlogo, una cadena constante tal como
"mar" ocupa 4 bytes (para las 3 letras y el '\0').
Lgica de Programacin.
Arreglos Bidimensionales
(matrices o tablas).
Los arreglos de dos dimensiones o matrices se declaran de forma
anloga, con corchetes independientes para cada subndice, en
realidad los arreglos multidimensionales son tratados como arreglos
de arreglos.

La forma general de la declaracin es:

Tipo_dato nombreMatriz[numero_filas][numero_columnas];


Donde numero_filas y numero_columnas son expresiones basadas
en constantes enteras, tanto las filas como las columnas se numeran
tambin a partir de 0.
Lgica de Programacin.
Acceso a los elementos individuales de la
matriz.
Para acceder a los elementos individuales dentro de un arreglo de
dos dimensiones es necesario especificar el nombre del arreglo as
como un ndice que identifique la fila y otro que identifique la
columna , por ejemplo:

matrixDos[2][3] representa al objeto que esta en la tercera fila
en la posicin cuatro.
[0,0] [0,1] [0,2] [0,3] [0,4] [0,5]
[1,0] [1,1] [1,2] [1,3] [1,4] [1,5]
[2,0] [2,1] [2,2] [2,3] [2,4] [2,5]
[3,0] [3,1] [3,2] [3,3] [3,4] [3,5]
Almacenamiento en memoria de una matriz.
a
00
a
01
a
02
a
10
Sea: int A[2][3] ;
A =
A[ 0 ] [ 2 ] = 70 ;
ndice del rengln ndice de la columna
A A[ 0 ]
A[ 1 ]
A[0][0]
A[0][1]
A[0][2]
A[1][0]
A[1][1]
A[1][2]
Memoria.
Donde:
A direccin de memoria del inicio dela matriz
A[0] direccin de memoria de la fila con ndice cero
A[1] direccin de memoria de la fila con ndice uno.
A[] A[][]
A
70
Determinacin del elemento [i][j] de la matriz.
Las matrices en C se almacenan por filas, en posiciones consecutivas de
memoria. En cierta forma, una matriz se puede ver como un vector de
vectores-fila. Si una matriz tiene N filas (numeradas de 0 a N-1) y M columnas
(numeradas de 0 a la M-1), el elemento (i, j) ocupa el lugar:

posicin_elemento(0, 0) + i * M + j

A esta frmula se le llama frmula de direccionamiento de la matriz.
En C pueden definirse arreglos con tantos subndices como se desee. Por
ejemplo, la sentencia,

double a[3][5][7];

declara una hipermatriz con tres subndices, que podra verse como un
conjunto de 3 matrices de dimensin (5x7).
Inicializacin de matrices en la declaracin.
int matriz[3][2] = { {1 , 2}, { 3, 4 }, { 5, 6 } };

// se declaran con 8 columnas porque febrero es el que tiene mas caracteres que son 7
// mas el carcter nulo.

char mes[6][8] = { enero, febrero, marzo, abril, mayo , junio};

// o

char mes[][8] = { enero, febrero, marzo, abril, mayo , junio};


char vocales[] = { a , e, i, o, u };
Lgica de Programacin.
Ejemplo.- Para un grupo de alumnos que presentaron ne unidades de
evaluacin. Elabore un programa que muestre una lista de los alumnos que
aprobaron. Un alumno es aprobado si su promedio es >= 70.
#include "stdio.h"
#include "conio.h"

void main(void)
{ char nombre[30][40];
int calif[30][10];
float promedio[30];
int na , ne , a , e , suma ;

printf("NUmero de Alumnos : "); scanf("%i", &na);
printf("Numero de evaluaciones : "); scanf("%i", &ne);

for ( a = 0 ; a < na ; a++)
{ fflush(stdin); printf("Nombre : "); gets(nombre[a]);
for(e = 0 ; e < ne ; e++)
{ printf("Calificacion no. %i ", e+1);
scanf("%i", & calif[a][e] );
}
}

// calculo de los promedios.

for( a = 0 ; a < na ; a++)
{
suma = 0;
for( e = 0 ; e < ne ; e++)
suma += calif[a][e];
promedio[a] = (float) suma / ne;
}

// Salida de los alumnos aprobados.

printf("Alumnos Aprobados\n");
printf(" Nombre Promedio\n");
for( a = 0 ; a < na ; a++)
if(promedio[a] >= 70.0f)
printf("%-40s %10.1f \n", nombre[a] , promedio[a]);
}
Nombre 1 2 3 4
Prez Ramrez 100 70 80 75
Ruiz 60 65 50 20
lvarez 100 100 90 100
Lgica de Programacin.
#include "stdio.h"
#include "conio.h"

void main(void)
{
float a[20][20], b[20] , c[20];

int nr, nc, ir , ic;
float suma ;

// lectura .

printf("Numero de renglones y columnas ");
scanf("%i %i", &nr , &nc );

// lectura de los elementos de la matriz.

printf("Elementos de la matriz. \n");

for ( ir =0 ; ir < nr ; ir++)
for( ic =0 ; ic < nc ; ic++)
{ printf(" a( %i , %i) = ", ir+1, ic+1 );
scanf("%f", & a[ir][ic]);
}

// lectura de los elementos del vector.

printf("Elementos del Vector. \n");
for( ic =0 ; ic < nc ; ic++)
{ printf("b( %i ) = ", ic+1);
scanf("%f", &b[ic] );
}

// Multiplicacin de la matriz por el vector.

for ( ir = 0 ; ir < nr ; ir++)
{ suma = 0.0f;
for( ic = 0 ; ic < nc ; ic++)
suma += a[ir][ic] * b[ic] ;
c[ir] = suma ;
}

// Salida del vector resultante.

printf("Vector resultante = [ ");
for (ir = 0; ir < nr ; ir++)
printf("%7.1f",c[ir]) ;
printf(" ] \n");
getch();
}
Ejemplo.- Elabore un programa que determine el vector resultante de la
multiplicacin de una matriz por un vector.
nra i para b a c
nca
j
j ij i
,.... 3 , 2 , 1
1

Lgica de Programacin.
Ejemplo.- Se cuenta con la siguiente informacin de un grupo de vendedores.
Nombre Enero Febrero .. Diciembre
Perez R. 3000.00 120000.00 7000.00
..
Alvarez 10000.00 5000.00 150000.00
ventas
Elabore un programa que determine la comisin de cada vendedor

Venta Total comisin.
<50000.00 1 % de la Venta Total
>= 50000.00 2.5 % de la Venta total
#include "stdio.h"
#include "conio.h"

void main(void)
{ const int maxNoV = 50;
const int noMeses =3;
const char mes[noMeses][20] = {"Enero", "Febrero", "Diciembre" };
char nombre[maxNoV][40];
float venta[maxNoV][noMeses];
float vTotal[maxNoV], comision[maxNoV] , suma ;
int nv , v , m ;

printf("No de Vendedores : "); scanf("%i", & nv);

// lectura de las ventas realizadas por mes.

for( v =0 ; v < nv ; v++)
{ printf("Nombre : ");
fflush(stdin);gets(nombre[v]);
for( m = 0 ; m < noMeses ; m++)
{ printf(" Venta del mes %s", mes[m] );
scanf("%f", &venta[v][m] );
}
}
// Calculo de las Ventas Totales ( anuales ).
for ( v = 0 ; v < nv ; v++)
{ suma = 0;
for( m =0 ; m < noMeses ; m++)
suma += venta[v][m];
vTotal[v] = suma ;
}

// Calculo de la Comisin.

for( v = 0; v < nv ; v++)
if (vTotal[v] < 50000.0f)
comision[v] = vTotal[v] * 0.01f;
else
comision[v] = vTotal[v] * 0.025f;

// Salida .
printf( " NOMbre Venta Total Comision\n\n");
for( v = 0 ; v < nv ; v++)
printf("%-40s %10.2f %10.2f\n", nombre[v], vTotal[v], comision[v] );
getch();
}
Se ha simplificado a 3
Lgica de Programacin.
Ejemplo.- Para un grupo de alumnos se cuenta con su nombre y
promedio. Elabore un programa que obtenga una lista (vector) de los
alumnos que tienen un promedio mayor al promedio general del grupo.
#include "stdio.h"
#include "conio.h"
#include "string.h"

void main(void)
{ char nombre[100][40];
int promedio[100];
float pGral;
int suma, i , ia , na ;

char nombreAprob[100][40];
int promedioAprob[100];

printf("No. de alumnos : ");
scanf("%i", &na);

for( i = 0 ; i < na ; i++)
{ fflush(stdin);printf("Nombre "); gets(nombre[i]);
printf("Promedio : "); scanf("%i",&promedio[i]);
}
// calculo del promedio general.

suma = 0;
for (i =0 ; i < na ; i++)
suma += promedio[i];

pGral = (float) suma / na ;

ia = 0;
for( i = 0 ; i < na ; i++)
{ if ( promedio[i] > pGral )
{ promedioAprob[ia] = promedio[i];
strcpy(nombreAprob[ia],nombre[i]);
ia++;
}
}

printf("Alumnos con promedio mayor al pGral \n");

for(i =0 ; i < ia ; i++)
printf("%-40s %5i\n",nombreAprob[i], promedioAprob[i]);
getch();
}


Lgica de Programacin.
Ejercicio.
En un evento deportivo, participaron n competidores. Cada participante fue
evaluado por un grupo de 5 jueces. La puntuacin obtenida por cada un de ellos
se muestra a continuacin.
Nombre Pas Mxico USA Canad Francia Brasil Total
Prez Mxico 8 8.5 7.0 7.5 8.0
Ramrez USA 5 6 6.6 5.4 5.2
Jueces.
Elabore un programa que determine:

A) La puntuacin total de cada participante.
B) El nombre-pas del ganador (suponga que solo existe uno).
Lgica de Programacin.
Ejercicio.
Se cuenta con el numero de habitantes por rangos de edades de cada uno de los
32 estados de la repblica mexicana.
Estado Zona menores de 18 18..50 Mayores de50
Aguascalientes C 100000 450000 150000
Baja California Sur N 75000- 580000 205000
.
Veracruz S .. .
Zacatecas N ..
Nmero de habitantes por rango de edades
Elabore un programa que determine:

A) Numero de habitantes por estado.
B) Numero de habitantes en la zona SUR.
C) Numero de habitantes mayores de 50 aos en la repblica.


Lgica de Programacin.
Ejercicios.
Una empresa cuenta con un nmero de empleados (vendedores). Elabore un
programa en C que cumpla con los siguientes requerimientos.

-Capturar la informacin de un vendedor (nombre , ventas realizadas y sus respectivos
montos)
-Obtener una lista de los vendedores y la venta total ($) realizada.
-Obtener una lista de los vendedores y la comisin correspondiente.

La comisin anual de cada vendedor de acuerdo a los siguientes criterios:

Monto de la Venta Total ($) Comisin sobre la Venta Total

Menor de 10 000 0.1 % de la Venta Total.
De 10 000 a 50 000 1.0 %
Mas de 50 000 1.0 % mas $100.00 por cada ao
laborado en la empresa.

Obtener una lista de los vendedores que realizaron menos de n ventas.
Obtener la informacin de un vendedor en particular.
Obtener la informacin del empleado con el mayor nmero de ventas realizadas.
Obtener la venta total de la empresa (venta de todos los empleados)
Obtener el total que deber de pagar la empresa a sus empleados por el concepto de
comisin.
Lgica de Programacin.
FIN

Vous aimerez peut-être aussi