MATRICES EN C

Page 1


VECTORES Un vector es un conjunto de datos del mismo tipo que se identifican bajo un mismo nombre. Para acceder a un elemento específico se utiliza un índice (o posición).

En C, todos los vectores están constituidos por posiciones de memoria contiguas. Los vectores pueden tener una o varias dimensiones. El formato general de la declaración es: Tipo Nombre[Tamaño]; Ejemplos: int iVec[10]; int iVec[20]={0}; //Todos los elementos se inicializan al valor 0; int iVec[5]={5,7,8,9,1}; //Se pueden inicializar cada uno de los elementos

En todos los vectores el índice del primer elemento siempre es 0 por lo tanto, cuando se declara int iVec[10] se está declarando un vector que tiene 5 elementos, desde iVec[0] hasta iVec[9] ACCESO A ELEMENTOS Para acceder a un elemento en concreto se debe utilizar el nombre del vector y entre corchetes especificar la posición de la celda. iVec[0]=3 ; // Asignar el valor 3 al primer elemento // Inicializar todos los elementos a 1: for( i = 0; i<5; i ++) { iVec[i]= 1; } CADENAS DE CARACTERES En C, una cadena se define como un vector de caracteres de longitud determinada que finaliza con un carácter nulo. El carácter nulo se especifica como „\0‟ y se corresponde con el número 0. Por esta razón, para declarar vectores de caracteres es necesario que el tamaño tenga un carácter más que la cadena más larga que pueda almacenar. Por ejemplo, si se desea declarar un vector que contenga una cadena de 9 caracteres, se deberá escribir: char Cadena[11]; Inicializar el vector en la declaración: char Cadena[5]= {“Hola”}; //Al final se almacena el carácter NULL.


Función para realizar el borde

Si inicializamos el vector podemos omitir el tamaño del mismo: char Cadena[ ]= " Hola Mundo " ; Funciones interesantes de Cadenas char Cadena[20] ; //Declaración de una cadena - Aceptar una cadena por teclado: Estas funciones aceptan la introducción de caracteres que los almacena dentro del vector. Al final almacenan el carácter NULL y no controlan el tamaño del vector. scanf(“%s”, Cadena); Se acaba cuando se pulsa ENTER o ESPACIO. No permite la introducción de varias palabas. gets(Cadena); Se acaba cuando se pulsa ENTER. Permite la introducción de varias palabras - Mostrar por pantalla una cadena: printf(“%s”, Cadena); Muestra hasta que encuentra el carácter NULL. C soporta gran variedad de funciones de manipulación de cadenas. Algunas de las más habituales son: int strlen(char * c); Devuelve la cantidad de caracteres que contiene la cadena strcpy(char * c1,char cad * c2); EJERCICIOS 1.- Diseñe un programa que me permita leer una cadena de caracteres y encontrar todas aquellas que sean vocales y pasarlas a un nuevo vector en forma ordenada. ANALISIS: Primero necesitamos una cadena de texto luego con dicha cadena se calcula el limite para la cual necesitamos el comando (strlen) para ver si es consonante dentro de un lazo for qie empiece en uno y que llege asta el limite preguntamos que si es los datos son iguales de las vocales si dice que los datos le enviamos a un nuevo vector, luego dentro de dos for ordenamos los datos del nuevo vector En un for que vaya desde 1 hasta el contador de vocales imprimimos el resultado.

CODICICADO: #include<conio.h> #include<stdio.h> #include<string.h> int j;

Librerías principales


