Arrays en C

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

UNIVERSIDAD NACIONAL AUTNOMA DE

NICARAGUA, UNAN LEN


DEPARTAMENTO DE COMPUTACIN
INGENIERA EN SISTEMAS / TELEMTICA

TIPOS DE DATOS
COMPUESTOS
ESTTICOS EN C
Ing. Karina Esquivel Alvarado

Tipos de Datos Compuestos Estticos en C

ARRAYS (listas y tablas) EN C




INTRODUCCIN:

En
la
prctica
es
frecuente
que
enfrentemos problemas cuya solucin
sera
muy
difcil
de
hallar
si
utilizramos tipos simples de datos
para resolverlos. Es decir, datos que
ocupan una sola casilla de memoria.

Sin embargo, muchos de estos problemas se podran resolver si


aplicramos en cambio tipos estructurados de datos, los cuales
ocupan un grupo de casillas de memoria y se identifican con un
nombre.


DEFINICIN DE ARRAY:

Formalmente definimos un arreglo de la siguiente manera: Coleccin


finita, homognea y ordenada de elementos
elementos,
, en la que se hace
referencia a cada elemento del arreglo por medio de un ndice.
ndic
Finita: porque todo arreglo tiene un lmite, es decir, se debe
determinar cul es el nmero mximo de elementos del arreglo.
Homognea: porque todos los elementos del arreglo deben ser
del mismo tipo.
Ordenada: porque se puede determinar cul es el primer
pr
elemento, cul el segundo y as sucesivamente.
Los arreglos se caracterizan por:
Almacenar 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
elementos es necesario utilizar un
ndice que especifica el lugar que ocupa cada elemento dentro
del archivo.
Un array (lista o tabla)
tabla es una coleccin de datos del mismo tipo
que se referencian por un nombre comn. Los datos se llaman
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 definidas por el usuario.
Normalmente el array se utiliza para almacenar tipos tales como
char, int o float.

Tipos de Datos Compuestos Estticos en C

Cada tem del array se denomina elemento. Los elementos de un array


se numeran consecutivamente 0, 1, 2, 3... Estos nmeros se
denominan valores ndice o subndice del array. El trmino
subndice se utiliza ya que se especifica igual que en
matemticas, como una secuencia a0, a1, a2, a3 Estos nmeros
localizan la posicin del elemento dentro del array, proporcionando
acceso directo al array.

Si el nombre del array es "a", entonces a[0] es el nombre (valor)


del elemento que est en la posicin 0, a[1] es el nombre (valor)
del elemento que est en la posicin 1, etc. En general, el
elemento i-simo est en la posicin i-1. De modo que si el array
tiene n elementos, sus nombres son a[0], a[1], a[2], ., a[n-1].
Grficamente 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 lmite inferior 0 y
como ndice superior el tamao del array menos 1.


DEFINICIN Y DECLARACIN 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
tamao o longitud del array.
La sintaxis para declarar un array es simple:
tipo nombreArray[numerodeElementos];

Tipos de Datos Compuestos Estticos en C

Siendo:
tipo: El tipo de los elementos que conformarn el array.
nombreArray: El nombre de nuestro array .
numerodeElementos: Un nmero entero mayor que cero que indica el
tamao del array.
Ejemplos de declaracin
int datos[45];
enteros */
char caracteres[15];
float valores[20];
coma flotante*/

de arrays:
/* Declara

un

array

de

45

elementos

/* Declara un array de 15 caracteres */


