Luis Gamboa

19
Luis Gamboa Tercero Informática Tarea de:

Transcript of Luis Gamboa

Page 1: Luis  Gamboa

Luis Gamboa

Tercero Informática

Tarea de:

Page 2: Luis  Gamboa

VECTORES Y MATRICES EN C

VECTORES

Un vector, también llamado array(arreglo) unidimensional, es una estructura de datos

que permite agrupar elementos del mismo tipo y almacenarlos en un solo bloque de

memoria juntos, uno despues de otro. A este grupo de elementos se les identifica por

un mismo nombre y la posición en la que se encuentran. La primera posición del array

es la posición 0.

Podríamos agrupar en un array una serie de elementos de tipo enteros, flotantes,

caracteres, objetos, etc. Crear un vector en c++ es sencillo, seguimos la siguiente

Sintaxis:

Tipo nombre[tamanyo];

MATRICES

Una matriz es un vector de vectores o un también llamado array bidimensional. La

manera de declarar una matriz es c++ es similar a un vector:

Sintaxis:

int matriz[fils][cols];

int es el tipo de dato, matriz es el nombre del todo el conjunto de datos y debo de

especificar el número de filas y columnas. Las matrices también pueden ser de

distintos tipos de datos como char, float, double,etc.

Las matrices en c++ se almacenan al igual que los vectores en posiciones consecutivas

de memoria. Usualmente uno se hace la idea que una matriz es como un tablero. Pero

internamente el manejo es como su definicion lo indica, un vector de vectores, es

decir, los vectores están uno detrás de los otros juntos.

La forma de acceder a los elementos de la matriz es utilizando su nombre e indicando

los 2 subíndices que van en los corchetes. Si Coloco int matriz [2][3]=10; //estoy

asignando al cuarto elemento de la tercera fila el valor 10. No olvidar que tanto filas

como columnas se enumeran a partir de 0.

Page 3: Luis  Gamboa

EJERCICIOS

1. Diseñar un programa en c que me permita ingresar n elementos en una matriz

cuadrática.

Análisis:

En el siguiente ejemplo vamos a realizar el ingreso de n elementos en una matriz.

Primero el ingreso de las librerías. Utilizaremos una función “borde” para realizar un

diseño para el borde, en el cual utilizamos dos ciclos for para los márgenes de la

pantalla. En el programa principal realizamos el ejercicio que a continuación detalla.

Ingresamos un límite para saber el tamaño de la matriz que vamos a ingresar.

Utilizamos dos bucles “for” para el ingreso de la matriz, en el primer for controlamos

las filas, el segundo lazo for para las columnas. Para el ingreso de datos de una matriz

utilizamos la sentencia “scanf”. Para recorrer una matriz utilizamos de igual forma dos

lazos “for” y en este caso utilizamos la sentencia printf para imprimir la matriz

ingresada. Antes de cerrar la llave del segundo lazo for incrementamos las columnas.

Luego de cerrar el segundo lazo for la columna regresa a la misma posición, y las filas

se incrementan. Declaramos las variables del tipo que utilizamos y cerramos el

programa.

#include <conio.h>

#include <stdio.h>

void main()

{

int matriz[10][10];

int op,i,j,limite,col=10,fil=10;

do{

clrscr();

gotoxy(19,4);printf("**MATRIZ DE ORDEN CUADRADA**");

gotoxy(19,5);printf("**INGRESE EL LIMITE**");scanf("%d",&limite);

for(i=1;i<=limite;i++)

Page 4: Luis  Gamboa

{

for(j=1;j<=limite;j++)

{

gotoxy(col,fil);scanf("%d",&matriz[i][j]);

col=col+5;

}

col=10;

fil=fil+1;

}

col=25;

fil=10;

for(i=1;i<=limite;i++)

{

for(j=1;j<=limite;j++)

{

gotoxy(col,fil);printf("%d",matriz[i][j]);

col=col+5;

}

fil=fil+1;

col=25;

}

gotoxy(10,20);printf("Presione 1 para continuar,0 para salir");scanf("%d",&op);

}

while(op==1);

getch();

}

Page 5: Luis  Gamboa

2. Diseñe un programa que me permita ingresar N números enteros en una

matriz cuadrática, recorra y encuentre los datos de su diagonal principal.

Análisis:

Ingresamos una matriz y obtendremos los datos de la diagonal principal para esto

