arrays 2013 final - kesquivel.files.wordpress.com · introducciÓn: definiciÓn de array...

28
TIPOS DE DATOS COMPUESTOS ESTÁTICOS EN C Arrays (listas y tablas en C) 2013 Departamento de Computación

Upload: dinhxuyen

Post on 01-Oct-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

TIPOS DE DATOS COMPUESTOS ESTÁTICOS EN C

Arrays (listas y tablas en C)

2013

Departamento de Computación

Page 2: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

� INTRODUCCIÓN:

� DEFINICIÓN DE ARRAY Formalmente definimos un arrde elementos”.

• Finita: porque todo arreglo tiene un límite, es decir, se debe determinar cuál es el número máximo de elementos del arreglo.

• Homogénea: porque todos los elementos del arre• Ordenada: porque se puede determinar cuál es el primer elemento, cuál el segundo y así

sucesivamente. Los arreglos se caracterizan por: ♦ Almacenar los elementos en posiciones contiguas de memoria.♦ Tienen un mismo nombre de va♦ Para hacer referencia a esos elementos es necesario utilizar un índice que especifica el lugar que

ocupa cada elemento dentro del archivo. Un array (lista o tabla) es una colección de común. Los datos se llaman elementos del arrayde elementos almacenados en el array puede ser cualquier tipo de dato C, incluyendo estructuras definidas por el usuario. Normalmente el array se utiliza para almacenar tipos tales como float. Cada ítem del array se denomina 0, 1, 2, 3... Estos números se denominan se utiliza ya que se especifica igual que en matemáticas, como una secuencia números localizan la posición del elemento dentro del array, proporcionando acceso directo al array.

Tipos de Datos Compuestos Estáticos en C

2

ARRAYS (listas y tablas) EN C

En la práctica es frecuente que enfrentemos problemas cuya solución sería muy difícil de hallar si utilizáramos tipos simples de datos para resolverlos. Es decir, datos que ocupan una sola casilla de memoria. Sin embargo, muchos de estos problemas se podrían resolver si aplicáramos en cambio tipos estructurados de datos, los cuales ocupan un grupo de casillas de memoria y se identifican con un nombre.

DEFINICIÓN DE ARRAY:

Formalmente definimos un arreglo de la siguiente manera: “Colección finita, homogénea y ordenada

porque todo arreglo tiene un límite, es decir, se debe determinar cuál es el número máximo de elementos del arreglo.

porque todos los elementos del arreglo deben ser del mismo tipo.porque se puede determinar cuál es el primer elemento, cuál el segundo y así

Los arreglos se caracterizan por: los elementos en posiciones contiguas de memoria.

Tienen un mismo nombre de variable que representa a todos los elementos. Para hacer referencia a esos elementos es necesario utilizar un índice que especifica el lugar que ocupa cada elemento dentro del archivo.

) es una colección de datos del mismo tipo que se referencian por un nombre elementos del array y se numeran consecutivamente 0, 1, 2, 3, etc. El tipo

de elementos almacenados en el array puede ser cualquier tipo de dato C, incluyendo estructuras malmente el array se utiliza para almacenar tipos tales como

Cada ítem del array se denomina elemento. Los elementos de un array se numeran consecutivamente Estos números se denominan valores índice o subíndice del array.

se utiliza ya que se especifica igual que en matemáticas, como una secuencia números localizan la posición del elemento dentro del array, proporcionando acceso directo al array.

Tipos de Datos Compuestos Estáticos en C

En la práctica es frecuente que enfrentemos problemas cuya solución sería muy difícil de hallar si utilizáramos tipos simples de datos para resolverlos. Es decir, datos que

moria. Sin embargo, muchos de estos problemas se podrían resolver si aplicáramos en cambio tipos estructurados de datos, los cuales ocupan un grupo de casillas de memoria y

“Colección finita, homogénea y ordenada

porque todo arreglo tiene un límite, es decir, se debe determinar cuál es el número

glo deben ser del mismo tipo. porque se puede determinar cuál es el primer elemento, cuál el segundo y así

riable que representa a todos los elementos. Para hacer referencia a esos elementos es necesario utilizar un índice que especifica el lugar que

se referencian por un nombre y se numeran consecutivamente 0, 1, 2, 3, etc. El tipo

de elementos almacenados en el array puede ser cualquier tipo de dato C, incluyendo estructuras malmente el array se utiliza para almacenar tipos tales como char, int o

. Los elementos de un array se numeran consecutivamente del array. El término “subíndice”

se utiliza ya que se especifica igual que en matemáticas, como una secuencia a0, a1, a2, a3… Estos números localizan la posición del elemento dentro del array, proporcionando acceso directo al array.

Page 3: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

3