/* Declara un array de 20 elementos

en

Si por ejemplo, se quiere crear un array de nmeros reales y su


tamao es una constante representada por un parmetro:
#define NELEM 20
float valores[NELEM];
Para acceder al tercer elemento y leer un valor de entrada del
array: scanf(%f,&valores[2]);
Precaucin: C no comprueba que los ndices del array estn dentro
del rango definido. As, por ejemplo, se puede intentar acceder a
valores[21], el compilador no producir ningn error, lo que puede
producir un fallo en su programa, dependiendo del contexto en que
se encuentre el error.


SUBNDICES DE UN ARRAY:

El ndice de un array se denomina, con frecuencia, subndice del


array. El trmino procede de las matemticas, en las que un
subndice se utiliza para representar un elemento determinado.
int numeros[4];
numeros0 equivale
numeros1 equivale
numeros2 equivale
numeros3 equivale

a
a
a
a

numeros[0]
numeros[1]
numeros[2]
numeros[3]

El mtodo de numeracin del elemento i-simo con el ndice o


subndice i-1 se denomina indexacin basada en cero. Su uso tiene
el efecto de que el ndice de un elemento del array es siempre el
mismo que el nmero 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].

Tipos de Datos Compuestos Estticos en C

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];

Precaucin: C permite asignar valores fuera de rango a los


subndices. Se debe tener cuidado no hacer esta accin, debido a
que se sobreescribiran datos o cdigo.
Los arrays de caracteres funcionan de igual forma que los arrays
numricos, partiendo de la base de que cada carcter ocupa
normalmente un byte. As, por ejemplo, un array llamado ciudad se
puede representar de la siguiente manera:
Ejemplo:

char ciudad[]= Leon;


ciudad
L

[0]

[1]

[2]

[3]

\0

Es importante tomar en cuenta que en las cadenas de caracteres el


sistema siempre inserta un ltimo carcter (nulo, \0) para
indicar el fin de cadena.


INICIALIZACIN 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 [2] = 30;
edades [3] = 35;

Tipos de Datos Compuestos Estticos en C

La primera sentencia fija edades[0] al valor 15, edades[1] al valor


25, etc. Sin embargo, este mtodo no es prctico cuando el array
contiene muchos elementos. El mtodo 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 tamao del array se puede
determinar automticamente por las constantes de inicializacin.
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
carcter final que indica el fin de la cadena, es el carcter nulo
(\0). Lo habitual es inicializar un array de caracteres (una
variable cadena) con una constante cadena. Ejemplo: char cad [ ] =
Hola mundo;
El mtodo de inicializar arrays mediante valores constantes despus
de su definicin es adecuado cuando el nmero de elementos del
array es pequeo.
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;
}
Ejemplo de Salida:

Tipos de Datos Compuestos Estticos en C

Ejemplo #2: Programa en C que declara e inicializa un arreglo de N


datos, de modo que los elementos de ndice par valgan 0 y los de
ndice impar valgan 1.
Solucin (Pseudocdigo)
Proceso posiciones_array
Definir datos_array,v Como Entero;
Dimension datos_array[100];
Escribir "Cuantos datos desea en el arreglo?";
Leer ndatos;
Para v<-0 Hasta ndatos-1 Hacer
Si v % 2 = 0 Entonces
datos_array[v]<-0;
Sino
datos_array[v]<-1;
FinSi
Escribir "Dato[",v,"]=",datos_array[v];
FinPara
FinProceso
Solucin (Cdigo C)
#include <stdio.h>
int main(int argc, char *argv[])
{
int datos_array[100],v,ndatos;
printf("Cuantos datos desea en el arreglo?");
scanf("%d",&ndatos);
for(v=0;v<ndatos;v++)
{
if(v%2==0)
datos_array[v]=0;
else
datos_array[v]=1;
printf("Dato[%d]=%d\n",v,datos_array[v]);
}
return 0;
}

Se
pueden
asignar
constantes
simblicas
como
valores
numricos, de modo que las sentencias siguientes son vlidas:
#define ENE 31
#define FEB 28
#define MAR 31
#define ABR 30
int meses [12] =

{ENE, FEB, MAR, ABR };

Tipos de Datos Compuestos Estticos en C


Pueden asignarse valores a un array utilizando un bucle for,
while o do-while y ste suele ser el sistema ms empleado
normalmente.
Ejemplo #3: Programa en C que, al recibir como dato un arreglo
unidimensional de tipo entero de N elementos, determina si el
arreglo es palndrome.
#include<stdio.h>
int main()
{
int numd=0,alto=0,d,ndatos,longarray;
printf("Cuantos datos?");
scanf("%d",&ndatos);
int palindro[ndatos];
for(d=0;d<ndatos;d++)
scanf("%d",&palindro[d]);
longarray=ndatos-1;
while((numd<ndatos) && !alto)
{
if(palindro[numd] != palindro[longarray])
alto=1;
numd++;
longarray--;
}
if(!alto)
printf("El array es PALINDROMO\n");
else
printf("El array NO es PALINDROMO\n");
return 0;
}
Ejemplo #4: Programa en C que lea en un arreglo las marcas
obtenidas por N corredores en una carrera e imprimir cuntos tienen
una marca mayor y cuntos tienen una marca menor que el promedio.
Solucin en Pseudocdigo:
Proceso marca
Dimension marcascorredor[10];
m<-0;
menorprom <-0;
mayorprom <- 0;
sumamarc <- 0;

Tipos de Datos Compuestos Estticos en C

Mientras m < 10 Hacer


Escribir 'Marca del corredor[',m+1,']';
Leer marcascorredor[m];
sumamarc <- sumamarc + marcascorredor[m];
m<-m+1;
FinMientras
promediomarc <- sumamarc/m;
Para mc<-0 hasta 9 Hacer
Si marcascorredor[mc]>
promediomarc Entonces
mayorprom <- mayorprom +1;
FinSi
Si marcascorredor[mc] < promediomarc Entonces
menorprom <- menorprom +1;
FinSi
FinPara
Escribir 'Hay ',mayorprom,' corredores con marca MAYOR
PROMEDIO = ',promediomarc;
Escribir 'Hay ',menorprom,' corredores con marca MENOR
PROMEDIO = ',promediomarc;
FinProceso

que

el

que

el

Programa en C:
#include <stdio.h>
int main(int argc, char *argv[])
{
int marcascorredor[10],mc=0,menorprom=0,mayorprom=0;
int sumamarc =0,promediomarc,m=0;
while(m<10)
{
printf("Marca del corredor[%d]:",m+1);
scanf("%d",&marcascorredor[m]);
sumamarc = sumamarc + marcascorredor[m];
m++;
}
promediomarc = sumamarc/m;
for(mc=0;mc<=9;mc++)
{
if (marcascorredor[mc]>promediomarc)
mayorprom++;
if (marcascorredor[mc]<promediomarc)
menorprom = menorprom +1;
}
printf("Hay %d corredores con marca MAYOR que el PROMEDIO =
%d\n",mayorprom,promediomarc);
printf("Hay %d corredores con marca MENOR que el PROMEDIO =
%d\n",menorprom,promediomarc);
return 0;
}

Tipos de Datos Compuestos Estticos en C

Ejemplo #5: Programa en C que almacene en un arreglo unidimensional


los 20 primeros nmeros primos. Un nmero primo es un nmero entero
mayor que cero, que tiene exactamente dos divisores positivos.
Tambin podemos definirlo como aquel nmero entero positivo que no
puede expresarse como producto de dos nmeros enteros positivos ms
pequeos que l, o bien, como producto de dos enteros positivos de
ms de una forma. Conviene observar que con cualquiera de las dos
definiciones el 1 queda excluido del conjunto de los nmeros
primos.
#include <stdio.h>
#define MAX 20
int primos[MAX];
int indice=0;
int main()
{
int bandera,numero,i,p;
numero=1;
while(indice<MAX)
{
bandera=1;
for(i=1;i<=numero;i++)
{
if((numero%i)==0)
if(i!=1 && i!=numero)
bandera=0;
}
if(bandera)
{
primos[indice]=numero;
indice++;
}
numero++;
}
for(p=0;p<MAX;p++)
printf(" %d",primos[p]);
return 0;
}

10

Tipos de Datos Compuestos Estticos en C

Ejemplo #6: Programa en C que almacena en un arreglo unidimensional


de tipo entero los primeros 10 nmeros de la serie Fibonacci.
#include <conio.h>
#define MAX 10
int main()
{
int fibonacci[MAX],f,primero=0,segundo=1,i;
fibonacci[0]=0;
fibonacci[1]=1;
for(i=2;i<=MAX;i++)
{
fibonacci[i]=primero+segundo;
primero=segundo;
segundo=fibonacci[i];
}
for(f=0;f<MAX;f++)
printf(" %d",fibonacci[f]);
return 0;
}
Ejemplo #7: Escriba un programa que lee dos vectores A y B de 20
elementos cada uno y multiplica el primer elemento de A por el
ultimo de B y as sucesivamente hasta llegar al ltimo elemento de
A por el primero elemento de B. El resultado de la multiplicacin
se almacena en un vector C.
#include <stdio.h>
#define MAX 5
int main()
{
int i,a[MAX],b[MAX],c[MAX];
/* se leen los elementos del vector */
printf("Introduzca los elementos del vector A \n");
for (i=0;i<MAX;i++)
{
printf("Vector A[%d]:",i+1);
scanf("%d",&a[i]);
}
printf("Introduzca los elementos del vector B \n");
for (i=0;i<MAX;i++)
{
printf("Vector B[%d]:",i+1);
scanf("%d",&b[i]);
}