realizaremos lo siguiente. Primero el ingreso de las librerías. Utilizaremos una función

“borde” para realizar un diseño para el borde, en el cual utilizamos dos lazos “for” para

los márgenes de la pantalla. En el programa principal realizamos el ejercicio que a

continuación detalla. Ingresamos también un límite es para saber el tamaño de la

matriz que ingresaremos. Utilizamos dos bucles “for” para el ingreso de la matriz, en el

primer laso for controlamos las filas, el segundo for para las columnas. Para el ingreso

de datos de una matriz utilizamos la sentencia “scanf”. Para recorrer una matriz

utilizamos de igual forma dos lazos “for” y en este caso utilizamos la función “printf”

para imprimir la matriz ingresada. Para la coger solo los datos de la diagonal principal

utilizamos dos bucles “for” y una sentencia de condición con “if” , las filas deben ser

igual a las columnas, si es verdadero se guardamos en otra matriz los datos de la

diagonal principal. Imprime la matriz resultante y se cierra la llave de la condición.

Antes de cerrar la llave de los bucles “for” incrementamos las columnas y filas.

Declaramos las variables del tipo que utilizamos y cerramos el programa.

#include<stdio.h>

#include<conio.h>

Page 6: Luis  Gamboa

#include<math.h>

void main()

{

int m[10][10],i,j,f,c,n,op,p,l,g,x,g1,g2;

do{

clrscr();

flushall();

for(i=1;i<=80;i++)

{

gotoxy(i,3);printf("*");

gotoxy(i,50);printf("*");

}

for(i=1;i<=50;i++)

{

gotoxy(1,i);printf("*");

gotoxy(80,i);printf("*");

}

c=5;

f=15;

gotoxy(5,6);printf("Ingrese L¡mite :");scanf("%d",&l);

gotoxy(8,13);printf("Ingreso");

for(i=1;i<l+1;i++)

{

for(j=1;j<l+1;j++)

{

do{

gotoxy(c,f);scanf("%d",&m[i][j]);

}

while(m[i][j]<8 || m[i][j]>=58);

c=c+3;

}

c=5;

f=f+3;

}

c=35;

f=15;

gotoxy(37,13);printf("Diagonales");

Page 7: Luis  Gamboa

textcolor(7);

for(i=1;i<l+1;i++)

{

for(j=1;j<l+1;j++)

{

if(i==j)

{

gotoxy(c,f);printf("%d",m[i][j]);

c=c+3;

f=f+3;

}

}

}

g1=c-3;

g2=15;

x=l;

textcolor(27);

for(i=1;i<l+1;i++)

{

gotoxy(g1,g2);printf("%d",m[i][x]);

x=x-1;

g2=g2+3;

g1=g1-3;

}

gotoxy(10,45);printf("Para continuar 1 para cerrar 0:");scanf("%d",&op);

}

while(op==1);

getch();

}

Page 8: Luis  Gamboa

3. Diseñe un programa que me permita generar n múltiplos de cualquier facto

ingresado desde teclado que se encuentre dicho factor entre 2 y 9, la matriz

de orden cuadrática se visualiza la entrada y la salida.

Análisis:

En este ejemplo vamos a generar n múltiplos de un factor ingresado desde teclado en

una matriz. Primero el ingreso de las librerías. Utilizaremos una función “borde” para

realizar un diseño para el borde, en el cual utilizamos dos lazos “for” para los márgenes

de la pantalla. En el programa principal realizamos el ejercicio que a continuación

detalla. Ingresamos un límite para saber el tamaño de la matriz que vamos a generar.

Ingresamos el factor entre 2 y 9. Para el ingreso del factor utilizamos la instrucción “do

while” este nos permite validar un valor, para que solo nos permita ingresar valores

entre 2 y 9. Utilizamos un contador que inicializamos en 1, luego dentro del lazo for se

va incrementando de uno en uno. Utilizamos dos bucles “for” para generar la matriz,

en el primer lazo for controlamos las filas, el segundo lazo for para las columnas.

Realizamos el proceso de la multiplicación entre el factor ingresado y el contador, esto

guardamos en una matriz e imprimimos dicha matriz. Para recorrer una matriz

utilizamos de igual forma dos lazos “for” y utilizamos la sentencia “printf”.

Declaramos globalmente las variables que utilizamos.

#include <conio.h>

#include <stdio.h>

void main()