void borde () { for (j=1;j<=80;j++) { gotoxy (j,1); printf ("*"); gotoxy (j,24); printf ("*"); Funci贸n para el borde

} for (j=1;j<=24;j++) { gotoxy (1,j); printf ("*"); gotoxy (80,j); printf ("*"); } } void main() { char vector2[15],vector1[15],aux;

Declaraci贸n de variables

int i,col,fila=7,limi,op,h; do {

Borrado de pantalla

clrscr(); borde();

Llamo a la funci贸n borde

j=j+1; aux=0; j=1; gotoxy(25,2);printf("ORDENAR LAS VOCALES"); flushall();

Ingreso de la cadena de caracter

Retorna la cadena de car谩cter al inicio

gotoxy(5,5);printf("INGRESE LA CADCENA DE CARACTERES==>");gets(vector1); limi=strlen(vector1); for (i=0;i<limi;i++) {

Retorna al inicio de la cadena de caracteres


if(vector1[i]=='a') { vector2[j]=vector1[i]; j=j+1; } if(vector1[i]=='e') { vector2[j]=vector1[i]; j=j+1; } if(vector1[i]=='i') { vector2[j]=vector1[i]; j=j+1; } if(vector1[i]=='o') { vector2[j]=vector1[i]; j=j+1; } if(vector1[i]=='u') { vector2[j]=vector1[i]; j=j+1; } } fila=8;

Proceso para ver si son vocales


for (i=1;i<j;i++) { for(h=1;h<j;h++) { if(vector2[i]<vector2[h]) {

Proceso para ordenar las vocales

aux=vector2[i]; vector2[i]=vector2[h]; vector2[h]=aux; } } } for(i=1;i<j;i++) {

gotoxy(25,fila);printf("%c",vector2[i]);

For para imprimir el vector ordenado

fila=fila+1; } gotoxy(20,20);printf("<<PRESIONE 1 PARA CONTINUAR o 0 PARA TERMINAR>> Ingreso la opci贸n para continuar o no

"); scanf("%d",&op); } while(op==1);

Ciclo para continuar o no

getch(); }

Pausa del programa

CORRIDO DEL PROGRAMA:


2.- Dise帽e un programa que me permita leer una cadena de caracteres imprima dicha cadena de caracteres en forma descendente. ANALISIS: Primero necesitamos una cadena de texto luego con dicha cadena se calcula el limite para la cual necesitamos el comando (strlen) para visualizar la cadena de caracteres en forma descendente necesitamos un for que empiece en el limite que llegue asta que sea igual a cero y que tenga decrementos de uno. CODIFICADO: #include<conio.h> Librer铆as principales #include<stdio.h> int i,col=40,fila=9,limi,op,j; Declaraci贸n de variables globales char nombre[15]; void borde () { for (j=1;j<=80;j++) { gotoxy (j,1); printf ("*"); gotoxy (j,24); printf ("*"); Funci贸n para crear el borde } for (j=1;j<=24;j++) { gotoxy (1,j); printf ("*"); gotoxy (80,j); printf ("*"); } } void main()


{ do { clrscr(); Retorna al borde(); principio de la gotoxy(30,2);printf("CADENA DE CARACTERES"); cadena de texto flushall(); gotoxy(4,6);printf("INGRESE LA CADENA DE CARACTERES==>");gets(nombre); limi=strlen(nombre); Veo el limite de la cadena de texto col=20; fila=9; Ingreso de la cadena for(i=0;i<limi;i++) de texto { Imprimo la cadena de gotoxy(col,fila);printf("%c",nombre[i]); texto en forma normal fila=fila+1; } col=50; fila=9; for(i=limi;i>=0;i--) { textcolor(i); Imprimo la cadena de texto en forma gotoxy(col,fila);cprintf("%c",nombre[i]); desendente fila=fila+1; } gotoxy(22,22);printf("PRESIONE 1 PARA CONTINUAR Y 0 PARA TERMINAR>");scanf("%d",&op); } while(op==1); getch(); Pausa del programa } CORRIDO DEL PROGRAMA:


3.- DiseĂąe un programa que me permita leer una cadena de caracteres y encontrar todos aquellos caracteres que sean consonantes pasarlos en forma de vector y presentarlos en forma ordenada. ANALISIS: Primero necesitamos una cadena de texto luego con dicha cadena se calcula el limite para la cual necesitamos el comando (strlen) para ver si es consonante dentro de un lazo for qie empiece en uno y que llege asta el limite preguntamos que si es los datos son diferentes de las vocales si dice que los datos le enviamos a un nuevo vector, luego dentro de dos for ordenamos los datos del nuevo vector. CODIFICADO: #include<conio.h> LibrerĂ­as #include<stdio.h> principales #include<string.h> int j; void borde () { for (j=1;j<=80;j++) { gotoxy (j,1); printf ("*"); gotoxy (j,24); printf ("*"); } for (j=1;j<=24;j++) { gotoxy (1,j); printf ("*"); gotoxy (80,j); printf ("*");

FunciĂłn para realizar el borde


} } void main() { char vector2[15],vector1[15],aux; int col,fila=7,limi,i,op,h; do { Borrado de pantalla clrscr(); borde(); Llamo a la funci贸n del borde aux=0; j=1; gotoxy(25,2);printf("ORDEN DE CONSONANTES"); flushall(); gotoxy(5,5);printf("INGRESE LA CADCENA DE CARACTERES==>");gets(vector1); Ingreso de la cadena de texto limi=strlen(vector1); Verifico cual es limite for (i=0;i<limi;i++) { if(vector1[i]!='a' && vector1[i]!='e' && vector1[i]!='i' && vector1[i]!='o' && vector1[i]!='u') Pregunta para ver si son consonantes { vector2[j]=vector1[i]; Paso los datos a otro vector j=j+1; } } Incremento el 铆ndice del nuevo vector fila=8; for (i=1;i<j;i++) { for(h=1;h<j;h++) { if(vector2[i]<vector2[h]) Proceso para ordenar el vector { aux=vector2[i]; vector2[i]=vector2[h]; vector2[h]=aux; } } }


for(i=1;i<j;i++) { Proceso de imprimir el vector gotoxy(25,fila);printf("%c",vector2[i]); ordenado fila=fila+1; } gotoxy(20,20);printf("<<PRESIONE 1 PARA CONTINUAR o 0 TERMINAR>> "); scanf("%d",&op); } Proceso para controlar si while(op==1); desea continuar o no getch(); Pausa del programa } CORRIDO DERL PROGRAMA:

PARA

4.- Diseñe un programa utilizando funciones que me permita diseñar un menú de opciones con las siguientes alternativas. a) cadena de vocales b) cadena de consonantes c) salir ANALISIS: CODIFICADO: #include<conio.h> Librerías principales #include<stdio.h> #include<string.h> char vector2[15],vector1[15],aux; Declaración de variables int i,col,fila,limi,j,op,h,op1; globales


void borde () { for (j=1;j<=80;j++) { gotoxy (j,1); printf ("*"); gotoxy (j,24); printf ("*"); Funci贸n para crear el } borde for (j=1;j<=24;j++) { gotoxy (1,j); printf ("*"); gotoxy (80,j); printf ("*"); } } void vocales() { j=1; gotoxy(25,2);printf("MANEJO DE CADENA DE CARACTERES"); flushall(); gotoxy(5,5);printf("INGRESE LA CADENA DE CARACTERES==>");gets(vector1); Sirve para ver el limite limi=strlen(vector1); for (i=0;i<limi;i++) Ingreso la { cadena de texto if(vector1[i]=='a') { vector2[j]=vector1[i]; j=j+1; } if(vector1[i]=='e') { Pregunta para ver si vector2[j]=vector1[i]; es vocal y paso a un j=j+1; vector } if(vector1[i]=='i') { vector2[j]=vector1[i]; j=j+1; } if(vector1[i]=='o') { vector2[j]=vector1[i]; j=j+1;


} if(vector1[i]=='u') { vector2[j]=vector1[i]; j=j+1; }

Pregunta para ver si es vocal y paso a un vector

} for (i=1;i<j;i++) { for(h=1;h<j;h++) { Ordeno las vocales if(vector2[i]<vector2[h]) { aux=vector2[i]; vector2[i]=vector2[h]; vector2[h]=aux; } } } fila=8; for(i=1;i<j;i++) { Imprimo las vocales ordenadas gotoxy(25,fila);printf("%c",vector2[i]); fila=fila+1; } } void conso() { Ingreso la cadena de j=1; texto gotoxy(25,2);printf("MANEJO DE CADENA DE CARACTERES"); flushall(); gotoxy(5,5);printf("INGRESE LA CACENA DE CARACTERES==>");gets(vector1); limi=strlen(vector1); Sirve para saber el lĂ­mite de la cadena de texto for (i=0;i<limi;i++) { if(vector1[i]!='a') Pregunta para ver si son consonante y { paso aun vector vector2[j]=vector1[i]; j=j+1; } if(vector1[i]!='e')


{ vector2[j]=vector1[i]; j=j+1; } if(vector1[i]!='i') { vector2[j]=vector1[i]; j=j+1; } if(vector1[i]!='o') { vector2[j]=vector1[i]; j=j+1; } if(vector1[i]!='u') { vector2[j]=vector1[i]; j=j+1; }

Pregunta para ver si son consonante y paso aun vector

} for (i=1;i<j;i++) { for(h=1;h<j;h++) { if(vector2[i]<vector2[h]) Proceso para ordenar las { consonantes aux=vector2[i]; vector2[i]=vector2[h]; vector2[h]=aux; } } } fila=8; for(i=1;i<j;i++) { gotoxy(25,fila);printf("%c",vector2[i]); Imprimo las fila=fila+1; consonantes ordenadas } }