11

Tipos de Datos Compuestos Estticos en C

/* proceso de calculo, resultado se almacena en arreglo c */


for(i=0;i<MAX;i++)
c[i] = a[i] * b[(MAX-1)-i];
/* se imprime el resultado, los elementos el arreglo c */
printf("El vector C es:");
for (i=0; i<MAX; i++)
printf(" %d ",c[i]);
return 0;
}
Ejemplo #8: Programa en C que permite introducir una lista con los
pesos de los N estudiantes de la asignatura de Programacin
Estructurada e imprime los pesos ordenados en formato ascendente
por el mtodo de la brbuja. La Ordenacin de brbuja (Bubble Sort
en ingls) es un sencillo algoritmo de ordenamiento. Funciona
revisando cada elemento de la lista que va a ser ordenada con el
siguiente, intercambindolos de posicin si estn en el orden
equivocado. Es necesario revisar varias veces toda la lista hasta
que no se necesiten ms intercambios, lo cual significa que la
lista est ordenada.
#include<stdio.h>
#define MAXE 100
int main()
{
float pesos[MAXE],temp;
int i,j,nest;
printf("Cuantos estudiantes son?: ");
scanf("%d",&nest);
for(i=0;i<nest;i++)
{
printf("Peso del Estudiante[%d]: ",i+1);
scanf("%f",&pesos[i]);
}
printf("\n****ARRAY ORIGINAL****\n");
for (i = 0;i<nest;i++)
printf("Peso[%d]: %.1f\n",i+1,pesos[i]);
/*Ordenacin del array con el mtodo de la brbuja en formato
ascendente*/
for (i=0;i<nest;i++)
for(j=0;j<(nest-1);j++)
if(pesos[j] > pesos[j+1])
{
temp=pesos[j];
pesos[j] = pesos[j+1];
pesos[j+1] = temp;
}

12

Tipos de Datos Compuestos Estticos en C

printf("\n****ARRAY ORDENADO EN FORMATO ASCENDENTE****\n");


for (i = 0;i<nest;i++)
printf("Peso[%d]: %.1f\n",i+1,pesos[i]);
return 0;
}