Si el nombre del array es "a", entonces a[0] es el nombre (valor) del elemento que está en la posición 0, a[1] es el nombre (valor) del elemento que está en la posición 1, etc. En general, el elemento i-ésimo está en la posición i-1. De modo que si el array tiene n elementos, sus nombres son a[0], a[1], a[2], …., a[n-1]. Gráficamente se representa así el array “a” de 6 elementos: int a[6]; //Declara un array de 6 elementos enteros

Figura: Array de 6 elementos.

El array tiene 6 elementos: a[0] contiene 5, a[1] contiene 8, a[2] contiene 6, a[3] contiene 10, a[4] contiene 9, a[5] contiene 4. En un array sus elementos se almacenan siempre en una secuencia de posiciones de memoria contiguas. En C los índices de un array siempre tiene como límite inferior 0, como índice superior el tamaño del array menos 1. � DEFINICIÓN Y DECLARACIÓN DE ARRAYS EN C: Al igual que con cualquier tipo de variable, se debe declarar un array antes de utilizarlo. Un array se declara de forma similar a otros tipos de datos, excepto que se debe indicar al compilador el tamaño o longitud del array. La sintaxis para declarar un array es simple:

tipo nombreArray [numerodeElementos]; Siendo: ♦ tipo: El tipo de los elementos que conformarán el array. ♦ nombreArray: El nombre de nuestro array . ♦ numerodeElementos: Un número entero mayor que cero que indica el tamaño del array. Ejemplos de declaración de arrays: int datos[45]; /* Declara un array de 45 elementos enteros */ char caracteres[15]; /* Declara un array de 15 caracteres */ float valores[20]; /* Declara un array de 20 elementos en coma flotante*/ Si por ejemplo, se quiere crear un array de números reales y su tamaño es una constante representada por un parámetro: #define NELEM 20 float valores[NELEM]; Para acceder al tercer elemento y leer un valor de entrada del array: scanf(“%f”,&valores[2]); Precaución: C no comprueba que los índices del array están dentro del rango definido. Así, por ejemplo, se puede intentar acceder a valores[21], el compilador no producirá ningún error, lo que puede producir un fallo en su programa, dependiendo del contexto en que se encuentre el error.

Page 4: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

4

� SUBÍNDICES DE UN ARRAY: El índice de un array se denomina, con frecuencia, subíndice del array. El término procede de las matemáticas, en las que un subíndice se utiliza para representar un elemento determinado. int numeros[4]; numeros0 equivale a numeros[0] numeros1 equivale a numeros[1] numeros2 equivale a numeros[2] numeros3 equivale a numeros[3] El método de numeración del elemento i-ésimo con el índice o subíndice i-1 se denomina indexación basada en cero. Su uso tiene el efecto de que el índice de un elemento del array es siempre el mismo que el número de pasos desde el elemento inicial numeros[0] a ese elemento. Por ejemplo, numeros[3] está a 3 pasos o posiciones del elemento numeros[0]. � ALMACENAMIENTO EN MEMORIA DE LOS ARRAYS: Los elementos de los arrays se almacenan en bloques contiguos. Así por ejemplo, los arrays:

int edades[5]; char codigos[5];

Precaución: C permite asignar valores fuera de rango a los subíndices. Se debe tener cuidado no hacer esta acción, debido a que se sobreescribirían datos o código. Los arrays de caracteres funcionan de igual forma que los arrays numéricos, partiendo de la base de que cada carácter ocupa normalmente un byte. Así, por ejemplo, un array llamado ciudad se puede representar de la siguiente manera: Ejemplo: char ciudad[]= “Leon”; Es importante tomar en cuenta que en las cadenas de caracteres el sistema siempre inserta un último carácter (nulo, ‘\0’) para indicar el fin de cadena.

ciudad

[0]

[1]

[2]

[3]

L

e

o

n

\0

Page 5: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

5

� INICIALIZACIÓN DE UN ARRAY Se deben asignar valores a los elementos del array antes de utilizarlos, tal como se asignan valores a variables. Para asignar valores a cada elemento del array de enteros “edades”, se puede escribir: edades [0] = 15; edades [1] = 25; edades [3] = 30; edades [4] = 35; La primera sentencia fija edades[0] al valor 15, edades[1] al valor 25, etc. Sin embargo, este método no es práctico cuando el array contiene muchos elementos. El método utilizado, normalmente, es inicializar el array completo en una sola sentencia. Ejemplo: int edades[4]={15,25,30,35}; Cuando se inicializa un array, el tamaño del array se puede determinar automáticamente por las constantes de inicialización. Estas constantes se separan por comas y se encierran entre llaves, como en los siguientes ejemplos: int numeros[6] = {10, 20, 30, 40, 50, 60}; int n[ ]= {3, 4, 5}; //Declara e inicializa un array de 3 elementos char c[ ] = {‘L’,’u’,’i’,’s’}; //Declara e inicializa un array de 4 elementos En C las cadenas de caracteres, se caracterizan por tener un carácter final que indica el fin de la cadena, es el carácter nulo (‘\0’). Lo habitual es inicializar un array de caracteres (una variable cadena) con una constante cadena. Ejemplo: char cad [ ] = “Hola mundo”; El método de inicializar arrays mediante valores constantes después de su definición es adecuado cuando el número de elementos del array es pequeño. Ejemplo #1: Programa para inicializar un array de 10 elementos enteros a 1. #include<stdio.h> int main() { int datos[10],i; printf("\nElemento\tValor"); for(i=0;i<=9;i++) { datos[i]=1; printf("\n%d\t\t%d",i,datos[i]); } return 0; }

