Facultad de Ciencias de la Educaci贸n Carrera de Docencia en Inform谩tica Tercer Semestre 煤nico Miguel Antonio Miranda Chonata
Elemento # 1
Programaci贸n II U.T.A.
iNDICEÇ Arreglos multidimensionales .......................................................................... 8 Arreglos o Arrays en C ................................................................................. 3 Arreglos unidimensionales ............................................................................. 5 Ejercicio # 3 ................................................................................................... 9 Ejercicio #1 ..................................................................................................... 1 Ejercicio 10 ................................................................................................... 49 Ejercicio 11.................................................................................................... 54 Ejercicio 12 ................................................................................................... 65 Ejercicio 13 ................................................................................................... 74 Ejercicio 14 ................................................................................................... 80 Ejercicio 15 ................................................................................................... 86 Ejercicio 16 ................................................................................................... 96 Ejercicio 2 ...................................................................................................... 4 Ejercicio 4 .................................................................................................... 12 Ejercicio 5 .................................................................................................... 16 Ejercicio 6 .................................................................................................... 20 Ejercicio 7..................................................................................................... 24 Ejercicio 8 .................................................................................................... 34 Ejercicio 9 .................................................................................................... 41 Ejercicios de Programacion ........................................................................ 1 Operaciones con arreglos multidimensionales ............................................. 14 Producto de matrices .................................................................................... 16 Producto por un escalar................................................................................ 15 Suma y resta .................................................................................................. 14
Arreglos o Arrays en C Un arreglo o array (en inglés) es una colección de variables relacionadas a las que se hace referencia por medio de un nombre común. Otra definición válida es que un arreglo es un conjunto de datos que se almacenan en memoria de manera contigua con el mismo nombre y para diferenciar los elementos de un arreglo se utiliza un índice. En el lenguaje C++ un arreglo se le conoce como un tipo de dato compuesto. Los arreglos pueden tener una o varias dimensiones.
Representación gráfica de float arreglo[6]; un arreglo de una dimensión
1
arreglo[0]
2
arreglo[1]
3
arreglo[2]
4
arreglo[3]
5
arreglo[4]
6
arreglo[5]
int arreglo[4][4]
Representación gráfica de un arreglo de dos dimensiones
int arreglo[4][4][3] Representación gráfica de un arreglo de tres dimensiones
Índice de un arreglo Todo arreglo está compuesto por un número de elementos. El índice es un número correlativo que indica la posición de un elemento del arreglo. Los índices en C++ van desde la posición 0 hasta la posición tamaño – 1. Elemento de un arreglo Un elemento de un arreglo es un valor particular dentro de la estructura del arreglo. Para acceder a un elemento del arreglo es necesario indicar la posición o índice dentro del arreglo. Ejemplo: arreglo[0] //Primer elemento del arreglo
arreglo[3] //Cuarto elemento del arreglo Arreglos unidimensionales Un arreglo de una dimensión es una lista de variables, todas de un mismo tipo a las que se hace referencia por medio de un nombre común. Una variable individual del arreglo se llama elemento del arreglo. Para declarar un arreglo de una sola dimensión se usa el formato general: tipo_dato identificador[tamaño];
arreglo[0] int arreglo[3];
arreglo[1] arreglo[2]
Un elemento del arreglo se accede indexando el arreglo por medio de un número del elemento. En C++ todos los arreglos empiezan en 0, esto quiere decir que si se desea acceder al primer elemento del arreglo debe usar el índice igual a 0. Para indexar un arreglo se especifica el índice del elemento que interesa dentro de un corchete, ejemplo; valor = arreglo[1]; Los arreglos empiezan en 0, de manera que el índice 1 se refiere al segundo elemento. Para asignar el valor a un elemento de un arreglo, ponga el elemento en el lado izquierdo de una sentencia de asignación. mi_arreglo[0] = 100; C++ almacena arreglos de una sola dimensión en una localización de memoria contigua con el primer elemento en la posición más baja. De esta manera, mi_arreglo[0] es adyacente a mi_arreglo[1], que es adyacente a mi_arreglo[2] y así sucesivamente. Puede usar el valor de un elemento de un arreglo donde quiera que usaría una variable sencilla o una constante. Ejemplo 1. Arreglo de una dimensión
Declaración int arreglo[3]; // forma un arreglo de una dimensión y de tres elementos Nombre del arreglo arreglo Nombre de los elementos arreglo[0] → primer elemento arreglo[1] → segundo elemento arreglo[2] → tercer elemento
Ejemplo 2, el siguiente programa carga el arreglo sqrs con los cuadrados de los números del 1 al 10 y luego los visualiza.
1. using namespace std; 2. #include <iostream> 3. int main() 4. { 5. int sqrs[10]; 6. int i; 7. for (i=1;i<11;i++) { 8. sqrs[i-1]=i*i; 9. } 10. for (i=0;i<10;i++) { 11. cout<<sqrs[i]<<endl; 12. } 13. return 0; 14. }
La forma como se almacenan los valores en el arreglo es la siguiente: sqrs[0] sqrs[1] sqrs[2] sqrs[3] sqrs[4] sqrs[5] sqrs[6] sqrs[7] sqrs[8] sqrs[9]
= 1*1 = 2*2 = 3*3 = 4*4 = 5*5 = 6*6 = 7*7 = 8*8 = 9*9 = 10*10
Asignación entre arreglos En C++ no se puede asignar un arreglo completo a otro arreglo. Por ejemplo, este fragmento es
incorrecto. char a1[10], a2[10]; . . . a2=a1; // Es incorrecto Si desea copiar los valores de todos los elementos de una arreglo a otro debe hacerlo copiando cada elemento por separado. Por ejemplo, el siguiente programa carga a1 con los números 1 a 10 y después los copia en a2. Ejemplo 3.
1. using namespace std; 2. #include <iostream> 3. int main() 4. { 5. int a1[10], a2[10]; 6. int i; 7. //Inicialización de a1 8. for (i=0; i<10;i++) 9. a1[i]=i+1; 10. //Copiar en a2 11. for (i=0; i<10;i++) 12. a2[i]=a1[i] 13. //Mostrar a2 14. for (i=0; i<10;i++) 15. cout<<a2[i]<<endl; 16. return 0; 17. }
La forma como quedarán los valores en el arreglo es la siguiente: a1[0] a1[1] a1[2] a1[3] a1[4] a1[5] a1[6] a1[7] a1[8] a1[9]
= a2[0] = a2[1] = a2[2] = a2[3] = a2[4] = a2[5] = a2[6] = a2[7] = a2[8] = a2[9]
Los arreglos prestan mucha utilidad cuando es necesario manejar lista de información. Por ejemplo, este programa lee la temperatura al mediodía, durante todos los días de un mes y luego informar la temperatura promedio mensual así como el día más caluroso y el más frío. Ejemplo 4. 1. 2. 3. 4.
using namespace std; #include <iostream> int main() {
5. int temp[31],min, max, media; 6. int dias; 7. cout<<"Cuantos días tiene el mes"<<endl; 8. cin>>dias; 9. for(int i=0;i<dias;i++){ 10. cout<<"Introduzca la temperatura de mediodía del día"<<i+1<<":"<<endl; 11. cin>>temp[i]; 12. } 13. // Hallar la media 14. media=0; 15. for(int i=0;i<dias;i++){ 16. media=media+temp[i]; 17. } 18. cout<<"Temperatura media: "<<media/dias<<endl; 19. //Hallar min y max 20. min=60;// Temperatura minima de la tierra es -90 Grados centígrados 21. max=-90; // Temperatura máxima de la tierra es 60 Grados centígrados 22. for(int i=0;i<dias;i++){ 23. if(min>temp[i]) min=temp[i]; 24. if(max<temp[i]) max=temp[i]; 25. } 26. cout<<"Temperatura mínima: "<<min<<endl; 27. cout<<"Temperatura máxima: "<<max<<endl; 28. return 0; 29. } Arreglos multidimensionales Es una estructura de datos estática y de un mismo tipo de datos, y de longitud fija que almacena datos de forma matricial. De igual forma que los arreglos unidimensionales, el almacenamiento de los datos en la memoria se realiza de forma secuencial y son accedidos mediante índices. Los arreglos multidimensionales son también conocidos como matrices. Por lo tanto se llama matriz de orden "m×n" a un conjunto rectangular de elementos dispuestos en filas "m" y en columnas "n", siendo m y n números naturales. Las matrices se denotan con letras mayúsculas: A, B, C, ... y los elementos de las mismas con letras minúsculas y subíndices que indican el lugar ocupado: a, b, c, ... Un elemento genérico que ocupe la fila i y la columna j se escribe i,j. Si el elemento genérico aparece entre paréntesis también representa a toda la matriz: A (i,j). Una matriz de orden 3x4 se muestra a continuación, siendo M una matriz de 3 filas y 4 columnas, la representación gráfica de sus posiciones sería la siguiente:
M 3x4 Filas = 3, columnas = 4 columnas
filas
c0
c1
c2
c3
f0
m[f0,c0]
m[f0,c1]
m[f0,c2]
m[f0,c3]
f1
m[f1,c0]
m[f1,c1]
m[f1,c2]
m[f1,c3]
f2
m[f2,c0]
m[f2,c1]
m[f2,c2]
m[f2,c3]
Matrices cuadradas Una matriz cuadrada es una matriz que tiene el mismo número de filas y columnas. La matriz que se muestra a continuación es de orden 3x3.
Declaración de arreglos multidimensionales La sintaxis es la siguiente: tipo_dato identificador [dimensión1] [dimensión2] ... [dimensiónN] ; Donde N es un número natural positivo.
Ejemplo Arreglo de dos dimensiones de orden 2x3. char m[2][3] ; f0 f1
c0
c1
c2
a b
x y
w 10
Declaración char m[2][3]; // forma una tabla de dos filas y tres columnas // cada fila es un arreglo de una dimensión
// la declaración indica que hay dos arreglos de una dimensión Nombre del grupo m → indica la localización del grupo en la memoria Nombre de las filas
m[0] → primera fila → indica la localización de la fila dentro del grupo m[1] → segunda fila → indica la localización de la fila dentro del grupo
Nombre de los elementos m[0][0] → primer elemento m[0][1] → segundo elemento m[0][2] → tercer elemento
m[0][0]
m[0][1]
m[0][2]
m[1][0] → cuarto elemento
m[1][0]
m[1][1]
m[1][2]
m[1][1] → quinto elemento m[1][2] → sexto elemento
Haciendo referencia a algunos elementos obtendríamos lo siguiente: m[0][0] = a m[1][1] = y m[1][2] = 10 m[0][2] = w
Ejemplo 5. Llenado de un arreglo de enteros de dimensión 3x2. En este ejemplo el llenado lo realiza el usuario, en otros ejemplos se verá como realizar llenado de matrices mediante asignación automática, cálculos de operaciones, etc.
1. #include <iostream> 2. using namespace std; 3. int main() 4. { 5. int matriz [3][2]; 6. int valor; 7. for(int i=0;i<3;i++) // Recorre las filas de la matriz 8. { 9. for(int j=0; j<2;j++) // Recorre las columnas de la matriz 10. { 11. cout<<"Ingrese el valor de la matriz en la posicion ["<<i<<","<<j<<"]"<<endl; 12. cin>>valor; 13. matriz[i][j] = valor; 14. } 15. } 16. // Imprimiendo el arreglo en formato matricial 17. for(int i=0;i<3;i++) 18. { 19. cout<<"|"; 20. for(int j=0; j<2;j++) 21. { 22. cout<<"\t"<<matriz[i][j]<<"\t"; 23. } 24. cout<<"|"<<endl; 25. } 26. return 0; 27. } Algunas operaciones con arreglos A continuaci贸n un ejemplo de operaciones de llenado de dos arreglos multidensionales o matrices de orden 3x2. La matriz se llena autom谩ticamente, la matriz A se llena con valores de un contador que va desde 0 a hasta 9. La matriz B se llena con un acumulador que inicia desde 10 y va incrementado y almacenando su valor a raz贸n de 3. Adicionalmente se utiliza una opci贸n para indicar al usuario si desea continuar trabajando en el programa. Revise el Ejemplo 6: 1. 2. 3. 4.
/* Autor: Elias Cisneros Fecha: 19-07-2009 correo:cisneros.elias@gmail.com
5. */ 6. #include <iostream> 7. #include <string.h> 8. using namespace std; 9. int main() 10. { 11. int matriz_A [3][2],matriz_B [3][2]; 12. int valores_A=0, valores_B=10; 13. char opcion[2]; 14. int comparacion=0; 15. cout<<"Bienvenido al programa de Cadenas Multidimensionales (Presione Enter)"<<endl; 16. getchar(); 17. do 18. { 19. valores_A=0, valores_B=10; 20. //Llenado arreglo A y B 21. for(int i=0;i<3;i++) // Recorre las filas de la matriz 22. { 23. for(int j=0; j<2;j++) // Recorre las columnas de la matriz 24. { 25. matriz_A[i][j] = valores_A; // Asignaci贸n de valores_A al elemento matriz_A[i][j] 26. valores_A = valores_A+1;// Incremento de la variable en 1 27. matriz_B[i][j] = valores_B;// Asignaci贸n de valores_B al elemento matriz_B[i][j] 28. valores_B = valores_B+3; // Incremento de la variable en 3 29. } 30. } 31. // Imprimiendo el arreglo A en formato matricial 32. cout<<"Matriz A "<<endl; 33. for(int i=0;i<3;i++) 34. { 35. cout<<"|"; 36. for(int j=0; j<2;j++) 37. { 38. cout<<"\t"<<matriz_A[i][j]<<"\t"; 39. } 40. cout<<"|"<<endl; 41. } 42. // Imprimiendo el arreglo B en formato matricial 43. cout<<"Matriz B "<<endl; 44. for(int i=0;i<3;i++) 45. {
46. cout<<"|"; 47. for(int j=0; j<2;j++) 48. { 49. cout<<"\t"<<matriz_B[i][j]<<"\t"; 50. } 51. cout<<"|"<<endl; 52. } 53. cout<<"Para continuar el programa presione Si, para salir No: "<<endl; 54. gets(opcion); 55. // Transformaci贸n de cadena a mayusculas 56. int tamano =strlen(opcion); 57. for(int i=0;i<tamano;i++) 58. opcion[i]= toupper(opcion[i]); 59. comparacion = strcmp(opcion,"SI"); 60. 61. }while(comparacion==0); 62. cout<<"Fin"<<endl; 63. return 0; 64. } Operaciones con arreglos unidimensionales Suma y Resta Los arreglos deben tener el mismo tama帽o y la suma se realiza elemento a elemento. Por ejemplo C = A + B. Donde A, B y C son arreglos de enteros de tama帽o 3. C
=
c00=a00+b00 c01=a01+b01 c02=a02+b02
/*Extracto de c贸digo fuente*/ int A[3],B[3],C[3]; for (int j=0;j<3;j++)
A
+
a00
=
a01 a02
B b00
+
b01 b02
{ A[j] = j*3; // Asignación de valores para arreglo A B[j] = j-2; // Asignación de valores para arreglo B C[j]=A[j]+B[j]; // Asignación de valores para arreglo C } Operaciones con arreglos multidimensionales En matemáticas, una matriz es una tabla de números consistente en cantidades abstractas que pueden sumarse y multiplicarse. Las matrices se utilizan para describir sistemas de ecuaciones lineales, realizar un seguimiento de los coeficientes de una aplicación lineal y registrar los datos que dependen de varios parámetros. Pueden sumarse, multiplicarse y descomponerse de varias formas, lo que también las hace un concepto clave en el campo del álgebra lineal. Las matrices son utilizadas ampliamente en la computación, por su facilidad para manipular información. En este contexto, son la mejor forma para representar grafos, y son muy utilizadas en el cálculo numérico.
Propiedades * Asociativa Dadas las matrices m×n A, B y C A + (B + C) = (A + B) + C * Conmutativa Dadas las matrices m×n A y B A+B=B+A * Existencia de matriz cero o matriz nula A+0=0+A=A * Existencia de matriz opuesta con -A = [-aij] A + (-A) = 0
Suma y resta
Los arreglos deben tener el mismo orden y la suma se realiza elemento a elemento. Por ejemplo sean A,B y C arreglos de números punto flotante de orden 2x3. Entonces la operación C = A+B sería:
C
=
c00=a00+b00
c01=a01+b01
c02=a02+b02
c10=a10+b10
c11=a11+b11
c12=a12+b12
c20=a20+b20
c21=a21+b21
c22=a22+b22
=
A
+
a00
a01
a02
a10
a11
a12
a20
a21
a22
+
B b00
b01
b02
b10
b11
b12
b20
b21
b22
/*Extracto de código fuente*/ float A[3][3],B[3][3],C[3][3]; for (int i=0;i<2;++) { for (int j=0;j<3;j++) { A[i][j] = (2*i+1)/3; // Asignación de valores para el arreglo A B[i][j] = 2*j; // Asignación de valores para el arreglo B C[i][j]=A[i][j]+B[i][j]; // Asignación de valores para el arreglo C } }
Producto por un escalar Dada una matriz A y un escalar c, su producto cA se calcula multiplicando el escalar por cada elemento de A (i.e. (cA)[i, j] = cA[i, j] ). Ejemplo
Propiedades Sean A y B matrices y c y d escalares. * Clausura: Si A es matriz y c es escalar, entonces cA es matriz. * Asociatividad: (cd)A = c(dA) * Elemento Neutro: 1·A = A * Distributividad: o De escalar: c(A+B) = cA+cB o De matriz: (c+d)A = cA+dA Ejemplo de producto de un escalar por una matriz Realizar la operación M=2*S donde M y S son arreglos de dimensión dos de orden 2x2.
M
=
m00=2*s00
m10=2*s10
m01=2*s01
m11=2*s11
=
2
2
*
*
S s00
s01
s10
s11
/*Extracto de código fuente*/ float M[2][2], S[2][2]; for (int i=0;i<2;++) { for (int j=0;j<2;j++) { S[i][j] = i+j; // Asignación de valores para el arreglo S M[i][j]=2*S[i][j]; // Asignación de valores para el arreglo M } }
Producto de matrices El producto de dos matrices se puede definir sólo si el número de columnas de la matriz izquierda es el mismo que el número de filas de la matriz derecha. Si A es una matriz m×n y B es una matriz n×p,
entonces su producto matricial AB es la matriz mテ用 (m filas, p columnas) dada por: (AB)[i,j] = A[i,1] B[1,j] + A[i,2] B[2,j] + ... + A[i,n] B[n,j] para cada par i y j.
Por ejemplo:
Arreglos de caracteres multidimensionales Los arreglos de cadenas, que a menudo se conocen como tablas de cadenas son comunes en la programaciテウn en C++. Una tabla de cadenas de dos dimensiones es creada como otro cualquier arreglo de dos dimensiones. No obstante, la forma como se conceptualizarテ。 serテ。 levemente diferente. Por ejemplo:
char nombres[10][50] Leidys\0 Henry\0
Luis\0 Alexis\0 José\0 Estrella\0 Alberto\0 Ducyelis\0 Angel\0 Joan\0
Esta sentencia especifica una tabla que puede contener hasta de 10 cadenas, cada una de hasta 50 caracteres de longitud (incluyendo el carácter de fin de cadena). Para acceder a una cadena dentro de la tabla se especifica solamente el primer índice. Por ejemplo para introducir una cadena desde el teclado en la tercera cadena de nombres, se utilizaría la siguiente sentencia: gets(nombres[2]); De la misma manera, para dar salida a la primera cadena se utilizaría la sentencia cout<<nombres[0]; Obteniendo Leidys cout<<nombres[5]; Obteniendo Estrella La declaración que sigue crea una tabla de tres dimensiones con tres listas de cadenas. Cada lista tiene cinco cadenas de longitud, y cada cadena puede almacenar 80 caracteres. char animales[2][5][80]; Para acceder a una cadena concreta en este caso, debe especificar las primeras dos dimensiones. Por ejemplo, para acceder a la segunda cadena de la tercera lista especifique animales[2][1]. En el siguiente ejemplo se utilizan dos listas (nombres y apellidos) con capacidad de almacenar 5 cadenas de 30 caracteres cada una. Ejemplo 7. 1. 2. 3. 4. 5.
#include <iostream> using namespace std; int main() { int cant_estud = 5;
6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. }
char nombres[5][30], apellidos[5][30]; cout << "\t\tPrograma de demostración de arreglos de cadenas" << endl; for( int i=0;i<cant_estud;i++) { cout<<"Estudiante "<<i+1<<": "<<endl; cout<<"Ingrese el Nombre: "; gets(nombres[i]); cout<<"Ingrese el Apellido : "; gets(apellidos[i]); cout<<" "<<endl; } cout << "\t\tCarga realizada..." << endl; for( int i=0;i<cant_estud;i++) { cout<<"Estudiante "<<i+1<<" es : "<<nombres[i]<<" "<<apellidos[i]<<endl; } return 0;
Inicialización de arreglos en C++ Tal como a otros tipos de variables, puede darle valores iniciales a los elementos de una arreglo. Esto se consigue especificando una lista de valores que tendrán los elementos del arreglo. tipo_dato identificador [tamaño] ={lista de valores}; La lista de valores es un conjunto de valores separados por comas que son de un tipo de dato compatible con el tipo de dato del arreglo. La primera constante será colocada en la primera posición del arreglo, la segunda constante en la segunda posición, y así sucesivamente . Por ejemplo: int mem[6] = {1,0,-3,24,15,1}; Esto significa que men[0] tendrá el valor de 1, y que men[4] tendrá el valor de 15. Para la inicialización de arreglos de caracteres existen dos maneras. Si el arreglo no tiene una cadena terminada en nulo, simplemente especifique cada carácter usando una lista separada por comas como se muestra a continuación: char letras[3] = {'A','B','C'} Si el arreglo va a contener una cadena, puede inicializar el arreglo usando una cadena encerrada entre comillas, tal como se muestra. char nombre[4] = “ABC”; Los arreglos de múltiples dimensiones son inicializados de la misma manera que los de una dimensión. Ejemplo 8. Operaciones con matrices
Suponga que debe construir un programa para registrar los tiempos de los chequeos de 4 velocistas que compiten para un cupo en la clasificaci贸n nacional. Cada velocista corre por un carril, y se deben realizar 3 chequeos por cada velocista. Usted debe registrar el nombre del velocista que corre por cada canal, registrar el tiempo de cada prueba y su tiempo promedio. Tome en cuenta que el nombre de tiene una longitud de m谩ximo 40 caracteres. 1. #include <iostream> 2. using namespace std; 3. int main() 4. { 5. char competidores [4][40]; /*Matriz de nombres de competidores*/ 6. float carreras[4][3]; /*Matriz de tiempos en cada vuelta de los competidores*/ 7. float prom_competidores[4]; /*Vector de tiempos promedio de los competidores*/ 8. float acumulador=0; 9. cout << "Informaci贸n del tiempo de cada competidor en el chequeo" << endl; 10. /*Llenando el vector de nombres de participantes*/ 11. for (int i=0;i<4;i++) 12. { 13. cout<<"Ingrese el nombre del competidor del carril "<<i+1<<endl; 14. gets(competidores [i]); 15. } 16. /*Llenando la matriz de tiempos en cada chequeo*/ 17. for (int j=0;j<4;j++) 18. { 19. acumulador=0; 20. cout<<"Indique el tiempo del Competidor "<<competidores[j]<<endl; 21. for(int k=0;k<3;k++) 22. { 23. cout<<"En la prueba "<<k+1<<endl; 24. cin>>carreras[j][k]; 25. acumulador=acumulador+carreras[j][k]; 26. } 27. /*Guardando el promedio de las dos carreras en el vector*/ 28. prom_competidores[j]=acumulador/3; 29. } 30. /*Imprimiendo los resultados*/ 31. for (int j=0;j<4;j++) 32. { 33. cout<<"El tiempo del Competidor "<<competidores[j]; 34. for(int k=0;k<3;k++) 35. {
36. cout<<"\t"<<carreras[j][k]; 37. 38. } 39. cout<<"\tTiempo promedio= "<<prom_competidores[j]<<endl; 40. } 41. return 0; 42. } Suponga los siguientes datos de entrada, cárguelos como datos de prueba. char competidores[4][40]; Elías Cisneros Juan V. Cisneros Ligia Cisneros Simón Cisneros
float carreras[4][3]; 10
10,2
10,1
9,9
10
10,2
9
9,6
9,4
10,5
10,4
10,1
Se debería obtener para prom_competidores[4]; 10,1 10 9,3 10,3
BibliografĂa Schildt Herbert, C++ Para programadores. McGraw-Hill. 1996. http://es.wikipedia.org/wiki/Matriz_(matem%C3%A1tica)
U.T.A. Facultad de Ciencias de la Educaci贸n Carrera de Docencia en Inform谩tica Tercer Semestre 煤nico Miguel Antonio Miranda Chonata
Elemento # 2
Programaci贸n II
23
1
Ejercicios de Programacion Ejercicio #1
meNU
Enunciado Ingresada una cadena en un vector de tipo char, imprimir dicho arreglo al reves
Anlaisis y Desarrollo Declaracion de Variables #include<stdio.h> #include<conio.h> int i,limite,fila=1,op=0; char vec1[20];
Funcion para colocar borde en pantalla void borde () { clrscr(); for (i=1;i<=80;i++) { gotoxy(i,1); printf("*");
2
gotoxy(i,24); printf("*"); } for (i=1;i<=24;i++) { gotoxy(1,i); printf("*"); gotoxy(80,i); printf("*"); } for (i=1; i<35; i++) { gotoxy(10+i,23); printf(" Miguel Antonio Miranda Chonata"); delay(5); } gotoxy(27,2); printf("UNIVERSIDAD TECNICA DE AMBATO"); gotoxy(17,3); printf("FACULTA DE CIENCIAS HUMANAS Y DE LA EDUCACIàN"); gotoxy(25,4); printf("CARRERA DE DOCENCIA EN INFORMµTICA"); gotoxy(32,5); printf("SeGuNdO SeMeStRe"); }
Programa principal void main() { Lazo do while para ejecutar mientras el usuario presione 1 do { clrscr();
3
fila=1; borde();
fflush(stdin); gotoxy(8,8); printf("Ingresa una cadena : "); gotoxy(32,8); gets(vec1); limite=strlen(vec1);
for (i=0;i<limite;i++) { gotoxy(50,7+fila); printf("%c",vec1[i]); fila++; }
fila=1; for (i=limite;i>=0;i--) { gotoxy(60,6+fila); printf("%c",vec1[i]); fila++; } gotoxy(4,23); printf("Desea continuar 1<<SI>> 0 <<NO>>"); gotoxy(38,23); scanf("%d",&op); } while (op != 0);
}
4
Corrido
Ejercicio 2 Enunciado Ingresada una cadena extraer las vocales en un segundo areglo y ordenarlos Declaraci贸n de Variables #include <stdio.h> #include <conio.h> #include <string.h> char vector1[20],vector2[20],aux[1]; int i,j,longi,convoca=0,op=0;
funcion para generar borde en la pantalla void borde() {
5
for (i=1;i<80;i++) { gotoxy(i,1);printf("*"); gotoxy(i,25);printf("*"); } for (i=1;i<25;i++) { gotoxy(1,i);printf("*"); gotoxy(80,i);printf("*"); } }
Inicio programa principal void main() { Lazo do while que repita el programa mientras el usuario presione 1 Do { clrscr(); borde(); convoca=0; flushall();
gotoxy(10,4);printf("ingrese una cadena : "); gotoxy(30,4);gets(vector1);
6
longi=strlen(vector1);
for (i=0;i<longi;i++) { Decision para determinar si el elemento es vocal o no if(vector1[i]=='a') { vector2[convoca]=vector1[i]; convoca++; } Decision para determinar si el elemento es vocal o no if(vector1[i]=='e') { vector2[convoca]=vector1[i]; convoca++; } Decision para determinar si el elemento es vocal o no if(vector1[i]=='i') { vector2[convoca]=vector1[i]; convoca++; } Decision para determinar si el elemento es vocal o no if(vector1[i]=='o') { vector2[convoca]=vector1[i];
7
convoca++; } Decision para determinar si el elemento es vocal o no if(vector1[i]=='u') { vector2[convoca]=vector1[i]; convoca++; } } Imprimir vector desordenado gotoxy(10,6);printf("Vector 2 desordenado "); for (i=0;i<convoca;i++) { gotoxy(14,7+i);printf("%c",vector2[i]); } Metodo de burbuja para ordenar el vector for (i=0;i<convoca;i++) { for (j=0;j<convoca;j++) { if(vector2[j]>vector2[i]) { aux[0]=vector2[i]; vector2[i]=vector2[j]; vector2[j]=aux[0]; }
8
} }
gotoxy(40,6);printf("Vector 2 ordenado "); Imprime vector ordenado for (i=0;i<convoca;i++) { gotoxy(44,7+i);printf("%c",vector2[i]); }
gotoxy(5,23);printf("Desea continuar <<1>> SI <<0>> NO ===>"); gotoxy(45,23);scanf("%d",&op); } while(op!=0); }
9
Ejercicio # 3
meNU
Enunciado Ingresada uina cedna extraer sus consonantes en un segundo arreglo y ordenarlos Poner en uso las librerias #include <stdio.h> #include <conio.h> #include <string.h> Declaraci贸n de Variables char vector1[20],vector2[20],aux[1]; int i,j,longi,convoca=0,op=0; funcion para colocar borde en la pantalla void borde() { for (i=1;i<80;i++) { gotoxy(i,1);printf("*"); gotoxy(i,25);printf("*"); } for (i=1;i<25;i++) { gotoxy(1,i);printf("*"); gotoxy(80,i);printf("*"); }
}
10
Inicio programa principal void main() { do { clrscr(); borde(); convoca=0; flushall();
gotoxy(10,4);printf("ingrese una cadena : "); gotoxy(30,4);gets(vector1); longi=strlen(vector1); for (i=0;i<longi;i++) { if((vector1[i]!='a')&&(vector1[i]!='e')&&(vector1[i]!='i')&&(vector1[i]!='o') &&(vector1[i]!='u')) { vector2[convoca]=vector1[i]; convoca++; } } gotoxy(10,6);printf("Vector 2 desordenado "); for (i=0;i<convoca;i++) { gotoxy(14,7+i);printf("%c",vector2[i]);
11
}
for (i=0;i<convoca;i++) { for (j=0;j<convoca;j++) { if(vector2[j]>vector2[i]) { aux[0]=vector2[i]; vector2[i]=vector2[j]; vector2[j]=aux[0]; } } } gotoxy(40,6);printf("Vector 2 ordenado "); for (i=0;i<convoca;i++) { gotoxy(44,7+i);printf("%c",vector2[i]); } gotoxy(5,23);printf("Desea continuar <<1>> SI <<0>> NO ===>"); gotoxy(45,23);scanf("%d",&op); } while(op!=0); }
12
Ejercicio 4
meNU
Ingresada una matriz cuadratica convertir todos los elementos de la matriz en ceros, con excepcion de la diagonal principal Poner en uso las librerias #include<stdio.h> #include<conio.h> #include<math.h> Declaraci贸n de Variables int matriz1[10][10]={0},matriz2[10][10]={0}; int i,j,f1=0,t=0,l=0,f2=0; int f,c; Funci贸n para el ingreso void ingreso(int a, int b) { t=10; f1=10;
13
for(i=1;i<=a;i++) { for(j=1;j<=b;j++) { gotoxy(t,f1);scanf("%d",&matriz1[i][j]); t=t+3; } t=10; f1=f1+2; } } Funci贸n para colocar ceros a todas los elementos a excepcion de la diagonal principal void proceso(int a, int b) { for (i=1;i<=a;i++) { for(j=1;j<=b;j++) { if (i == j) { matriz2[i][j]=matriz1[i][j]; } } } }
14
Funci贸n para imprimir la matriz resultante void impresion(int a, int b) { t=50; f1=10; for(i=1;i<=a;i++) { for(j=1;j<=b;j++) { gotoxy(t,f1);printf("%d",matriz2[i][j]); t=t+3; } t=50; f1=f1+2; } } Funci贸n para graficar un borde en la pantalla void borde () { clrscr(); for (i=1;i<=80;i++) { gotoxy(i,1); printf("*"); gotoxy(i,24); printf("*"); }
15
for (i=1;i<=24;i++) { gotoxy(1,i); printf("*"); gotoxy(80,i); printf("*"); } for (i=1; i<35; i++) { gotoxy(10+i,23); printf(" Miguel Antonio Miranda Chonata"); delay(5); } gotoxy(27,2); printf("UNIVERSIDAD TECNICA DE AMBATO"); gotoxy(17,3); printf("FACULTA DE CIENCIAS HUMANAS Y DE LA EDUCACIàN"); gotoxy(25,4); printf("CARRERA DE DOCENCIA EN INFORMµTICA"); gotoxy(32,5); printf("Tercer Semestre"); gotoxy(20,6); printf("DIAGONAL PRINCIPAL DE UNA MATRIZ CUADRATICA"); } Inicio de programa principal void main() { clrscr(); borde(); do { gotoxy(55,8); printf(" ");
16
gotoxy(10,8); printf(" Por favor ingrese # de filas y columnas: "); gotoxy(55,8); scanf("%d",&f); } while (f<1 || f >7); c = f; ingreso(f,c); proceso(f,c); impresion(f,c); getch(); }
Ejercicio 5
meNU
Enunciado Llenar una matriz de n*n y rellene con los factores de un numero Pongo en uso las librerias #include<stdio.h> #include<conio.h>
17
#include<math.h> Declaraci贸n de Variables int matriz1[10][10]={0}; int i,j,f1=0,t=0,l=0,f2=0; int f,c,op,fac=0,cal=0; Funci贸n para calcular los factores de un numero n y colocarlos en la matriz void calculo(int a, int b, int fact) { t=10; f1=10; for(i=1;i<=a;i++) { for(j=1;j<=b;j++) { cal++; matriz1[i][j] = cal * fact; gotoxy(t,f1);printf("%d",matriz1[i][j]); t=t+5; } t=10; f1=f1+2; } } Funci贸n para colocar un borde en la pantalla void borde ()
18
{ clrscr(); 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("*"); } for (i=1; i<35; i++) { gotoxy(10+i,23); printf(" Miguel Antonio Miranda Chonata"); delay(5); } gotoxy(27,2); printf("UNIVERSIDAD TECNICA DE AMBATO"); gotoxy(17,3); printf("FACULTA DE CIENCIAS HUMANAS Y DE LA EDUCACIàN"); gotoxy(25,4); printf("CARRERA DE DOCENCIA EN INFORMµTICA"); gotoxy(32,5); printf("Tercer Semestre"); gotoxy(20,6); printf("Llenar con factores de un numero"); }
19
Inicio del programa principal void main() { do { clrscr(); cal=0; fac=0; borde(); do { gotoxy(55,8); printf(" "); gotoxy(10,8); printf("Por favor ingrese # de filas y columnas: "); gotoxy(55,8); scanf("%d",&f); } while (f<1 || f >7); gotoxy(10,9); printf("Ingrese el factor : "); gotoxy(55,9); scanf("%d",&fac);
c = f; calculo(f,c,fac); gotoxy(2,23); printf(" Desea Continuar <<1>> SI <<0>> NO: "); gotoxy(40,23); scanf("%d",&op); } while (op != 0); }
20
Corrido
Ejercicio 6
meNU
Enunciado Ingresar elementos en una matriz solo con valores pares Poner en uso las librerias #include<stdio.h> #include<conio.h> #include<math.h> Declaraaci贸n de Variables int matriz1[10][10]={0}; int i,j,f1=0,t=0,l=0,f2=0; int f,c,op; Funci贸n para el ingreso de elementos en la matriz, mediante lazo while se impide el ingreso de valores impares void ingreso(int a, int b) {
21
t=10; f1=10; for(i=1;i<=a;i++) { for(j=1;j<=b;j++) { do { gotoxy(t,f1);printf(" "); gotoxy(t,f1);scanf("%d",&matriz1[i][j]); } while((matriz1[i][j]%2)!=0); t=t+3; } t=10; f1=f1+2; } } Funci贸n para imprimir la matriz void impresion(int a, int b) { t=50; f1=10; for(i=1;i<=a;i++) { for(j=1;j<=b;j++)
22
{ gotoxy(t,f1);printf("%d",matriz1[i][j]); t=t+3; } t=50; f1=f1+2; } } Funci贸n para graficar un borde en la pantalla void borde () { clrscr(); 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("*"); }
for (i=1; i<35; i++) {
23
gotoxy(10+i,23); printf(" Miguel Antonio Miranda Chonata"); delay(5); } gotoxy(27,2); printf("UNIVERSIDAD TECNICA DE AMBATO"); gotoxy(17,3); printf("FACULTA DE CIENCIAS HUMANAS Y DE LA EDUCACIàN"); gotoxy(25,4); printf("CARRERA DE DOCENCIA EN INFORMµTICA"); gotoxy(32,5); printf("Tercer Semestre"); gotoxy(20,6); printf("Ingreso de Solo valores Pares"); } Inicio del programa principal void main() { do { clrscr(); borde(); do { gotoxy(55,8); printf(" "); gotoxy(10,8); printf(" Por favor ingrese # de filas y columnas: "); gotoxy(55,8); scanf("%d",&f); } while (f<1 || f >7); c = f; ingreso(f,c);
24
impresion(f,c); gotoxy(2,23); printf(" Desea Continuar <<1>> SI <<0>> NO: "); gotoxy(40,23); scanf("%d",&op); } while (op != 0); } Corrido
Ejercicio 7
meNU
Funci贸n para el ingreso Programa para que encere una matriz de n*n, Llenar la diagonal principal con pares desde del 2 en adelante y la matriz secundaria con los impares de 1 en adelante, enviar dichos valores a un vector y ordenar el mismo en forma ascendente. Poner en uso las librerias #include<stdio.h> #include<conio.h> #include<math.h>
25
Declaro las variables int matriz1[10][10]={0},vector[20]={0}; int i,j,f1=0,t=0,l=0,f2=0,factor=0,conta=0; int f,c, aux=0,op=0,convec=0,conpar=0,conimpar=1; Funci贸n para encerar la matriz void encero(int a) { for(i=1;i<=a;i++) { for(j=1;j<=a;j++) { matriz1[i][j] = 0; } } } Funci贸n para imprimir la matriz encerada void impre1(int a) { t=3; f1=9;
for(i=1;i<=a;i++) { for(j=1;j<=a;j++) { gotoxy(t,f1);printf("%d",matriz1[i][j]);
26
t=t+4; } t=3; f1=f1+2; } getch(); } Funci贸n para asigno al vector la diagonal principal void proceso(int a) { conpar=0; conimpar=1; t=3; f1=9;
for (i=1;i<=a;i++) { for(j=1;j<=a;j++) { if (i == j) { conpar=conpar + 2; matriz1[i][j] = conpar; gotoxy(t,f1);printf("%d",matriz1[i][j]); delay(250); convec++;
27
vector[convec]=matriz1[i][j]; } t=t+4; } t=3; f1=f1+2; } /* asigno al vector la diagonal secundaria*/ t=(-1+(4*a)); f1=9; for(j=1;j<=a;j++) { matriz1[j][(a+1)-j] = conimpar; conimpar=conimpar + 2; convec++; vector[convec]=matriz1[j][(a+1)-j]; gotoxy(t,f1);printf("%d",matriz1[j][(a+1)-j]); delay(250); t=t-4; f1=f1+2; } }
Funci贸n para imprimir al vector la diagonal principal void diago(int a)
28
{ t=35; f1=9;
for(i=1;i<=a;i++) { for(j=1;j<=a;j++) { if (j==i) { gotoxy(t,f1);printf("%d",matriz1[i][j]); t=t+4; } } f1=f1+2; } /* asigno al vector la diagonal secundaria*/ t=31+(4*a); f1=9;
for(i=1;i<=a;i++) { gotoxy(t,f1);printf("%d",matriz1[i][(a+1)-i]); t=t-4; f1=f1+2; }
29
}
Funci贸n para imprimir el vector desordenado void impresion() { t=65; f1=9;
for (i=1;i<=convec;i++) { gotoxy(t,f1);printf("%d",vector[i]); f1=f1+1; } } Funci贸n para ordenar el vector ascendentemente mediante metodo de burbuja void ordena() { for(i=1;i<=convec;i++) { for(j=1;j<=convec;j++) { if(vector[i]<vector[j]) { aux=vector[i];
30
vector[i]=vector[j]; vector[j]=aux; } } } } Funci贸n para imprimir el vector ordenado void impresion1() { t=72; f1=9;
for (i=1;i<=convec;i++) { gotoxy(t,f1);printf("%d",vector[i]); f1=f1+1; } } Funci贸n para ordenar vector en forma descedente mediante metodo de burbuja void ordend() { for(i=1;i<=convec;i++) { for(j=1;j<=convec;j++) {
31
if(vector[i]>vector[j]) { aux=vector[i]; vector[i]=vector[j]; vector[j]=aux; } } } } Funci贸n para imprimir el vector ordenado void impresion2() { t=76; f1=9;
for (i=1;i<=convec;i++) { gotoxy(t,f1);printf("%d",vector[i]); f1=f1+1; } } Funci贸n para colocar un borde en pantalla void borde () { clrscr(); for (i=1;i<=80;i++)
32
{ gotoxy(i,1); printf("*"); gotoxy(i,24); printf("*"); } for (i=1;i<=24;i++) { gotoxy(1,i); printf("*"); gotoxy(80,i); printf("*"); } for (i=1; i<35; i++) { gotoxy(10+i,23); printf(" Miguel Antonio Miranda Chonata"); delay(5); } gotoxy(27,2); printf("UNIVERSIDAD TECNICA DE AMBATO"); gotoxy(17,3); printf("FACULTA DE CIENCIAS HUMANAS Y DE LA EDUCACIàN"); gotoxy(25,4); printf("CARRERA DE DOCENCIA EN INFORMµTICA"); gotoxy(32,5); printf(" TeRcEr SeMeStRe"); } Inicio del programa principal void main() { do { convec=0;
33
clrscr(); borde(); do { gotoxy(55,8); printf(" "); gotoxy(10,8); printf(" Por favor ingrese # de filas y columnas: "); gotoxy(55,8); scanf("%d",&f); } while (f<1 || f >7); borde(); gotoxy(12,7); printf(" MATRIZ VECTOR");
DIAGONAL
gotoxy(12,8); printf("PRINCIPAL ORDENADO"); encero(f); impre1(f); proceso(f); diago(f); impresion(); ordena(); impresion1(); ordend(); impresion2(); gotoxy(4,23); printf("Desea continuar 1<<SI>> 0 <<NO>>"); gotoxy(38,23); scanf("%d",&op); }
VECTOR PRINCIPAL
34
while (op != 0); }
Corrido
Ejercicio 8
meNU
Enunciado Llenar la matriz con 1 luego generar en la principal los factores de un segundo numero, enviarlos a un vector y ordenar dichos elementos Poner en uso las librerias #include<stdio.h> #include<conio.h> #include<math.h> Declarar variables int matriz1[10][10]={0},vector[20]={0}; int i,j,f1=0,t=0,l=0,f2=0,factor=0,conta=0; int f,c, aux=0,op=0,convec=0,conpar=0,conimpar=1;
35
Funci贸n para encerar la matriz void encero(int a) { for(i=1;i<=a;i++) { for(j=1;j<=a;j++) { matriz1[i][j] = 1;
}
} } Funci贸n para imprimir la matriz encerada void impre1(int a) { t=3; f1=9;
for(i=1;i<=a;i++) { for(j=1;j<=a;j++) { gotoxy(t,f1);printf("%d",matriz1[i][j]); t=t+4; }
36
t=3; f1=f1+2; } } Funci贸n para colocar el factor de un numero en la matriz principal void proceso(int a, int facto) { conpar=0; conimpar=1; /* asigno al vector la diagonal principal*/ t=3; f1=9;
for (i=1;i<=a;i++) { for(j=1;j<=a;j++) { if (i == j) { conpar=conpar + facto; matriz1[i][j] = conpar; convec++; vector[convec]=conpar; gotoxy(t,f1);printf("%d",matriz1[i][j]); delay(250); }
37
t=t+4; } t=3; f1=f1+2; } } Funci贸n para imprimir la diagonal principal void diago(int a) { /* imprimir al vector la diagonal principal*/ t=35; f1=9;
for(i=1;i<=a;i++) { for(j=1;j<=a;j++) { if (j==i) { gotoxy(t,f1);printf("%d",matriz1[i][j]); t=t+4; } } f1=f1+2; } }
38
Funci贸n para imprimir el vector void impresion() { t=65; f1=9;
for (i=1;i<=convec;i++) { gotoxy(t,f1);printf("%d",vector[i]); f1=f1+1; } } Funci贸n para colocar borde en la pantalla void borde () { clrscr(); 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("*");
39
}
for (i=1; i<35; i++) { gotoxy(10+i,23); printf(" Miguel Antonio Miranda Chonata"); delay(5); } gotoxy(27,2); printf("UNIVERSIDAD TECNICA DE AMBATO"); gotoxy(17,3); printf("FACULTA DE CIENCIAS HUMANAS Y DE LA EDUCACIàN"); gotoxy(25,4); printf("CARRERA DE DOCENCIA EN INFORMµTICA"); gotoxy(32,5); printf(" TeRcEr SeMeStRe"); } Inicio de Programa principal void main() { do { convec=0; clrscr(); borde(); do { gotoxy(55,8); printf(" "); gotoxy(10,8); printf(" Por favor ingrese # de filas y columnas: "); gotoxy(55,8); scanf("%d",&f);
40
} while (f<1 || f >7); gotoxy(10,9); printf("Ingrese el factor: "); gotoxy(55,9); scanf("%d",&factor); borde(); gotoxy(12,7); printf(" MATRIZ VECTOR");
DIAGONAL
gotoxy(12,8); printf("PRINCIPAL ORDENADO"); encero(f); impre1(f); proceso(f,factor); diago(f); impresion(); gotoxy(4,23); printf("Desea continuar 1<<SI>> 0 <<NO>>"); gotoxy(38,23); scanf("%d",&op); } while (op != 0); } Corrido
VECTOR PRINCIPAL
41
Ejercicio 9
meNU
Enunciado Generar la serie de fibonacci de una matriz de n*n, enviar todos los elementos a un vector, posterior a esto en la matriz secundaria genernrar los factoriales de 1 hasta n, enviar estos valores de la diagonal secundaria al vector y ordenar Poner en uso las librerias #include<stdio.h> #include<conio.h> #include<math.h> Declaro variables double matriz1[10][10]={0},vector[100]={0},a=1.0,b=0.0,c=0.0; int i,j,f1=0,t=0,l=0,f2=0,factor=0,conta=0,x=0; int f,aux=0,op=0,convec=0,conpar=0,conimpar=1; Funci贸n para encerar la matriz void encero(int n)
42
{ a=1; b=0; c=0; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { c=a+b; a=b; b=c; matriz1[i][j] = c; convec++; vector[convec]=c; } } } Funci贸n para encerar la matriz void diago(int a) { t=(-1+(5*a)); factor = 1; f1=4; for(j=1;j<=a;j++) {
43
for(x=1;x<=j;x++) { factor = factor * x; }
matriz1[j][(a+1)-j] = factor; convec++; vector[convec]=factor; factor=1; t=t-5; f1=f1+2; } } Funci贸n para imprimir matriz encerada void impre1(int a) { t=3; f1=4;
for(i=1;i<=a;i++) { for(j=1;j<=a;j++) { gotoxy(t,f1);printf("%2.0f",matriz1[i][j]); t=t+6; }
44
t=3; f1=f1+2; } }
void impre2(int a) { t=(-1+(5*a)) + 12; f1=4;
for(i=1;i<=a;i++) { for(j=1;j<=a;j++) { gotoxy(t,f1);printf("%2.0f",matriz1[i][j]); t=t+6; } t=(-1+(5*a)) + 12; f1=f1+2; } }
void impresion() { t=65;
45
f1=3;
for (i=1;i<=convec;i++) { gotoxy(t,f1);printf("%2.0f",vector[i]); f1=f1+1; } }
void ordena() { for(i=1;i<=convec;i++) { for(j=1;j<=convec;j++) { if(vector[i]<vector[j]) { aux=vector[i]; vector[i]=vector[j]; vector[j]=aux; } } } }
void impresion1()
46
{ t=72; f1=3;
for (i=1;i<=convec;i++) { gotoxy(t,f1);printf("%2.0f",vector[i]); f1=f1+1; } }
void borde () { clrscr(); 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("*"); }
47
for (i=1; i<35; i++) { gotoxy(10+i,23); printf(" Miguel Antonio Miranda Chonata"); delay(5); } } Inicio Programa Principal void main() { do { convec=0; clrscr(); borde(); do { gotoxy(55,8); printf(" "); gotoxy(10,8); printf(" Por favor ingrese # de filas y columnas: "); gotoxy(55,8); scanf("%d",&f); } while (f<1 || f >4);
borde(); gotoxy(12,2); printf(" MATRIZ VECTOR");
DIAGONAL
VECTOR
48
gotoxy(12,3); printf("PRINCIPAL ORDENADO"); encero(f); impre1(f); diago(f); impre2(f); impresion(); ordena(f); impresion1(f);
gotoxy(4,23); printf("Desea continuar 1<<SI>> 0 <<NO>>"); gotoxy(38,23); scanf("%d",&op); } while (op != 0); } Corrido
PRINCIPAL
49
Ejercicio 10
meNU
Enunciado Programa que ingresada una matriz de n*n genere su matriz transpuesta Poner en uso las librerias #include<stdio.h> #include<conio.h> #include<math.h> Declaraci贸n de variables int matriz1[10][10]={0},matriz2[10][10]={0}; int i,j,f1=0,t=0,l=0,f2=0; int f,c=0,op=0,af2,ac2; Enunciado void encero(int af1,int ac1) { for(i=1;i<=af1;i++) { for(j=1;j<=ac1;j++) { matriz1[i][j] = 0; matriz2[i][j] = 0; } } }
50
void ingreso(int a, int b) { t=10; f1=10; for(i=1;i<=a;i++) { for(j=1;j<=b;j++) { gotoxy(t,f1);scanf("%d",&matriz1[i][j]); t=t+3; } t=10; f1=f1+2; } } Funcion que traspasa filas a columnas void traspaso(int a, int b) { t=10; f1=10; af2=1; ac2=1; for(i=1;i<=b;i++) { ac2=1; for(j=1;j<=a;j++)
51
{ matriz2[af2][ac2] = matriz1[j][i]; ac2++; t=t+3; } af2++; t=10; f1=f1+2; } } Funcion para imprimir la matriz resultante void impresion(int a, int b) { t=40; f1=10; for(i=1;i<=b;i++) { for(j=1;j<=a;j++) { gotoxy(t,f1);printf("%d",matriz2[i][j]); t=t+3; } t=40; f1=f1+2; } }
52
Funci贸n para colocar un borde en la pantalla void borde () { clrscr(); 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("*"); }
for (i=1; i<35; i++) { gotoxy(10+i,23); printf(" Miguel Antonio Miranda Chonata"); delay(50); } } Inicio de programa principal void main() { do
53
{ clrscr(); borde(); gotoxy(55,8); printf(" "); textcolor(4); gotoxy(10,8); cprintf(" Por favor ingrese # de filas"); gotoxy(55,8); scanf("%d",&f); gotoxy(55,10); printf(" "); textcolor(2); gotoxy(10,10); cprintf(" Por favor ingrese # de columnas: "); gotoxy(55,10); scanf("%d",&c); borde(); gotoxy(12,2); printf(" MATRIZ gotoxy(12,3); printf(" # 1
MATRIZ"); TRANSPUESTA");
encero(f,c); ingreso(f,c); traspaso(f,c); impresion(f,c); gotoxy(4,23); printf("Desea continuar 1<<SI>> 0 <<NO>>"); gotoxy(38,23); scanf("%d",&op); } while (op != 0); }
54
Corrido
Ejercicio 11 Enunciado Encerar la matriz de n*n y colocar en la matriz principal los elementos de fibonacci de 1 hasta n y en la diagonal secundaria los factoriales del 1 hasta n de cada uno. Poner en uso las librerias #include<stdio.h> #include<conio.h> #include<math.h> Declaraci贸n de variables int matriz1[10][10]={0},a=1,b=0,c=0; int i,j,f1=0,t=0,l=0,f2=0,factor=0,conta=0,x=0; int f,aux=0,op=0;
55
Funci贸n para encerar la matriz void ence(int n) { for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { matriz1[i][j] = 0; } } } Funci贸n para asignar los numeros de la serie de fibonacci a la diagonal principal void fibo(int n) { a=1; b=0; c=0; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if (i==j) { c=a+b; a=b;
56
b=c; matriz1[i][j] = c; } } } } Funci贸n para asignar los factoriales desde 1 hasta n a la diagonal secundaria void diago(int a) { t=(-1+(5*a)); factor = 1; f1=4; for(j=1;j<=a;j++) {
for(x=1;x<=j;x++) { factor = factor * x; } if (a%2!=0) { if(((a/2)+1)==j) { aux =factor; }
57
else { matriz1[j][(a+1)-j] = factor; } } else { matriz1[j][(a+1)-j] = factor; } factor=1; t=t-5; f1=f1+2; } } Funci贸n para asignar los numeros de la serie de fibonacci a la diagonal principal void impre1(int a) { t=3; f1=4; if (a%2==0) { for(i=1;i<=a;i++) { for(j=1;j<=a;j++) {
58
if (matriz1[i][j]!=0) { textcolor(3); gotoxy(t,f1);cprintf("%d",matriz1[i][j]); } else { textcolor(4);
gotoxy(t,f1);cprintf("%d",matriz1[i][j]); }
if (i==j) { textcolor(1); gotoxy(t,f1);cprintf("%d",matriz1[i][j]); } t=t+6; } t=3; f1=f1+2; } } else {
59
for(i=1;i<=a;i++) { for(j=1;j<=a;j++) { if((((a/2)+1)==j) && (((a/2)+1)==i)) {
if (matriz1[i][j]!=0) { textcolor(3); gotoxy(t-2,f1);cprintf("%d / %d",matriz1[i][j],aux); } else { textcolor(4); gotoxy(t-2,f1);cprintf("%d / %d",matriz1[i][j],aux); }
if (i==j) { textcolor(1); gotoxy(t-2,f1);cprintf("%d / %d",matriz1[i][j],aux); }
} else
60
{
if (matriz1[i][j]!=0) { textcolor(3); gotoxy(t,f1);cprintf("%d",matriz1[i][j]); } else { textcolor(4);
gotoxy(t,f1);cprintf("%d",matriz1[i][j]); }
if (i==j) { textcolor(1); gotoxy(t,f1);cprintf("%d",matriz1[i][j]); }
} t=t+6; } t=3; f1=f1+2; }
61
} }
void impre2(int a) { t=(-1+(5*a)) + 16; f1=4; if (a%2==0) { for(i=1;i<=a;i++) { for(j=1;j<=a;j++) { if (matriz1[i][j]!=0) { textcolor(2); gotoxy(t,f1);cprintf("%d",matriz1[i][j]); } t=t+6; } t=(-1+(5*a)) + 16; f1=f1+2; } } else {
62
for(i=1;i<=a;i++) { for(j=1;j<=a;j++) { if(((a/2)+1)==j) { if (matriz1[i][j]!=0) { textcolor(5); gotoxy(t-2,f1);cprintf("%d / %d",matriz1[i][j],aux); } } else { if (matriz1[i][j]!=0) { textcolor(7); gotoxy(t,f1);cprintf("%d",matriz1[i][j]); } } t=t+6; } t=(-1+(5*a)) + 16; f1=f1+2; } }
63
}
void borde () { clrscr(); 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("*"); }
for (i=1; i<35; i++) { gotoxy(10+i,23); printf(" Miguel Antonio Miranda Chonata"); delay(5); } }
64
void main() { do { clrscr(); borde(); do { gotoxy(55,8); printf(" "); gotoxy(10,8); printf(" Por favor ingrese # de filas y columnas: "); gotoxy(55,8); scanf("%d",&f); } while (f<1 || f >6);
borde(); gotoxy(12,2); printf(" MATRIZ gotoxy(12,3); printf("PRINCIPAL
DIAGONAL "); PRINCIPAL y SECUANDARIA");
ence(f); fibo(f); diago(f); impre1(f); impre2(f);
gotoxy(4,23); printf("Desea continuar 1<<SI>> 0 <<NO>>"); gotoxy(38,23); scanf("%d",&op);
65
} while (op != 0); } Corrido
Ejercicio 12
meNU
Enunciado Crear un programa utilizando matrices y funciones que me permita ingresar,N terminos en una matriz entre 5 y 35, encontrar todos los valores impares,ingresados en la matriz, pasarlos a un vector y presentar dicho vector,ordenado en forma ascendente y descendente. en proceso se repite n veces. Poner en uso las librerias #include<stdio.h> #include<conio.h> #include<math.h>
66
Declaro Variables int matriz[10][10],vector[100]; int fil=0,col=0,n=0,conpar=0,i=0,j=0,op=0,f=0,c=0,aux=0; Funci贸n encerar la matriz void encero(int a, int b) { for(i=1;i<=a;i++) { for(j=1;j<=b;j++) { matriz[i][j] = 0; }
} } Funci贸n para valores a la matriz entre 5 y 35 void ingreso(int a, int b) { c=3; f=9;
for(i=1;i<=a;i++) { for(j=1;j<=b;j++) {
67
do { gotoxy(c,f);printf(" "); gotoxy(c,f);scanf("%d",&matriz[i][j]); } while((matriz[i][j]<5) || (matriz[i][j]>35)); if ((matriz[i][j]%2)!=0) { conpar++; vector[conpar]=matriz[i][j]; } c=c+4; } c=3; f=f+2; } }
Funci贸n para ordenar mediante metodo de burbuja el vector void ordena1() { aux=0; for(i=1;i<=conpar;i++) { for(j=1;j<=conpar;j++) {
68
if(vector[i]<vector[j]) { aux=vector[i]; vector[i]=vector[j]; vector[j]=aux; } } } } Funci贸n imprimir el vector ordenado void impre() { for(i=1;i<=conpar;i++) { gotoxy(30,9+i);printf("%d",vector[i]); } }
void impre1() { for(i=1;i<=conpar;i++) { gotoxy(48,9+i);printf("%d",vector[i]); } }
69
void ordena2() { aux=0; for(i=1;i<=conpar;i++) { for(j=1;j<=conpar;j++) { if(vector[i]>vector[j]) { aux=vector[i]; vector[i]=vector[j]; vector[j]=aux; } }
} }
void impre2() { for(i=1;i<=conpar;i++) { gotoxy(68,9+i);printf("%d",vector[i]); } }
70
void borde() { clrscr(); for (i=1;i<=79;i++) { if((i%2)==0) { textcolor(3); gotoxy(i,1); cprintf("*"); } else { textcolor(5); gotoxy(i,1); cprintf("*"); } } for (i=1;i<=79;i++) { if((i%2)==0) { textcolor(3); gotoxy(i,25); cprintf("*"); } else {
71
textcolor(5); gotoxy(i,25); cprintf("*"); } }
for (i=1;i<=25;i++) { if((i%2)==0) { textcolor(2); gotoxy(1,i); cprintf("*"); } else { textcolor(7); gotoxy(1,i); cprintf("*"); } }
for (i=1;i<=25;i++) { if((i%2)==0) { textcolor(2); gotoxy(79,i); cprintf("*"); }
72
else { textcolor(7); gotoxy(79,i); cprintf("*"); } } textcolor(4); gotoxy(23,2); cprintf(" UNIVERSIDAD TECNICA DE AMBATO"); gotoxy(23,3); cprintf("FACULTAD DE CIENCIAS DE LA EDUCACION"); gotoxy(23,4); cprintf(" CARRERA DE DOCENCIA EN INFORMATICA"); gotoxy(23,5); cprintf("
TeRcEr SeMeStRe");
gotoxy(48,24); cprintf("Miguel Antonio Miranda Chonata"); } Inicio de Programa Principal void main() { do { clrscr(); op=0; conpar=0; fil=0; col=0; borde(); textcolor(3);
73
gotoxy(5,8); cprintf("Ingrese el numero de filas :"); do { gotoxy(43,8); cprintf(" "); gotoxy(43,8); cscanf("%d",&fil); } while(fil < 1 || fil >4); gotoxy(5,10); cprintf("Ingrese el numero de columnas :"); do { gotoxy(43,10); cprintf(" "); gotoxy(43,10); cscanf("%d",&col); } while(col < 1 || col >4); borde(); encero(fil,col); gotoxy(5,7); cprintf("MATRIZ VECTOR"); gotoxy(5,8); cprintf(" DESCENDENTE"); ingreso(fil,col); impre(); ordena1(); impre1(); ordena2(); impre2();
VECTOR
VECTOR
DESORDENADO
ASCENDENTE
74
textcolor(5); gotoxy(5,24); cprintf("Desea continuar? <<1>> SI <<0>>NO"); gotoxy(40,24); cscanf("%d",&op); } while (op!=0); } Corrido
Ejercicio 13
meNU
Enunciado Programa para llenar una matriz cuadratica generando numeros primos Poner en uso las librerias #include<stdio.h> #include<conio.h> #include<math.h>
75
Declaraci贸n de variables int matriz1[10][10]={0}; int i,j,f1=0,t=0,op=0,f=0,primo=1,x=1,conpri=0,sw=0; Funci贸n para encerar la matriz void ence(int n) { for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { matriz1[i][j] = 0; } } } Funci贸n para calcular y asignar los numeros primos a la matriz void calprimo(int n) { primo=1; sw=0; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { do { conpri=0;
76
sw=0; for(x=1;x<=primo;x++) { if((primo%x)==0) { conpri++; } } if(conpri<=2) { matriz1[i][j] = primo; primo++; sw=1; } else { sw=0; primo++; } } while (sw==0);
} } }
77
Funci贸n para imprimir la matriz resultante void impre1(int a) { t=3; f1=4; for(i=1;i<=a;i++) { for(j=1;j<=a;j++) { gotoxy(t,f1);cprintf("%d",matriz1[i][j]); t=t+6; } t=3; f1=f1+2; } }
void borde () { clrscr(); for (i=1;i<=80;i++) { textcolor(2); gotoxy(i,1); cprintf("*"); gotoxy(i,24); cprintf("*");
78
}
for (i=1;i<=24;i++) { textcolor(5); gotoxy(1,i); cprintf("*"); gotoxy(80,i); cprintf("*"); }
for (i=1; i<35; i++) { textcolor(i); gotoxy(10+i,23); cprintf(" Miguel Antonio Miranda Chonata"); delay(30); } }
void main() { do { clrscr(); borde(); do { gotoxy(55,8); printf(" ");
79
gotoxy(10,8); printf(" Por favor ingrese # de filas y columnas: "); gotoxy(55,8); scanf("%d",&f); } while (f<1 || f >9);
borde(); gotoxy(12,2); printf(" MATRIZ LLENA CON NUMEROS PRIMOS");
ence(f); calprimo(f); impre1(f);
gotoxy(4,23); printf("Desea continuar 1<<SI>> 0 <<NO>>"); gotoxy(38,23); scanf("%d",&op); } while (op != 0);
} Corrido del Programa
80
Ejercicio 14
meNU
Enunciado Ingresar los elementos en una matriz n*m y ordenar ascendentemente Poner en uso las librerias #include<stdio.h> #include<conio.h> #include<math.h> Declaraci贸n de Variables int matriz1[10][10]={0}; int i,j,f1=0,t=0,l=0,f2=0; int f,c, aux=0,op=0,i1=0,j1=0;
81
Funci贸n para encerar la matriz void encero(int a, int b) { for(i=1;i<=a;i++) { for(j=1;j<=b;j++) { matriz1[i][j] = 0; } } } Funci贸n para ingresar valores a la matriz que esten entre 2 y 33 void ingreso(int a, int b) { t=3; f1=9;
for(i=1;i<=a;i++) { for(j=1;j<=b;j++) { do { gotoxy(t,f1);printf(" "); gotoxy(t,f1);scanf("%d",&matriz1[i][j]); }
82
while((matriz1[i][j]<2) || (matriz1[i][j]>33)); t=t+4; } t=3; f1=f1+2; } } Funci贸n para ordenar la matriz mediante el metodo de burbuja void ordena(int a, int b) { for(i=1;i<=a;i++) { for(j=1;j<=b;j++) { for(i1=1;i1<=a;i1++) { for(j1=1;j1<=b;j1++) { if(matriz1[i][j]<matriz1[i1][j1]) { aux=matriz1[i][j]; matriz1[i][j]=matriz1[i1][j1]; matriz1[i1][j1]=aux; } } }
83
} } } Funci贸n para imprimir la matriz ordenada void impre1(int a, int b) { t=50; f1=9; for(i=1;i<=a;i++) { for(j=1;j<=b;j++) { gotoxy(t,f1);cprintf("%d",matriz1[i][j]); t=t+6; } t=50; f1=f1+2; } } Funci贸n para colocar un borde en la pantalla void borde () { clrscr(); for (i=1;i<=80;i++) { gotoxy(i,1); printf("*");
84
gotoxy(i,24); printf("*"); } for (i=1;i<=24;i++) { gotoxy(1,i); printf("*"); gotoxy(80,i); printf("*"); } for (i=1; i<35; i++) { gotoxy(10+i,23); printf(" Miguel Antonio Miranda Chonata"); delay(5); } gotoxy(27,2); printf("UNIVERSIDAD TECNICA DE AMBATO"); gotoxy(17,3); printf("FACULTA DE CIENCIAS HUMANAS Y DE LA EDUCACIàN"); gotoxy(25,4); printf("CARRERA DE DOCENCIA EN INFORMµTICA"); gotoxy(32,5); printf("TeRcEr SeMeStRe"); } Inicio del programa principal void main() { do { clrscr(); borde(); do
85
{ gotoxy(55,8); printf(" "); gotoxy(10,8); printf(" Por favor ingrese # de filas : "); gotoxy(55,8); scanf("%d",&f); } while (f<1 || f >7); do { gotoxy(55,12); printf(" "); gotoxy(10,12); printf(" Por favor ingrese # de columnas : "); gotoxy(55,12); scanf("%d",&c); } while (c<1 || c >7);
borde(); encero(f,c); ingreso(f,c); ordena(f,c); impre1(f,c);
gotoxy(4,23); printf("Desea continuar 1<<SI>> 0 <<NO>>"); gotoxy(38,23); scanf("%d",&op); } while (op != 0);
}
86
Corrido del Programa
Ejercicio 15
meNU
Enunciado Menu para tener dos opciones: 1.- programa para extraer las vocales de una cadena y ordenarlas ascendentemente 2.- programa para extraer las consonantes de una cadena y ordenarlas ascendentemente Poner en uso las librerias # include <stdio.h> # include <conio.h> # include <string.h> Declaraci贸n de Variables char vector1[20],vector2[20],aux[1];
87
int i,j,longi,convoca=0,op=0; Función para colocar un mensaje de espera void espera() { for (i=20;i<=60;i++) { for (j=20;j<=22;j++) { gotoxy(i,j); printf("°"); } } gotoxy(28,21); printf("Presione Enter para seguir"); getch(); } Función para colocar un borde en la pantalla void borde() { clrscr(); for (i=1;i<=80;i++) { gotoxy(i,1); printf("°"); gotoxy(i,24); printf("°"); } for (i=1;i<=24;i++) { gotoxy(1,i); printf("°");
88
gotoxy(80,i); printf("掳"); } gotoxy(17,3); printf("M E N U V A R I O S P R O G R A M A S "); for (i=1; i<35; i++) { gotoxy(10+i,23); printf(" Miguel Antonio Miranda Chonata"); } } Funci贸n para ingresada una cadena extraer y colocar las vocales en un vector void vocales () { do { clrscr(); borde(); convoca=0; flushall();
gotoxy(10,4);printf("ingrese una cadena : "); gotoxy(30,4);gets(vector1);
longi=strlen(vector1);
for (i=0;i<longi;i++) {
89
if(vector1[i]=='a') { vector2[convoca]=vector1[i]; convoca++; }
if(vector1[i]=='e') { vector2[convoca]=vector1[i]; convoca++; }
if(vector1[i]=='i') { vector2[convoca]=vector1[i]; convoca++; }
if(vector1[i]=='o') { vector2[convoca]=vector1[i]; convoca++; }
if(vector1[i]=='u') {
90
vector2[convoca]=vector1[i]; convoca++; } }
gotoxy(10,6);printf("Vector 2 desordenado "); for (i=0;i<convoca;i++) { gotoxy(14,7+i);printf("%c",vector2[i]); }
for (i=0;i<convoca;i++) { for (j=0;j<convoca;j++) { if(vector2[j]>vector2[i]) { aux[0]=vector2[i]; vector2[i]=vector2[j]; vector2[j]=aux[0]; } } } gotoxy(40,6);printf("Vector 2 ordenado "); for (i=0;i<convoca;i++) {
91
gotoxy(44,7+i);printf("%c",vector2[i]); } gotoxy(5,23);printf("Desea continuar <<1>> SI <<0>> NO ===>"); gotoxy(45,23);scanf("%d",&op); } while(op!=0); }
Funci贸n para ingresada una cadena extraer y colocar las consonantes en un vector void conso () { do { clrscr(); borde(); convoca=0; flushall();
gotoxy(10,4);printf("ingrese una cadena : "); gotoxy(30,4);gets(vector1);
longi=strlen(vector1);
for (i=0;i<longi;i++) {
92
if((vector1[i]!='a')&&(vector1[i]!='e')&&(vector1[i]!='i')&&(vector1[i] !='o')&&(vector1[i]!='u')) { vector2[convoca]=vector1[i]; convoca++; } } gotoxy(10,6);printf("Vector 2 desordenado "); for (i=0;i<convoca;i++) { gotoxy(14,7+i);printf("%c",vector2[i]); } for (i=0;i<convoca;i++) { for (j=0;j<convoca;j++) { if(vector2[j]>vector2[i]) { aux[0]=vector2[i]; vector2[i]=vector2[j]; vector2[j]=aux[0]; } } }
gotoxy(40,6);printf("Vector 2 ordenado ");
93
for (i=0;i<convoca;i++) { gotoxy(44,7+i);printf("%c",vector2[i]); }
gotoxy(5,23);printf("Desea continuar <<1>> SI <<0>> NO ===>"); gotoxy(45,23);scanf("%d",&op); } while(op!=0); } Inicio Programa principal void main() { do { clrscr(); borde(); gotoxy(23,7); printf("1.- Vocales"); gotoxy(23,9); printf("2.- Consonantes"); gotoxy(23,11); printf("3.- Salir");
gotoxy(23,17); printf("Ingrese Su opci¢n :"); gotoxy(53,17);scanf("%d",&op);
switch(op) {
94
case 1: { borde(); vocales(); espera(); break; }
case 2: { borde(); conso(); espera(); break; } } } while (op!=3); }
Corrido del Programa
95
96
Ejercicio 16
meNU
Enunciado Diseñe un programa que permita calcular la Multiplicación Algebraica de Matrices de cualquier dimensión Análisis Producto de dos matrices No todas las matrices se pueden multiplicar entre sí. Sean Amxn y Bpxq, condición necesaria y suficiente para que se puedan multiplicar A y B es que n=p, es decir, para poder multiplicar dos matrices el número de columnas de la primera tiene que coincidir con el número de filas de la segunda. El resultado del producto es una matriz C de dimensión mxq.
Dadas dos matrices Amxn y Bnxp. El producto A·B=C donde cada elemento de
97
C viene dado por
dicho de otro modo el elemento que ocupa la fila i y la columna j del producto se halla multiplicando los elemento de la fila i-ésima de A con los de la columna j-ésima de B, tal que cij=ai1·b1j+ai2·b2j+...+ain·bnj Veámoslo con ejemplos en matrices de números reales
Desarrollo
2
Desarrollo /* Pongo en uso las librerias mediante la funci¢n include*/ #include<stdio.h> #include<conio.h> /* Declaro las variables globales necesarias para el funcionamiento del programa*/ int f,c,f1,c1,col,col1,col2,fil3,fil1,fil2,k,i,j,op; int matriz1[10][10],matriz2[10][10],matriz3[10][10]; /* FUNCIONES*/ /* Funci¢n para encerar las 3 matrices que utilizaremos en nuestro programa*/ void encero() { for(i=1;i<=9;i++) /*For que controla las Filas*/ { for(j=1;j<=9;j++) /*For que controla las Columnas*/ { matriz1[i][j] = 0;/*Asigno 0 a cada una de las posiciones de matriz 1*/ matriz2[i][j] = 0;/*Asigno 0 a cada una de las posiciones de matriz 2*/ matriz3[i][j] = 0;/*Asigno 0 a cada una de las posiciones de matriz 3*/ } } }
3
/* Funci¢n para crear un borde alrededor de la pantalla y colocar los datos Personales*/ void borde () { clrscr(); /*Limpio la pantalla*/ for (i=1;i<=80;i++)/*For para dibujar el borde superior e inferior*/ { gotoxy(i,1); printf("*"); /*Imprimimos un borde en la fila 1*/ gotoxy(i,24); printf("*");/*Imprimimos un borde en la fila 24*/ } for (i=1;i<=24;i++)/*For para dibujar el borde izquierdo y derecho*/ { gotoxy(1,i); printf("*");/*Imprimimos un borde en la columna 1*/ gotoxy(80,i); printf("*");/*Imprimimos un borde en la columna 80*/ } for (i=1; i<35; i++)/*For para ingreso de Nombre en forma de rotulo*/ { gotoxy(10+i,23); printf(" Miguel Antonio Miranda Chonata"); delay(5); /*funci¢n para hacer una espera en milisegundos*/ } gotoxy(27,2); printf("UNIVERSIDAD TECNICA DE AMBATO"); gotoxy(17,3); printf("FACULTA DE CIENCIAS HUMANAS Y DE LA EDUCACIàN");
4
gotoxy(25,4); printf("CARRERA DE DOCENCIA EN INFORMµTICA"); gotoxy(32,5); printf("TeRcEr SeMeStRe"); } /*FUNCION PARA EL INGRESO DE VALORES MATRIZ1*/ /*Realizamos el ingreso de los valores en las matrices 1 y 2, notese que */ /*desde el programa principal enviamos a llamar esta funci¢n enviando los*/ /*valores de filas y columnas de cada una de las matrices, dentro de esta*/ /*funci¢n recibiremos de la siguiente manera: a = filas de matriz1 b = columnas de matriz1 a1 = filas de matriz2 b1 = columnas de matriz2 */ void ingreso(int a, int b,int a1, int b1) { /*INGRESO DE VALORES MATRIZ1*/ col=5;/*variable que controla las columnas para la impresi¢n con gotoxy*/ fil3=10;/*variable que controla las filas para la impresi¢n con gotoxy*/ for(i=1;i<=a;i++)/* for que controla las filas de la matriz1*/ { for(j=1;j<=b;j++)/* for que controla las columnas de matriz1*/ { gotoxy(col,fil3);/*coloco mediante gotoxy la posicion de columna y fila*/ scanf("%d",&matriz1[i][j]);/*ingreso un valor en matriz1*/
5
col=col+5;/*incremento la variable de la columna para la siguiente lectura*/ } col=5;/*regreso la columna a su valor original para la lectura de la siguiente fila*/ fil3=fil3+2;/*incremento la fila para la lectura*/ } /*INGRESO DE VALORES MATRIZ1*/ fil1=10;/*variable que controla las columnas para la impresi¢n con gotoxy*/ col1=29;/*variable que controla las filas para la impresi¢n con gotoxy*/ for(i=1;i<=a1;i++)/* for que controla las filas de la matriz2*/ { for(j=1;j<=b1;j++)/* for que controla las columnas de la matriz2*/ { textcolor(2);/*funci¢n para agregar color al texto*/ gotoxy(col1,fil1);cscanf("%d",&matriz2[i][j]);/*ingreso un valor en matriz2*/ col1=col1+5;/*incremento la variable de la columna para la siguiente lectura*/ } col1=29;/*regreso la columna a su valor original para la lectura de la siguiente fila*/ fil1=fil1+2;/*incremento la fila para la lectura*/ } } /*FUNCION PARA EL CALCULO DEL PRODUCTO DE LAS MATRICES 1 Y 2*/ /*Realizamos la multiplicaci¢n de las matrices 1 y 2 almacenando su valor */
6
/*en la matriz 3, notese que desde el programa principal enviamos a llamar*/ /*esta funci¢n enviando los valores de filas y columnas de cada una de las*/ /*matrices, recordemos que el mismo valor de columnas de matriz 1 es el de*/ /*filas de la matriz 2, asi que solo recibiremos 3 valores dentro de esta */ /*funci¢n recibiremos de la siguiente manera: a = filas de matriz1 b = columnas de matriz1 a1 = columnas de matriz2 */ void producto(int a, int b, int a1) { for(i=1;i<=a;i++)/* for que controla las filas de la matriz 1 y 3*/ { for(j=1;j<=a1;j++)/* for que controla las columnas de la matriz 2 y 3*/ { for(k=1;k<=b;k++)/* for que controla las columnas de la matriz 1 y filas de la 2*/ { matriz3[i][j]=matriz3[i][j]+matriz1[i][k]*matriz2[k][j]; } } } } /*FUNCION PARA IMPRIMIR LA MATRIZ 3*/ /*Realizamos la impresion de la matriz 3, que almacena la multiplicaci¢n */
7
/*algebraica de matriz 1 y matriz 2, recordemos que la dimension de matriz 3*/ /*esta dada por el numero de filas de matriz 1 y el numero de columnas de */ /*matriz2, por ejemplo de la siguiente manera: MATRIZ 1 MATRIZ 2 MATRIZ 3 2X3 3X5 2 X 5*/ /*por eso desde el programa principal mandamos a llamar a la funcion impresion enviando las filas de matriz1 y las columnas de matriz2 */ void impresion(int a, int b) { col2=54;/*variable que controla las columnas para la impresi¢n con gotoxy*/ fil2=10;/*variable que controla las filas para la impresi¢n con gotoxy*/ for(i=1;i<=a;i++)/*for que controla las filas de la matriz3*/ { for(k=1;k<=b;k++)/* for que controla las columnas de matriz3*/ { textcolor(5); gotoxy(col2,fil2);/*coloco mediante gotoxy la posicion de columna y fila*/ cprintf("%d",matriz3[i][k]);/*imprimo un valor en matriz3*/ col2=col2+4;/*incremento la variable de la columna para la siguiente lectura*/ } col2=54;/*regreso la columna a su valor original para la lectura de la siguiente fila*/ fil2=fil2+2;/*incremento la fila para la lectura*/ } }
8
/*PROGRAMA EN SU PARTE PRINCIPAL*/ void main() { do /* Inicio de lazo do While que controlara la repetici¢n del programa*/ { clrscr();/*limpio la pantalla*/ encero();/*mando a llamar funcion encera*/ borde();/*mando a llamar funcion borde*/ gotoxy(10,7); printf("NUMERO DE FILAS MATRIZ 1 : "); do/* Inicio de lazo do while*/ { gotoxy(60,7); printf(" "); gotoxy(60,7); scanf("%d",&f);/*ingreso numero de filas de matriz1*/ } while (f<1 || f >5);/*lazo while para que el valor de las filas solo este entre 1 y 5, m s bien por cuestion de la dimensi¢n de la pantalla*/ gotoxy(10,9); printf("NUMERO DE COLUMNAS MATRIZ 1 : "); do/* Inicio de lazo do while*/ { gotoxy(60,9); printf(" "); gotoxy(60,9); scanf("%d",&c);/*ingreso numero de columnas de matriz1*/ }
9
while (c<1 || c>5);/*lazo while para que el valor de las columnas solo este entre 1 y 5, m s bien por cuestion de la dimensi¢n de la pantalla*/ gotoxy(10,11); printf("# FILAS MATRIZ 2 igual a # COLUMNAS MATRIZ 1 : "); do/* Inicio de lazo do while*/ { gotoxy(60,11); printf(" "); gotoxy(60,11); scanf("%d",&f1);/*ingreso numero de filas de matriz2*/ } while ((f1<1 || f1>5) || (f1!=c));/*lazo while para que el valor de las filas de matriz 2 solo este entre 1 y 5, ademas de que el numero de filas de matriz 2 sea igual al de las columnas de 1*/
gotoxy(10,13); printf("# DE COLUMNAS MATRIZ 2 : "); do/* Inicio de lazo do while*/ { gotoxy(60,13); printf(" "); gotoxy(60,13); scanf("%d",&c1);/*ingreso numero de columnas de matriz2*/ } while (c1<1 || c1>5);/*lazo while para que el valor de las columnas solo este entre 1 y 5, m s bien por cuestion de la dimensi¢n de la pantalla*/ textcolor(12);/*coloca color al texto*/
10
borde();/*mandamos a llamar a funcion borde*/ gotoxy(11,7);cprintf("Matriz 1"); gotoxy(11,8);cprintf(" %d x %d",f,c); gotoxy(34,7);cprintf("Matriz 2"); gotoxy(34,8);cprintf(" %d x %d",f1,c1); gotoxy(52,7);cprintf("Multiplicaci¢n"); gotoxy(52,8);cprintf(" %d x %d",f,c1); /*llamamos a la funci¢n ingreso enviando # de filas y de columnas de matriz1 y el numero de filas y columnas de matriz2*/ ingreso(f,c,f1,c1); /*llamamos a la funci¢n producto enviando # de filas y de columnas de matriz1 y el numero columnas de matriz2*/ producto(f,c,c1); /*llamamos a la funci¢n impresion enviando # de filas de matriz1 y de columnas de matriz2*/ impresion(f,c1); textcolor(3);/*coloco color al texto*/ gotoxy(4,23); printf("Desea continuar 1<<SI>> 0 <<NO>>"); gotoxy(40,23); scanf("%d",&op);/*leemos op, para controlar si se repite o no el programa*/ }
11
while(op==1);/*lazo while para controlar si se repite o no el programa*/ }
10
Corrido del Programa