ARRAYS MULTIDIMENSIONALES

Es una coleccin finita, homognea 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 ms usuales son los de dos dimensiones, conocidos
tambin 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 mltiples filas
y mltiples 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
nmero 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 nmero de fila y su nmero
de columna (a, b).


DECLARACIN DE ARRAYS BIDIMENSIONALES

El espacio que los arreglos ocupan en memoria se reserva en el


momento de realizar la declaracin de los mismos.
La sintaxis para la declaracin de un array de dos dimensiones es:

13

Tipos de Datos Compuestos Estticos en C

<tipo_de_datoElemento> <nombre array>[<Nmero de Filas>] [<Nmero


de Columnas>]
Ejemplos de declaracin 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 carcter, sino que cada elemento es
otro array.
Los elementos de los arrays se almacenan en memoria de modo que el
subndice ms prximo al nombre del array es la fila y el otro
subndice, la columna.


INICIALIZACIN DE ARRAYS MULTIDIMENSIONALES

Los arrays multidimensionales se pueden inicializar, al igual que


los de una dimensin, cuando se declaran. La inicializacin 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},
int tabla [2] [3] =

{54, 55, 56}};

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

};

14

Tipos de Datos Compuestos Estticos en C

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
elementos es:

para

asignacin

directa

de

valores

los

Insercin de elementos:
<Nombre array> [ndice fila] [ndice columna] = valor elemento;
Extraccin de elementos:
<Variable> = <nombre array> [ndice fila] [ndice columna];


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 #1: Programa en C que permite inicializar a 1 todos los
elementos de un array bidimensional de 3 filas y 4 columnas.
#include<stdio.h>
int main()
{
int i,j,datos[3][4];
printf("\n***Visualizacion del Array 3F x 4C***\n");
for(i=0; i<3; i++)
for(j=0;j<4;j++)
datos[i][j]=1;
for(i=0; i<3; i++)
for(j=0;j<4;j++)
printf("%d ",datos[i][j]);
printf("\n");
return 0;
}

15

Tipos de Datos Compuestos Estticos en C

Ejemplo #2 Escribir un programa que rellene automticamente 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.
#include<stdio.h>
#define MAXF 10
#define MAXC 10
int main()
{
int indices[MAXF][MAXC];
int fil,col,f,c;
do
{
printf("NUMERO DE FILAS: ");
scanf("%d",&fil);
}while(fil < 1 || fil > MAXF);
do
{
printf("NUMERO DE COLUMNAS: ");
scanf("%d",&col);
}while(col < 1 || col > MAXC);
//Lectura de los datos de la matriz
for(f=0;f<fil;f++)
for(c=0;c<col;c++)
indices[f][c]=f+c;
//Escribir el array resultante
for(f=0;f<fil;f++)
{
for(c=0;c<col;c++)
printf("%d ",indices[f][c]);
printf("\n");
}
return 0;
}
Ejemplo #3: Realizar un programa que almacene nmeros en una matriz
de N * M. Imprimir la suma de los nmeros almacenados en la matriz.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int suma=0,f,c,fil,col;