Page 6: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

6

Ejemplo de Salida:

Ejemplo #2: Programa que imprime los números del 1 al 10 en orden descendente. #include<stdio.h> void main() { int i,cuenta[10]={1,2,3,4,5,6,7,8,9,10}; for( i=9;i>=0;i--) printf("\n ELEMENTO[%d]: %d\n", i, cuenta[i]); } Ejemplo de Salida:

� Se pueden asignar constantes simbólicas como valores numéricos, de modo que las sentencias siguientes son válidas: #define ENE 31 #define FEB 28 #define MAR 31 #define ABR 30 int meses [12] = {ENE, FEB, MAR, ABR }; � Pueden asignarse valores a un array utilizando un bucle for, while o do-while y éste suele ser el sistema más empleado normalmente.

Page 7: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

7

Ejemplo #3: Programa en C que calcula el promedio de N datos almacenados en un array. Determina e imprime cuantos valores son mayores que el promedio. #include <stdio.h> int main() {

int S[100],nelem; int suma =0,may=0,e=0,i=0; float promedio; printf("Cuantos elementos desea en el array?:"); scanf("%d",&nelem); for(e=0;e<nelem;e++) { printf("Elemento[%d]:",e+1); scanf("%d",&S[e]); suma = suma +S[e]; } promedio= suma/nelem; printf("\nEL PROMEDIO ES: %.f\n",promedio); for(i=0;i<nelem;i++) { if(S[i]>promedio) { may++; printf("\n%d es mayor que el Promedio",S[i]); } } printf("\n\nHAY %d VALORES MAYORES QUE EL PROMEDIO: %.f\n",may,promedio); printf("\n\n"); return 0;

} Ejemplo de Salida:

Ejemplo #4: Programa en C que lea N elementos enteros y que imprima el número de veces que se repite un número X en dicho array. #include<stdio.h> #define NUM 100 void main()

Page 8: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

8

{ int num[NUM],nbuscar,nrep=0,nelem,i; printf("Introduzca el numero de elementos del array:"); scanf("%d",&nelem); for(i=0;i<nelem;i++) { printf("Introduzca el numero[%d]: ",i); scanf("%d",&num[i]); } printf("\nQue numero desea buscar?"); scanf("%d",&nbuscar); for(i=0;i<nelem;i++) { if(num[i]==nbuscar) nrep++; } printf("\n\nEl numero %d aparece %d veces en el array\n",nbuscar,nrep); } Ejemplo #5: Programa en C que lee en un array la calificación de 50 estudiantes. Calcula e imprime el porcentaje de aprobados y reprobados tomando en cuenta que la calificación mínima para aprobar es 70 pts. #include<stdio.h> void main() { int calif[50],ap=0,rep=0,i; float papro,prep; for(i=0;i<50;i++) { printf("Calificacion[%d]: ",i); scanf("%d",&calif[i]); if(calif[i]>=70) ap++; else rep++; } papro = (ap*100)/50; prep = (rep*100)/50; printf("\n\nHay %d APROBADOS y representan %.f%%\n",ap,papro); printf("\n\nHay %d REPROBADOS y representan %.f%%\n",rep,prep); } Ejemplo #6: Realice un programa en C que cree un array de N elementos enteros, cuyos valores “numéricos” se ingresaran por teclado, y luego obtenga la suma y el promedio de los elementos ubicados en las posiciones pares del array.

Page 9: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

9

#include<stdio.h> #include<math.h> void main() { int pospares[50],in,nelem,pospar=0,sum=0; float prom; printf("Cuantos elementos?"); scanf("%d",&nelem); for(in=0;in<nelem;in++) { printf("Ingrese el numero %d:",in+1); scanf("%d",&pospares[in]); if(in%2==0) { pospar++; sum+=pospares[in]; } } prom=sum/pospar; printf("La suma de los %d numeros que hay en posiciones pares es:%d\n",pospar,sum); printf("El promedio de los %d numeros que hay en posiciones pares es:%.2f\n",pospar,prom); } Ejemplo de Salida:

Ejemplo #7: Programa en C que permita leer dos arrays de 10 elementos cada uno e imprimir la palabra IGUALES si ambos arrays son iguales y DIFERENTES si lo son. Tomar en cuenta que serán iguales si en la misma posición de ambos arrays se encuentra el mismo elemento. #include<stdio.h> void main() { int A[10],B[10],ig=0,i; printf("\nELEMENTOS DEL ARRAY 1\n"); for(i=0;i<10;i++) { printf("A[%d]: ",i); scanf("%d",&A[i]); }

