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 posición (o índice) donde se encuentre dentro del array.
Declaración.
El tipo de datos puede ser cualquier de los vistos anteriormente, por ejemplo, un array de
20 enteros sería así:
int num[20];
La declaración es exactamente igual que cuando declaramos variables normales, salvo que
hay que añadir la longitud del array en cuestión.
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 tendría las
siguientes posiciones:
En una misma fila de declaración se pueden declarar tanto varios arrays a la vez como
variables normales.
int num1,num2,num3[10],num4,num5[5];
También es posible declarar arrays prescindiendo del uso de números para definir su
tamaño, aunque es necesario que tengamos en cuenta ciertos factores:
1 – Para declarar un array usando identificadores sólo se podrá usar constantes definidas
mediante #define.
#define TAM 50
int main(void)
{
int a[TAM];
}
int main(void)
{
int tam=50;
int a[tam];
}
int main(void)
{
const int tam=50;
int a[tam];
}
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.
#include <stdio.h>
#define TAM 20
int main(void)
{
int x, a[TAM];
return 0;
}
así nos aseguramos de que tenemos el array con valores definidos por nosotros desde el
principio del programa.
Recorrer un array.
Se toma como primer valor el cero puesto que la primera celda tiene índice cero, por lo
tanto la condición para salir del bucle es el tamaño 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.
Veamos un ejemplo donde recorremos un array y mostramos su valor por pantalla:
#include <stdio.h>
#define TAM 5
int main(void)
{
int x,
int a[TAM] = {0,0,0,0,0};
return 0;
}
Definir un array de caracteres es sencillo, exactamente igual que con los otros tipos de
datos, pero debemos tener en consideración el término de la cadena.
En las variables de tipo entero todas las celdas del array se rellenan por defecto con valores
aleatorios, en los arrays de caracteres pasa igual. Al introducir o rellenar un array con
caracteres no es necesario que lo rellenos al completo, no obstante hay que indicar cuando
termina la cadena.
Para eso en C disponemos del carácter especial \0, con éste le diremos al programa que
tenga en cuenta dentro del array todos los caracteres hasta llegar al carácter \0.
El \0 cuenta como un carácter más dentro del array y como tal ocupa una celda, es por
eso que si definimos un array de 50 caracteres en realidad sólo podremos rellenar los
primeros 49, ya que siempre el carácter final es el \0.
H O L A \0
H A Y \0
El carácter \0 no tenemos por qué introducirlo nosotros, el programa puede encargarse,
con que sepamos qué significa y cómo utilizarlo y controlarlo es suficiente.
Un truco para poder almacenar un número de caracteres en un array con el tamaño de ese
número es definir el array con un tamaño igual y sumar una posición:
#define TAM 5
int main(void)
{
char a[TAM+1};
return 0;
}
Cadenas y printf
#include <stdio.h>
#define TAM 50
int main(void)
{
char saludo[TAM +1] = "hola";
return 0;
}
No es necesario utilizar los bucles y recorrer celda a celda, aunque se puede, resulta
trabajoso ya que a veces los arrays pueden ser bastante grandes.
Cadenas y scanf.
La instrucción scanf cumple con su cometido de leer una palabra, pero se presenta un
problema y es el que acabo de decir, sólo lee una palabra, no una frase completa.
Pero a eso le daremos solución en el siguiente apartado, ahora veamos cómo utilizar la
instrucción scanf:
#include <stdio.h>
#define TAM 50
int main(void)
{
char saludo[TAM +1];
scanf(“%s”,saludo);
return 0;
}
Cadenas y gets.
Para solucionar el problema del scanf con el array de caracteres tenemos dentro de la
librería stdio.h la instrucción gets
Con gets no es necesario utilizar una marca de formato, tan sólo con especificar el array
es suficiente, veamos un ejemplo:
#include <stdio.h>
#define TAM 50
int main(void)
{
char saludo[TAM +1];
gets(saludo);
return 0;
}
Prueba ahora el código introduciendo de nuevo la cadena “Hola buenos días” 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;
return 0;
}
La copia de cadenas debe realizarse carácter a carácter, 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];
}
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 sólo 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;
}
}
return 0;
}
Arrays Multidimensionales.
Hasta ahora lo que hemos visto como array es una tabla de una columna y un número
determinado de filas, es posible ampliar todo esto bastante más, 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, también podemos darle más dimensiones al
array.
Declaración
Los arrays multidimensionales se declaran de la misma forma que los arrays normales,
pero por cada dimensión que queramos añadir debemos especificar igualmente su longitud.
int numeros [10][2];
int numeros [10][2][5];
for (x=0;x<10,x++)
{
for (y=0;y<2,y++)
{
}
}
De ésta forma recorremos de la siguiente forma: Primera fila, primera columna, segunda
columna, ... , segunda fila, primera columna, segunda columna, ... etc.
for (x=0;x<10,x++)
{
for (y=0;y<2,y++)
{
for (z=0;z<5,z++)
{
}
}
}
Aquí recorremos así: Primera fila, primera columna, primera celda, segunda celda, ... ,
primera fila, segunda columna, primera celda, segunda celda, ... etc.
Todo lo que hemos visto en el apartado de arrays es completamente válido para los arrays
multimensionales, no necesitan de mayores retoques.
Registros.
El último punto de éste capítulo es bastante interesante, imaginemos que necesitamos
gestionar los datos de una tienda de discos, sería necesario conocer varios datos como por
ejemplo el nombre del disco, el año en que se puso a la venta o el género 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 música, es sencillo
porque utilizaremos tres arrays, uno para el nombre del disco, otro para el año de
publicación y otro para el género. Todo perfecto.
Ahora un caso perfectamente posible, imaginemos que deseamos eliminar un disco, nos
vamos al array del nombre y lo eliminamos, después al array de año y luego al array de
género, 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 año y el género. El
caos está servido.
Usando un registro podemos agrupar los tres arrays anteriores en uno sólo, y si
queremos realizar cualquier operación la estaremos haciendo con un solo array, un array de
registros.
Disco1
2000
Pop
Disco2
1997
Rock
Disco3
1999
Pop
Así lo tenemos mucho mejor ¿verdad? La representación de los datos mediante un array de
registros nos facilita operar con los datos y evitar mantenimientos incómodos y que de
resultar erróneos podría ocasionar errores de datos muy graves.
Para definir un registro usaremos el siguiente esquema:
struct NombreRegistro {
variable1;
variable2;
variable3;
...
variableN;
};
#include <stdio.h>
#include <string.h>
struct Discos {
char nombre[TAMEST+1];
int anno;
char genero[TAMEST+1];
};
int main(void)
{
struct Discos misdiscos[TAM];
return 0;
}
Con esto habremos contemplado el caso que planteábamos, ahora tenemos un array de 100
registros donde gestionaremos nuestra colección de discos.
Para poder hacer referencia a una variable del registro tan sólo 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
Con esto hemos terminado el sexto capítulo del curso básico de C. En éste capítulo hemos
aprendido los conceptos de arrays simples y multidimensionales, hemos visto como
recorrerlos y como trabajar con sus datos, también hemos visto las cadenas o arrays de
caracteres y la nueva instrucción gets, por último hemos definido los registros, hemos visto
como construirlos y como operar con ellos.
Durante el sexto capítulo del curso básico de C vimos la teoría de los arrays y los
registros. Hace unos días dejé una tanda de 25 ejercicios para practicar.
Foto tomada de freedigitalphotos.net
Realice un programa en C:
1. Que rellene un array con los 100 primeros números 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 números 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 números 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++;
tabla[i]=x;
i++;
for (x=0;x<i;x++)
printf("%d\n",tabla[x]);
system("PAUSE");
return 0;
4. Que rellene un array con los números 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 números 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 números por teclado, los almacene en un array y muestre la suma, resta,
multiplicación y división 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 número\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("Multiplicación: %d\n",mul);
printf("División: %d\n",div);
system("PAUSE");
return 0;
7. Que lea 10 números por teclado, los almacene en un array y los ordene de forma ascendente.
#include <stdio.h>
#include <stdlib.h>
int main()
int i,j,n=10;
for (i=0;i<n;i++){
printf("Escriba un número");
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 números por teclado, 5 para un array y 5 para otro array distinto. Mostrar los 10
números en pantalla mediante un solo array.
#include <stdio.h>
#include <stdlib.h>
int main()
int i,j;
for (i=0;i<5;i++){
printf("Escriba un número");
scanf("%d",&numeros1[i]);
for (i=0;i<5;i++){
printf("Escriba un número");
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 números por teclado, los copie a otro array multiplicados por 2 y muestre el
segundo array.
#include <stdio.h>
#include <stdlib.h>
int main()
int i,j;
for (i=0;i<5;i++){
printf("Escriba un número");
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 números 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()
{
int aux, numeros1[5],numeros2[5],numeros3[10];
int i,j;
for (i=0;i<5;i++){
printf("Escriba un número");
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 números 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 números por teclado, los almacene en un array y muestre la media.
#include <stdio.h>
#include <stdlib.h>
int main()
int i;
sum=0;
for (i=0;i<10;i++){
printf("Escriba un número");
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 números tanto positivos como negativos y los muestre
ordenados.
#include <stdio.h>
#include <stdlib.h>
int main()
int i,j,n=10;
for (i=0;i<n;i++){
printf("Escriba un número");
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 números y luego busque un número concreto.
#include <stdio.h>
#include <stdlib.h>
for (i=0;i<20;i++){
printf("Escriba un número");
scanf("%d",&vector[i]);
scanf("%d",&dato);
while(inf<=sup)
centro=(sup+inf)/2;
if (vector[centro]==dato)
printf("Existe\n");
x=1;
break;
{
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
printf("T");
//caballos
printf("C");
//alfiles
printf("A");
//reina
printf("M");
//rey
printf("R");
}
else
printf(" ");
printf("\n");
system("PAUSE");
return 0;
16. Que muestre los primeros 100 números 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 números 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 números pares, lo pinte y después que pida
una posición X,Y y mostrar el número 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",&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++;
printf("\n\n\n");
printf("\n\n\n");
}
system("PAUSE");
return 0;
#include <stdio.h>
#include <stdlib.h>
int indice,x;
char frase[50];
gets(frase);
if (frase[x]=='\0')
indice=x;
break;
}
printf("La frase al reves es: \n\n");
printf("%c",frase[x]);
printf("\n\n");
system("PAUSE");
return 0;
#include <stdio.h>
#include <stdlib.h>
int sum=0,x;
char frase[50];
switch (frase[x])
case 'a':
sum++;
break;
case 'e':
sum++;
break;
case 'i':
sum++;
break;
case 'o':
sum++;
break;
case 'u':
sum++;
break;
default:
break;
}
printf("\n\nEn la frase hay %d vocales\n\n",sum);
printf("\n\n");
system("PAUSE");
return 0;
#include <stdio.h>
#include <stdlib.h>
int sum=0,x;
char frase[50];
gets(frase);
{
sum++;
printf("\n\n");
system("PAUSE");
return 0;
23. Que lea una cadena y la encripte sumando 3 al código ASCII de cada carácter. Mostrar por
pantalla.
#include <stdio.h>
#include <stdlib.h>
int sum=0,x;
char frase[50];
gets(frase);
for(x = 0; x < 50;x++)
if (frase[x]!='\0')
frase[x]=frase[x]+3;
printf("\n\n%s\n\n",frase);
printf("\n\n");
system("PAUSE");
return 0;
24. Que gestione los datos de stock de una tienda de comestibles, la información 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;
printf("4- Salir\n");
printf("Introduzca una opción: ");
scanf("%d",&opcion);
if (opcion==1)
gets(prod.nombre);
gets(prod.nombre);
scanf("%f",&prod.precio);
scanf("%d",&prod.cantidad);
if (x!=0)
strcpy(productos[x].nombre,productos[x-1].nombre);
productos[x].precio=productos[x-1].precio;
productos[x].cantidad=productos[x-1].cantidad;
else
strcpy(productos[x].nombre,prod.nombre);
productos[x].precio=prod.precio;
productos[x].cantidad=prod.cantidad;
}
else if (opcion==2)
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("\n\n");
else if (opcion==3)
gets(prod.nombre);
gets(prod.nombre);
if (strcmp(productos[x].nombre,prod.nombre)==0)
scanf("%f",&productos[x].precio);
scanf("%d",&productos[x].cantidad);
printf("\nProducto modificado.");
printf("\n\n");
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. Modificar su nota.
c. Realizar la media de todas las notas.
d. Realizar la media de las notas menores de 5.
e. Mostrar el alumno que mejores notas ha sacado.
f. 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++)
gets(alumnos[x].nombre);
gets(alumnos[x].nombre);
printf("Introduzca nota:");
scanf("%f",&alumnos[x].nota);
opcion==3 || opcion==4 ||
printf("7- Salir\n");
scanf("%d",&opcion);
if (opcion==1)
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)
gets(alum.nombre);
gets(alum.nombre);
if (strcmp(alumnos[x].nombre,alum.nombre)==0)
scanf("%f",&alumnos[x].nota);
printf("\nNota modificada.");
printf("\n\n");
else if (opcion==3)
{
sum=0;
sum=sum+alumnos[x].nota;
else if (opcion==4)
sum=0;
cont=0;
if (alumnos[x].nota<5)
sum=sum+alumnos[x].nota;
cont++;
else if (opcion==5)
mejor=0;
if (alumnos[x].nota>mejor)
mejor=alumnos[x].nota;
alum.nota=alumnos[x].nota;
strcpy(alum.nombre,alumnos[x].nombre);
else if (opcion==6)
peor=10;
if (alumnos[x].nota<peor)
peor=alumnos[x].nota;
alum.nota=alumnos[x].nota;
strcpy(alum.nombre,alumnos[x].nombre);
}
system("PAUSE");
return 0;
218
Google +
15.8K
6 comentarios:
1.
Responder
Respuestas
1.
Sí, es lo suyo Salvador, pero como éste post es parte de un curso de nivel
básico he preferido ponerlo así para que la persona que lo siga pudiera
practicar mucho.
Responder
2.
Responder
Respuestas
1.
Un saludo.
Responder
3.
Responder
4.
Ejercicio que pida al usuario números y los vaya almacenando en una cadena, y
cuando ponga el numero "0" deje de pedir números, luego que diga cuales son pares
y cuales impares.
Alguien sabe hacerlo?
Responder
Cargar más...
Crear un enlace
Search
Acerca de mí
Suscribete al RSS
Seguidores Blogger
Facebook
Popular
Tags
Program Datos;
Uses Crt;
Type
Persona : Record
Nombre : String[30];
Edad : Integer;
Sexo : Char;
Direccion : String[50];
Telefono : string[12];
End;
Var
P: Persona;
Begin
Clrscr;
{carga del registro}
Write(' Ingrese su Nombre: ');
Readln( P.Nombre );
Write(' Ingrese su Edad: ');
Readln( P.Edad );
Write(' Ingrese su Sexo [M / F]: ');
Readln( P.Sexo );
Write(' Ingrese su Dirección: ');
Readln( P.Direccion );
Write(' Ingrese su Teléfono: ');
Readln( P.Telefono )
{ fin carga del registro}
arre_persona=array[1..20] of persona;
Var
persona:arre_persona;
i, Menor : Integer;
Nombre : String[30];
Begin
Clrscr;
For i := 1 to 20 do
Begin
Write(' Ingrese el Nombre de la persona ', i , ': ');
Readln( persona[i].Nombre );
Write(' Ingrese su Edad: ');
Readln( persona[i].Edad );
Write(' Ingrese su Sexo [M / F]: ');
Readln( persona[i].Sexo );
Write(' Ingrese su Dirección: ');
Readln( persona[i].Direccion );
Write(' Ingrese su Teléfono: ');
Readln( persona[i].Telefono )
End;
Menor := persona[1].Edad;
For i := 2 to 20 do
If persona[i].Edad < Menor then
Begin
Menor := persona [i].Edad;
Nombre := persona [i].Nombre;
End;
Writeln(' El más joven es ',Nombre,' y tiene ',Menor,' años de edad.');
End.
PROGRAM ARR_REGISTROS;
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.
PROGRAM pagos;
USES
crt;
TYPE
arreglo_personas=array[1..5] of string;
arreglo_monto=array[1..5,1..3] of real;
arreglo_suma=array[1..5] of real;
VAR
per:arreglo_personas;
monto:arreglo_monto;
f,c:integer;
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 dimensión 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 dimensión 10x12.
3. Un instituto desea controlar los resultados de los alumnos en las distintas asignaturas de la
facultad de Ingeniería. 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 están
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 términos generales para definir un array se especifica el tipo de almacenamiento (atributo
opcional), el tipo de datos, el identificador y entre corchetes el tamaño del arreglo. Abajo se
muestra algunos ejemplos de definición de arreglos:
Inicialización de arreglos
En ciertas circunstancias puede ser necesario darle valores iniciales a los arreglos, para ello basta
con colocar entre llaves el conjunto de valores deseados separados por comas y en el orden
requerido. A continuación se muestran algunos ejemplos:
a) int cant[6]={12,-3,0,15,8};
b) double DesvTipica[8]={0.23, 3.1416, -0.5, 2.16789, -56.78, 25, 0.15, -14 };
c) char meses[12]={‘E’, ‘F’, ‘M’, ‘A’, ‘M’, ‘J’, ‘J’, ‘A’, ‘S’, ‘O’, ‘N’, ‘D’};
Cuando los elementos del arreglo no tienen asignados valores iniciales explícitos, éstos son
puestos a cero, a continuación tenemos un ejemplo:
int edades[8]={25,13,18};
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 números en un arreglo, calcule la suma,
promedio, cuadrado , cubo y desviación estándar 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 desviación
estandar de una serie de números */
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 impresión de cuadrado, cubo y desviación 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 ;
printf ("%.2lf", vector[i] ) ;
printf (" \t%.2lf", cuadrado) ;
printf (" \t%.2lf", cubo) ;
printf (" \t%.2f\n", desv) ;
}
system("pause");
return(0);
}
Nota que los valores fueron declarados de tipo double no enteros, por el tamaño de los valores
que se generan en los cálculos.
Ejemplo 2:
El siguiente programa lee 5 valores de teclado y los guarda en un arreglo a. Luego los escribe.
#include stdio.h>
#include stdlib.h>
main()
{
int a[5],i,num;
for(i=0; i<5;i++){
printf("Digite el numero:\n");
scanf("%d",&num);
a[i]=num;
}
Ejemplo 3:
El siguiente programa, pide 5 numeros y calcula los cubos de ellos, los cuales son guardados en un
arreglo y son desplegados.
#include stdio.h>
#include stdlib.h>
#include math.h>
main()
{
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;
}
PROBLEMA NRO 1
/* ENUNCIADO : Hacer un programa que calcule la nota de un alumno en una prueba 10
preguntas de opciones múltiples ('a',...o,'e'). Cada pregunta se evalúa con dos puntos.
Debe inicializa un arreglo con las respuestas correctas.
El programa debe mostrar el nombre, el arreglo de respuestas correctas y el arreglo de
respuestas del alumno y la nota del alumno.
*/
// LIBRERIAS
#include<iostream.h> // cin y cout
#include<iomanip.h> // setw()
#include<conio.h> // getch() o getche()
#include<stdlib.h> // toupper y tolower
#include<stdio.h>// gets()
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 tamaño N
int Canastas[N],i,Max;
// Lectura del array A
cout<<"Ingrese los elementos del array Canastas"<<endl;
for (i=0; i< N ; i++)
{ cin>>Canastas[i]; }
// Obtener EL MAXIMO VALOR
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 Mínima 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 tamaño N
double Talla[N],Min;
int i;
// Lectura del array A
cout<<"Ingrese los elementos del array Talla"<<endl;
for (i=0; i< N ; i++)
{ cin>>Talla[i]; }
// Obtener EL MINIMO VALOR
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
de nombres de tamaño N considerado constante. El tamaño maximo de las
cadenas considerela 20. */
// LIBRERIAS C++
#include <iostream.h> // cin y cout
#include <iomanip.h> // setw()
#include <conio.h> // getch()
#include <stdio.h> // gets()
#include <string.h> // strcmp() y strcpy()
PROBLEMA NRO 6
/* ENUNCIADO : Hacer un programa que ordene los nombres de N alumnos en sentido
inverso al alfabético. 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>
const int N = 5, TC = 20;
void main()
{ double nota[N], auxNt; // auxiliar de nota
char nom[N][TC], auxN[TC]; // auxiliar de nombre
int rpta,i,j,k,v;
// lectura de loa arrays nom y nota
for(i=0;i< N;i++)
{ cout<<"nombre: "<<endl;gets(nom[i]);
cout<<"nota : ";cin>>nota[i];
}
// ordenamiento de notas de mayor a menor
for (k=0;k< N-1;k++) // nro de pasos
{
for (j=0;j<N-1-k;j++) // nro de comparac.
{ if (strcmp(nom[j],nom[j+1])<0)
{ // intercambio de notas
auxNt = nota[j];
nota[j] = nota[j+1];
nota[j+1] = auxNt;
// intercambio de nombres
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 numérico de un
polinomio de grado N cuyos coeficientes , grado y valor de x son ingresados con
teclado. Considere un grado máximo de 99
**/
#include<iostream.h>
#include<conio.h>
#include<math.h>
const int N = 100;
void main()
{
int G,i;
double Poli[100], X, VN;
cout<<"Ingrese el grado del polinomio : ";cin>>G;
cout<<"Ingrese el valor de X = ";cin>>X;
// Lectura DE los coeficientes del polinomio
cout<<"Ingrese los coeficientes del polinomio: "<<endl;
for(i=0;i<G+1;i=i+1)
{
cout<<"Poli[ "<<i<<"] = ";cin>>Poli[i];
}
// calculo del valor numerico:
VN = 0;
for(i=0;i<G+1;i=i+1)
{
VN = VN + Poli[i] * pow(X,i) ;
}
PROBLEMA NRO 8
/* ENUNCIADO : Hacer un programa que calcule los costos de producción 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>
const int N = 15;
void main()
{
double CosUni[N], costo[N],CosTot;
int UnidProd[N],n,i;
cout<<"Ingrese el tamaño de los arrays ";cin>>n;
// LEER LOS ARRAYS CosUni y UnidProd
cout<<"Ingrese elementos de CosuUni y UnidProd : "<<endl;
for(i=0;i<n;i=i+1)
{ cin>>CosUni[i];
cin>>UnidProd[i];
}
// Calculo del array Costo :
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 librería 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];
}
GT=0.0; // inicializa la ganancia total en 0
for (i=0;i<N;i++)
{ // Genera los arrays MonInver, Venta
Costo[i] = cosUni[i] * UnidVend[i];
Venta[i] = preUni[i] * UnidVend[i];
// Genera el array Gan
Gan[i] = Venta[i] - Costo[i];
GT = GT + Gan[i]; // Acumula la ganancia total
}
// Muestra Reporte:
cout<<"El REPORTE ES EL SIGUIENTE :"<<endl;
cout<<setw(10)<<"Costo"<<setw(10)<<"Venta"<<setw(10)<<"Ganancia"<<endl;
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
Ejemplo 1
lista de litros de agua
1
2
2
3
4
n
Ejemplo 2
calorías
250
234
500
1000
10000
Ejemplo 3
reprobados en universidades
5
6
7
8
9
1000
Ejemplo 2
matriz
23 24 25
11 12 14
11 0 34
Ejemplo 3
matriz en electrónica
i1 i2 i3
6 7 8
1 2 9
Ejemplo 1
El siguiente código despliega todos los elementos de un arreglo bidimensional de 3 por 4,
empleando dos técnicas diferentes.
Ejemplo 2
El siguiente programa muestra el resultado de multiplicar cada elemento del arreglo val por el
número 10.
Ejemplo 3
Algoritmo para saber la temperatura.
Un array es una colección finita de datos del mismo tipo, que se almacenan en
posiciones consecutivas de memoria y reciben un nombre común.
Ejemplo de array: Supongamos que queremos guardar las notas de los 20
alumnos de una clase. Para ello utilizaremos un array de 20 elementos y en
cada elemento almacenaremos una nota.
Array notas:
Para acceder a cada elemento del array se utiliza el nombre del array y uno o
más índices que indican la posición que ocupa el elemento dentro del array.
Cada índice se escribe entre corchetes.
tipo_dato nombre_array[elementos1][elementos2]…..;
elementos1, elementos2, etc. son los índices del array. Deben ser números
enteros positivos o expresiones con un resultado entero positivo. Indican el
número de elementos del array.
double notas[20];
float precios[30]; //array llamado precios que contiene 30 elementos de tipo float
En este caso si se modifica el tamaño de los arrays, solo habrá que cambiar el
valor de la constante.
Los arrays declarados como locales en una función tienen como valores
iniciales valores indeterminados, como ocurre con las variables locales.
tipo nombre_array[tamaño]={valor1,valor2,..,valorn};
Donde valor1 es el valor del primer elemento del array, valor2 el valor del
segundo elemento, y así sucesivamente.
Todos los elementos del array que no tienen asignados valores iniciales
explícitos, (sucede cuando un array tienes más elementos que valores iniciales
se han asignado), serán puestos automáticamente a cero.
Ejemplos de asignación de valores iniciales en la declaración de un array en
C++:
Se declara un array unidimensional llamado porcentaje que contiene 4 elementos de tipo double.
El número de elementos no es necesario indicarlo porque se están asignando4 valores iniciales. El
compilador asume que el array tiene 4 elementos.
Se declara un array unidimensional llamado numeros que contiene 5 elementos de tipo int. Se
indica el número de elementos aunque no es necesario hacerlo. Se están asignando 5 valores
iniciales. El compilador asume que el array tiene 5 elementos.
Se declara un array unidimensional llamado digitos que contiene 8 elementos de tipo int. Aquí sí
es necesario indicar el número de elementos del array porque solo se le asignan valores iniciales a
los cuatro primeros. El compilador asumiría que el array tiene solo 4 elementos. En este caso los
cuatro últimos elementos del array que no reciben valores iniciales, toman el valor 0.
Los tipos de datos creados con typedef son sinónimos de otros tipos ya
existentes.
entero a, b=3;
Utilizando typedef podemos crear nuevos tipos de datos sinónimos de tipos array. La
forma general de hacerlo es:
Ejemplo:
Esta instrucción crea un nuevo tipo de dato llamado Tvector. Las variables que
se declaren de este tipo serán arrays de 30 enteros.
Por ejemplo:
Tvector a, b;
Los elementos de un array se pueden utilizar igual que cualquier otra variable y se
puede hacer con ellos las mismas operaciones que se pueden hacer con el resto de
variables.
#include <iostream>
int main ()
int n, m = 5;
n = a[0]; //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
a[4]=a[0]; // a[4]= 11
cout << a[0]<<" "<< a[1]<< " "<< a[2]<< " "<< a[3]<< " "<< a[4];
system("pause");
11 9 15 7 11
Si se intenta acceder a un elemento que está fuera de los límites 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 ejecución si esa posición 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 están dentro de los límites del array.
#include <iostream>
#include <iomanip>
int main ()
int i;
system("pause");
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. También 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.
#include <iostream>
#include <iomanip>
int main ()
int i = 0;
cout << "Alumno " << i+1 << " Nota final: ";
cin >> notas[i];
// Calcular la media
// Mostrar la media
cout << endl<< endl << "Nota media del curso: " << media <<
endl;
cout << " Nota final: " << notas[i] << endl;
system("pause");
}
Capítulo VII: Matrices
Posted by
0 Comment
Son arreglos bidimensionales, es una colección finita, homogénea 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.
Declaración de una matriz:
tipo_de_dato identificador[numFilas][numColumnas];;
Dónde :
Una matriz se pude inicializar para esto hay que agrupar entre {} cada fila. El formato a
utilizar sería el siguiente:
2 { columnas de la fila 1 },
3 { columnas de la fila 2 },
4 ... ,
};
6
int temperaturas[3][5] = { { 15, 17, 20, 25, 10 }, { 18, 20, 21, 23, 18
1
}, { 12, 17, 23, 29, 16 } };
1) Hacer un programa para generar una matriz de f filas y c columnas y calcular el mayor,
el menor y el promedio.
#include<iostream>
1
using namespace std;
2
3
#define MAX 10
4
5
void ordenMatriz(int &f, int &c);
6
void ingresoMatriz(float M[MAX][MAX], int f, int c);
7
void reporteMatriz(float M[MAX][MAX], int f, int c);
8 float mayor(float M[MAX][MAX], int f, int c);
11
int main()
12
{
13
float M[MAX][MAX];
14
int f,c;
15
ordenMatriz(f,c);
16 ingresoMatriz(M,f,c);
17 cout<<"Matriz ingresada"<<endl;
18 reporteMatriz(M,f,c);
25
void ordenMatriz(int &f, int &c)
26{
27 do{
29 cin>>f;
30 }while(f<=0 || f>MAX);
do{
31
cout<<"Numero de columnas : ";
32
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}
50 cout<<endl;
51 }
52}
53
59 if(M[i][j]>may)
may=M[i][j];
60
return may;
61
}
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 for(j=0;j<c;j++)
69 if(M[i][j]<men)
men=M[i][j];
70
return men;
71
}
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 for(j=0;j<c;j++)
79 s=s+M[i][j];
80 return s/(f*c);
}
81
82
83
84
85
86
87
88
89
90
1 #include<iostream>
5 #define MAX 10
6
void ordenMatriz(int &f, int &c);
7
void ingresoMatriz(float M[MAX][MAX], int f, int c);
8
void reporteMatriz(float M[MAX][MAX], int f, int c);
9
void sumaDeFilas(float A[MAX][MAX], int f, int c,float sf[MAX]);
10
void sumaDeColumnas(float A[MAX][MAX], int f, int c,float sc[MAX]);
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
cout<<"suma de fila "<<i<<" = "<<sf[i]<<endl;
22
sumaDeColumnas(M,f,c,sc);
23 for(j=0;j<c;j++)
25 system("PAUSE");
26 return 0;
27}
28
void ordenMatriz(int &f, int &c)
29
{
30
do{
31
cout<<"Numero de filas : ";
32
cin>>f;
33 }while(f<=0 || f>MAX);
34 do{
36 cin>>c;
37 }while(c<=0 || c>MAX);
}
38
39
void ingresoMatriz(float M[][MAX], int f, int c)
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
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
60{
61 int i,j;
62 for(i=0;i<f;i++)
63 {
sf[i]=0;
64
for(j=0;j<c;j++)
65
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 sc[j]=sc[j]+A[i][j];
76 }
77}
78
79
80
81
82
83
84
85
#include<iostream>
1
using namespace std;
2
#define MAX 10
3
4 void ordenMatriz(int &f, int &c);
12 ingresoMatriz(M,f,c);
13 cout<<"Matriz ingresada"<<endl;
14 reporteMatriz(M,f,c);
transpuesta(M,f,c,T);
15
cout<<"Matriz Transpuesta "<<endl;
16
reporteMatriz(T,c,f);
17
system("PAUSE");
18
}
19
void ordenMatriz(int &f, int &c)
20{
21 do{
23 cin>>f;
24 }while(f<=0 || f>MAX);
do{
25
cout<<"Numero de columnas : ";
26
cin>>c;
27
}while(c<=0 || c>MAX);
28
}
29
31{
int i,j;
32
for(i=0;i<f;i++)
33
for(j=0;j<c;j++)
34
{
35
cout<<"M["<<i<<"]["<<j<<"]:";
36
cin>>M[i][j];
37 }
38}
39
41{
int i,j;
42
for(i=0;i<f;i++)
43
{
44
for(j=0;j<c;j++)
45
cout<<M[i][j]<<"t";
46
cout<<endl;
47 }
48}
49
51{
52 int i,j;
for(i=0;i<f;i++)
53
54 for(j=0;j<c;j++)
55 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>
3 #define MAX 10
4
void ordenMatriz(int &f, int &c);
5
void ingresoMatriz(float M[MAX][MAX], int f, int c);
6
void reporteMatriz(float M[MAX][MAX], int f, int c);
7
void sumaMatrices(float A[MAX][MAX],float B[MAX][MAX],float C[MAX][MAX],
8 int f, int c);
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
32 else
34 system("PAUSE");
35 return 0;
}
36
37
void ordenMatriz(int &f, int &c)
38
{
39
do{
40 cout<<"Numero de filas : ";
41 cin>>f;
}while(f<=0 || f>MAX);
42
do{
43
cout<<"Numero de columnas : ";
44
cin>>c;
45
}while(c<=0 || c>MAX);
46
}
47void ingresoMatriz(float M[][MAX], int f, int c)
48{
49 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
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
70 for(i=0;i<f;i++)
71 for(j=0;j<c;j++)
72 S[i][j]=A[i][j]+B[i][j];
73
}
74
75
void productoMatrices(float A[MAX][MAX],float B[MAX][MAX],float
76P[MAX][MAX], int f1, int c1,int c2)
77{
78 int i,j,k;
79 for(i=0;i<f1;i++)
80 for(j=0;j<c2;j++)
{
81
P[i][j]=0;
82
for(k=0;k<c1;k++)
83
P[i][j]=P[i][j]+A[i][k]*B[k][j];
84
}
85
}
86
87
88
89
90
91
92
1 #include<iostream>
4 #define MAX 10
13
int main()
14 {
15 float M[MAX][MAX];
16 int n;
17 ordenMatriz(n);
ingresoMatriz(M,n,n);
18
19 cout<<"Matriz ingresada"<<endl;
20 reporteMatriz(M,n,n);
29
30
32 {
33 do{
cin>>n;
35
}while(n<=0 || n>MAX);
36
}
37
38
void ingresoMatriz(float M[][MAX], int f, int c)
39
{
40
int i,j;
41 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++)
53 cout<<M[i][j]<<"t";
54 cout<<endl;
}
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)
64 s=s+M[i][j];
65 return s;
}
66
67
float promedioDiagonalSecundaria(float M[][MAX], int n)
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
return s/n;
75
}
76
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
if(i<=j && M[i][j]>may)
83
may=M[i][j];
84
return may;
85
}
86
88 {
89 int i,j,c=0;
90 float s=0;
91 for(i=0;i<n;i++)
for(j=0;j<n;j++)
92
if(i>=j)
93
{
94 s = s + M[i][j];
95 c++;
}
96
return s/c;
97
}
98
99
100
101
102
103
104
105
1 #include<iostream>
using namespace std;
2
3
#define MAX 10
4
5
void ordenMatriz(int &n);
6
void ingresoMatriz(float M[MAX][MAX], int f, int c);
7
void reporteMatriz(float M[MAX][MAX], int f, int c);
8
bool esSimetrica(float M[MAX][MAX], int n);
9
10
11int main()
12{
13 float M[MAX][MAX];
int n;
14
ordenMatriz(n);
15
ingresoMatriz(M,n,n);
16
cout<<"Matriz ingresada"<<endl;
17
reporteMatriz(M,n,n);
18
if(esSimetrica(M,n))
19 cout<<"La matriz es simetrica"<<endl;
20 else
22 system("PAUSE");
return 0;
23
}
24
25
26
void ordenMatriz(int &n)
27
{
28
do{
29
cout<<"Orden de la matriz cuadrada: ";
30 cin>>n;
31 }while(n<=0 || n>MAX);
32}
33
35{
int i,j;
36
37 for(i=0;i<f;i++)
38 for(j=0;j<c;j++)
{
39
cout<<"M["<<i<<"]["<<j<<"]:";
40
cin>>M[i][j];
41
}
42
}
43
void reporteMatriz(float M[MAX][MAX],int f, int c)
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
bool esSimetrica(float M[MAX][MAX], int n)
54{
55 int i,j;
56 for(i=0;i<n;i++)
57 for(j=i+1;j<n;j++)
58 if(M[i][j]!=M[j][i])
return false;
59
return true;
60
}
61
62
63
64
65
66
#include<iostream>
1
using namespace std;
2
3
#define MAX 10
4
5
void ordenMatriz(int &f, int &c);
6
void ingresoMatriz(float M[MAX][MAX], int f, int c);
7
void reporteMatriz(float M[MAX][MAX], int f, int c);
8 void mayorElementoDeCadaFila(float M[MAX][MAX], int f, int c);
10int main()
11{
12 float M[MAX][MAX];
int f,c;
13
ordenMatriz(f,c);
14
ingresoMatriz(M,f,c);
15
cout<<"Matriz ingresada"<<endl;
16
reporteMatriz(M,f,c);
17
mayorElementoDeCadaFila(M,f,c);
18 system("PAUSE");
19 return 0;
20}
21
22
23
void ordenMatriz(int &f, int &c)
24
{
25
do{
26
cout<<"Numero de filas : ";
27
cin>>f;
28
}while(f<=0 || f>MAX);
29 do{
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{
45 int i,j;
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
54{
55 int i,j;
float may;
56
for(i=0;i<f;i++)
57
{
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 }
65 }
}
66
67
68
69
70
71
72
Ejercicios Propuestos
1) Ingresar una matriz cuadrada de orden n y reportar si es simétrica. Recordar que una
matriz es simétrica si se cumple la condición: 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 número de fila y eliminarla de la matriz.
b) Ingresar un número de columna y eliminarla de la matriz.
c) Ingresar un número de fila e insertar una fila en la matriz.
d) Ingresar un número de columna e insertar una columna en la matriz.
e) Intercambiar 2 filas de la Matriz. El número de las filas a intercambiar debe ingresarse.
f) Intercambiar 2 columnas de la Matriz. El número de las columnas a intercambiar debe
ingresarse.
g) Ordenar las filas de una matriz
h) Ordenar las columnas de una matriz
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
penúltima y así sucesivamente).
6) Hacer un programa para que coloque un 1 en las diagonales principales de una matriz
cuadrada. El resto se debe completar con ceros.
8) Hacer un programa para invertir las filas de una matriz (Los elementos de la primera fila
se intercambian con los de la ultima, los de la segunda con los de la penúltima y así
sucesivamente).
9) Hacer un programa que al recibir una matriz cuadrada de orden impar. Determine si la
misma se pude considerar un cuadrado Mágico.(En un cuadrado mágico la suma de
cualquiera de las filas, columnas y diagonales principales siempre es la misma).
10) Hacer un programa que al recibir como dato una matriz , recorra esta matriz en forma
de espiral. Tal como se muestra en la figura:
11) Hacer un programa que al recibir como dato una matriz recorra esta matriz columna a
columna tal como se muestra en la figura.
12) Programa que ingresa el orden de una Matriz cuadrada y generarla y luego hacer lo
siguiente:
a) Reporta solo las diagonales.
b) Intercambia las diagonales.
c) Invierte las diagonales.
d) Reporta los elementos que están arriba y abajo de la diagonal principal.
e) Reporta los elementos que están arriba y abajo de la diagonal secundaria.
13) Programa para ingresar una matriz de números enteros diferentes de cero de filas y c
columnas y la acomode para que queden primero los números positivos y luego los
números negativos
14) Ingresar una matriz de f filas y c columnas y calcular el Mayor, y reportar todas las
posiciones donde se encuentra el mayor. Y calcular el menor y reportar todas las posiciones
donde se encuentra el menor
15) Ingresar una matriz cuadrada y verificar si es una matriz Triangular inferior.
16) Crear un proyecto que permita digitar los valores enteros de una matriz A(4 x 5), luego
proceda a multiplicar la matriz por una constante N que deberá ser digitada, asignando el
resultado a una segunda matriz B(4 x 5), luego listar por filas la matriz A y la matriz
resultado B.
17) Crear un proyecto que permita mostrar los valores de la tabla de multiplicar del 1 al 12
en un Matriz de forma tal que cada fila, aparezca en una línea de impresión.
18) Crear un proyecto que permita digitar los valores para dos matrices C(4 x 3) y D(4 x 3),
luego proceder a efectuar la siguiente operación de matrices:
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 revés
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.
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