16

Tipos de Datos Compuestos Estticos en C

printf("NUMERO DE FILAS: ");


scanf("%d",&fil);
printf("NUMERO DE COLUMNAS: ");
scanf("%d",&col);
int matriz[fil][col];
for(f=0;f<fil;f++)
{
for(c=0;c<col;c++)
{
printf("Elemento[%d][%d]: ",f,c);
scanf("%d",&matriz[f][c]);
suma = suma+matriz[f][c];
}
}
printf("\nLa suma de la matriz es: %d\n", suma);
return 0;
}
Ejemplo #4: Pseudocdigo y programa en C que lee un array de N*M
elementos y que guarda 0 en las posiciones pares y 1 en las
posiciones impares. Imprimir el array resultante.
Pseudocdigo:
Proceso ubicar_posiciones
Definir matriz_ejemplo,fila,columna,indice como Entero;
Dimension matriz_ejemplo[3,4];
Para

fila<-0 Hasta 2 Con Paso 1 Hacer


Para columna<-0 Hasta 3 Con Paso 1 Hacer
indice<-fila+columna;
Si indice MOD 2 = 0 Entonces
matriz_ejemplo[fila,columna] <- 0;
Sino
matriz_ejemplo[fila,columna] <- 1;
FinSi
Escribir Sin Saltar matriz_ejemplo[fila,columna],"
";
FinPara
Escribir "";
FinPara
FinProceso

17

Tipos de Datos Compuestos Estticos en C

Programa en C:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int f,c,fil,col,indice;
printf("NUMERO DE FILAS: ");
scanf("%d",&fil);
printf("NUMERO DE COLUMNAS: ");
scanf("%d",&col);
int matriz[fil][col];
for(f=0;f<fil;f++)
{
for(c=0;c<col;c++)
{
indice=f+c;
if(indice%2 == 0)
matriz[f][c]=0;
if(indice%2 != 0)
matriz[f][c]=1;
printf("%d ",matriz[f][c]);
}
printf("\n");
}
return 0;
}
Ejemplo #5: Programa en C que lee una matriz de n filas por m
columnas y calcula e imprime el producto de la diagonal principal y
la suma de la diagonal secundaria.
#include<stdio.h>
int main()
{
int f,c,fil,col,suma_ds=0,prod_dp=1;
printf("NUMERO DE FILAS: ");
scanf("%d",&fil);
col=fil;
int diagonales[fil][col];
for(f=0;f<fil;f++)
{
for(c=0;c<col;c++)
{
printf("Elemento[%d][%d]: ",f,c);
scanf("%d",&diagonales[f][c]);

18

Tipos de Datos Compuestos Estticos en C

//Diagonal Principal
if((f+c)==(fil-1))
suma_ds+= diagonales[f][c];
//Diagonal Secundaria
if(f==c)
prod_dp *= diagonales[f][c];
}
}
for(f=0;f<fil;f++)
{
for(c=0;c<col;c++)
{
printf("%d ",diagonales[f][c]);
}
printf("\n");
}
printf("\nEl producto de la DIAGONAL PRINCIPAL es: %d\n",prod_dp);
printf("\nLa suma de la DIAGONAL SECUNDARIA es: %d\n",suma_ds);
return 0;
}
Ejemplo #6: Pseudocdigo y programa en C que lee una matriz de N
filas y M columnas de valores enteros. A continuacin, debe pedir
el nmero de una fila (Recuerde validar dicho dato). El programa
devuelve el mayor elemento de esa fila.
Proceso ElementoMayorFila
Definir matriz_ejemplo,fila,columna,fil,col,may,posfil,c
entero;
Escribir "Filas: ";
Leer fil;
Escribir "Columnas: ";
Leer col;
Escribir fil,col;

como

Dimension matriz_ejemplo[fil,col];
Para

fila<-0 Hasta fil-1 Hacer


Para columna<-0 Hasta col-1 Hacer
Escribir Sin Saltar "Numero[",fila,",",columna,"]:";
Leer matriz_ejemplo[fila,columna];
FinPara
FinPara
may<-0;
Escribir Sin Saltar "Que fila desea evaluar? ";
Leer posfil;