Page 10: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

10

printf("\nELEMENTOS DEL ARRAY 2\n"); for(i=0;i<10;i++) { printf("B[%d]: ",i); scanf("%d",&B[i]); } for(i=0;i<10;i++) { if(A[i]==B[i]) ig++; } if(ig == 10) printf("\nEl array A y B son IGUALES\n"); else printf("\nEl array A y B NO son IGUALES\n"); } Ejemplo #8: Los organizadores de las elecciones municipales de León solicitaron un programa para manejar en forma electrónica el conteo de votos. En la elección hay 4 candidatos, los cuales se representan con los valores del 1…4. Este programa en C permite obtener el número de votos de cada candidato y el porcentaje en relación a los votos obtenidos. #include<stdio.h> void main() { int nvotos[5],v,c1=0,c2=0,c3=0,c4=0,nulos=0,nv; float pc1,pc2,pc3,pc4,pcnul; printf("Cuantos votos?"); scanf("%d",&nv); for(v=0;v<nv;v++) { printf("Mi voto es por el candidato: "); scanf("%d",&nvotos[v]); switch(nvotos[v]) { case 1: c1++; break; case 2: c2++; break;

case 3: c3++; break; case 4: c4++; break; default: printf("Voto Nulo"); nulos++; }

Page 11: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

11

} pc1= (c1*100) /nv; pc2=(c2*100) /nv; pc3=(c3*100) /nv; pc4=(c4*100) /nv; pcnul=(nulos*100) /nv; printf("\n\n******RESULTADOS FINALES******\n"); printf("El candidato 1:%d votos -- Porcentaje: %.2f%%\n",c1,pc1); printf("El candidato 2:%d votos -- Porcentaje: %.2f%%\n",c2,pc2); printf("El candidato 3:%d votos -- Porcentaje: %.2f%%\n",c3,pc3); printf("El candidato 4:%d votos -- Porcentaje: %.2f%%\n",c4,pc4); printf("Nulos:%d -- Porcentaje: %.2f%%\n",nulos,pcnul); } � ARRAY DE CARACTERES Y CADENAS DE TEXTO Una cadena de texto es un conjunto de caracteres, tales como: “Programación”. C soporta cadenas de texto utilizando un array de caracteres que contenga una secuencia de caracteres:

� Ejemplo: char Cadena[]= “Programacion”; Es importante comprender la diferencia entre un array de caracteres y una cadena de caracteres. Las cadenas contienen un carácter nulo al final del array de caracteres.

Array de Caracteres Cadena Las cadenas se señalan incluyendo un carácter final de la cadena; el carácter nulo (\0), cuyo valor en el código ASCII es 0. El medio más fácil de inicializar un array de caracteres es hacer la inicialización de la declaración: ♦ char Cadena[13]=”Programacion”; El compilador añade automáticamente un carácter nulo al final de la cadena, de modo que la secuencia real sería:

Cadena[0] P

Cadena[1] r

Cadena[2] o

Cadena[3] g

Cadena[4] r

Cadena[5] a

Cadena[6] m

Cadena[7] a

Cadena[8] c

Cadena[9] i

Cadena[10] o

Cadena[11] n

Cadena[0] P

Cadena[1] r

Cadena[2] o

Cadena[3] g

Cadena[4] r

Cadena[5] a

Cadena[6] m

Cadena[7] a

Cadena[8] c

Cadena[9] i

Cadena[10] o

Cadena[11] n

Cadena[12] \0 Carácter Nulo

Page 12: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

12

♦ char Cadena[13]=”Programacion”;

Cadena La asignación de valores a Cadena se puede hacer del modo siguiente: Cadena[0]= P' Cadena[1]= r'

Cadena[2]= o'

Cadena[3]= g' Cadena[4]= r'

Cadena[5]= a'

Cadena[6]= m' Cadena[7]= a'

Cadena[8]= c'

Cadena[9]= i' Cadena[10]= o'

Cadena[11]= n'

Cadena[12]= \0' Sin embargo, no se puede asignar una cadena a un array del siguiente modo: Cadena = "ABCDEF"; Para copiar una constante cadena o copiar una variable de cadena a otra variable de cadena se debe utilizar la función de la biblioteca estándar -posteriormente se estudiará- strcpy( ) («copiar cadenas»). strcpy( ) permite copiar una constante de cadena en una cadena. Para copiar el nombre "karen" en el array nombre, se puede escribir strcpy(nombre, "karen" ) ; /*Copia karen en nombre */ strcpy( ) añade un carácter nulo al final de la cadena. A fin de que no se produzcan errores en la sentencia anterior, se debe asegurar que el array de caracteres nombre tenga elementos suficientes para contener la cadena situada a su derecha. Ejemplo: #include <stdio.h> #include <string.h> #define MAXLON 10 int main(void) {

