Arreglos Bidimensionales
Arreglos Bidimensionales
Arrays
Un array, vector, tabla o arreglo es una cantidad de valores de un determinado tipo
colocados de manera secuencial e indexados, cuya forma de acceder a ellos es
especificando la posicin (o ndice) donde se encuentre dentro del array.
Declaracin.
Para declarar un array hay que seguir la siguiente estructura:
Tipo_dato nombre_variable [longitud_array];
El tipo de datos puede ser cualquier de los vistos anteriormente, por ejemplo, un array de
20 enteros sera as:
int num[20];
La declaracin es exactamente igual que cuando declaramos variables normales, salvo que
hay que aadir la longitud del array en cuestin.
Una cosa importante que hay que tener en cuenta a la hora de trabajar con arrays en C es
que la primera celda del array tiene el ndice 0, por lo que el array anterior tendra las
siguientes posiciones:
num[0], num[1], num[2], num[3], num[4], num[5], num[6] num[19].
En una misma fila de declaracin se pueden declarar tanto varios arrays a la vez como
variables normales.
int num1,num2,num3[10],num4,num5[5];
Tambin es posible declarar arrays prescindiendo del uso de nmeros para definir su
tamao, aunque es necesario que tengamos en cuenta ciertos factores:
1 Para declarar un array usando identificadores slo se podr usar constantes definidas
mediante #define.
#define TAM 50
int main(void)
{
int a[TAM];
}
2 No es correcto definir el tamao de un array con variables.
int main(void)
{
int tam=50;
int a[tam];
}
3 No es correcto definir el tamao de un array con constantes declaradas mediante
const. Esto es debido a que, a efectos del compilador, una constante declarada mediante
const es una variable de slo lectura.
int main(void)
{
const int tam=50;
int a[tam];
}
Asignacin de valores e iniciacin de un array.
Cuando se declara un array las celdas de ste contienen valores completamente
aleatorios, es necesario que le asignemos los valores con los que necesitamos trabajar, para
esto hay varias posibilidades.
Asignacin directa de un valor mediante el operador de asignacin =, hay que especificar
mediante su ndice la celda concreta donde se va a almacenar. En el array anterior sera tal
que as:
a[2] = 1;
Por lo general cuando comenzamos un programa se debe inicializar los valores de todo el
array, es decir, tendremos que asignar valores en todos sus ndices, para ello lo mejor es
recorrer el array completo mediante un bucle.
El bucle for es perfecto para trabajar con arrays puesto que al tener controlados todos los
elementos esenciales de un bucle podemos centrarnos en trabajar con el array directamente.
Un ejemplo de inicializacin de un array es el siguiente:
#include <stdio.h>
#define TAM 20
int main(void)
{
int x, a[TAM];
for (x = 0; x < TAM; x++)
{
a[x]=0;
}
return 0;
}
Tambin es posible inicializar un array en su propia declaracin, para ello debemos
seguir la siguiente estructura:
Tipo_dato nombre_variable [longitud_array] = {valor0, valor1... valor_longitud_array};
Un ejemplo prctico sera el siguiente:
int num[10] = {0,0,0,0,0,0,0,0,0,0}:
as nos aseguramos de que tenemos el array con valores definidos por nosotros desde el
principio del programa.
Recorrer un array.
Como hemos podido comprobar en el anterior apartado, un array se recorre mediante un
bucle.
Se toma como primer valor el cero puesto que la primera celda tiene ndice cero, por lo
tanto la condicin para salir del bucle es el tamao menos uno. Si recorremos el array y nos
pasamos, o bien hacemos referencia a una celda fuera del rango del array el programa dar
errores.
\0
\0
{
char saludo[TAM +1];
scanf(%s,saludo);
printf ("%s.\n", saludo);
return 0;
}
Como se puede observar no es necesario de nuevo recorrer el array, la instruccin hace
posible asignar los caracteres directamente en sus celdas.
Tambin si se observa el cdigo, en la instruccin scanf no he puesto un & delante del
array, esto es debido a que hasta ahora hemos usado el scanf con & porque lo que scanf
necesita es una direccin de memoria donde alojar el valor, cosa que hacamos con &,
como los arrays son en si mismos direcciones de memoria indexados no es necesario
colocar el &.
Prueba el cdigo introduciendo la siguiente cadena Hola buenos das y observa el
resultado.
Cadenas y gets.
Para solucionar el problema del scanf con el array de caracteres tenemos dentro de la
librera stdio.h la instruccin gets
Con gets no es necesario utilizar una marca de formato, tan slo con especificar el array
es suficiente, veamos un ejemplo:
#include <stdio.h>
#define TAM 50
int main(void)
{
char saludo[TAM +1];
gets(saludo);
printf ("%s.\n", saludo);
return 0;
}
Prueba ahora el cdigo introduciendo de nuevo la cadena Hola buenos das y observa el
resultado.
Copiar cadenas.
El caso de necesitar hacer una copia de cadenas es una cosa que nos podemos encontrar
perfectamente en un programa, hasta ahora todo parece que se puede realizar perfectamente
mediante sentencias, por lo que copiar cadenas no debe ser muy distinto, veamos el
siguiente ejemplo:
#include <stdio.h>
#define TAM 50
int main(void)
{
char saludo[TAM +1] = "hola";
char despedida[TAM +1];
despedida=saludo;
printf ("%s.\n", despedida);
return 0;
}
Esto es incorrecto, el compilador dar error y el programa no llegar ni a ejecutarse, esto
es debido a que, recordemos, las cadenas son arrays, y los arrays son direcciones de
memoria que una vez declarados no se pueden alterar, por lo que en el programa anterior lo
que estaramos intentando hacer es asignar la direccin de memoria de otra direccin de
memoria.
La copia de cadenas debe realizarse carcter a carcter, asignando los valores uno a
uno en todas las posiciones implicadas, veamos el mismo ejemplo pero correctamente:
#include <stdio.h>
#define TAM 50
int main(void)
{
char saludo[TAM +1] = "hola";
char despedida[TAM +1];
for (x=0;x<TAM;x++)
{
despedida[x]=saludo[x];
}
printf ("%s.\n", despedida);
return 0;
}
Esta es la forma correcta de copiar cadenas, no obstante se puede refinar un poco dado
que tenemos dos cadenas de 50 caracteres y realmente slo tenemos que copiar cuatro, para
ello introduciremos un condicional if para detectar el \0 y salir del bucle, veamos el
resultado final:
#include <stdio.h>
#define TAM 50
int main(void)
{
char saludo[TAM +1] = "hola";
char despedida[TAM +1];
for (x=0;x<TAM;x++)
{
despedida[x]=saludo[x];
if (saludo[x]==\0)
{
break;
}
}
printf ("%s.\n", despedida);
return 0;
}
Esto se puede plantear de mltiples formas, podemos refinarlo de diferentes maneras,
controlando en algunos sitios o bien modificando las condiciones del bucle.
Arrays Multidimensionales.
Hasta ahora lo que hemos visto como array es una tabla de una columna y un nmero
determinado de filas, es posible ampliar todo esto bastante ms, para ello se utilizan los
arrays multidimensionales. De esta forma podemos trabajar con una tabla de filas y
columnas a determinar, pero eso no es todo, tambin podemos darle ms dimensiones al
array.
Declaracin
Los arrays multidimensionales se declaran de la misma forma que los arrays normales,
pero por cada dimensin que queramos aadir debemos especificar igualmente su longitud.
Registros.
El ltimo punto de ste captulo es bastante interesante, imaginemos que necesitamos
gestionar los datos de una tienda de discos, sera necesario conocer varios datos como por
ejemplo el nombre del disco, el ao en que se puso a la venta o el gnero al que pertenece.
Esto se puede realizar perfectamente usando variables y arrays, pero hay ocasiones en las
que es mejor agrupar estos datos con el fin de poder acceder a todos ellos de una sola vez.
Imaginemos que queremos gestionar los datos de 100 discos de msica, es sencillo
porque utilizaremos tres arrays, uno para el nombre del disco, otro para el ao de
publicacin y otro para el gnero. Todo perfecto.
Ahora imaginemos que necesitamos buscar un disco en concreto y mostrar la informacin
completa del disco, del que slo sabemos el nombre. Buscamos en el primer array y lo
localizamos, tenemos el nombre, ahora busquemos en el segundo array el ao en que se
public, deberemos saber en qu posicin del array se encuentra, despus busquemos en el
siguiente array el gnero al que pertenece No es un poco engorroso esto?
Ahora un caso perfectamente posible, imaginemos que deseamos eliminar un disco, nos
vamos al array del nombre y lo eliminamos, despus al array de ao y luego al array de
gnero, nuevamente engorroso.
Ahora lo ltimo, imaginemos que nos hemos equivocado al programar y resulta que por
un error al eliminar el nombre del disco no hemos podido eliminar el ao y el gnero. El
caos est servido.
En C disponemos de la posibilidad de declarar registros, esto son agrupaciones de datos
de cualquier tipo, accesibles mediante identificadores.
Usando un registro podemos agrupar los tres arrays anteriores en uno slo, y si
queremos realizar cualquier operacin la estaremos haciendo con un solo array, un array de
registros.
La representacin de los tres arrays podra ser as:
Disco1
Disco2
Disco3
2000
1997
1999
Pop
Rock
Pop
Para poder hacer referencia a una variable del registro tan slo debemos indicar su
nombre de la siguiente forma:
Discos.nombre
Discos.anno
Discos.genero
El tratamiento con respecto a los operadores es el mismo que con las variables, podemos
asignar valores, realizar operaciones, comparar, etc.
En el caso que nos ocupa, el de los discos, al tratarse de un array lo recorremos como ya
hemos visto y trabajaremos con las variables as:
Discos[x].nombre
Discos[x].anno
Discos[x].genero
Donde X es el ndice del array.
Con esto hemos terminado el sexto captulo del curso bsico de C. En ste captulo hemos
aprendido los conceptos de arrays simples y multidimensionales, hemos visto como
recorrerlos y como trabajar con sus datos, tambin hemos visto las cadenas o arrays de
caracteres y la nueva instruccin gets, por ltimo hemos definido los registros, hemos visto
como construirlos y como operar con ellos.
En el siguiente captulo veremos dos conceptos importantes dentro de la programacin, los
procedimientos y las funciones, as como el paso de parmetros y formas de utilizacin.
- See more at: http://programavideojuegos.blogspot.com.es/2013/05/curso-basico-de-c-610arrays-y-registros.html#sthash.B3z8RSeV.dpuf
Durante el sexto captulo del curso bsico de C vimos la teora de los arrays y los
registros. Hace unos das dej una tanda de 25 ejercicios para practicar.
Realice un programa en C:
1. Que rellene un array con los 100 primeros nmeros enteros y los muestre en pantalla en
orden ascendente.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int x,tabla[100];
for (x=1;x<=100;x++)
{
tabla[x]=x;
}
for (x=1;x<=100;x++)
{
printf("%d\n",tabla[x]);
}
system("PAUSE");
return 0;
}
2. Que rellene un array con los 100 primeros nmeros enteros y los muestre en pantalla en
orden descendente.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int x,tabla[100];
for (x=1;x<=100;x++)
{
tabla[x]=x;
}
for (x=100;x>=1;x--)
{
printf("%d\n",tabla[x]);
}
system("PAUSE");
return 0;
}
3. Que rellene un array con los nmeros primos comprendidos entre 1 y 100 y los muestre en
pantalla en orden ascendente.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int x,cont,z,i,tabla[100];
i=0;
for (x=1;x<=100;x++)
{
cont=0;
for (z=1;z<=x;z++)
{
if (x%z==0)
{
cont++;
}
}
for (x=0;x<i;x++)
{
printf("%d\n",tabla[x]);
}
system("PAUSE");
return 0;
}
4. Que rellene un array con los nmeros pares comprendidos entre 1 y 100 y los muestre en
pantalla en orden ascendente.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int x,cont,z,i,tabla[100];
i=0;
for (x=1;x<=100;x++)
{
cont=0;
if (x%2==0)
{
tabla[i]=x;
i++;
}
}
for (x=0;x<i;x++)
{
printf("%d\n",tabla[x]);
}
system("PAUSE");
return 0;
}
5. Que rellene un array con los nmeros impares comprendidos entre 1 y 100 y los muestre en
pantalla en orden ascendente.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int x,cont,z,i,tabla[100];
i=0;
for (x=1;x<=100;x++)
{
cont=0;
if (x%2==1)
{
tabla[i]=x;
i++;
}
}
for (x=0;x<i;x++)
{
printf("%d\n",tabla[x]);
}
system("PAUSE");
return 0;
}
6. Que lea 10 nmeros por teclado, los almacene en un array y muestre la suma, resta,
multiplicacin y divisin de todos.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int x,tabla[10];
int sum,res,mul,div;
for (x=0;x<10;x++)
{
printf("Introduzca nmero\n");
scanf("%d",&tabla[x]);
}
sum=tabla[0];
res=tabla[0];
mul=tabla[0];
div=tabla[0];
for (x=1;x<10;x++)
{
sum=sum+tabla[x];
res=res-tabla[x];
mul=mul*tabla[x];
div=div/tabla[x];
}
printf("Suma: %d\n",sum);
printf("Resta: %d\n",res);
printf("Multiplicacin: %d\n",mul);
printf("Divisin: %d\n",div);
system("PAUSE");
return 0;
}
7. Que lea 10 nmeros por teclado, los almacene en un array y los ordene de forma ascendente.
#include <stdio.h>
#include <stdlib.h>
int main()
{
float aux, numeros[10];
int i,j,n=10;
for (i=0;i<n;i++){
printf("Escriba un nmero");
scanf("%f",&numeros[i]);
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(numeros[i]<numeros[j])
{
aux=numeros[i];
numeros[i]=numeros[j];
numeros[j]=aux;
}
}
}
for (i=n-1;i>=0;i--){
printf("%f\n",numeros[i]);
}
system("PAUSE");
return 0;
}
8. Que lea 10 nmeros por teclado, 5 para un array y 5 para otro array distinto. Mostrar los 10
nmeros en pantalla mediante un solo array.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int aux, numeros1[5],numeros2[5],numeros3[10];
int i,j;
for (i=0;i<5;i++){
printf("Escriba un nmero");
scanf("%d",&numeros1[i]);
}
for (i=0;i<5;i++){
printf("Escriba un nmero");
scanf("%d",&numeros2[i]);
}
for(i=0;i<5;i++)
{
numeros3[i]=numeros1[i];
for(i=0;i<5;i++)
{
numeros3[5+i]=numeros2[i];
}
for (i=0;i<10;i++){
printf("%d\n",numeros3[i]);
}
system("PAUSE");
return 0;
}
9. Que lea 5 nmeros por teclado, los copie a otro array multiplicados por 2 y muestre el
segundo array.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int aux, numeros1[5],numeros2[5];
int i,j;
for (i=0;i<5;i++){
printf("Escriba un nmero");
scanf("%d",&numeros1[i]);
}
for(i=0;i<5;i++)
{
numeros2[i]=numeros1[i]*2;
}
for (i=0;i<5;i++){
printf("%d\n",numeros2[i]);
}
system("PAUSE");
return 0;
}
10. Que lea 5 nmeros por teclado, los copie a otro array multiplicados por 2 y los muestre todos
ordenados usando un tercer array.
#include <stdio.h>
#include <stdlib.h>
int main()
{
for (i=0;i<5;i++){
printf("Escriba un nmero");
scanf("%d",&numeros1[i]);
}
for(i=0;i<5;i++)
{
numeros2[i]=numeros1[i]*2;
}
for(i=0;i<5;i++)
{
numeros3[i]=numeros1[i];
}
for(i=0;i<5;i++)
{
numeros3[5+i]=numeros2[i];
}
for (i=0;i<10;i++){
printf("%d\n",numeros3[i]);
}
system("PAUSE");
return 0;
}
11. Que rellene un array con los 100 primeros nmeros pares y muestre su suma.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int x,cont,sum,i,tabla[100];
i=0;
sum=0;
for (x=1;x<=100;x++)
{
cont=0;
if (x%2==0)
{
tabla[i]=x;
i++;
}
}
for (x=0;x<i;x++)
{
sum=sum+tabla[x];
}
printf("%d\n",sum);
system("PAUSE");
return 0;
}
12. Que lea 10 nmeros por teclado, los almacene en un array y muestre la media.
#include <stdio.h>
#include <stdlib.h>
int main()
{
float sum, numeros1[10];
int i;
sum=0;
for (i=0;i<10;i++){
printf("Escriba un nmero");
scanf("%f",&numeros1[i]);
}
for(i=0;i<10;i++)
{
sum=sum+numeros1[i];
}
printf("%f\n",sum/10);
system("PAUSE");
return 0;
}
13. Que mediante un array almacene nmeros tanto positivos como negativos y los muestre
ordenados.
#include <stdio.h>
#include <stdlib.h>
int main()
{
float aux, numeros[10];
int i,j,n=10;
for (i=0;i<n;i++){
printf("Escriba un nmero");
scanf("%f",&numeros[i]);
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(numeros[i]<numeros[j])
{
aux=numeros[i];
numeros[i]=numeros[j];
numeros[j]=aux;
}
}
}
for (i=n-1;i>=0;i--){
printf("%f\n",numeros[i]);
}
system("PAUSE");
return 0;
}
14. Que rellene un array con 20 nmeros y luego busque un nmero concreto.
#include <stdio.h>
#include <stdlib.h>
for (i=0;i<20;i++){
printf("Escriba un nmero");
scanf("%d",&vector[i]);
}
while(inf<=sup)
{
centro=(sup+inf)/2;
if (vector[centro]==dato)
{
printf("Existe\n");
x=1;
break;
}
else if(dato < vector [centro] )
{
sup=centro-1;
}
else
{
inf=centro+1;
}
}
if (x==0)
{
printf("No existe\n");
}
system("PAUSE");
return 0;
15. Que pinte un tablero de ajedrez, los peones con la letra P, las torres con T, los caballos con C,
los alfiles con A, el rey con R y la reina con M.
#include <stdio.h>
#include <stdlib.h>
int x,y;
for (x=0;x<8;x++)
{
for (y=0;y<8;y++)
{
//peones
if (x==1 || x==6)
{
printf("P");
}
//torres
else if ((x==0 && y==0) ||
(x==7 && y==0) ||
(x==0 && y==7) ||
(x==7 && y==7)
)
{
printf("T");
}
//caballos
else if ((x==0 && y==1) ||
(x==7 && y==1) ||
(x==0 && y==6) ||
(x==7 && y==6)
)
{
printf("C");
}
//alfiles
else if ((x==0 && y==2) ||
(x==7 && y==2) ||
(x==0 && y==5) ||
(x==7 && y==5)
)
{
printf("A");
}
//reina
else if ((x==0 && y==3) ||
(x==7 && y==3)
)
{
printf("M");
}
//rey
else if ((x==0 && y==4) ||
(x==7 && y==4)
)
{
printf("R");
}
else
{
printf(" ");
}
}
printf("\n");
}
system("PAUSE");
return 0;
16. Que muestre los primeros 100 nmeros de izquierda a derecha usando un array de dos
dimensiones.
#include <stdio.h>
#include <stdlib.h>
for (x=0;x<10;x++)
{
for (y=0;y<10;y++)
{
numeros[x][y]=(x*10)+1+y;
}
for (x=0;x<10;x++)
{
for (y=0;y<10;y++)
{
printf("%d ",numeros[x][y]);
}
printf("\n");
}
system("PAUSE");
return 0;
17. Que muestre los primeros 100 nmeros de izquierda a derecha usando un array de dos
dimensiones, la ltima fila a mostrar la suma de sus respectivas columnas.
#include <stdio.h>
#include <stdlib.h>
for (y=0;y<10;y++)
{
sum=0;
for (x=0;x<10;x++)
{
numeros[x][y]=(x*10)+1+y;
sum=sum+numeros[x][y];
}
numeros[10][y]=sum;
}
for (x=0;x<11;x++)
{
for (y=0;y<10;y++)
{
printf("%d ",numeros[x][y]);
}
printf("\n");
}
system("PAUSE");
return 0;
}
18. Que rellene un array de dos dimensiones con nmeros pares, lo pinte y despus que pida
una posicin X,Y y mostrar el nmero correspondiente.
#include <stdio.h>
#include <stdlib.h>
for (x=0;x<3;x++)
{
for (y=0;y<3;y++)
{
numeros[x][y]=num;
num=num*2;
}
}
scanf("%d",&x);
printf("Introduzca coordenada y: ");
scanf("%d",&y);
system("PAUSE");
return 0;
}
19. Que rellene una matriz de 3x3 y muestre su traspuesta (la traspuesta se consigue
intercambiando filas por columnas y viceversa).
#include <stdio.h>
#include <stdlib.h>
for (x=0;x<3;x++)
{
for (y=0;y<3;y++)
{
numeros[x][y]=num;
num++;
}
}
", numeros[x][y]);
}
printf("\n\n\n");
}
", numeros[y][x]);
system("PAUSE");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int indice,x;
char frase[50];
printf("\n\n");
system("PAUSE");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int sum=0,x;
char frase[50];
gets(frase);
printf("\n\n");
system("PAUSE");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
sum++;
}
}
printf("\n\n");
system("PAUSE");
return 0;
}
23. Que lea una cadena y la encripte sumando 3 al cdigo ASCII de cada carcter. Mostrar por
pantalla.
#include <stdio.h>
#include <stdlib.h>
system("PAUSE");
return 0;
}
24. Que gestione los datos de stock de una tienda de comestibles, la informacin a recoger ser:
nombre del producto, precio, cantidad en stock. La tienda dispone de 10 productos distintos. El
programa debe ser capaz de:
#include <stdio.h>
#include <stdlib.h>
struct producto {
char nombre[50];
float precio;
int cantidad;
};
int x,opcion=1;
for (x=0;x<10;x++)
{
strcpy(productos[x].nombre,"X");
productos[x].precio=0;
productos[x].cantidad=0;
}
if (opcion==1)
{
printf("Introduzca un nombre: ");
gets(prod.nombre);
gets(prod.nombre);
printf("Introduzca un precio: ");
scanf("%f",&prod.precio);
printf("Introduzca un stock: ");
scanf("%d",&prod.cantidad);
}
}
printf("\nProducto creado. \n\n");
}
else if (opcion==2)
{
printf("Introduzca un nombre: ");
gets(prod.nombre);
gets(prod.nombre);
if (strcmp(productos[x].nombre,prod.nombre)==0)
{
printf("\nNombre: %s\n",productos[x].nombre);
printf("Precio: %f\n",productos[x].precio);
printf("Cantidad en Stock: %d\n",productos[x].cantidad);
}
}
printf("\n\n");
}
else if (opcion==3)
{
printf("Introduzca un nombre: ");
gets(prod.nombre);
gets(prod.nombre);
system("PAUSE");
return 0;
}
25. Que gestiona las notas de una clase de 20 alumnos de los cuales sabemos el nombre y la
nota. El programa debe ser capaz de:
a. Buscar un alumno.
b.
c.
d.
e.
f.
Modificar su nota.
Realizar la media de todas las notas.
Realizar la media de las notas menores de 5.
Mostrar el alumno que mejores notas ha sacado.
Mostrar el alumno que peores notas ha sacado.
#include <stdio.h>
#include <stdlib.h>
struct alumno {
char nombre[50];
float nota;
};
int x,opcion=1;
float sum=0,cont=0,mejor,peor;
for (x=0;x<5;x++)
{
printf("Introduzca nombre alumno:");
gets(alumnos[x].nombre);
gets(alumnos[x].nombre);
printf("Introduzca nota:");
scanf("%f",&alumnos[x].nota);
}
if (opcion==1)
{
printf("Introduzca un nombre: ");
gets(alum.nombre);
gets(alum.nombre);
if (strcmp(alumnos[x].nombre,alum.nombre)==0)
{
printf("\nNombre: %s\n",alumnos[x].nombre);
printf("Nota: %f\n",alumnos[x].nota);
}
}
printf("\n\n");
}
else if (opcion==2)
{
printf("Introduzca un nombre: ");
gets(alum.nombre);
gets(alum.nombre);
{
sum=0;
for(x = 0; x < 5;x++)
{
sum=sum+alumnos[x].nota;
}
printf("\nLa media de las notas es de: %f \n",(sum/5));
}
else if (opcion==4)
{
sum=0;
cont=0;
for(x = 0; x < 5;x++)
{
if (alumnos[x].nota<5)
{
sum=sum+alumnos[x].nota;
cont++;
}
}
printf("\nLa media de las notas inferiores a 5 es: %f \n",sum/cont);
}
else if (opcion==5)
{
mejor=0;
for(x = 0; x < 5;x++)
{
if (alumnos[x].nota>mejor)
{
mejor=alumnos[x].nota;
alum.nota=alumnos[x].nota;
strcpy(alum.nombre,alumnos[x].nombre);
}
}
printf("\nEl alumno con mejores notas es: %s \n",alum.nombre);
}
else if (opcion==6)
{
peor=10;
for(x = 0; x < 5;x++)
{
if (alumnos[x].nota<peor)
{
peor=alumnos[x].nota;
alum.nota=alumnos[x].nota;
strcpy(alum.nombre,alumnos[x].nombre);
}
}
printf("\nEl alumno con peores notas es: %s \n",alum.nombre);
}
}
system("PAUSE");
return 0;
}
0
Google +
15.8K
6 comentarios:
1.
Salvador19 de noviembre de 2013, 17:21
1.
Juan Carlos Garca Romero21 de noviembre de 2013, 16:40
2.
yorbin molina28 de enero de 2014, 22:18
1.
Juan Carlos Garca Romero29 de enero de 2014, 21:18
Responder
3.
gregory vera30 de enero de 2014, 0:21
4.
Danny Rueda Hurtado4 de febrero de 2014, 23:12
Ejercicio que pida al usuario nmeros y los vaya almacenando en una cadena, y
cuando ponga el numero "0" deje de pedir nmeros, luego que diga cuales son pares
y cuales impares.
Acerca de m
Suscribete al RSS
Seguidores Blogger
Facebook
Popular
Tags
USES CRT;
TYPE
ALUMNOS=RECORD
NOMBRE:STRING[30];
ASIGNATURA:STRING[40];
NOTA:array[1..4] of REAL;
END;
ARRE_ALUMNOS=ARRAY[1..10] OF ALUMNOS;
VAR
ALUM:ARRE_ALUMNOS;
I,J:INTEGER;
SUMA,MEDIA:REAL;
BEGIN
CLRSCR;
FOR I:=1 TO 10 DO
BEGIN
WRITELN('INTRODUZCA EL NOMBRE DEL ALUMNO ',I);
READLN(ALUM[I].NOMBRE);
WRITELN('INTRODUZCA EL NOMBRE DE LA ASIGNATURA');
READLN(ALUM[I].ASIGNATURA);
SUMA:=0;
FOR J:=1 TO 4 DO
BEGIN
WRITELN('INTRODUZCA LA NOTA ',J);
READLN(ALUM[I].NOTA[J]);
SUMA:=SUMA + ALUM[I].NOTA[J];
END;
MEDIA:=SUMA/4;
WRITELN('LA MEDIA DEL ALUMNO ',ALUM[I].NOMBRE,' ES ', MEDIA:2:2);
WRITELN('LA SUMA ES: ',SUMA:2:2);
READLN;
END;
END.
EJERCICIO RESUELTO DE ARREGLOS DE REGISTROS
hacer un programa en pascal que almacene en un arreglo de registro la siguiente informacion de
10 trabajadores: nombre, edad, sexo, estado civil y salario base, Calcular y mostrar por pantalla la
cantidad de trabajadores del sexo masculino, cantidad de trabajadoras casadas y suma de todos
los sueldos.
program arreglo_registros;uses crt; type
trabajadores=record
nombre:string[30];
edad:integer;
sexo:char;
edo_civil:char;
salario:real;
end;
arre_trabajadores=array[1..10] of trabajadores;
var
trabajador:arre_trabajadores;
i, cant_masculino,cant_casadas:integer;
acum_salarios:real;
procedure inicializar;
begin
acum_salarios:=0;
cant_masculino:=0;
cant_casadas:=0;
end;
procedure cargar_datos;
begin for i:= 1 to 10 do
begin
writeln('tipee el nombre: ');
readln(trabajador[i].nombre);
writeln('tipee la edad del trabajador:');
readln(trabajador[i].edad);
writeln('tipee el sexo del trabajador f=femenino /m=masculino:');
readln(trabajador[i].sexo);
writeln('tipee el estado civil del trabajador c=casado/s=soltero:');
readln(trabajador[i].edo_civil);
writeln('tipee el sueldo del trabajador:');
readln(trabajador[i].salario);
end;
end;
procedure masculinos_casadas;
begin
for i:=1 to 10 do
begin
if upcase(trabajador[i].sexo)='M' then
cant_masculino:=cant_masculino+ 1;
if (upcase(trabajador[i].sexo)='F') and (upcase(trabajador[i].edo_civil)='C') then
cant_casadas:=cant_casadas+ 1; end;end;
procedure sumar_salarios;
begin
for i:= 1 to 5 do
acum_salarios:=acum_salarios + trabajador[i].salario;
end;
procedure mostrar_datos_trabajador;
begin
for i:=1 to 5 do
begin
writeln('el nombre del trabajador es: ', trabajador[i].nombre);
readln;
suma:arreglo_suma;
sumas:real;
BEGIN
FOR f:=1 TO 5 DO
BEGIN
WRITELN('Introduzca el nombre:' );
READLN(per[f]);
WRITELN('Introduzca los 3 montos de 3 meses');
sumas:=0;
FOR c:=1 TO 3 DO
BEGIN
READLN(monto[f,c]);
sumas:=sumas+monto[f,c];
END;
suma[f]:=sumas;
END;
FOR f:=1 TO 5 DO
BEGIN
WRITELN('el cliente' , per[f] , 'en tres meses ha pagado: ' , suma[f]:2:2);
READLN;
FOR c:=1 TO 3 DO
BEGIN
WRITELN('En el mes' , c, ' la persona ha pagado: ' , monto[f,c]:2:2);
READLN;
END;
END;
CLRCSR;
END.
PROPUESTOS
1. Inicializar una matriz con ceros (0) y que sea de dimensin 10x12.
2. Colocar un uno (1) en todos los espacios de la matriz en que la suma de sus ndices sea mayor
que 6. Utilice la misma matriz de dimensin 10x12.
3. Un instituto desea controlar los resultados de los alumnos en las distintas asignaturas de la
facultad de Ingeniera. El programa debe ingresar las calificaciones de los alumnos y visualizar en
pantalla la media de notas por alumno y la media de notas por asignatura. Las asignaturas estn
codificadas de 1 a 6 y hay 30 alumnos.
Como puede verse en el esquema, aunque el arreglo es de n elementos, en realidad tienen n-1
elementos porque comienzan a enumerarse desde cero.
En trminos generales para definir un array se especifica el tipo de almacenamiento (atributo
opcional), el tipo de datos, el identificador y entre corchetes el tamao del arreglo. Abajo se
muestra algunos ejemplos de definicin de arreglos:
a) int num[100]; (un array de 100 enteros)
Cant[1]= -3
Cant[2]=0
Cant[3]=15
Cant[4]=8
Cuando los elementos del arreglo no tienen asignados valores iniciales explcitos, stos son
puestos a cero, a continuacin tenemos un ejemplo:
int edades[8]={25,13,18};
El resultado de la asignacin seria el siguiente:
Edades[0]=25;
Edades[1]=13;
Edades[2]=18;
Edades[3]=0;
Edades[4]=0;
Edades[5]=0;
Edades[6]=0;
Edades[7]=0;
Este mtodo de inicializar arrays mediante valores constantes despus de su definicin, es
adecuado cuando el nmero de elementos del arreglo es pequeo.
Una nota interesante en cuanto a la inicializacin de arreglos, es que el tamao no necesita ser
indicado explcitamente. Con los arrays numricos el tamao ser fijado igual al nmero de valores
incluidos. En cuanto a las cadenas, el tamao se fijar igual al nmero de caracteres del string o
cadena mas uno (el carcter nulo \0).
C puede dejar los corchetes vacos, slo cuando se asignan valores al array, tal como
int cuenta[ ] = { 15, 25, -45 , 0 , 50 };
char c* + = , L, u, i, s -; /* declara un array de 4 elementos */
El compilador asigna automticamente cinco elementos a cuenta.
Otros ejemplos:
a) Int porcent[ ]={8, 6, 10, -15, 23};
b) Char mes* +=octubre;
que vienen siendo equivalente a:
Porcent[0]=8;
porcent[1]=6;
porcent[2]=10;
porcent[3]= -15;
porcent[4]=23;
mes*0+=o;
mes*1+=c;
mes*2+=t;
mes*3+=u;
mes*4+=b;
mes*5+=r;
mes*6+=e;
mes*7+=\0
Ejemplo 1:
Elabore un programa que permita leer una lista de nmeros en un arreglo, calcule la suma,
promedio, cuadrado , cubo y desviacin estndar de los mismos:
#include stdio.h>
#include stdlib.h>
#include conio.h>
#include math.h>
#define tam 4
/* programa para calcular la suma, promedio, cuadrado, cubo y desviacin
estandar de una serie de nmeros */
main ( )
{
double vector[tam],cuadrado, cubo;
float prom, desv,suma=0;
int i, j;
system("cls" );
printf ("PROGRAMA PARA CALCULAR \n");
printf(" PROMEDIO, SUMA, CUADRADO, CUBO Y DESV. EST.\n\n") ;
//Captura de valores y suma de los mismos
for(i = 0 ; i < tam ; ++i)
{
printf ("num [%d] = " , i) ;
scanf ("%lf" , &vector[i]) ;
suma+= vector[i] ;
}
prom = suma / tam ;
printf (" \n El promedio de los numeros es: %4.2f\n ", prom) ;
//Calculo e impresin de cuadrado, cubo y desviacin estandar
printf(" \n \n NUMERO CUADRADO CUBO DESV. EST.\n");
for( i = 0 ; i < tam ; ++i )
{
cuadrado = vector[i] * vector[i] ;
cubo = pow (vector[i], 3) ;
desv = vector [i] - prom ;
{
int i;
double a[5], num;
for (i=0; i<5; i++)
{
printf("\n Digite numero:");
scanf("%lf", &num);
a[i]=num;
}
printf("_________________________________________\n");
printf("Los cubos de los numeros leidos son:\n");
for (i=0; i<5; i++){
a[i]=pow(a[i],3);
printf("%.0lf\n",a[i]);
}
printf("\n");
system("pause");
return 0;
}
EJERCICIOS:
Ejercicio 1:
Digite, compile y ejecute el siguiente programa.
#include stdio.h>
#include stdlib.h>
main()
{
int a,b=0;
int c[10]={1,2,3,4,5,6,7,8,9,0};
for (a=0;a<10;++a)
if ((c[a]%2)==0) b+=c[a];
printf("%d\n",b);
system(pause);
return 0;
}
Qu hace el programa? __________________________________________
_______________________________________________________________
Cul es la salida? _______
Ejercicio 2:
Digite, compile y ejecute el siguiente programa.
#include stdio.h>
#include stdlib.h>
main()
{
int a,b=0;
int c[10]={1,2,3,4,5,6,7,8,9,0};
for (a=0;a<10;++a)
if ((a%2)==0)b+=c[a];
printf("%d\n",b);
system(pause);
return 0;
}
Qu hace el programa? __________________________________________
_______________________________________________________________
Cul es la salida? _______
En qu se diferencia del ejemplo anterior? ____________________________
_______________________________________________________________
Ejercicio 3
Elabore un programa que sume los primeros 25 nmeros enteros guardados en un vector. Se
desea imprimir la lista de nmeros y al final la suma de los mismos.
Ejercicio 4
Generar e imprimir un vector de 10 nmeros enteros y encontrar el mayor de ellos. Desplegar el
resultado.
Ejercicio 5
Dadas dos listas A y B de igual nmero de elementos, se desea generar e imprimir una lista C
conteniendo las sumas: A[i] + B[i] = C[i]
#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>// gets()
// cin y cout
// setw()
// getch() o getche()
// toupper y tolower
void main()
{
// Inicializa el array
char RptaOK[] = {'A','C','E','D','B','C','D','E','B','C'};
char ARpta[10];
char nombre[20];
int i, nota;
cout<<"Ingrese nombre del alumno : "<<endl;gets(nombre);
cout<<"Ingrese el array de respuestas: "<<endl;
// Lee array ARpta
for (i=0;i<=9;i++)
{
cin>>ARpta[i];
// convierte a mayusculas elementos de ARpta
ARpta[i] = toupper(ARpta[i]);
}
// calcula la nota del alumno
nota = 0;
for (i=0;i<=9;i++)
{
if (ARpta[i] == RptaOK[i])
{ nota = nota + 2; }
}
// muestra el nombre del alumno
cout<<"Alumno : "<<nombre<<endl;
// muestra los dos arreglos respuestas
for (i=0;i<=9;i++)
{ cout<<setw(10)<<RptaOK[i]<<setw(10)<<ARpta[i]<<endl; }
cout<<endl;
cout<<"nota = "<<nota<<endl;
getch();
}
PROBLEMA NRO 2
/*
ENUNCIADO : Hacer un programa que obtenga el maximo numero de canastas
convertido por el equipo de basket en los N partidos que jugo en el campeonato
sudamericano. Defina N como constante al inicio del programa. */
// PROGRAMA C++
// LIBRERIAS
#include<iostream.h>
#include<iomanip.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
const int N = 5;
void main()
{
// se declara array de tamao N
int Canastas[N],i,Max;
// Lectura del array A
Max = Canastas[0];
for (i=1; i< N ; i++)
{
if (Canastas[i]>Max)
{ Max = Canastas[i]; }
}
// MUESTRA EL VALOR MAXIMO Y A QUE INDICE CORRESPONDE
cout<<"Max = "<<Max<<endl;
for (i=0; i< N ; i++)
{
if (Canastas[i]==Max)
{ cout<<" i = "<<setw(5)<<i; }
}
cout<<endl;
getch();
}
PROBLEMA NRO 3
/*
ENUNCIADO : Hacer un programa que obtenga la Mnima talla de un grupo de N
atletas. Defina N como constante al inicio del programa. */
// LIBRERIAS
#include<iostream.h>
#include<iomanip.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
const int N = 5;
void main()
{
// se declara array de tamao N
double Talla[N],Min;
int i;
// Lectura del array A
Min = Talla[0];
for (i=1; i< N ; i++)
{
if (Talla[i] < Min)
{ Min = Talla[i]; }
}
// MUESTRA EL VALOR MINIMO Y A QUE INDICE CORRESPONDE
cout<<"Min = "<<Min<<endl;
for (i=0; i< N ; i++)
{
if (Talla[i]==Min)
{ cout<<" i = "<<setw(5)<<i; }
}
cout<<endl;
getch();
}
PROBLEMA NRO 4:
/*ENUNCIADO : Hacer un programa que permita ordenar alfabeticamente una lista
// cin y cout
// setw()
// getch()
// gets()
// strcmp() y strcpy()
for(k=0;k<N-1;k++)
{
for(j=0;j<N-1-k;j++)
{
// numero de pasos
// numero de conbinaciones
if (strcmp(nom[j],nom[j+1]) > 0)
{
strcpy(auxN,nom[j]);
strcpy(nom[j],nom[j+1]);
strcpy(nom[j+1],auxN);
}
}
}
cout<<endl;
// MUESTRA EL ARRAY EN ORDEN ALFABETICO
for(i=0;i< N;i++)
{ cout<<setw(15)<<nom[i]<<endl; }
cout<<endl;getch();
}
PROBLEMA NRO 5
/* ENUNCIADO : Hacer un programa que ordene las notas de N alumnos en orden
decreciente, mostrando el reporte:
Nombre
Nota
xxxx
99
xxxx
99
-------Promedio
99
*/
// Librerias c++
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
#include<stdio.h>
#include<string.h>
int i,j,k;
// lectura de loa arrays nom y nota
SNota = 0;
for(i=0;i<N;i++)
{ cout<<"nombre: "<<endl;gets(nom[i]);
cout<<"nota : ";cin>>nota[i];
SNota = SNota + nota[i];
}
PromN = SNota/N;
// ordenamiento de notas de mayor a menor
auxNt = nota[j];
nota[j] = nota[j+1];
nota[j+1] = auxNt;
// intercambio de nombres
}
}
}
// muestra los arrays paralelos ordenados
cout<<setw(20)<<"nombre"<<setw(20)<<"nota"<<endl;
for(i=0;i<N;i++)
{ cout<<setw(20)<<nom[i]<<setw(20)<<nota[i]<<endl;
}
cout<<setw(40)<<"-----"<<endl; cout<<setw(40)<<PromN<<endl; getch();
}
PROBLEMA NRO 6
/* ENUNCIADO : Hacer un programa que ordene los nombres de N alumnos en sentido
inverso al alfabtico. Debe mostrar este reporte:
Nombre
Nota
xxxxxx
99
xxxxxx
99
---Promedio
99
*/
// Librerias C++
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
for(i=0;i< N;i++)
{ cout<<"nombre: "<<endl;gets(nom[i]);
cout<<"nota : ";cin>>nota[i];
}
// ordenamiento de notas de mayor a menor
strcpy(auxN , nom[j]);
strcpy(nom[j], nom[j+1]);
strcpy(nom[j+1], auxN);
}
}
}
// muestra los arrays paralelos ordenados
cout<<setw(25)<<"nombre"<<setw(25)<<"nota"<<endl;
for (i=0;i<=4;i++)
{ cout<<setw(25)<<nom[i]<<setw(25)<<nota[i]<<endl; }
getch();
}
PROBLEMA NRO 7
/* ENUNCIADO : Hacer un programa que calcule el valor numrico de un
polinomio de grado N cuyos coeficientes , grado y valor de x son ingresados con
teclado. Considere un grado mximo de 99
**/
#include<iostream.h>
#include<conio.h>
#include<math.h>
VN = 0;
for(i=0;i<G+1;i=i+1)
{
VN = VN + Poli[i] * pow(X,i) ;
}
cout<<"Valor numerico = "<<VN<<endl;
getch();
}
PROBLEMA NRO 8
/* ENUNCIADO : Hacer un programa que calcule los costos de produccin de n
productos ingresados por teclado, si se conocen los costos unitarios y las
unidades producidas de cada uno de los productos
*/
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
for(i=0;i<n;i=i+1)
{ costo[i]= CosUni[i]*UnidProd[i]; }
// Calculo del costo total CosTot
CosTot =0;
for(i=0;i<n;i=i+1)
{ CosTot = CosTot + costo[i]; }
// mostrar el reporte
for(i=0;i<n;i=i+1)
{ cout<<setw(10)<<CosUni[i]<<setw(10)<<UnidProd[i]<<setw(10)<<costo[i]<<endl; }
cout<<setw(30)<<CosTot<<endl;
getch();
}
PROBLEMA NRO 9 :
/* ENUNCIADO : Una librera que comercializa 5 productos diversos, maneja los siguientes arrays:
- cosUni que guarda el Precio costo de cada producto
- preUni que guarda el Precio venta de cada producto
- UnidVend que guarda las unidades vendidas en un mes
Hacer un programa que permita calcular:
el monto de dinero invertido,
el monto de la venta, la ganancia en cada producto y
la ganancia total
Debe mostrar este reporte:
Venta
Costo
Ganancia
999.99
999.99
999.99
999.99
999.99
999.99
.....
.....
......
999.99
999.99
999.99
---------------999.99
999.99
999.99 */
// Librerias C++
#include <iostream.h>
#include <iomanip.h>
#include <conio.h>
const int N = 5;
void main()
{ double cosUni[N], preUni[N], UnidVend[N], Costo[N],Venta[N],Gan[N],GT;
int i,j;
// Lectura de los arrays cosUni, preUni, UnidVend
for (i=0;i<N;i++)
cout<<"cosUni["<<i<<"] = ";cin>>cosUni[i];
cout<<"preUni["<<i<<"] = ";cin>>preUni[i];
cout<<"UnidVend["<<i<<"] = ";
cin>>UnidVend[i];
for (i=0;i<N;i++)
{
cout<<setw(10)<<Costo[i]<<setw(10)<<Venta[i]<<setw(10)<<Gan[i]<<endl; }
cout<<setw(30)<<GT<<endl;
getch();
}
Cuestionario de Arreglos
Cuestionario de Arreglos
1. Que es un arreglo unidimensional?
Un arreglo unidimensional se trata de un conteo o una cuenta ya sea de nmeros o de
almacenamiento de datos en el que esta compuesta de una sola columna o una sola fila.
2. Escriba 3 ejemplos de arreglos unidimensionales
Ejemplo 1
lista de litros de agua
1
2
2
3
4
n
Ejemplo 2
caloras
250
234
500
1000
10000
Ejemplo 3
reprobados en universidades
5
6
7
8
9
1000
3. Que es un arreglo bidimensional?
Los arreglos bidimensionales son tablas de valores Cada elemento de un arreglo bidimensional
est simultneamente en una fila y en una columna como las matrices.
Ejemplo 2
El siguiente programa muestra el resultado de multiplicar cada elemento del arreglo val por el
nmero 10.
Ejemplo 3
Algoritmo para saber la temperatura.
Para acceder a cada elemento del array se utiliza el nombre del array y uno o
ms ndices que indican la posicin que ocupa el elemento dentro del array.
Cada ndice se escribe entre corchetes.
El primer elemento del array ocupa la posicin 0, el segundo la posicin 1,
etc. En un array de N elementos el ltimo ocupar la posicin N-1.
En el ejemplo anterior, notas[0] contiene la nota del primer alumno y
notas[19] contiene la del ltimo
Cmo declarar un array:
Un array se declara de forma parecida a una variable de tipo simple
aadindole al nombre el nmero de elementos que contendr el array.
De forma general, un array se declara as:
tipo_dato nombre_array[elementos1][elementos2]..;
elementos1, elementos2, etc. son los ndices del array. Deben ser nmeros
enteros positivos o expresiones con un resultado entero positivo. Indican el
nmero de elementos del array.
En el ejemplo anterior, el array notas se declara como:
double notas[20];
El array es unidimensional, se llama notas y contiene 20 elementos de tipo
double.
Ms ejemplos de declaracin de arrays:
int ventas[10] ; //array llamado ventas que contiene 10 enteros
Utilizando typedef podemos crear nuevos tipos de datos sinnimos de tipos array. La
forma general de hacerlo es:
//n = 2
a[0]=a[1]+a[2]; //a[0]= 8 + 3 = 11
a[1]++;
//a[1]= 9
a[n]=m+10;
//a[2]= 15
a[n+1]=7;
//a[3]= 7
if(a[0]>=a[1])
//if(11 >= 9)
a[4]=a[0];
//
a[4]= 11
cout << a[0]<<" "<< a[1]<< " "<< a[2]<< " "<< a[3]<< " "<< a[4];
cout << endl;
system("pause");
}
La salida de este programa es:
11 9 15 7 11
Si se intenta acceder a un elemento que est fuera de los lmites del array (un
elemento con ndice negativo o con un valor del ndice mayor que el que corresponde
al ltimo elemento del array) el compilador no avisa del error. El error se producir
durante la ejecucin si esa posicin de memoria que se intenta acceder est fuera de
la zona de memoria asignada al programa.
Es responsabilidad del programador comprobar que los valores de los ndices utilizados
en los accesos a los elementos del array estn dentro de los lmites del array.
Ejemplo 2: recorrer un array
cout << notas[i] << " "; //se muestra cada elemento del
array
cout << endl;
system("pause");
}
La salida que muestra este programa es:
2.30 8.50 3.20 9.50 4.00 5.50 7.00
Ejemplo 3: Recorrido de un array. Programa C++ que lee por teclado la nota de los
alumnos de una clase y calcula la nota media del grupo. Tambin muestra los alumnos
con notas superiores a la media.
Este programa declara un array de elementos de tipo float que contendr las
notas de los alumnos.
Se realizan 3 recorridos sobre el array, el primero para asignar a cada
elemento las notas introducidas por teclado, el segundo para sumarlas y el
tercero para mostrar los alumnos con notas superiores a la media.
#include <iostream>
#include <iomanip>
using namespace std;
int main ()
{
float notas[20];
int i = 0;
float suma = 0, media;
// Calcular la media
media = suma / 20;
// Mostrar la media
cout << fixed << setprecision(2);
cout << endl<< endl << "Nota media del curso: " << media <<
endl;
Son arreglos bidimensionales, es una coleccin finita, homognea y ordenada de datos. Una
matriz esta compuesta por filas y columnas, en la que se hace referencia a cada elemento
por medio de dos ndices. El primero de los ndices se utiliza para indicar la fila y el
segundo de los ndices para indicar la columna.
{ columnas de la fila 1 },
{ columnas de la fila 2 },
... ,
};
#include<iostream>
using namespace std;
3
#define MAX 10
4
5
6
7
10
11
int main()
12
13
float M[MAX][MAX];
14
15
int f,c;
ordenMatriz(f,c);
16
ingresoMatriz(M,f,c);
17
cout<<"Matriz ingresada"<<endl;
18
reporteMatriz(M,f,c);
19
20
21
22
return 0;
23
24
25
26{
27
do{
28
29
cin>>f;
30
31
32
}while(f<=0 || f>MAX);
do{
cout<<"Numero de columnas : ";
cin>>c;
33
}while(c<=0 || c>MAX);
34}
void ingresoMatriz(float M[][MAX], int f, int c)
35
36
int i,j;
37
for(i=0;i<f;i++)
38
for(j=0;j<c;j++)
39
40
cout<<"M["<<i<<"]["<<j<<"]:";
41
cin>>M[i][j];
}
42
43}
45
int i,j;
46
for(i=0;i<f;i++)
47
48
for(j=0;j<c;j++)
49
cout<<M[i][j]<<"t";
50
51
cout<<endl;
}
52}
53
54float mayor(float M[][MAX], int f, int c)
{
55
56
int i,j;
float may=M[0][0];
57
for(i=0;i<f;i++)
58
59
60
61
for(j=0;j<c;j++)
if(M[i][j]>may)
may=M[i][j];
return may;
62
63
float menor(float M[][MAX], int f, int c)
64
65
int i,j;
66
float men=M[0][0];
67
for(i=0;i<f;i++)
68
69
for(j=0;j<c;j++)
if(M[i][j]<men)
men=M[i][j];
70
71
return men;
72
73
float promedio(float M[][MAX], int f, int c)
74
75
int i,j;
76
float s=0;
77
for(i=0;i<f;i++)
78
79
80
}
81
82
for(j=0;j<c;j++)
s=s+M[i][j];
return s/(f*c);
83
84
85
86
87
88
89
90
10
11
12
int main()
13{
14
float M[MAX][MAX],sf[MAX],sc[MAX];
15
int f,c,i,j;
16
ordenMatriz(f,c);
17
ingresoMatriz(M,f,c);
cout<<"Matriz ingresada"<<endl;
18
reporteMatriz(M,f,c);
19
sumaDeFilas(M,f,c,sf);
20
for(i=0;i<f;i++)
21
22
sumaDeColumnas(M,f,c,sc);
23
for(j=0;j<c;j++)
24
25
system("PAUSE");
26
return 0;
27}
28
void ordenMatriz(int &f, int &c)
29
30
do{
31
32
cin>>f;
33
}while(f<=0 || f>MAX);
34
do{
35
36
cin>>c;
37
}while(c<=0 || c>MAX);
38
39
40
41
int i,j;
42
for(i=0;i<f;i++)
for(j=0;j<c;j++)
43
44
cout<<"M["<<i<<"]["<<j<<"]:";
45
cin>>M[i][j];
46
47
48
49void reporteMatriz(float M[][MAX],int f, int c)
50{
51
int i,j;
52
for(i=0;i<f;i++)
53
{
for(j=0;j<c;j++)
54
cout<<M[i][j]<<"t";
55
cout<<endl;
56
57
58
59void sumaDeFilas(float A[MAX][MAX], int f, int c,float sf[MAX])
60{
61
int i,j;
62
for(i=0;i<f;i++)
63
64
65
sf[i]=0;
for(j=0;j<c;j++)
sf[i]=sf[i]+A[i][j];
66
67}
68
void sumaDeColumnas(float A[MAX][MAX], int f, int c,float sc[MAX])
69
70
int i,j;
71
for(j=0;j<c;j++)
72
73
sc[j]=0;
74
for(i=0;i<f;i++)
75
76
sc[j]=sc[j]+A[i][j];
}
77}
78
79
80
81
82
83
84
85
1
using namespace std;
2
3
#define MAX 10
8
{
float M[MAX][MAX],T[MAX][MAX];
10
int f,c;
11
ordenMatriz(f,c);
12
ingresoMatriz(M,f,c);
13
cout<<"Matriz ingresada"<<endl;
14
reporteMatriz(M,f,c);
15
16
transpuesta(M,f,c,T);
cout<<"Matriz Transpuesta "<<endl;
reporteMatriz(T,c,f);
17
system("PAUSE");
18
19
20{
21
do{
22
23
cin>>f;
24
25
26
}while(f<=0 || f>MAX);
do{
cout<<"Numero de columnas : ";
cin>>c;
27
}while(c<=0 || c>MAX);
28
29
30void ingresoMatriz(float M[][MAX], int f, int c)
31{
32
33
int i,j;
for(i=0;i<f;i++)
for(j=0;j<c;j++)
34
{
35
cout<<"M["<<i<<"]["<<j<<"]:";
36
cin>>M[i][j];
37
38}
39
40void reporteMatriz(float M[][MAX],int f, int c)
41{
42
43
int i,j;
for(i=0;i<f;i++)
{
44
for(j=0;j<c;j++)
45
cout<<M[i][j]<<"t";
46
47
cout<<endl;
}
48}
49
50void transpuesta(float M[MAX][MAX], int f, int c,float T[MAX][MAX])
51{
52
53
int i,j;
for(i=0;i<f;i++)
54
55
for(j=0;j<c;j++)
T[j][i]=M[i][j];
56
57
58
59
60
61
62
4) Programa para ingresar dos matrices, una de f1 filas y c1 columnas y otra de f2 filas y c2
columnas y reportar su suma y su producto si es que se pueden realizar.
1 #include<iostream>
2 using namespace std;
3 #define MAX 10
4
5
6
void reporteMatriz(float M[MAX][MAX], int f, int c);
10
int main()
11
12
float A[MAX][MAX],B[MAX][MAX],C[MAX][MAX],S[MAX][MAX],P[MAX][MAX];
13
int f1,c1,f2,c2;
14
cout<<"Primera matriz"<<endl;
15
ordenMatriz(f1,c1);
16
ingresoMatriz(A,f1,c1);
cout<<"Segunda matriz"<<endl;
17
ordenMatriz(f2,c2);
18
ingresoMatriz(B,f2,c2);
19
if(f1==f2 && c1 == c2)
20
21
sumaMatrices(A,B,S,f1,c1);
22
cout<<"Matriz Suma"<<endl;
23
reporteMatriz(S,f1,c1);
24
25
else
cout<<"No se pueden sumar las matrices"<<endl;
26
27
if(c1==f2)
{
28
productoMatrices(A,B,P,f1,c1,c2);
29
cout<<"Matriz Producto"<<endl;
30
reporteMatriz(P,f1,c2);
31
32
else
33
34
system("PAUSE");
35
return 0;
36
37
38
39
do{
40
41
cin>>f;
42
43
}while(f<=0 || f>MAX);
do{
cout<<"Numero de columnas : ";
44
cin>>c;
45
}while(c<=0 || c>MAX);
46
int i,j;
50
for(i=0;i<f;i++)
for(j=0;j<c;j++)
51
52
cout<<"M["<<i<<"]["<<j<<"]:";
53
cin>>M[i][j];
54
55
56
57void reporteMatriz(float M[][MAX],int f, int c)
58{
59
int i,j;
60
for(i=0;i<f;i++)
61
{
for(j=0;j<c;j++)
62
cout<<M[i][j]<<"t";
63
cout<<endl;
64
}
65}
66
67void sumaMatrices(float A[MAX][MAX],float B[MAX][MAX],float S[MAX][MAX],
int f, int c)
68
69
int i,j;
70
for(i=0;i<f;i++)
for(j=0;j<c;j++)
71
S[i][j]=A[i][j]+B[i][j];
72
73
}
74
75
int i,j,k;
79
for(i=0;i<f1;i++)
for(j=0;j<c2;j++)
80
81
P[i][j]=0;
82
for(k=0;k<c1;k++)
83
84
85
86
87
88
89
P[i][j]=P[i][j]+A[i][k]*B[k][j];
}
90
91
92
#include<iostream>
3
4
#define MAX 10
5
6
7
8
9
10
11
12
13
int main()
14 {
15
float M[MAX][MAX];
16
int n;
17
ordenMatriz(n);
18
ingresoMatriz(M,n,n);
19
cout<<"Matriz ingresada"<<endl;
20
reporteMatriz(M,n,n);
21
22
23
24 "<<mayorElementoTriangularSuperior(M,n)<<endl;
25
26
system("PAUSE");
27
return 0;
28 }
29
30
31 void ordenMatriz(int &n)
32 {
do{
33
34
cin>>n;
35
}while(n<=0 || n>MAX);
36
}
37
38
void ingresoMatriz(float M[][MAX], int f, int c)
39
40
41
{
int i,j;
for(i=0;i<f;i++)
42
for(j=0;j<c;j++)
43
44
cout<<"M["<<i<<"]["<<j<<"]:";
45
cin>>M[i][j];
}
46
47
}
void reporteMatriz(float M[][MAX],int f, int c)
48
{
49
int i,j;
50
for(i=0;i<f;i++)
51
52
for(j=0;j<c;j++)
cout<<M[i][j]<<"t";
53
cout<<endl;
54
}
55
56
57
float sumaDiagonalPrincipal(float M[][MAX], int n)
58
{
59
int i,j;
60
float s=0;
61
for(i=0;i<n;i++)
62
for(j=0;j<n;j++)
63
if(i==j)
s=s+M[i][j];
64
return s;
65
66
67
68
69
int i,j;
70
float s=0;
for(i=0;i<n;i++)
71
for(j=0;j<n;j++)
72
if(i+j==n-1)
73
s=s+M[i][j];
74
75
return s/n;
}
76
77 float mayorElementoTriangularSuperior(float M[MAX][MAX], int n)
78 {
79
int i,j;
80
float may=M[0][0];
for(i=0;i<n;i++)
81
for(j=0;j<n;j++)
82
83
may=M[i][j];
84
85
return may;
}
86
87 float promedioMatrizTriangularInferior(float M[MAX][MAX], int n)
88 {
89
int i,j,c=0;
90
float s=0;
91
for(i=0;i<n;i++)
92
93
for(j=0;j<n;j++)
if(i>=j)
{
94
s = s + M[i][j];
95
c++;
}
96
return s/c;
97
}
98
99
100
101
102
103
104
105
3
4
#define MAX 10
5
void ordenMatriz(int &n);
6
7
8
9
10
11int main()
12{
13
14
15
float M[MAX][MAX];
int n;
ordenMatriz(n);
ingresoMatriz(M,n,n);
16
cout<<"Matriz ingresada"<<endl;
17
18
reporteMatriz(M,n,n);
if(esSimetrica(M,n))
19
20
21
22
23
system("PAUSE");
return 0;
24
25
26
27
{
28
29
30
31
do{
cout<<"Orden de la matriz cuadrada: ";
cin>>n;
}while(n<=0 || n>MAX);
32}
33
34void ingresoMatriz(float M[MAX][MAX], int f, int c)
35{
36
int i,j;
for(i=0;i<f;i++)
37
for(j=0;j<c;j++)
38
39
40
cout<<"M["<<i<<"]["<<j<<"]:";
cin>>M[i][j];
41
}
42
43
44{
45
int i,j;
46
for(i=0;i<f;i++)
47
{
for(j=0;j<c;j++)
48
cout<<M[i][j]<<"t";
49
cout<<endl;
50
}
51
52
53
54{
55
int i,j;
56
for(i=0;i<n;i++)
57
58
59
60
}
61
for(j=i+1;j<n;j++)
if(M[i][j]!=M[j][i])
return false;
return true;
62
63
64
65
66
#include<iostream>
using namespace std;
3
#define MAX 10
4
5
void ordenMatriz(int &f, int &c);
6
7
float M[MAX][MAX];
int f,c;
ordenMatriz(f,c);
ingresoMatriz(M,f,c);
15
cout<<"Matriz ingresada"<<endl;
16
17
18
reporteMatriz(M,f,c);
mayorElementoDeCadaFila(M,f,c);
system("PAUSE");
19
return 0;
20}
21
22
23
void ordenMatriz(int &f, int &c)
24
25
do{
26
cout<<"Numero de filas : ";
27
28
29
cin>>f;
}while(f<=0 || f>MAX);
do{
30
31
cin>>c;
32
}while(c<=0 || c>MAX);
33}
void ingresoMatriz(float M[MAX][MAX], int f, int c)
34
35
int i,j;
36
for(i=0;i<f;i++)
37
for(j=0;j<c;j++)
38
39
cout<<"M["<<i<<"]["<<j<<"]:";
40
cin>>M[i][j];
41
42}
void reporteMatriz(float M[MAX][MAX],int f, int c)
43
44{
int i,j;
45
for(i=0;i<f;i++)
46
47
for(j=0;j<c;j++)
48
cout<<M[i][j]<<"t";
49
cout<<endl;
50
51}
52
53void mayorElementoDeCadaFila(float M[MAX][MAX], int f, int c)
54{
55
56
57
int i,j;
float may;
for(i=0;i<f;i++)
{
58
may=M[i][0];
59
for(j=0;j<c;j++)
60
61
if(M[i][j]>may)
62
may=M[i][j];
63
64
65
}
66
67
68
69
70
71
72
Ejercicios Propuestos
1) Ingresar una matriz cuadrada de orden n y reportar si es simtrica. Recordar que una
matriz es simtrica si se cumple la condicin: a[i][j]=a[j][i]
2) Programa para ingresar una matriz de f filas y c columnas, y que se haga lo siguiente:
a) Ingresar un nmero de fila y eliminarla de la matriz.
b) Ingresar un nmero de columna y eliminarla de la matriz.
c) Ingresar un nmero de fila e insertar una fila en la matriz.
d) Ingresar un nmero de columna e insertar una columna en la matriz.
e) Intercambiar 2 filas de la Matriz. El nmero de las filas a intercambiar debe ingresarse.
f) Intercambiar 2 columnas de la Matriz. El nmero de las columnas a intercambiar debe
ingresarse.
g) Ordenar las filas de una matriz
h) Ordenar las columnas de una matriz
3) El curso de Computacin tiene n alumnos y se rinden 4 exmenes. Escribir un programa
que reporte lo siguiente:
a) El promedio de calificaciones de cada alumno.
b) El promedio de cada Examen
c) El alumno que obtuvo el mejor Promedio
d) El examen que tuvo el mayor promedio de calificacin.
4) Hacer un programa para invertir las columnas de una matriz (Los elementos de la
primera columna se intercambian con los de la ultima, los de la segunda con los de la
penltima y as sucesivamente).
5) Escribir un programa que genere un cuadrado mgico. Un cuadrado mgico se representa
por una matriz cuadrada de orden n, impar y contiene los nmeros comprendidos entre 1 y
n*n. En un cuadrado mgico la suma de cualquiera de las filas, columnas y diagonales
principales siempre es la misma. El cuadrado mgico se genera aplicando el siguiente
algoritmo:
a) El primer numero 1 se coloca en la celda central de la primera fila.
b) El siguiente nmero se coloca en la celda de la fila anterior y columna posterior.
c) La fila anterior al primero es el ltimo. La columna posterior a la ltima es la primera.
R = 3 * C D/3
Listar las matrices C, D y la resultante R
19) Lea un conjunto de palabras. Luego invierta cada una de ellas de tal manera que cada
fila contenga la palabra original pero con sus caracteres al revs
20) En una matriz cada fila almacena los resultados de un sorteo de la tinka, esto es los 6
numeros ganadores. Diga cuantas veces sali cada numero de la tinka. La tinka tiene un
total de 46 numeros que pueden salir (1-46)
21) Una matriz diagonal es una matriz cuadrada que son ceros todos sus elementos que no
pertenecen a la diagonal principal. Escriba una funcion que diga si una matriz es diagonal.
22) Dada una matriz, obtenga el menor elemento de cada columna
23) Se tiene una matriz con el total de emergencias en un hospital por cada hora y cada dia
de la semana A que hora ocurre la mayor cantidad de emergencias ? Que dia hay mas
cantidad de emergencias ? */
24) Lea una matriz cuadrada y escriba la suma de todos los elementos que no pertenecen a
la diagonal principal