{

Page 9: Luis  Gamboa

int matriz1[10][10],matriz2[10][10];

int fact,mul,op,i,j,limite,x=1,col=10,fil=10;

do{

clrscr();

gotoxy(19,4);printf("**MATRIZ DE ORDEN CUADRATICA CON MULTIPLOS**");

gotoxy(19,5);printf("**INGRESE EL LIMITE**");scanf("%d",&limite);

do{

gotoxy(36,10);printf(" ");

gotoxy(19,7);printf("**INGRESE EL FACTOR**");scanf("%d",&fact);

}

while(fact<=2 || fact>=9);

for(i=1;i<=limite;i++)

{

for(j=1;j<=limite;j++)

{

matriz1[i][j]=fact*x;

gotoxy(col,fil);printf("%d",matriz1[i][j]);

x=x+1;

col=col+5;

}

col=10;

fil=fil+1;

}

col=35;

fil=10;

for(i=1;i<=limite;i++)

{

for(j=1;j<=limite;j++)

{

gotoxy(col,fil);printf("%d",matriz1[i][j]);

col=col+5;

}

Page 10: Luis  Gamboa

fil=fil+1;

col=35;

}

gotoxy(10,20);printf("Presione 1 para continuar,0 para salir");scanf("%d",&op);

}

while(op==1);

getch();

}

4.- Diseñe un programita que me permita ingresar N elementos enterosen una matriz

cuadrática, los mismos q deben estar en un rango desde 5 hasta 45, recorra la matriz

y encuentre todos los elementos impares de la matriz y guárdelos en un vector, el

mismo que se debe presentar en forma ordenada.

#include<stdio.h>

#include<conio.h>

void main()

{

int c,d,f,n,l,matriz[10][10],aux,vec1[50],b,i,j,au,v[20];

clrscr();

flushall();

Page 11: Luis  Gamboa

gotoxy(4,3);printf("Ingrese el l¡mite: ");scanf("%d",&l);

gotoxy(4,5);printf("Ingrese los n£meros: ");

for(c=1;c<=l;c++)

{

for(f=1;f<=l;f++)

{

do

{

gotoxy(f*3+4,c*2+5);printf(" ");

gotoxy(f*3+4,c*2+5);scanf("%d",&matriz[f][c]);

}

while(matriz[f][c]<5||matriz[f][c]>=46);

}

}

aux=1;

b=8;

for(c=1;c<=l;c++)

{

for(f=1;f<=l;f++)

{

if(matriz[f][c]%2==1)

{

vec1[aux]=matriz[f][c];

gotoxy(28,b);printf("%d",vec1[aux]);

Page 12: Luis  Gamboa

aux=aux+1;

b=b+1;

}

}

}

getch();

}

Análisis:

Debemos ingresar el límite de la matriz desde teclado, luego ingresamos los elementos

de nuestra matriz que deben estar validados entre 5 y 45 para lo que se debe utilizar

un Do While, luego de haber ingresado los datos, recorremos la matriz buscando todos

los elementos impares que hayamos ingresado para guardarlos en un vector y al final

usando un lazo for se va visualizando los datos deseados de uno en uno en forma

vertical.

Page 13: Luis  Gamboa

5.- Diseñe un programa que me permita ingresar n números enteros en una matriz

cuadrática, recorra sus posiciones y obtenga los datos de su diagonal principal y

secundaria.

#include<stdio.h>

#include<conio.h>

void main()

{

int l,matriz[10][10],c,f,i,j,a,op;

clrscr();

do

{

flushall();

clrscr();

gotoxy(4,4);printf("Ingrese el l•mite: ");scanf("%d",&l);

gotoxy(4,7);printf("Ingrese los n—meros");

for(c=1;c<=l;c++)

{

for(f=1;f<=l;f++)

{

gotoxy(f*3+9,c*2+9);scanf("%d",&matriz[f][c]);

}

}

for(c=1;c<=l;c++)

{

for(f=1;f<=l;f++)

{

gotoxy(f*3+38,c*2+9);printf("%d",matriz[f][c]);

}

}

gotoxy(32,25);printf("Diagonal principal/secundaria");

for(c=1;c<=l;c++)

{

for(f=1;f<=l;f++)

{

if(c==f)

{

gotoxy(f*3+38,c*2+25);printf("%d",matriz[f][c]);

}

}

Page 14: Luis  Gamboa

}

a=l;

for(f=1;f<=l;f++)

{

gotoxy(f*3+38,a*2+25);printf("%d",matriz[f][a]);

a=a-1;

}

gotoxy(20,47);printf("Presione 1 para continuar o 0 para salir: ");scanf("%d",&op);

}

while(op==1);

flushall();

}