char original[MAXLON+1] = "cadena"; char copia[MAXLON+1]; strcpy(copia, original); //Copia el contenido de original en copia. return 0;

} Ejemplo #9: Programa en C que compara las longitudes de dos cadenas de caracteres leídas por teclado, e imprime un mensaje indicando si ambas cadenas tienen o no la misma longitud. #include<stdio.h> void main() { char cad1[30],cad2[30]; int c1=0,c2=0;

P r o g r a m a c i o n \0

Page 13: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

13

printf("Cadena 1:"); gets(cad1); printf("Cadena 2:"); gets(cad2); while(cad1[c1] != '\0') c1++; while(cad2[c2] != '\0') c2++; printf("\nLa cadena 1 tiene %d caracteres\n",c1); printf("\nLa cadena 2 tiene %d caracteres\n",c2); if(c1==c2) printf("%s y %s tienen LA MISMA LONGITUD\n",cad1,cad2); else printf("%s y %s tienen DIFERENTE LONGITUD\n",cad1,cad2); } Ejemplo de Salida:

Ejemplo #10: Programa en C que permite al usuario introducir una cadena, y determina si la cadena es un palíndromo comprobando la igualdad de los símbolos comenzando por ambos extremos de la cadena. #include<stdio.h> #include<string.h> void main() { char palabra[30]; int longcad,numc=0,alto=0; printf("Introduzca la cadena:"); scanf("%s",palabra); longcad=strlen(palabra)-1; while((numc<=longcad) && !alto) { if(palabra[numc] != palabra[longcad]) alto=1; numc++; longcad--; } if(!alto) printf("%s es PALINDROMO\n",palabra); else printf("%s NO es PALINDROMO\n",palabra); }

Page 14: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

14

Ejemplo de Salida:

Ejemplo #11: Este programa lee una cadena de caracteres y convierte los caracteres de minúscula a mayúscula y viceversa. #include <stdio.h> void main(void) { char texto[20]; int i=0,n,dif; dif = 'a'-'A'; printf("Introduzca una cadena: "); scanf("%s",texto); while (texto[i] != '\0') { if ((texto[i] >='a')&&(texto[i] <='z')) texto[i] -= dif; else if ((texto[i]>='A')&&(texto[i]<='Z')) texto[i] += dif; i++; } texto[i] = '\0'; printf("\n****RESULTADO****\n"); for (n=0; n<=i; n++) { printf("%c", texto[n]); } printf("\n\n"); } Ejemplo de Salida:

Ejemplo #12: Programa en C que pide al usuario ingrese una cadena de caracteres e imprime la cadena sin los signos de puntuación ni los números. Además los caracteres alfabéticos en minúscula se convierten a mayúscula. #include<stdio.h> #include<ctype.h> #include<string.h> #include<stdlib.h>

Page 15: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

15

void main() { char cadena[50]; int i=0; printf("Introduzca una cadena que incluya digitos y signos de puntuacion:\n"); gets(cadena); while(cadena[i] != '\0') { if((ispunct(cadena[i]) ==0) && (isdigit(cadena[i])==0)) { if((islower(cadena[i])) != 0) cadena[i]= toupper(cadena[i]); printf("%c",cadena[i]); } i++; } } Ejemplo de Salida:

Ejemplo #13: Programa en C que al recibir como dato una cadena de caracteres y un carácter, cuenta e imprime el número de veces que se encuentra dicho carácter en la cadena. #include <stdio.h> #include <string.h> #define MAXLON 80 int main(void) { char c[MAXLON+1],carb; int i=0,rep=0; printf ("Introduce una cadena (max. %d caracteres.): ", MAXLON); gets(c); fflush(stdin); printf("Que caracter desea buscar?"); scanf("%c",&carb); while(c[i]!='\0') { if (c[i]==carb) rep++; i++; } printf ("\n%c aparece %d veces en la cadena: %s \n",carb,rep,c); return 0; }

Page 16: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

16

Ejemplo de Salida:

Ejemplo #14: Programa en C que al recibir como datos cadenas de caracteres que contienen números reales, calcula e imprime la suma y el promedio de dichos números. #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> int main(void) { char cad[10],r; int i=0; float sum=0.0; printf("\nDesea ingresar una cadena de caracteres?"); r=getchar(); while(toupper(r) =='S') { printf ("\nIntroduce una cadena de caracteres: "); fflush(stdin); gets(cad); i++; sum += atof(cad); printf("\nDesea ingresar otra cadena de caracteres(S/N)? "); r = getchar(); } printf("\nSuma = %.2f\n",sum); printf("\nPromedio = %.2f\n",(sum/i)); return 0; } Ejemplo de Salida:

Page 17: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

17