19

Tipos de Datos Compuestos Estticos en C

Si posfil>0 Y posfil<=fil-1 entonces


Para c<-0 Hasta col-1 Hacer
Si matriz_ejemplo[posfil,c]>may Entonces
may<-matriz_ejemplo[posfil,c];
FinSi
FinPara
Escribir "El mayor elemento de la fila: ",posfil," es :
",may;
Sino
Escribir "Numero de fila invalido";
FinSi
Para

fila<-0 Hasta fil-1 Con Paso 1 Hacer


Para columna<-0 Hasta col-1 Con Paso 1 Hacer
Escribir Sin Saltar matriz_ejemplo[fila,columna]," ";
FinPara
Escribir "";
FinPara
FinProceso
Programa en C:
#include<stdio.h>
int main()
{
int f,c,fil,col,may,posfil;
printf("Numero de Filas: ");
scanf("%d",&fil);
printf("Numero de Columnas: ");
scanf("%d",&col);
int matriz_ejemplo[fil][col];
for (f=0;f<fil;f++)
{
for(c=0;c<col;c++)
{
printf("Numero[%d][%d]: ",f,c);
scanf("%d",&matriz_ejemplo[f][c]);
}
}
printf("Que fila desea evaluar(A partir de Fila #1)?: ");
scanf("%d",&posfil);
if(posfil>=0 && posfil<=fil-1)
{
may=0;

20

Tipos de Datos Compuestos Estticos en C

for(c=0;c<col;c++)
{
if(matriz_ejemplo[posfil][c]>may)
may=matriz_ejemplo[posfil][c];
}
printf("El
mayor
elemento
de
la
%d\n",posfil,may);

fila

#%d

es:

}
else
printf("Numero de fila invalido\n");
return 0;
}


CARACTERES Y CADENAS DE CARACTERES

Caracteres: Un carcter, es un tipo de dato simple que representa


un nmero, una letra o cualquier carcter especial disponible del
teclado de la mquina. Cuando se asigna un carcter a una variable
tipo char, ste siempre se debe escribir entre apstrofos .
Una cadena de caracteres: Es un tipo de datos estructurado
compuesto por caracteres. En el lenguaje de programacin C, una
cadena de caracteres se define como un arreglo de caracteres que
termina con el carcter nulo (\0). Cuando se asigna una cadena de
caracteres a una variable de tipo char, sta se debe escribir entre
comillas .
 Ejemplo: char Cadena[]= Programacion;
Es importante comprender la diferencia entre un array de caracteres
y una cadena de caracteres. Las cadenas contienen un carcter nulo
al final del array de caracteres.
Cadena[0]
Cadena[1]
Cadena[2]
Cadena[3]
Cadena[4]
Cadena[5]
Cadena[6]
Cadena[7]
Cadena[8]
Cadena[9]
Cadena[10]
Cadena[11]

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

Array de Caracteres

Cadena[0]
Cadena[1]
Cadena[2]
Cadena[3]
Cadena[4]
Cadena[5]
Cadena[6]
Cadena[7]
Cadena[8]
Cadena[9]
Cadena[10]
Cadena[11]

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

Carcter
Cadena[12] \0 Nulo
Cadena

21

Tipos de Datos Compuestos Estticos en C

Las cadenas se sealan incluyendo un carcter final de la cadena;


el carcter nulo (\0), cuyo valor en el cdigo ASCII es 0. El medio
ms fcil de inicializar un array de caracteres es hacer la
inicializacin de la declaracin:
char Cadena[13]=Programacion;
El compilador aade automticamente un carcter nulo al final de la
cadena, de modo que la secuencia real sera:
char Cadena[13]=Programacion;

Cadena

La asignacin de
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'

valores

Cadena

n \0
se

puede

hacer

del

modo

Para copiar una constante cadena o copiar una variable de cadena a


otra variable de cadena se debe utilizar la funcin de la
biblioteca estndar: strcpy(cadena1,cadena2) permite copiar una
constante de cadena en una cadena. Para copiar el nombre "karen" en
el array nombre, se puede escribir strcpy(nombre, "karen" ) ;
strcpy, aade un carcter nulo al final de la cadena.
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;
}

22

Tipos de Datos Compuestos Estticos en C

Ejemplo #1: Programa en C que al recibir como datos una cadena de