Análisis:

Debemos ingresar el límite de la matriz desde teclado, luego ingresamos los elementos

de nuestra matriz, luego de haber ingresado los datos, recorremos la matriz buscando

todos los elementos que hayamos ingresado en su diagonal principal y la diagonal

secundaria y luego los visualizamos y utilizando un Do While preguntamos si desea

continuar o desea salir del programa, en caso de que presione 1, que es, continuar, el

programa vuelve a pedir el límite de la matriz, se ingresan los datos y así son el mismo

proceso las veces que deseemos.

Page 15: Luis  Gamboa

6.- Diseñe un programa que me permita realizar un menú de opciones con suma,

resta y multiplicación de matrices, utilizando funciones.

#include<stdio.h>

#include<conio.h>

int j,i,l,matriz1[10][10],c,f,matriz2[10][10],matriz3[10][10],op,x;

void ingreso()

{

gotoxy(20,3);printf("Ingrese el l¡mite: ");scanf("%d",&l);

gotoxy(4,5);printf("Ingrese la matriz 1: ");

for(c=1;c<=l;c++)

{

for(f=1;f<=l;f++)

{

gotoxy(c*3+6,f+5);scanf("%d",&matriz1[c][f]);

}

}

gotoxy(39,5);printf("Ingrese la matriz 2: ");

for(c=1;c<=l;c++)

{

for(f=1;f<=l;f++)

{

gotoxy(c*3+47,f+5);scanf("%d",&matriz2[c][f]);

}

}

}

void suma()

{

for(c=1;c<=l;c++)

{

for(f=1;f<=l;f++)

{

matriz3[c][f]=matriz1[c][f]+matriz2[c][f];

gotoxy(c*3+10,f+10);printf("%d",matriz3[c][f]);

}

}

}

void resta()

{

for(c=1;c<=l;c++)

Page 16: Luis  Gamboa

{

for(f=1;f<=l;f++)

{

matriz3[c][f]=matriz1[c][f]-matriz2[c][f];

gotoxy(c*3+10,f+10);printf("%d",matriz3[c][f]);

}

}

}

void multiplicacion()

{

for(c=1;c<=l;c++)

{

for(f=1;f<=l;f++)

{

matriz3[c][f]=matriz1[c][f]*matriz2[c][f];

gotoxy(c*3+10,f+10);printf("%d",matriz3[c][f]);

}

}

}

void main()

{

clrscr();

gotoxy(23,3);printf("Operaciones con matrices");

gotoxy(4,6);printf("1. Suma");

gotoxy(4,8);printf("2. Resta");

gotoxy(4,10);printf("3. Multiplicaci¢n");

gotoxy(4,12);printf("4. Salir");

gotoxy(4,16);printf("Escoja una opci¢n: ");scanf("%d",&op);

switch(op)

{

case1:

do

{

clrscr();

ingreso();

suma();

gotoxy(10,20);printf("Presione 1 para continuar o 0 para salir:");scanf("%d",&x);

}

Page 17: Luis  Gamboa

while(x==1);

getch();

break;

case2:

do

{

clrscr();

ingreso();

resta();

gotoxy(10,20);printf("Presione 1 para continuar o 0 para salir:");scanf("%d",&x);

}

while(x=1);

getch();

break;

case3:

clrscr();

ingreso();

multiplicacion();

getch();

break;

case 4:

exit(0);

getch();

break;

getch();

}

}

Análisis:

Debemos ingresar el límite de la matriz desde teclado, luego ingresamos los elementos

de nuestra matriz,luego de haber ingresado los datos escogemos la opción que

queramos: suma, resta o multiplicación, y al final visualizaremos el resultado de la

operación que hayamos escogido. Para realizar en menú de opciones, utilizamos

Switch con sus respectivos Case, dentro de cada opción este programa pide continuar

o salir, si elegimos continuar, vuelve a pedir el límite de la matriz, los datos de la matriz

y asi continúa con el mismo proceso ya detallado.

Page 18: Luis  Gamboa
Page 19: Luis  Gamboa