� ARRAYS MULTIDIMENSIONALES Es una colección finita, homogénea y ordenada de datos, en las que se hace referencia a cada elemento del arreglo por medio de dos índices. El primero de los índices se utiliza para indicar la fila, y el segundo, para indicar la columna. Un arreglo bidimensional permite almacenar N * M elementos del mismo tipo (enteros, reales, caracteres, cadenas de caracteres, etc) y acceder a cada uno de ellos. Los arrays más usuales son los de dos dimensiones, conocidos también por el nombre de tablas o matrices. Sin embargo, es posible crear arrays de tantas dimensiones como requieran sus aplicaciones. Un array de dos dimensiones equivale a una tabla de múltiples filas y múltiples columnas.

Estructura de un array de dos dimensiones.

Si las filas se etiquetan de 0 a m y las columnas de 0 a n, el número de elementos que tendrá el array será el resultado del producto (m+1) x (n+1). El sistema para localizar un elemento será por las coordenadas representadas por el número de fila y su número de columna (a, b). � DECLARACIÓN DE ARRAYS BIDIMENSIONALES El espacio que los arreglos ocupan en memoria se reserva en el momento de realizar la declaración de los mismos. La sintaxis para la declaración de un array de dos dimensiones es: <tipo de datoElemento> <nombre array>[<Número de Filas>] [<Número de Columnas>] Ejemplos de declaración de tablas: char Pantalla[25][80]; int puestos[6][8]; int equipos[4][30]; int matriz[4][2]; Un array de dos dimensiones en realidad es un array de arrays. Es decir, es un array unidimensional y cada elemento no es un valor entero, o de coma flotante o carácter, sino que cada elemento es otro array.

Page 18: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

18

Los elementos de los arrays se almacenan en memoria de modo que el subíndice más próximo al nombre del array es la fila y el otro subíndice, la columna. � INICIALIZACIÓN DE ARRAYS MULTIDIMENSIONALES Los arrays multidimensionales se pueden inicializar, al igual que los de una dimensión, cuando se declaran. La inicialización consta de una lista de constantes separadas por comas y encerradas entre llaves. Ejemplo: int tabla[4][2];

Ejemplos: int tabla [2] [3] = {51, 52, 53, 54, 55, 56}; O bien: ♦ int tabla [2] [3] = {{51, 52, 53}, {54, 55, 56}};

♦ int tabla [2] [3] = {

{51, 52, 53}, {54, 55, 56}

};

� ACCESO A LOS ELEMENTOS DE LOS ARRAYS BIDIMENSIONALES Se puede acceder a los elementos de arrays multidimensionales de igual forma que a los elementos de un array unidimensional. La diferencia reside en que en los elementos bidimensionales deben especificarse los índices de la fila y la columna. El formato general para asignación directa de valores a los elementos es: ♦ Inserción de elementos: <Nombre array> [índice fila] [índice columna] = valor elemento; ♦ Extracción de elementos: <Variable> = <nombre array> [índice fila] [índice columna];

Page 19: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

19

� ACCESO A ELEMENTOS MEDIANTE BUCLES Se puede acceder a los elementos de arrays bidimensionales mediante bucles anidados. Su sintaxis es: int indicefila, indicecolum; for(indicefila = 0; indicefila < NumFilas; ++indicefila)

for(indicecolum = 0; indicecolum < NumColumnas; ++indicecolum) Procesar Elemento [indicefila] [indicecolum]; Ejemplo #14: Programa en C que permite inicializar y visualizar de un array bidimensional de 3 filas y 4 columnas #include<stdio.h> void main() { int i,j,datos[3][4]= {{1,2,3,4}, {5,6,7,8},{9,10,11,12}}; printf("\n***Visualizacion del Array 3F x 4C***\n"); for(i=0; i<3; i++) { for(j=0;j<4;j++) printf("%d ",datos[i][j]); printf("\n"); } } Ejemplo de Salida:

Ejemplo #15: Este programa realiza la suma de cada una de las filas de una matriz bidimensional N*M. include<stdio.h> #define MAXF 10 #define MAXC 10 void main() { float a[MAXF][MAXC]; float sumafil; int fil,col,f,c; do { printf("NUMERO DE FILAS: "); scanf("%d",&fil); }while(fil < 1 || fil > MAXF);

Page 20: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

20

do { printf("NUMERO DE COLUMNAS: "); scanf("%d",&col); }while(col < 1 || col > MAXC); //Lectura de los datos de la matriz printf("\n\n**Introduzca los datos de la matriz**\n"); for(f=0;f<fil;f++) for(c=0;c<col;c++) { printf("M[%d][%d]: ",f,c); scanf("%f",&a[f][c]); } //Escribir la suma de cada fila for(f=0;f<fil;f++) { sumafil=0; for(c=0;c<col;c++) sumafil += a[f][c]; printf("La suma de la fila [%d] es %.2f\n",f,sumafil); } } Ejemplo de Salida:

Ejemplo #16: Programa en C que lee dos arrays bidimensionales AA y AB de N*M elementos cada uno, calcule la suma de ambos arreglos, almacene el resultado en otro arreglo bidimensional e imprima, además el resultado obtenido. #include<stdio.h> #define MAXF 10 #define MAXC 10 int main() { int AA[MAXF][MAXC],AB[MAXF][MAXC],SUMA[MAXF][MAXC]; int fil,col,f,c;

Page 21: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

21

/*Se verifica que el numero de filas sea correcto*/ do { printf("NUMERO DE FILAS DE LOS ARREGLOS: "); scanf("%d",&fil); }while(fil<1 || fil>MAXF); /*Se verifica que el numero de columnas sea correcto*/ do { printf("NUMERO DE COLUMNAS DE LOS ARREGLOS: "); scanf("%d",&col); }while(col<1 || col>MAXC); printf("\n**Introduzca los datos de la matriz A**\n"); for(f=0;f<fil;f++) for(c=0;c<col;c++) { printf("M[%d][%d]: ",f,c); scanf("%d",&AA[f][c]); } printf("\n**Introduzca los datos de la matriz B**\n"); for(f=0;f<fil;f++) for(c=0;c<col;c++) { printf("M[%d][%d]: ",f,c); scanf("%d",&AB[f][c]); } /*Suma de las matrices y almacena el resultado en la matriz SUMA*/ for(f=0;f<fil;f++) { for(c=0;c<col;c++) SUMA[f][c]=AA[f][c]+AB[f][c]; } printf("\n\nSUMA DE MATRICES\n"); for(f=0;f<fil;f++) { for(c=0;c<col;c++) printf("%d ",SUMA[f][c]); printf("\n"); } return 0; }

Page 22: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

22

Ejemplo de Salida:

Ejemplo #17: Programa en C que al recibir como datos una matriz, calcule su traspuesta. La traspuesta de una matriz se obtiene al escribir las filas de la matriz como columnas. #include<stdio.h> #define MAX 10 int main() { int original[MAX][MAX],traspuesta[MAX][MAX]; int fil,col,f,c; do { printf("NUMERO DE FILAS DEL ARREGLO: "); scanf("%d",&fil); }while(fil<1 || fil>MAX); /*Se verifica que el numero de filas sea correcto*/ do { printf("NUMERO DE COLUMNAS DEL ARREGLO: "); scanf("%d",&col); }while(col<1 || col>MAX); /*Se verifica que el numero de columnas sea correcto*/ printf("\n**Introduzca los datos de la matriz**\n"); for(f=0;f<fil;f++) { for(c=0;c<col;c++) { printf("M[%d][%d]: ",f,c); scanf("%d",&original[f][c]); traspuesta[c][f]=original[f][c]; } }

Page 23: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

23

printf("\n\n***TRASPUESTA***\n"); for(f=0;f<fil;f++) { for(c=0;c<col;c++) printf("%d ",traspuesta[f][c]); printf("\n"); } return 0; } Ejemplo de Salida:

Ejemplo #18: Hacer un programa en C que lea una matriz de N filas y M columnas y que almacene en la diagonal principal unos y en las demás posiciones ceros. #include<stdio.h> #include<stdlib.h> int main() { int matriz[3][3],f,c; for(f=0;f<3;f++) { for(c=0;c<3;c++) { if(f==c) matriz[f][c]=1; else matriz[f][c]=0; } } printf("\n***DATOS DE LA MATRIZ INTRODUCIDA***\n"); for(f=0;f<3;f++) { for(c=0;c<3;c++) { printf(" %d ",matriz[f][c]); }

Page 24: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

24

printf("\n"); } return 0; } Ejemplo #19: Crear un programa que cree un array de N X M indicando que una empresa tiene N vendedores cada uno de los cuales vende 5 productos. El array almacena los ingresos obtenidos por cada vendedor en cada producto, imprimir el total de cada vendedor y obtener los ingresos totales de la tienda. #include<stdio.h> #define NV 100 #define NP 5 void main() { int tienda[NV][NP],suma_vta,v,p,nv; int total_vta=0; printf("Introduzca el numero de vendedores:"); scanf("%d",&nv); //Lectura de los datos de la matriz for(v=0;v<nv;v++) { printf("\n***VENDEDOR %d***\n",v+1); for(p=0;p<NP;p++) { printf("Venta[%d][%d]: ",v+1,p+1); scanf("%d",&tienda[v][p]); } } //Escribir la suma de las M ventas realizadas por cada vendedor for(v=0;v<nv;v++) { suma_vta=0; for(p=0;p<NP;p++) { suma_vta += tienda[v][p]; } printf("El vendedor[%d] vendio C$: %d\n",v+1,suma_vta); total_vta += suma_vta; } printf("\n\tEL TOTAL DE VENTAS ES C$ %d\n",total_vta); }