void main() { do Borrado de la pantalla { clrscr(); Llamo a la función del borde borde(); gotoxy(35,3);printf("MENU DE OPCIONES"); gotoxy(5,5);printf("1.- VOCALES"); Mensajes del menú gotoxy(5,7);printf("2.- CONSONANTES"); gotoxy(5,9);printf("3.- SALIR"); gotoxy(5,13);printf("INGRESE LA OPSCION QUE DESEE==> ");scanf("%d",&op1); Ingreso la opción para el switch switch(op1) { case 1: clrscr(); Llamo a la función del borde Si la opción es 1 borde(); Llamo a la función de las vocales vocales(); break; case 2: clrscr(); Llamo a la función del borde Si la opción es 1 borde(); conso(); Llamo a la función de las vocales break; case 3: exit(); break; } gotoxy(18,22);printf("<<PRESIONE 1 PARA COMTINUAR o 0 PARA TERMINAR>>");scanf("%d",&op); } while(op==1); getch(); Pausa del programa } CORRIDO:


MATRIZ (ARRAY BIDIMENSIONAL) C permite matrices multidimensionales. El formato más sencillo es la matriz bidimensional. Una matriz bidimensional es un vector de vectores unidimensionales. Las matrices bidimensionales se declaran utilizando el siguiente formato: tipo Nombre[tamaño_ filas][tamaño_columnas] Por tanto, para declarar una matriz de enteros bidimensional de tamaño 3 x 4, se debería escribir: int Mat[3][4] A diferencia de otros lenguajes de programación, que utilizan comas para separar las dimensiones de la matriz, C coloca cada dimensión en distintos corchetes. Las matrices bidimensionales se almacenan en filas - columnas donde el primer índice indica la fila y el segundo la columna. También se pueden inicializar: int Mat [3] [4] = { 0, 1 , 2 , 4, 5 , 6 , 7 , 8 , 9 , 5 , 8 }; y se representa:


Para acceder a una celda se realiza mediante dos índices, uno para las filas y otro para las columnas. Si deseamos acceder a la posición 1,2 lo realizaremos de la siguiente manera: Mat [1] [2] = 20; En el siguiente ejemplo se inicializa el vector con valores introducidos por teclado y a continuación se muestra por pantalla:

Una matriz es un array multidimensional. Se definen igual que los vectores excepto que se requiere un índice por cada dimensión. Su sintaxis es la siguiente: <tipo> <identificador> [<filas>][<columnas>] Matriz <identificador>[<índice1>][<índice2>] INICIALIZACIÓN int matriz[2][3] = { {1,2,3}, {4,5,6} }; Una matriz bidimensional se podría representar gráficamente como una tabla con filas y columnas. En el ejemplo puedes ver como se rellena y visualiza una matriz bidimensional. Se necesitan dos bucles para cada una de las operaciones. Un bucle controla las filas y otro las columnas. EJERCICIOS: 5.- Diseñe un programa que me permita ingresar n elementos en una matriz cuadrática entre 3 y 35, presente la matriz resultante. ANALISIS: Para ingresar la matriz creamos la función de ingreso en la cual necesitamos 2 for uno para las filas y ptro para las columnas con un do whail controlo que los datos ingresados estén entre 3 y 35. Para imprimir creamos una función dentro de esta estarán 2 for uno para las filas y otros para las columnas dentro de estos for imprimimos la matriz resultante. CODIFICADO:


#include<stdio.h>

LIBRERIAS PRINCIPALES

#include<conio.h> int matriz[10][10],col,fila,i,j,limite,op;

DECLARACION DE VARIABLES GLOBALES

void borde() { for(i=1;i<=80;i++) { gotoxy(i,1);printf("*"); gotoxy(i,24);printf("*"); }

FUNCION PARA CREAR EL BORDE

for(i=1;i<=24;i++) { gotoxy(1,i);printf("*"); gotoxy(80,i);printf("*"); } } void ingreso(int limi) { col=20; fila=10; for(i=1;i<=limi;i++) { for(j=1;j<=limi;j++) { do { gotoxy(col,fila);printf(" "); gotoxy(col,fila);scanf("%d",&matriz[i][j]); } while(matriz[i][j]<3 || matriz[i][j]>35);

Ingreso de los n煤meros pero controlo desde 3 hasta 35

Funci贸n para el ingreso de los datos en la matriz


col=col+5; }

Incremento las columnas

col=20; fila=fila+2;

Incremento las filas

} } void imprime(int limi) { col=50; fila=10; for(i=1;i<=limi;i++) {

Funci贸n para imprimir la matriz

for(j=1;j<=limi;j++) { gotoxy(col,fila);printf("%d",matriz[i][j]); col=col+5; } col=50; fila=fila+2; } } void main() { do

Borrado de la pantalla

{ clrscr(); borde();

Ingreso del l铆mite Llamo a la funci贸n borde

gotoxy(25,3);printf("MANEJO DE MATRICES"); gotoxy(5,5);printf("INGRESE EL LIMITE==> ");scanf("%d",&limite); gotoxy(20,9);printf("MATRIZ INGRESO"); gotoxy(50,9);printf("MATRIZ RESULTANTE");

Programa principal


ingreso(limite); imprime(limite);

Llamo a las funciones pero envió el parámetro del límite

gotoxy(22,22);printf("<<PRESIONE 1 PARA CONTINUAR o 0 PARA TERMINAR>> ");scanf("%d",&op); } while(op==1); getch();

Pausa para el programa

} CORRIDO DEL PROGRAMA:

6.- Diseñe un programa utilizando matrices y funciones que me permita generar un matriz de cualquier orden con cualquier factor ingresado desde teclado. ANALISIS: Creamos la función en la cual realizaremos el calculo del factor de un número para necesitamos que en una variable que empiece en 1(c=1) que me sirve como el multiplicador dentro de dos for realizamos el calculo del factor este factor resultante reasigno a la matriz e imprimo la matriz incremento la variable del multiplicador c=c+1.

CODIFICADO: #include<stdio.h> Librerías principales #include<conio.h> int matriz[10][10],col,fila,i,j,limite,fact,c,op,factor;

Declaración de variables globales


void borde() { for(i=1;i<=80;i++) { gotoxy(i,1);printf("*"); gotoxy(i,24);printf("*"); Funci贸n para crear el } borde for(i=1;i<=24;i++) { gotoxy(1,i);printf("*"); gotoxy(80,i);printf("*"); } } void factores(int limi, int fac) { col=25; fila=10; c=1; for(i=1;i<=limi;i++) Proceso para calcular el { factor for(j=1;j<=limi;j++) { Reasigno el valor del factor a la matriz fact=fac*c; matriz[i][j]=fact; Imprimo la matriz con gotoxy(col,fila);printf("%d",matriz[i][j]); los factores del numero c=c+1; ingresado col=col+5; Incremento el } multiplicador col=25; fila=fila+2; } } void main() { Borro la pantalla do { clrscr(); Llamo a la funci贸n borde Ingreso el l铆mite borde(); gotoxy(25,3);printf("MATRIZ CON FACRTORES"); gotoxy(5,5);printf("INGRESE EL LIMITE==> ");scanf("%d",&limite); gotoxy(5,7);printf("INGRESE EL FACTOR==> ");scanf("%d",&factor);

Funci贸n para calcular el factor de un numero

Ingreso el factor


gotoxy(28,9);printf("MATRIZ"); Llamo a la función pero envió parámetros factores(limite,factor); gotoxy(22,22);printf("<<PRESIONE 1 PARA CONTINUAR o 0 PARA TERMINAR>> ");scanf("%d",&op); Ingreso la opción para ves si deseo continuar o no } while(op==1); getch(); Pausa del programa } CORRIDO DEL PROGRAMA:

7.- Diseñe un programa que me permita llenar una matriz de cualquier orden con valores pares. ANALISIS: Creamos la función pares esta función tiene parámetros, dentro de esta función necesitamos una variable que empiece en 2 esta variable se utilizara para calcular los números pares utilizaremos 2 for uno para las filas y otra para las columnas, dentro de estos for realizaremos el calculo de los números pares este valor reasigno a la matriz e imprimo la matriz.


CODIFICADO: #include<stdio.h> #include<conio.h>

Librerías principales Declaración de variables globales

int matriz[10][10],col,fila,i,j,limite,par,c,op; void borde() { for(i=1;i<=80;i++) { gotoxy(i,1);printf("*");

Función para crear el borde

gotoxy(i,24);printf("*"); } for(i=1;i<=24;i++) { gotoxy(1,i);printf("*"); gotoxy(80,i);printf("*"); } } void pares(int limi) { col=25; fila=10; c=2; par=0; for(i=1;i<=limi;i++) { for(j=1;j<=limi;j++) {

Proceso para calcular los números pares

par=par+c; matriz[i][j]=par;

Reasigno el valor de los pares a la matriz

gotoxy(col,fila);printf("%d",matriz[i][j]); col=col+5;

Imprimo la matriz

Función para calcular e imprimir la matriz con los números pares


} fila=fila+2; col=25; } } void main() { do

Borrado de la pantalla

{ clrscr(); borde();

Llamo a la función borde

Ingreso el límite para la matriz

gotoxy(25,3);printf("MATRIZ CON NIMEROS PARES"); gotoxy(5,5);printf("INGRESE EL LIMITE==>");scanf("%d",&limite); gotoxy(27,8);printf("MATRIZ"); pares(limite);

Llamo a la función pero envió el limite

gotoxy(22,22);printf("<<PRESIONE 1 PARA CONTINUAR o 0 PARA TERMINAR>> ");scanf("%d",&op);

Ingreso la opción para continuar o no

} while(op==1); getch();

Pausa del programa

} CORRIDO DEL PROGRAMA:


8.- Generar una matriz de cualquier orden con valores ceros, a acepción de la diagonal principal, la misma que se llena con valores unos, recorra la matriz y guarde los datos de la diagonal principal en un vector y presente los datos en forma ordenado. ANÁLISIS: Realizo la función de ingreso para la cual a una variable le doy el valor de uno dentro de dos for uno para las filas y otro para las columnas dentro de estos dos for pregunto si las fila es igual a la columna si dice que si reasigno el valor que antes asignamos a la variable a la matriz e imprimimos a la matriz caso contrario imprimo cero en la matriz, realizamos la función para pasar los datos de la diagonal principal a un vector imprimimos dicho vector, CODIFICADO: #include<conio.h>

Librerías principales

#include<stdio.h> int matriz[10][10],vector[10],i,j,col,fila,op,x,y,limite; void borde() { for(i=1;i<=24;i++) { gotoxy(1,i);printf("*"); gotoxy(80,i);printf("*"); } for(i=1;i<=80;i++) { gotoxy(i,1);printf("*"); gotoxy(i,24);printf("*"); } } void ingreso(int limi) { col=15; fila=8;

Función para realizar el borde

Declaro las variables globales