caracteres y una posicin de la cadena, determine si el carcter
correspondiente a la posicin dada es una letra minscula.
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main()
{
char p,cad[50];
int n;
printf("Ingrese la cadena de hasta 50 caracteres: ");
gets(cad);
printf("Ingrese la posicion en la cadena que desea verificar:
");
scanf("%d",&n);
if((n>=0) && (n<50))
{
p=cad[n-1];
if(islower(p))
printf("\n%c es una letra minuscula\n",p);
else
printf("\n%c no es una letra minuscula\n",p);
}
else
printf("\nEl valor de la posicin es incorrecto");
return 0;
}
Las cadenas de caracteres se pueden almacenar fcilmente en
cualquier tipo de arreglo, utilizando una representacin de este
tipo se pueden resolver de manera eficiente una gran cantidad de
problemas.
La
nica
caracterstica
importante
que
debemos
considerar es la siguiente: Dado que una cadena se define como un
arreglo unidimensional, si queremos almacenar cadenas de caracteres
en arreglos unidimensionales debemos de trabajar de forma similar a
como lo hacemos con arreglos bidimensionales. En las filas
almacenamos las cadenas y en las columnas los caracteres de cada
cadena. Es decir, si queremos almacenar un grupo de 10 cadenas de
30 caracteres como mximo en el arreglo unidimensional Cadena, ste
lo debemos declarar de la siguiente forma: char Cadena[10][30];
El primer ndice se utiliza para indicar la fila y el segundo para
sealar el carcter de la cadena.

23

Tipos de Datos Compuestos Estticos en C

Ejemplo #2: Programa en C que al recibir como dato un arreglo


unidimensional de tipo cadena de caracteres, determina el nmero de
minsculas y maysculas que hay en cada cadena.
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main()
{
char frase[20][50]; //Arreglo Unidimensional de cadena de caracteres
int n,i,mi=0,ma=0,ca;
printf("Ingrese el numero de cadenas a leer: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
/*Para cada fila se lee la cadena correspondiente*/
printf("Cadena[%d]: ",i+1);
fflush(stdin);
gets(frase[i]);
}
for(i=0;i<n;i++)
{
ca=0;
mi=0;
ma=0;
while(frase[i][ca] != '\0')
{
if(islower(frase[i][ca]))
mi++;
else
if(isupper(frase[i][ca]))
ma++;
ca++;
}
printf("\n%s tiene %d letras MINUSCULAS
MAYUSCULAS \n",frase[i],mi,ma);
}
return 0;
}

24

%d

letras

Tipos de Datos Compuestos Estticos en C

Ejemplo #3: Programa en C que al recibir como datos cadenas de


caracteres de hasta 80 caracteres como mximo, cuenta el nmero de
palabras que tiene cada lnea. Cada cadena se lee llamando a la
funcin gets() y para contar las palabras se recorre el array
cadena contando el nmero de espacios, la longitud de la cadena se
determina con una llamada a la funcin strlen(). El nmero de
palabras ser el nmero de espacios(blancos) contados, ms uno ya
que la ltima palabra no termina con un espacio sino con el retorno
de carro. La ejecucin termina tecleando al inicio de una lnea Z
(Ctrl+Z); entonces la funcin gets() devuelve NULL y termina el
bucle.
#include<stdio.h>
#include<string.h>
int main()
{
char cadena[80],*apunta;
int car,np;
printf("Introducir Cadena: ");
apunta=gets(cadena);
while(apunta != NULL)
{
np=0;
for(car=0;car<strlen(cadena);car++)
{
if(cadena[car] == ' ')
np++;
}
if(car>0)
np++;
printf("\n%s tiene %d palabras\n",cadena,np);
printf("Introducir Cadena: ");
apunta=gets(cadena);
}
return 0;
}
Ejemplo #4: Programa en C que al recibir como datos cadenas de
caracteres que contienen nmeros reales, calcula e imprime la suma
y el promedio de dichos nmeros.
#include
#include
#include
#include

<stdio.h>
<string.h>
<stdlib.h>
<ctype.h>

25

Tipos de Datos Compuestos Estticos en C

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:

Ejemplo #5: Programa en C que al recibir como datos cadenas de


caracteres, calcula e imprime la cantidad de vocales en minscula y
mayscula que hay en dicha cadena.
#include <stdio.h>
#include <string.h>
#define MAXLON 80
int main(void)
{

26

Tipos de Datos Compuestos Estticos en C

char cadena[MAXLON+1];
int i, longitud,contmin=0,contmay=0;
printf ("Introduce una cadena (max. %d caracteres.): ",
MAXLON);
gets(cadena);
longitud = strlen(cadena);
for (i = 0; i < longitud ; i++)
{
if (cadena[i] =='a' || cadena[i] == 'e' || cadena[i] ==
'i' || cadena[i] == 'o' || cadena[i] == 'u')
contmin++;
if (cadena[i] =='A' || cadena[i] == 'E' || cadena[i] ==
'I' || cadena[i] == 'O' || cadena[i] == 'U')
contmay++;
}
printf ("***Hay %d Vocales Minusculas***\n", contmin);
printf ("***Hay %d Vocales Mayusculas***\n", contmay);
return 0;
}
Ejemplo #6: Programa para leer una lista de cadenas de caracteres,
y encuentra la cadena de mayor longitud sin utilizar la funcin
strlen e imprime la cadena y el nmero de caracteres de la misma.
#include <stdio.h>
#include <string.h>
int main()
{
int i, n,cadmay=-1,posmay=0,ncar=0;
char cad[50],frase[20][50];
printf("Cuantas cadenas desea leer? ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Cadena[%d]: ",i+1);
fflush(stdin);
gets(frase[i]);
}
for(i=0;i<n;i++)
{
ncar=0;
strcpy(cad,frase[i]);
while(cad[ncar]!='\0')
{
ncar++;
}
27

Tipos de Datos Compuestos Estticos en C

if(ncar>cadmay)
{
cadmay=ncar;
posmay=i;
}
}
printf("\nLa cadena No.%d: %s es la que tiene mayor longitud
con %d caracteres\n",posmay+1,frase[posmay],cadmay);
return 0;
}
Ejemplo de Salida:

Ejemplo #7: Programa en C que, al recibir como dato una lnea de


texto (cadena de caracteres), imprime esa cadena en forma inversa.
#include <stdio.h>
int main()
{
char palabra[30];
int i=0;
printf("Ingrese una cadena:");
gets(palabra);
puts(palabra);
while(palabra[i] != '\0')
i++;
printf("%s tiene %d letras.\n", palabra, i);
printf("%s escrita al reves es: ",palabra);
while (i>=0)
{
printf("%c",palabra[i]);
i--;
}
return 0;
}

28

Tipos de Datos Compuestos Estticos en C

EJERCICIOS PROPUESTOS:
1. Realice un programa en C que declare y lea un arreglo de N
elementos, imprimir la suma de los nmeros pares y el producto
de los nmeros impares del arreglo.
2. Escriba un programa que lee dos vectores A y B de 20 elementos
cada uno y multiplica el primer elemento de A por el ltimo de
B y as sucesivamente hasta llegar al ltimo elemento de A por
el primero elemento de B. El resultado de la multiplicacin
se almacena en un vector C.
3. Realice un programa en C que lea un arreglo de N datos
asigne a sus elementos los valores 1, 4, 9, 16........etc
12, 22, 32...).

y
(

4. 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 ms veces aparece (si dos o ms edades aparecen
muchas veces con la mxima frecuencia, asumiremos que
cualquiera de ellas es la moda).
5. Realice un programa en C que calcule e imprima la transpuesta
de una matriz. La transpuesta de una matriz se obtiene al
escribir las filas de la matriz como columnas y las columnas
como filas.
6. 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 penltima y as sucesivamente.
7. Escribir
que una
vende 5
por cada
vendedor

un programa en C que lea un array de N * 5 indicando


empresa tiene N vendedores cada uno de los cuales
productos. El array almacena los ingresos obtenidos
vendedor en cada producto, imprimir el total de cada
y obtener los ingresos totales de la tienda.

8. Escribir un programa en C que, al recibir como datos una


cadena de caracteres y un carcter X, determine cuntas veces
se encuentra el carcter X en dicha cadena.
9. Realice un programa en C que, al recibir como dato una cadena
de caracteres, escriba esa lnea en forma inversa.
10.
Escribir un programa que, al recibir como dato una cadena
de caracteres, convierta el primer carcter de cada palabra si
sta fuera una letra, de minscula a mayscula.

29

Tipos de Datos Compuestos Estticos en C

BIBLIOGRAFA BSICA:

Ceballos, Francisco Javier: C/C++ Curso de Programacin, 2da


Edicin. Editorial RA-MA, 2002.

Joyanes Aguilar, Luis; Zahonero Martnez Ignacio: Programacin


en C. McGraw Hill, 2001.

Gottfried, Byron S: Programacin en C. McGraw Hill, 1991.

30

También podría gustarte