Page 25: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

25

Ejemplo de Salida:

� ARRAY DE CADENAS DE CARACTERES

Las matrices de cadenas de caracteres son matrices multidimensionales, generalmente de dos dimensiones, en las que cada fila se corresponde con una cadena de caracteres. Una fila será una matriz unidimensional de tipo char.

La definición de una matriz de cadenas de caracteres puede hacerse de la siguiente forma: char nombre_matriz [filas] [longitud_filas];

Ejemplo: char m[F][C]; /*Crea un matriz de cadenas de caracteres de F filas por C caracteres cada fila*/

A partir de esta línea de código, C crea una matriz unidimensional m con los elementos, m[0], m…[1], ……, m[F-1], que a su vez son matrices unidimensionales de C elementos de tipo char.

Gráficamente podemos representarlo así:

El tipo de elementos de m es char[] y el tipo de los elementos de las matrices referenciadas por m [0], m…[1],……, es char.

Para acceder a los elementos de la matriz m, puesto que se trata de una matriz de cadenas de caracteres, se utiliza sólo el primer subíndice, el que indica la fila. Sólo se utiliza dos subíndices cuando sea necesario acceder a un carácter individual.

Es importante remarcar que m[0], m[1], etc, son cadenas de caracteres y que, por ejemplo, m[3][1] es un carácter; el que está en la fila 1, columna 3.

Page 26: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

26

Ejemplo #20: Programa para leer una lista de nombres y los almacene en una matriz. Una vez construida, visualiza su contenido.

#include<stdio.h> #include<ctype.h> #include<stdlib.h> #define FIL 100 #define COL 80 void main() { char nombre[FIL][COL]; int nf=0,f; char *fin,resp; do { printf("Cuantas cadenas desea leer: "); scanf("%d",&nf); }while(nf<1 || nf>FIL); fflush(stdin); printf("Escriba las cadenas que desea introducir:\n"); for(f=0;f<nf;f++) { printf("Nombre[%d]: ",f); fin=gets(nombre[f]); } nf= f; do { printf("Desea visualizar el contenido de la matriz? (s/n)"); resp= tolower(getchar()); }while(resp != 's' && resp != 'n'); if(resp == 's') { //Visualizar la lista de nombres printf("\n"); for(f=0;f<nf;f++) printf("%s\n",nombre[f]); } }

Page 27: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

27

Ejemplo de Salida:

Page 28: Arrays 2013 Final - kesquivel.files.wordpress.com · INTRODUCCIÓN: DEFINICIÓN DE ARRAY Formalmente definimos un arr de elementos”. • Finita: porque todo arreglo tiene un límite,

Tipos de Datos Compuestos Estáticos en C

28

EJERCICIOS PROPUESTOS:

1. Realice un programa en C que declare y lea un arreglo de N elementos, imprimir la suma de los números pares y el producto de los números impares del arreglo.

2. Realice un programa en C que lea un arreglo de N datos y asigne a sus elementos los valores 1, 4, 9, 16........etc ( 12, 22, 32...).

3. Realice un programa en C que lea en un arreglo las edades de N personas y que calcule e

imprima la edad moda. La moda es la edad que más veces aparece (si dos o más edades aparecen muchas veces con la máxima frecuencia, asumiremos que cualquiera de ellas es la moda).

4. Realice un programa en C que intercambie las M filas de un arreglo bidimensional. Los

elementos de la primera fila se intercambian con los de la última fila, los de la segunda con los de la penúltima y así sucesivamente.

5. Realice un programa en C que permita calcular la suma de los elementos de la diagonal

principal de una matriz (N*N), el producto de los elementos de la diagonal secundaria.

6. Escribir un programa que rellene automáticamente una matriz N*M con la suma de sus índices (Es decir, el elemento a[1][1] = 1+1=2, a[3][2] = 3+2=5). El programa mostrará la matriz resultante por pantalla.

7. Realice un programa en C que al recibir como dato una cadena de caracteres formada

por números y letras, en ese orden, imprima en forma sucesiva cada letra tantas veces como lo indique el número que le precede. Por ejemplo, si la cadena es la siguiente: 2b5p4m3q El programa debe imprimir: bbpppppmmmmqqq

8. Escribir un programa en C que al recibir como dato un arreglo unidimensional de tipo

cadena de caracteres, encuentre la cadena de mayor longitud sin utilizar la función strlen, y que imprima tanto la cadena como el número de caracteres de dicha cadena.

BIBLIOGRAFÍA BÁSICA:

• Ceballos, Francisco Javier: C/C++ Curso de Programación, 2da Edición. Editorial RA-MA, 2002.

• Joyanes Aguilar, Luis; Zahonero Martínez Ignacio: Programación en C. McGraw Hill, 2001.

• Gottfried, Byron S: Programación en C. McGraw Hill, 1991.