y=1; for(i=1;i<=limi;i++) { for(j=1;j<=limi;j++) { if(i==j) { matriz[i][j]=y;

Pregunto si la fila es igual a al columna Reasigno los valores pares a la matriz

gotoxy(col,fila);printf("%d",matriz[i][j]); } else { gotoxy(col,fila);printf("0"); } col=col+5; } fila=fila+2; col=15; } } void diago(int limi) { col=40; fila=8; x=1; for(i=1;i<=limi;i++) { for(j=1;j<=limi;j++) { if(i==j) {

Imprimo cero si no es la diagonal principal

Imprimo la matriz con el nĂşmeros 1


vector[x]=matriz[i][j]; x=x+1;

Reasigno los valores de la diagonal principal a un vector

gotoxy(col,fila);printf("%d",matriz[i][j]); col=col+5; fila=fila+2; } } } fila=8; for(i=1;i<x;i++) { gotoxy(70,fila);printf("%d",vector[i]);

Imprimo el vector con los datos de la diagonal principal

fila=fila+1; } } void main() { do {

Borro la pantalla

clrscr(); borde();

Llamo a la funci贸n borde

gotoxy(15,3);printf("MANEJO DE MATRICES Y DIAGONAL PRINCIPLA"); gotoxy(5,5);printf("INGRESE EL LIMITE==>");scanf("%d",&limite); gotoxy(5,5);printf("INGRESE EL LIMITE==>"); gotoxy(5,5);printf("INGRESE EL LIMITE==>"); gotoxy(70,5);printf("VECTOR");

Ingreso el limite para la matriz

ingreso(limite); diago(limite);

Llamo a las funciones pero envi贸 el l铆mite

gotoxy(20,22);printf("<<PRESIONE 1 PARA CONTINUAR o 0 PARA TEMINAR>> ");scanf("%d",&op); }


while(op==1); getch();

Pausa del programa

} CORRIDO DEL PROGRAMA:

9.- Dise帽e un programa utilizando matrices y funciones, que me permita generar una matriz de n elementos con la serie de fibonacci, y la diagonal secundaria se llena con el factorial, guarde los datos de la diagonal secundaria en un vector y presente. ANALISIS: CODIFICADO: Librer铆as principales

#include<conio.h> #include<stdio.h> int matriz[10][10],matriz2[10][10],vector[10],i,cl,colm,z,j,col,fila,x,a,b,d,c,y,f,fa,op,limite; void borde() {

Declaraci贸n de variables globales

for(i=1;i<=80;i++) { gotoxy(i,1);printf("*"); gotoxy(i,24);printf("*"); } for(i=1;i<=24;i++)

Funci贸n para crear el borde


{ gotoxy(1,i);printf("*"); gotoxy(80,i);printf("*"); } } void serie(int limi) { x=limi*limi; a=1; b=0; col=10; fila=10; d=limi; f=limi; fa=1; colm=5; for(i=1;i<=limi;i++) { for(j=1;j<=limi;j++) { do { c=a+b; a=b; b=c;

Proceso para calcular la serie de fibonasi

y=y+1; matriz[i][j]=c;

Reasigno el valor de la serie a una matriz

gotoxy(col,fila);printf("%d",matriz[i][j]); gotoxy(colm,20);printf("%d",c); colm=colm+5; } Controlo que la serie no se pase del limite

Imprimo la matriz con la serie de fibonasi


Pregunto si la fial es igual a la columna

while(x==y); if(d==j) {

Realizo el proceso para calcular el factorial de un nĂşmero

f=limi*fa; matriz[i][j]=f;

Reasigno el factorial a la matriz

gotoxy(col,fila);printf("%d ",matriz[i][j]); fa=fa+1; Imprimo el factorial en la diagonal secundaria

d=d-1; } col=col+5;

Decremento para la diagonal secundaria

} fila=fila+2; col=10; } } void diago(int limi) { d=limi; cl=limi*5; fila=10; for(i=1;i<=limi;i++) { for(j=1;j<=limi;j++) { if(d==j) { gotoxy(40+cl,fila);printf("%d",matriz[i][j]); d=d-1; } } fila=fila+2;


cl=cl-5; } } void vecto(int limi) { d=limi; fila=10; z=1; for(i=1;i<=limi;i++) { for(j=1;j<=limi;j++) { if(d==j) { vector[z]=matriz[i][j]; z=z+1; d=d-1; } } } fila=10; for(i=1;i<z;i++) { gotoxy(70,fila);printf("%d",vector[i]); fila=fila+1; } } void main() { do {


Borro la pantalla

clrscr(); borde();

Llamo ala función borde

gotoxy(25,3);printf("MATRIZ CON LA SERIE DE FIBONASI"); gotoxy(5,5);printf("INGRESE EL LIMITE==> ");scanf("%d",&limite); serie(limite); diago(limite);

Llamo a las funciones pero envió el limite

vecto(limite); gotoxy(20,22);printf("<<PRESIONE 1 PARA CONTINUAR o 0 PARA TERMINAR>> ");scanf("%d",&op); } while(op==1); getch();

Pausa del programa

} CORRIDO DEL PROGRAMA:

10.- Diseñe un programa en C que permita obtener el producto algebraico de 2 matrices de n elementos ingresados desde teclado que se encuentren entre 1 y 23. ANALÑISIS: Para realizar el producto algebraico de dos matrices realizamos lo siguiente realizo la función de ingreso de las matrices para lo cual necesito dos for que empiece en 1 llegue asta el limite que será ingresado y tenga incrementos de 1 un para las filas y otro para las columnas con un do while controlo que los datos ingresados estén entre 1 y 23 este proceso realizo para las dos matrices.


Para realizar el producto algebraico realizo otra función dentro de esta función necesito dos for uno para las filas y otro para las columnas, y dentro de estos for a la matriz resultante le encero y con otro for que me sirve para ir multiplicando las filas por las columnas para realizar el proceso del producto en el cual se debe hacer el siguiente calculo matriz2[i][j]=matriz2[i][j]+matriz[i][k]*matriz1[k][j], luego de realizar el calculo cierro los tres for, para imprimir la matriz resultante necesito dos for uno para las filas y otro para las columnas e imprimo la matriz resultante. En el programa principal llamo a la función borde dentro de un do while controlo el limite que se encuentre entre 2 al 4 y llamo a la función de ingreso los datos pero envió como parámetro el limite, llamo a la función producto y también envió como parámetro el limite con un do while controlo si se desea continuar o no. CODIFICADO: #include<conio.h> Librerías principales #include<stdio.h> Declaración de int matriz[10][10],matriz1[10][10],matriz2[10][10],limite,i,j,col,fila,k,l,aux,op; variables globales void borde () { for (j=1;j<=80;j++) { gotoxy (j,1); printf ("*"); gotoxy (j,24); printf ("*"); Función para el } borde for (j=1;j<=24;j++) { gotoxy (1,j); printf ("*"); gotoxy (80,j); printf ("*"); } } Función del void ingreso (int limi) ingreso de { las matrices col = 5; fila = 10; for (i=1;i<=limi;i++) { for (j=1;j<=limi;j++) { do { gotoxy (col,fila); printf(" "); Ingreso de Controlo gotoxy (col,fila); scanf("%d",& matriz[i][j]); la primera que este entre 1 y 23

matriz


} while (matriz[i][j]<1 || matriz[i][j]>23); col = col + 5; } fila = fila +2; col=5; } col = 30; fila = 10; for (i=1;i<=limi;i++) { for (j=1;j<=limi;j++) { do { gotoxy (col,fila); printf(" "); gotoxy (col,fila); scanf("%d",& matriz1[i][j]); } while (matriz1[i][j]<1 || matriz1[i][j]>23); col = col + 5; } fila = fila +2; col=30; }

Controlo que este entre 1 y 23

Ingreso de la segunda matriz

} Funci贸n para realizar el

void producto(int limi) producto algebraico { for (i=1;i<=limi;i++) { for (j=1;j<=limi;j++) { Asigno el valor de 0 a la matriz resultante matriz2[i][j]=0; for (k=1;k<=limi;k++) Para multiplicar la fila { matriz2[i][j]=matriz2[i][j]+matriz[i][k]*matriz1[k][j]; } Para multiplicar la } columna } col=50; fila=10;

Proceso para hacer el producto algebraico


for (i=1;i<=limi;i++) { for (j=1;j<=limi;j++) { gotoxy(col,fila);printf("%d",matriz2[i][j]); col=col+5; } fila=fila+2; col=50; }

Proceso para imprimir la el producto algebraico

} void main() Programa principal { do Borrado de la pantalla { clrscr(); Llamado a la función borde borde(); gotoxy(30,2);printf("PRODUCTO ALGEBRAICO DE MATIZ"); gotoxy(32,4);printf("MAURICIO CAGUANA"); do { gotoxy(27,6);printf(" "); gotoxy(5,6);printf("INGRESE EL LIMITE===> ");scanf("%d",&limite); } while(limite<2 || limite>4); gotoxy(8,8);printf("MATIZ 1"); gotoxy(32,8);printf("MATIZ 2"); gotoxy(52,8);printf("MATRIZ RESULTANTE"); ingreso(limite); Llamo a la función ingreso pero envió el parámetro límite

Ingreso el límite para las matrices pero controlo que este entre 2 y 4

Llamo a la función producto pero envió el parámetro producto(limite); límite 1 PARA CONTINUAR o 0 PARA TERMINAR>> gotoxy(20,22);printf("<<PRESIONE ");scanf("%d",&op); } Controlo si deseo continuar o no while(op==1); getch(); Pausa para el programa }


CORRIDO DEL PROGRAMA:

11.- Diseñe un programa que permita generar una matriz cuadrática con números primos ANALISIS: Necesitamos una variable para el primo que empiece en 1 dentro de 2 for realizamos el proceso para ver si el número es primo para eso tenemos que preguntar si el número es que le asignamos para el primo es igual a cero ((p%x)==0) si dice que si en una variable que va a ser el contador para incremento 1, pregunto si la variable del contador es menor o igual que cero si dice que si asigno el número primo a la matriz, incremento al número primo 1 y a otra variable le asigno el valor de uno esta variable me va a servir para realizar las veces que necesitemos, si dice que no a la variable anterior asigno a cero e incremento los números primos. Para imprimir necesito dos for uno para las filas y otra para las columnas imprimimos e incrementamos las columnas y las filas. CODIFICADO: #include<conio.h> Librerías principales #include<stdio.h> int matriz[10][10],i,j,col,fila,d,limite,op,cp=0,x=1,p=1,sw; void borde() { for(i=1;i<=80;i++) { Función para crear el borde gotoxy(i,1);printf("*"); gotoxy(i,24);printf("*"); } for(i=1;i<=24;i++) {

Declaración de variables globales


gotoxy(1,i);printf("*"); gotoxy(80,i);printf("*"); } } void primo(int limi) { Variable para el primo p=1; Variable para controlar si sw=0; es primo for(i=1;i<=limi;i++) { for (j=1;j<=limi;j++) { Variable para contar cuantas do { veces se cumplen la condición cp=0; sw=0; for (x=1;x<=p;x++) Pregunto si la división { es igual a cero if((p%x)==0) { cp=cp+1; Incremento el contador para ver si es primo } } if(cp<=2) Pregunto si el número es primo { Asigno el número primo a una matriz[i][j]=p; matriz p=p+1; sw=1; } else { sw=0; p=p+1; } } while(sw==0); } } } void imprime(int li) { col=10; fila=10; for(i=1;i<=li;i++) Función para imprimir los { números primos for(j=1;j<=li;j++) {


gotoxy(col,fila);printf("%d",matriz[i][j]); col=col+5; } fila=fila+2; col=10; } } void main() Borrado de la pantalla { do { Ingreso el Llamado de la funci贸n borde clrscr(); limite para la borde(); matriz gotoxy(25,3);printf("MATRIZ CON LOS NUMEROS PRIMOS"); gotoxy(5,5);printf("INGRESE EL LIMITE==> ");scanf("%d",&limite); primo(limite); Llamo a las funciones pero envi贸 el par谩metro del l铆mite imprime(limite); gotoxy(20,23);printf("<<PRESIONE 1 PARA CONTINUAR o 0 PARA TERMINAR>> ");scanf("%d",&op); } while(op==1); getch(); Pausa para el programa } CORRIDO DEL PROGRAMA:


12.- Diseñe un programa que permita ingresar n elementos en una matriz entre 3 y 36 presentar la matriz resultante ordenada en forma ascendente. ANALISIS: Para ingresar los datos a este programa necesitamos dos for uno para las filas y otros para las columnas dentro de estos dos for necesitamos un do while para controlar el ingreso de los datos que estén entre 3y 36, para ordenar los datos necesitamos cuatro for en el cual dos son para las filas y los otros para realizar el proceso para ordenación, tenemos que hacer de preguntar si la matriz[i][j]<matriz[k][l] si dice que si procedemos a realizar el ordenamiento de los datos se la siguiente manera a un auxiliar le asignamos el valor de la matriz (aux=matriz[i][j]), luego asigno a la matriz los datos de la otra matriz (matriz[i][j]=matriz[k][l])y por ultimo el valor del auxiliar le asigno a la matriz (matriz[k][l]=aux), para imprimir la matriz resultante necesito dos fos uno para las filas y otro para las columnas . CODIFICADO: #include<conio.h> Librerías principales #include<stdio.h> int matriz[10][10],limite,i,j,col,fila,k,l,aux,op; Declaración de variables globales void borde () { for (j=1;j<=80;j++) { gotoxy (j,1); printf ("*"); gotoxy (j,24); printf ("*"); } Función para crear el borde for (j=1;j<=24;j++) { gotoxy (1,j); printf ("*"); gotoxy (80,j); printf ("*"); } }


void ingreso (int limi) { col = 10; fila = 10; for (i=1;i<=limi;i++) { for (j=1;j<=limi;j++) { do { gotoxy (col,fila); printf(" "); gotoxy (col,fila); scanf("%d",& matriz[i][j]); } while (matriz[i][j]<3 || matriz[i][j]>36); col = col + 8; } fila = fila +2; Incremento de las filas col=10; Y reasigno las } columnas } void orden(int limi) { col=45; fila=10; for(i=1;i<=limi;i++) { for(j=1;j<=limi;j++) { for(k=1;k<=limi;k++) { for(l=1;l<=limi;l++) { Pregunta para if(matriz[i][j]<matriz[k][l]) ves si es menor { aux=matriz[i][j]; Proceso para matriz[i][j]=matriz[k][l]; realizar el matriz[k][l]=aux; ordenamiento } burbuja } } }

Proceso para controlar los nĂşmeros que estĂŠn entre 3 y 36

FunciĂłn para el ingreso de datos


} for (i=1;i<=limi;i++) { for (j=1;j<=limi;j++) { gotoxy (col,fila); printf("%d", matriz[i][j]); col = col + 5; } fila = fila +2; col=45; }

Proceso para imprimir la matriz ordenada

} void main() { do Borrado de pantalla { clrscr(); Llamar a la funci贸n borde borde(); gotoxy(30,2);printf("ORDENACION DE MATIZ"); Ingreso el gotoxy(32,4);printf("MAURICIO CAGUANA"); limite para gotoxy(5,6);printf("INGRESE EL LIMITE===> ");scanf("%d",&limite); la matriz gotoxy(12,8);printf("INGRESO DE MATIZ"); gotoxy(45,8);printf("ORDEN MATRIZ"); ingreso(limite); Llamar las funciones para el ingreso y orden orden(limite); gotoxy(20,22);printf("<<PRESIONE 1 PARA CONTINUAR o 0 PARA TERMINAR>> ");scanf("%d",&op); } while(op==1); getch(); }


CORRIDO:

13.- DiseĂąa un programa en C que permita llenar una matriz de N elementos con valores 0 y la diagonal principal con la Serie del Fibonacci, la diagonal secundaria con el factorial, se visualizan todos los datos en la matriz, presenta los datos de las diagonales en forma de X. ANALISIS: Primero tenemos que enserar la matriz, asigno a una variable el valor del limite esto nos servirĂĄ para la diagonal secundaria, con el limite verifico si es par, si es par dentro de dos for pregunto que la fila sea igual a la columna si dese que si realizamos el proceso para calcular la serie de fibonasi el resultado de la serie de fibonasi asignamos a la matriz e imprimimos los resultados en la diagonal principal, con la variable que le dimos el limite pregunto que sea igual al segundo contador(d==j)si dice que si procederemos a calcular el factorial el resultado asigno a la matriz e imprimimos la los resultados en la diagonal secundaria, y restamos a la variable del limite menos 1 (d=d-1). Si es impar divido el limite para 2 y a ese resultado le sumo 1 y dentro de dos for pregunto que la fila sea igual a la columna si dese que si realizamos el proceso para calcular la serie de fibonasi el resultado de la serie de fibonasi asignamos a la matriz, pregunto si p es igual al primer for si dice que si a la columna de resto 2 e imprimo los resultados en la diagonal principal caso contrario imprimo los resultados , con la variable que le dimos el limite pregunto que sea igual al segundo contador(d==j)si dice que si procederemos a calcular el factorial el resultado asigno a la matriz y pregunto si p es igual al primer for si dice que si a la columna le sumo 2 e imprimo los resultados en la diagonal principal caso contrario imprimo los resultados e imprimimos normalmente la los resultados en la diagonal secundaria.


CODIFICADO: #include<conio.h> Librerías principales #include<stdio.h> int matriz[10][10],vector[10],i,t,j,aux,dp,ds,x,y,op,col,fila,a,b,c,limite,f,d,l,p; void borde() { for(i=1;i<=80;i++) { gotoxy(i,1);printf("*"); gotoxy(i,24);printf("*"); } Función para realizar el for(i=1;i<=24;i++) borde { gotoxy(1,i);printf("*"); gotoxy(80,i);printf("*"); } } void ingreso(int limi) { col=10; Inicialización de variables para las filas y columnas fila=10; a=1; Inicialización de variables para la serie de fibonasi b=0; p=limi%2; if(p==0) { for(i=1;i<=limi;i++) { for(j=1;j<=limi;j++) { Procesos para encerar la gotoxy(col,fila);printf("0"); matriz si el limite es par col=col+5; } fila=fila+2; col=10; } }

Declaración de variables globales


else { p=limi/2; Proceso para tomar la mitad de la matriz p=p+1; for(i=1;i<=limi;i++) { for(j=1;j<=limi;j++) { if(p==i && p==j) { gotoxy(col,fila);printf(" "); } Procesos para encerar la else matriz si el lĂ­mite es impar { gotoxy(col,fila);printf("0"); } col=col+5; } fila=fila+2; col=10; }} col=10; fila=10; f=1; Variable para la diagonal secundaria d=limi; l=1; Proceso para ver si es par p=limi%2; if (p==0) { for(i=1;i<=limi;i++) { for(j=1;j<=limi;j++) { if(i==j) { c=a+b; Proceso para calcular la a=b; serie de fibonasi para b=c; la diagonal principal matriz[i][j]=c; gotoxy(col,fila);printf("%d",matriz[i][j]); }


if(d==j) { f=f*l; matriz[i][j]=f; gotoxy(col,fila);printf("%d",matriz[i][j]); l=l+1; d=d-1; } col=col+5;

Proceso para calcular el factorial para la diagonal principal

} fila=fila+2; col=10; } } else { p=limi / 2; Proceso para calcular la mitad de la matriz p=p+1; for(i=1;i<=limi;i++) { for(j=1;j<=limi;j++) { if(i==j) { Proceso para calcular c=a+b; la serie de fibonasi a=b; b=c; matriz[i][j]=c; if(p==i) { gotoxy(col-2,fila);printf("%d",matriz[i][j]); } Pregunta para ver si estamos else en la mitad de la matriz { gotoxy(col,fila);printf("%d",matriz[i][j]); } }


if(d==j) Proceso para calcular el factorial { para la diagonal secundaria f=f*l; matriz[i][j]=f; if (p==i) { gotoxy(col+2,fila);printf("%d",matriz[i][j]); Pregunta para ver si estamos } en la mitad de la matriz else { gotoxy(col,fila);printf("%d",matriz[i][j]); } l=l+1; d=d-1; } col=col+5; } fila=fila+2; col=10; } } } void imprime(int limi) { col=47; fila=10; d=limi; p=limi%2; if (p==0) { for(i=1;i<=limi;i++) Funci贸n para imprimir las { diagonales for(j=1;j<=limi;j++) { if(i==j) { gotoxy(col,fila);printf("%d",matriz[i][j]); } if(d==j) { gotoxy(col,fila);printf("%d",matriz[i][j]);


d=d-1; } col=col+5; } fila=fila+2; col=47; } } else { p=limi/2; p=p+1; for(i=1;i<=limi;i++) { for(j=1;j<=limi;j++) { if(i==j) { if(p==i ) { gotoxy(col-2,fila);printf("%d",matriz[i][j]); } else { gotoxy(col,fila);printf("%d",matriz[i][j]); } } if(d==j) { if (p==i) { gotoxy(col+2,fila);printf("%d",matriz[i][j]); } else { gotoxy(col,fila);printf("%d",matriz[i][j]); } d=d-1; } col=col+5; }


fila=fila+2; col=47; } } } void main() { do { clrscr(); borde();

Borrado de pantalla Llamar a las funciones

gotoxy(25,2);printf("MANEJO DE MATRICES CON LAS DIAGONALES"); gotoxy(35,3);printf("MAURICIO CAGUANA"); gotoxy(5,5);printf("INGRESE EL LIMITE==> ");scanf("%d",&limite); gotoxy(12,9);printf("M. INGRESO"); gotoxy(47,9);printf("M. DIAGONALES"); ingreso(limite); Llamar a las funciones imprime(limite); gotoxy(20,22);printf("<<PRESIONE 1 PARA CONTINUAR o 0 PARA TERMINAR>> ");scanf("%d",&op); } while(op==1); Pausa para el programa getch(); } CORRIDO:


14.-Relice un programa utilizando funciones que lea una matriz de enteros de n números de filas y de n números de columnas y se muestre en pantalla la matriz transpuesta. ANALISIS: Creamos la función de ingreso los datos para la cual necesitamos 2 for donde se van a ingresar los datos de la matriz. Creamos la función para calcular la transpuesta en la cual necesitamos dos for uno para las filas y otro para las columnas donde los números de la matriz ingresada reasignamos a otra matriz pero en la nueva matriz los índices deben ser cambiados las filas por columnas y viceversa, con dos for en el primer for le ponemos que llegue hasta el numero de columnas, en el segundo for le ponemos que llegue hasta el limite de las filas e imprimimos la matriz transpuesta. En el programa principal debemos ingresar el limite de las filas y el limite de las columnas y cuando llamemos a la función debemos enviar los parámetros tanto las filas como las columnas. CODIFICADO: #include<conio.h>

Librerías principales

#include<stdio.h> int matriz[10][10],mat[10][10],i,j,nc,nf,op,col,fila; void borde()

Declaración de variables globales

{ for(i=1;i<=80;i++) { gotoxy(i,1);printf("*"); gotoxy(i,24);printf("*"); } for(i=1;i<=24;i++) { gotoxy(1,i);printf("*"); gotoxy(80,i);printf("*"); } }

Función para realizar el borde


void ingreso(int ncol, int nfila) { col=10; fila=10; for(i=1;i<=nfila;i++) { Función para ingresar los datos en la matriz

for(j=1;j<=ncol;j++) { gotoxy(col,fila);scanf("%d",&matriz[i][j]); col=col+5; } fila=fila+2; col=10; } } void trans(int ncol, int nfila) { col=50; fila=10; for(i=1;i<=nfila;i++) { for(j=1;j<=ncol;j++) { mat[j][i]=matriz[i][j]; } } Primero va el índice de la columna y después va el índice de las filas

Reasigno los datos de la matriz a una nueva matriz pro con los índices cambiados


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

For con límite de columnas

{ for(j=1;j<=nfila;j++)

For con limite de las filas

{ gotoxy(col,fila);printf("%d",mat[i][j]); col=col+5;

Imprimo la matriz transpuesta

} fila=fila+2; col=50; } } void main() { do {

Borrado de la pantalla Ingreso el límite de las columnas

clrscr(); borde();

Llamo ala función borde

gotoxy(5,5);printf("INGRESE EL NUMERO DE COLUMNAS==> ");scanf("%d",&nc); gotoxy(5,7);printf("INGRESE EL NUMERO DE FILAS==>");scanf("%d",&nf); gotoxy(12,9);printf("M. INGRESO"); gotoxy(47,9);printf("M. TRANSPESTA");

Ingreso el límite de las filas

ingreso(nc,nf); trans(nc,nf);

Llamo a las funciones pero envió los limites

gotoxy(20,22);printf("<<PRESIONE 1 PARA CONTINUAR o 0 PARA TERMINAR>> ");scanf("%d",&op); } while(op==1); getch(); }

Pausa para el programa


CORRIDO DEL PROGRAMA:


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.