ELEMENTO 1 Programar
arrays bidimensionales
para resolver operaciones aritmético
matemáticas, que permita potenciar la capacidad de análisis y síntesis Objetivos Identificar la estructura de una matriz y su funcionamiento lógico Reconocer y determinar como declara una matriz y la sección que le corresponde Reconocer las estructuras de control y repetitivas que debe utilizar para el ingreso e impresión de datos de una matriz Reconocer las estructuras de control y repetitivas quedebe utilizar para recorrer y operar datos de una matriz Utilizar
sentencias
de
programación
acordes
a
la problemática planteada
para resolver un problema. Diseñar aplicaciones de ejercicios propuesto 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.
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: intstrlen(char * c); Devuelve la cantidad de caracteres que contiene la cadena strcpy(char * c1,char cad * c2); Copia la cadena c2 en la cadena c1. strcat(char * c1,char cad * c2); Concadena c2 al final de la cadena c1. intstrcmp(char * c1,char * c2); Compara las dos cadenas. Devuelve 0 si son iguales, <0 si c1 es menor a c2 o >0 si c1 es mayor a c2.
MATRICES 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 paralas 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.
Matriz bidimensional Elemento en Índice de columna 0
1
2
Índice de fila 0
3
4
a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]
1
a[1][0] a[1][1] a[1][2] a[1][3] a[0][4]
2
a[2][0] a[2][1] a[2][2] a[2][3] a[0][4]
3
a[3][0] a[3][1] a[3][2] a[3][3] a[0][4]
Por otra parte, en lenguaje C las matrices se almacenan en memoria "por filas", es decir, los elementos de la fila primera (de índice 0) van consecutivos y cuando acaba el último de la primera fila empieza a almacenarse el primero de la segunda, y así sucesivamente hasta llegar a la última fila. La Figura 4.4 muestra como estaría almacenada en la memoria la matriz anterior a[4][5]. Hay que aclarar que algunos lenguajes de programación (FORTRAN) utilizan el convenio contrario, es decir, almacenan las matrices por columnas.
Distribución de una matriz bidimensional en memoria Fila
0
1
2
3
En memoria a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3] a[3][0] a[3][1] a[3][2] a[3][3] Aunque se puede trabajar con elementos por separado de una matriz, lo habitual es hacer operaciones matriciales con todos los elementos en conjunto. Al igual que no existen operadores vectoriales en lenguaje C, no existen tampoco operadores matriciales, de manera que tales operaciones hay que realizarlas con bucles. Como ya vimos, el anidamiento de bucles permite el recorrido completo de un array bidimensional o matriz, y tal recorrido puede hacerse por filas o por columnas. A continuación se muestra un sencillo algoritmo que nos permite recorrer por filas completamente matrices (ya que el bucle
interno actúa sobre los índices de las columnas); en primer lugar se valoran las matrices b y c con ciertos números y seguidamente se realiza la operación matricial suma (en matemáticas se define un operador suma matricial con el mismo símbolo '+', de forma que este algoritmo sería equivalente a la suma de matrices A=B+C). ELEMENTO 2 Programar en forma combinada arrays unidimensionales y bidimensionales Objetivos Reconocer
y determinar como declarar
matrices y vectores y la sección que
le corresponde Reconocer las estructuras de control y repetitivas que debe utilizar para recorrer y guardar datos de un tipo de array bidimensional a un array unidimensional Reconocer las estructuras de control y repetitivas que debe utilizar para procesar datos entre arrays. Diseñar aplicaciones de ejercicios propuesto Introducción Los vectores y matrices son uno de los medios principales para el almacenamiento de los datos en un programa. Una matriz: Es un arreglo rectangular de números. Es decir, matriz es un conjuntoordenado de números dispuestos en m filas y n columnas Los números que forman la matriz se llaman elementos de la matriz y los indicamos con letras minúsculas, mientras que los nombres de las matrices se indican con letras mayúsculas. Las matrices varían en tamaño u orden El tamaño u orden de una matriz se describe especificando el número de filas o renglones (líneas horizontales) y columnas (líneas verticales) que aparecen en la matriz. Por lo tanto, una matriz de orden m x n tiene m filas y n columnas.
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: intiVec[10]; intiVec[20]={0}; //Todos los elementos se inicializan al valor 0; intiVec[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 intiVec[5] 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 a1: for( i = 0; i<5; i ++)
{ iVec[i]= 1; } Un array es un medio de guardar un conjunto de objetos de la misma clase. Se accede a cada elemento individual del array mediante un número entero denominado índice. 0 es el índice del primer elemento y n-1 es el índice del último elemento, siendo n, la dimensión del array. Los arrays son objetos en Java y como tales vamos a ver los pasos que hemos de seguir para usarlos convenientemente Declarar el array Crear el array Inicializar los elementos del array Usar el array Declarar y crear un array Para declarar un array se escribe tipo_de_dato[] nombre_del_array; Para declarar un array de enteros escribimos int[] numeros; Para crear un array de 4 número enteros escribimos numeros=new int[4]; La declaración y la creación del array se puede hacer en una misma línea. int[] numeros =new int[4];
Inicializar y usar los elementos del array Para inicializar el array de 4 enteros escribimos numeros[0]=2; numeros[1]=-4; numeros[2]=15; numeros[3]=-25; Se pueden inicializar en un bucle for como resultado de alguna operación for(int i=0; i<4; i++){ numeros[i]=i*i+4; } No necesitamos recordar el número de elementos del array, su miembro dato length nos proporciona la dimensión del array. Escribimos de forma equivalente for(int i=0; i<numeros.length; i++){ numeros[i]=i*i+4; } Los arrays se pueden declarar, crear e inicializar en una misma línea, del siguiente modo
int[] numeros={2, -4, 15, -25}; String[] nombres={"Juan", "José", "Miguel", "Antonio"}; Para imprimir a los elementos de array nombres se escribe for(int i=0; i<nombres.length; i++){ System.out.println(nombres[i]);
} Java verifica que el índice no sea mayor o igual que la dimensión del array, lo que facilita mucho el trabajo al programador.
Para crear un array de tres objetos de la clase Rectangulo se escribe
Declarar Rectangulo[] rectangulos; Crear el array rectangulos=new Rectangulo[3]; Inicializar los elementos del array rectangulos[0]=new Rectangulo(10, 20, 30, 40); rectangulos[1]=new Rectangulo(30, 40); rectangulos[2]=new Rectangulo(50, 80); O bien, en una sola línea Rectangulo[] rectangulos={new Rectangulo(10, 20, 30, 40), newRectangulo(30, 40), new Rectangulo(50, 80)}; Usar el array Para calcular y mostrar el área de los rectángulos escribimos for(int i=0; i<rectangulos.length; i++){ System.out.println(rectangulos[i].calcularArea()); }
Arrays multidimensionales Una matriz bidimensional puede tener varias filas, y en cada fila no tiene por qué haber el mismo número de elementos o columnas. Por ejemplo, podemos declarar e inicializar la siguiente matriz bidimensional double[][] matriz={{1,2,3,4},{5,6},{7,8,9,10,11,12},{13}}; La primer fila tiene cuatro elementos {1,2,3,4} La segunda fila tiene dos elementos {5,6} La tercera fila tiene seis elementos {7,8,9,10,11,12} La cuarta fila tiene un elemento {13} Para mostrar los elementos de este array bidimensional escribimos el siguiente código for (int i=0; i <matriz.length; i++) { for (int j=0; j <matriz[i].length; j++) { System.out.print(matriz[i][j]+"\t"); } System.out.println(""); } Como podemos apreciar, matriz.length nos proporciona el número de filas (cuatro), y matriz[i].length, nos proporciona el número de elementos en cada fila. Mostramos los elementos de una fila separados por un tabulador usando la función print. Una vez completada una fila se pasa a la siguiente mediante println. Los arrays bidimensionales nos permiten guardar los elementos de una matriz. Queremos crear y mostrar una matriz cuadrada unidad de dimensión 4. Recordaremos que una matriz
unidad es aquella cuyos elementos son ceros excepto los de la diagonal principal i==j, que son unos. Mediante un doble bucle for recorremos los elementos de la matriz especificando su fila i y su columna j. En el siguiente programa Se crea una matriz cuadrada de dimensión cuatro Se inicializa los elementos de la matriz (matriz unidad) Se muestra la matriz una fila debajo de la otra separando los elementos de una fila por tabuladores. ENUNCIADO 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. ANÁLISIS 1. Primero necesitamos inicializar las variables que vamos a utilizar en la realización del programa. 2. Luego realizamos la función borde en la cual necesitamos dos lazos for, los cuales vayan horizontal y vertical. 3. A continuación realizamos el ingreso, la cual nos permite ingresar una cadena de caracteres con el nombre y el apellido. 4. Luego imprimimos resultado de cadena de caracteres como es el nombre y apellido. 5. Ponemos un lazo do-while que me permita generar varias veces el programa, utilizando la pregunta Desea Continuar presione 1 o 0 para terminar. DESARROLLO #include<stdio.h>
Librerías principales
#include<conio.h> intlimite,i,fila,op; charnombre[15];
Declaración de variables globales. Define la dimensión de la cadena de caracteres
void main() { do { clrscr();
Blanqueo la pantalla
fila=8; for(i=1;i<=80;i++) { gotoxy(i,1);printf("*"); La opción do se cierra con el while para generar la opción desea continuar si o no
gotoxy(i,24);printf("*");
Inicio de un lazo For este lazo controla el margen o borde de pantalla de forma vertical.
} for(i=1;i<=24;i++) { gotoxy(1,i);printf("*"); gotoxy(80,i);printf("*");
Inicio de un lazo For este lazo controla el margen o borde de pantalla de forma horizontal.
} gotoxy(20,2);printf("* **MANEJO DE CADENAS*** "); gotoxy(7,3);printf(" ingrese una cadena : "); flushall();
Imprimo mensajes en pantalla
Función para que se genere la cadena
gets(nombre);
Caracteres del nombre
limite=strlen(nombre); Limite del nombre for(i=0;i<limite;i++) { gotoxy(21,fila);printf("%c",nombre[i]); fila=fila+1; }
En este lazo for va del limite 1 imprimimos la cadena de caracteres, y sumamos la fila de 1 en 1
fila=7; for(i=limite;i>=0;i--) { gotoxy(25,fila);printf("%c",nombre[i]); fila=fila+1;
En este lazo for que va del limite 0 imprimimos la cadena de caracteres, y sumamos la fila de 1 en 1
Abrimos con {y cerramos } para generar el programa principal voidmain
} gotoxy(25,20);printf("Continuar 1o Finalizar 0= => ");scanf("%d",&op); } while(op==1); getch();
Hacemos la pausa para e cierre del programa
}
CORRIDO DEL PROGRAMA
ENUNCIADO Diseñe un programa que me permita leer una cadena de caracteres y encontrar todas aquellas que sean
consonantes
y pasarlas a un nuevo vector en forma
ordenada. ANÁLISIS 1. Primero necesitamos inicializar las variables que vamos a utilizar en la realización del programa. 2. Luego realizamos la función borde en la cual necesitamos dos lazos for, los cuales vayan horizontal y vertical.
3. A continuación realizamos el ingreso, la cual nos permite ingresar una cadena de caracteres con el nombre y el apellido. 4. Luego imprimimos resultado de cadena de caracteres como es el nombre y apellido. 5. Ponemos un lazo do-while que me permita generar varias veces el programa, utilizando la pregunta Desea Continuar presione 1 o 0 para terminar.
DESARROLLO #include<stdio.h> #include<conio.h>
Librerías principales
#include<string.h> intcadena,i,fil,col,contador,aux,h,j,op;
Declaración de variables globales. Define la dimensión de la cadena de caracteres
char vector1[20],vector2[20]; void main() { do { clrscr(); fil=8; j=0;
Blanqueo la pantalla Inicializamos las variables
for(i=1;i<=80;i++) { gotoxy(i,1);printf("*"); gotoxy(i,24);printf("*");
Inicio de un lazo For este lazo controla el margen o borde de pantalla de forma vertical.
} for(i=1;i<=24;i++) { gotoxy(1,i);printf("*"); gotoxy(80,i);printf("*");
Inicio de un lazo For este lazo controla el margen o borde de pantalla de forma horizontal
} Imprimo mensajes en pantalla
gotoxy(20,2),printf("***CONTAR LAS CONSONANTES***"); gotoxy(20,5),printf("Ingrese una cadena : "); flushall(); La opción do se cierra con el while para generar la opción desea continuar si o no
Función para que se genere la cadena
gets(vector1);
Caracteres del nombre
cadena=strlen(vector1);
Definir la cadena
for(i=0;i<cadena;i++) { if(vector1[i]!='a'&&vector1[i]!='e'&&vector1[i]!='i'&&vector1[i]!='o'&&vector1[i]!='u') { Inicio de un lazo For dentro de este lazo le genero in if el cual hace vector2[j]=vector1[i]; varias preguntas si esto se cumple dice que el vectr2 es igual al j=j+1; vector 1 y se suma las filas y si no se cumple se cierra el lazo if y for } } fil=8; for(i=0;i<j;i++) { gotoxy(19,fil);printf("%c", vector2[i]); fil=fil+1;
Inicio de un lazo For para imprimir el vector 2 y sumar las fila de 1 en 1
} for(i=0;i<j;i++) { for(h=0;h<j;h++) { if(vector2[i]<vector2[h]) { aux=vector2[i]; vector2[i]=vector2[h]; vector2[h]=aux; } } fil=8;
Inicio de un lazo Forgeneramos un if para decir si os dos vectores son iguales y le guardamos en una variable auxiliar
Inicio de un lazo For para imprimir el vector 2 y sumar las fila de 1 en 1
Abrimos con {y cerramos} para generar el programa principal voidmain
for(i=0;i<j;i++) { Inicio de un lazo For imprimimos el gotoxy(24,fil);printf("%c", vector2[i]); vector de la posición 2 y sumamos fil=fil+1; las filas de 1 en 1 } gotoxy(25,20);printf(" Continuar 1 o Finalizar 0= => " );scanf("%d",&op); } while(op==1); getch(); Hacemos la pausa para e cierre del programa } CORRIDO DEL PROGRAMA
EJERCICIO 3
1. Ponemos un lazo do-while que me permita generar varias veces el programa, utilizando la pregunta Desea Continuar presione 1 o 0 para terminar.
DESARROLLO #include<conio.h> #include<stdio.h>
Librerías principales
#include<math.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;
Declaración de variables globales.
void borde() { for(i=1;i<=80;i++) { gotoxy(i,1);printf("*"); gotoxy(i,24);printf("*");
Inicio de un lazo For este lazo controla el margen o borde de pantalla de forma vertical. Abrimos con {y cerramos} para generar la función borde
} for(i=1;i<=24;i++) { gotoxy(1,i);printf("*"); gotoxy(80,i);printf("*");
Inicio de un lazo For este lazo controla el margen o borde de pantalla de forma horizontal.
} } voidingreso(intlimi) { col=10; En estos procesos decimos que columna inicia en 10, la fila fila=10; inicia en 10,la variable a inicia en 1, la variable b inicia en 0 a=1;b=0; p=limi%2; La variable p es igual al valor del límite y saca el porcentaje if(p==0) { for(i=1;i<=limi;i++) { for(j=1;j<=limi;j++) En este lazo for En este lazo for { imprimimos e imprimimos 0 y gotoxy(col,fila);printf("0"); incrementamos fila aumentamos las col=col+5; de 2 en 2 y decimos columnas de 5 en 5 } que las columnas son igual a 10
Abrimos con {y cerramos} para generar la función borde
fila=fila+2; col=10; } } else Dentro de la condición if generamos una opción del falso y { decimos que la variable p sea igual al límite dividido para 2, p=limi/2; luego sumamos la variable. p=p+1; for(i=1;i<=limi;i++) { for(j=1;j<=limi;j++) Dentro de este lazo { for de la posición j if(p==i && p==j) hacemos una Dentro de este pregunta, si es { lazo for de la verdadero posición i se gotoxy(col,fila);printf(" "); imprimimos un genera otro lazo espacio en blanco y si } for y una es falso, imprimimos else pregunta, luego en la posición col, fila { un o e sumamos la fila incrementamos las en 2 y decimos gotoxy(col,fila);printf("0"); columnas en 5 que la fila es } igual a 10 col=col+5; } fila=fila+2; col=10;
} } col=10; En estos procesos decimos que columna inicia en fila=10; 10 y a la fila inicia en 10, la variable f inicia en 1, la f=1; variable d es el valor del límite y la variable l es d=limi; igual a 11 y la variable p es igual al límite con el l=1; porcentaje 2 p=limi%2; if (p==0) { for(i=1;i<=limi;i++) { for(j=1;j<=limi;j++) { if(i==j) { Abrimos un if para c=a+b; generar la serie de a=b; fibonacci y en la posición col, fila b=c; imprimimos la matriz[i][j]=c; matriz de posición i,j.
la
Abrimos con {y cerramos} para generar la función ingreso
gotoxy(col,fila);printf("%d",matriz[i][j]); } Cerramos el lazo for if(d==j) del ingreso de la { matriz a la cual le asignamos la variable f=f*l; f a la misma que le matriz[i][j]=f; multiplicamos por 1 e gotoxy(col,fila);printf("%d",matriz[i][j]); imprimimos la matriz y sumamos las l=l+1; variable l y d d=d-1; } col=col+5; Sumamos las columnas de 5 en 5 } fila=fila+2; Sumamos las filas de 2 en 2 y decimos que las columnas valen 10 col=10; } else { Si la condición es falsa decimos que p es igual al p=limi / 2; límite dividido para 2 y decimos que p es igual a p p=p+1; más 1 } } voidimprime(intlimi) { En estos procesos decimos que columna inicia en 47 y a col=47; la fila inicia en 10, la variable d es el valor del límite y la fila=10; variable p es igual al límite con el porcentaje 2 d=limi; p=limi%2; if (p==0) { for(i=1;i<=limi;i++) { for(j=1;j<=limi;j++) { Dentro de este lazo for if(i==j) de la posición j hacen la { pregunta e imprimimos gotoxy(col,fila);printf("%d",matriz[i][j]); la matriz i, j y cierro el if } if(d==j) { Dentro de este lazo for gotoxy(col,fila);printf("%d",matriz[i][j]); de la posición j hacen la pregunta e imprimimos d=d-1; la matriz i, j y cierro el if
} col=col+5; Sumamos las columnas de 5 en 5 } fila=fila+2; Sumamos las filas de 2 en 2 y decimos que las columnas valen 47 col=47; } } En estos procesos decimos que columna inicia en 47 y a la fila else { inicia en 10, la variable p es el valor del límite dividido para 2 y p=limi/2; la variable p le suma de 1 a 1 p=p+1; for(i=1;i<=limi;i++) { Dentro de for(j=1;j<=limi;j++) Dentro este lazo de este { lazo for for de la if(i==j) de la posición j { posición i hacen la hacemos if(p==i ) pregunta e los { imprimimo procesos gotoxy(col-2,fila);printf("%d",matriz[i][j]); s la matriz anteriore s y } i, j caso cerramos else contrario el lazo { imprimo la for matriz de la gotoxy(col,fila);printf("%d",matriz[i][j]); posición i, j } cierro el if } if(d==j) { Dentro del if if (p==i) se abre otro if { en el cual se gotoxy(col+2,fila);printf("%d",matriz[i][j]); imprime la } matriz i, j caso contrario se else imprime la { matriz i, j gotoxy(col,fila);printf("%d",matriz[i][j]); luego a d } restamos 1 d=d-1; } col=col+5; Sumamos las columnas de 5 en 5 } fila=fila+2; Sumamos las filas de 2 en 2 y decimos que las columnas valen 47
Abrimos con {y cerramos} para generar la función imprime
La opción do se cierra con el while para generar la opción desea continuar si o no
col=47; } } } for(j=1;j<=limi;j++) { Generamos un lazo for dentro de if(d==j) este lazo generamos un if en el cual { decimos que el vector es igual a la vector[y]=matriz[i][j]; matriz e incrementamos y y=y+1; decrementamos las variables, d=d-1; sumamos la variable dsmas 1 ds=ds+1; } } } void main() { do { Blanqueo la pantalla clrscr(); Llamamos a la función del borde borde(); gotoxy(25,2);printf("MANEJO DE MATRICES CON LAS DIAGONALES"); Imprimo mensajes en pantalla gotoxy(5,5);printf("INGRESE EL LIMITE==> ");scanf("%d",&limite); gotoxy(12,9);printf("M. INGRESO"); Abrimos con {y gotoxy(47,9);printf("M. DIAGONALES"); cerramos} para ingreso(limite); Llamamos a la función del ingreso generar el imprime(limite); Llamamos a la función del imprime programa gotoxy(20,22);printf("<<PRESIONE 1 PARA CONTINUAR o 0 PARA TERMINAR>> principal ");scanf("%d",&op); } while(op==1); getch(); Hacemos la pausa para e cierre del programa } CORRIDO DEL PROGRAMA
EJERCICIO 2
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; Declaración de variables voidborde() globales { 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++) { gotoxy(1,i);printf("*"); gotoxy(80,i);printf("*"); } } void primo(intlimi) { 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); } } } voidimprime(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> intmatriz[10][10],limite,i,j,col,fila,k,l,aux,op; Declaración de variables globales voidborde () { 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 ("*"); } } voidingreso (intlimi) { col = 10; fila = 10; for (i=1;i<=limi;i++) { for (j=1;j<=limi;j++) { Proceso do para { controlar Función para el gotoxy (col,fila); printf(" "); los ingreso de gotoxy (col,fila); scanf("%d",&matriz[i][j]); números datos } que estén while (matriz[i][j]<3 || matriz[i][j]>36); entre 3 y col = col + 8; 36 } fila = fila +2; Incremento de las filas col=10; Y reasigno las } columnas }
voidorden(intlimi) { 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 } } } } for (i=1;i<=limi;i++) { for (j=1;j<=limi;j++) { Proceso para gotoxy (col,fila); printf("%d", matriz[i][j]); imprimir la col = col + 5; matriz } ordenada fila = fila +2; col=45; } } void main() { do Borrado de pantalla { clrscr(); Llamar a la función borde borde(); gotoxy(30,2);printf("ORDENACION DE MATIZ"); gotoxy(32,4);printf("MAURICIO CAGUANA");
Ingreso el limite para la matriz
gotoxy(5,6);printf("INGRESE EL LIMITE===> ");scanf("%d",&limite); 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; voidborde() { 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("*"); } } voidingreso(intlimi) { 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++) {
Declaración de variables globales
for(j=1;j<=limi;j++) { gotoxy(col,fila);printf("0"); col=col+5; } fila=fila+2; col=10; } }
Procesos para encerar la matriz si el limite es par
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]); Proceso para calcular el l=l+1; factorial para la diagonal d=d-1; principal } col=col+5; } 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]); } else { gotoxy(col,fila);printf("%d",matriz[i][j]); }
Pregunta para ver si estamos en la mitad de la matriz
}
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]); } else { gotoxy(col,fila);printf("%d",matriz[i][j]); } l=l+1; d=d-1; } col=col+5; } fila=fila+2; col=10; } } } voidimprime(intlimi) { col=47; fila=10; d=limi; p=limi%2;
Pregunta para ver si estamos en la mitad de la matriz
if (p==0) { for(i=1;i<=limi;i++) { 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)
Función para imprimir las diagonales
{ 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> intmatriz[10][10],mat[10][10],i,j,nc,nf,op,col,fila;
Declaración de variables globales
voidborde() { for(i=1;i<=80;i++) { gotoxy(i,1);printf("*"); gotoxy(i,24);printf("*"); }
Función para realizar el borde
for(i=1;i<=24;i++) { gotoxy(1,i);printf("*"); gotoxy(80,i);printf("*"); } } voidingreso(intncol, intnfila) { col=10; fila=10; for(i=1;i<=nfila;i++) { for(j=1;j<=ncol;j++) { gotoxy(col,fila);scanf("%d",&matriz[i][j]); col=col+5; } fila=fila+2; col=10; } } void trans(intncol, intnfila) { col=50;
Función para ingresar los datos en la matriz
fila=10; for(i=1;i<=nfila;i++) { for(j=1;j<=ncol;j++) {
Reasigno los datos de la matriz a una nueva matriz pro con los índices cambiados
mat[j][i]=matriz[i][j]; } } Primero va el índice de la columna y después va el índice de las filas
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:
ENUNCIADO Diseñe un programa que me permita leer una cadena de caracteres y encontrar todas aquellas que sean consonantes y pasarlas a un nuevo vector en forma ordenada. ANÁLISIS 1. Primero necesitamos inicializar las variables que vamos a utilizar en la realización del programa.
2. Luego realizamos la función borde en la cual necesitamos dos lazos for, los cuales vayan horizontal y vertical. 3. A continuación realizamos el ingreso, la cual nos permite ingresar una cadena de caracteres con el nombre y el apellido. 4. Luego imprimimos resultado de cadena de caracteres como es el nombre y apellido. 5. Ponemos un lazo do-while que me permita generar varias veces el programa, utilizando la pregunta Desea Continuar presione 1 o 0 para terminar.
DESARROLLO #include<stdio.h> #include<conio.h>
Librerías principales
#include<string.h> intcadena,i,fil,col,contador,aux,h,j,op; char vector1[20],vector2[20];
Declaración de variables globales. Define la dimensión de la cadena de caracteres
void main() { do { clrscr(); fil=8; j=0;
La opción do se cierra con el while para generar la opción desea continuar si o no
Blanqueo la pantalla Inicializamos las variables
for(i=1;i<=80;i++) { Inicio de un lazo For este lazo gotoxy(i,1);printf("*"); controla el margen o borde de gotoxy(i,24);printf("*"); } pantalla de forma vertical. for(i=1;i<=24;i++) { gotoxy(1,i);printf("*"); gotoxy(80,i);printf("*"); } Inicio de un lazo For este lazo Imprimo mensajes gotoxy(20,2),printf("***CONTAR LAS controla el CONSONANTES***"); margen o borde de en pantalla gotoxy(20,5),printf("Ingrese una cadena : "); horizontal pantalla de forma Función para que se genere la cadena flushall(); gets(vector1); Caracteres del nombre cadena=strlen(vector1); Definir la cadena for(i=0;i<cadena;i++) { if(vector1[i]!='a'&&vector1[i]!='e'&&vector1[i]!='i'&&vector1[i]!='o'&&vector1[i]!='u')
{ Inicio de un lazo For dentro de este lazo le genero in if el cual hace vector2[j]=vector1[i]; varias preguntas si esto se cumple dice que el vectr2 es igual al j=j+1; vector 1 y se suma las filas y si no se cumple se cierra el lazo if y for } } fil=8; for(i=0;i<j;i++) { gotoxy(19,fil);printf("%c", vector2[i]); Inicio de un lazo For para imprimir el fil=fil+1; vector 2 y sumar las fila de 1 en 1 } for(i=0;i<j;i++) { for(h=0;h<j;h++) { if(vector2[i]<vector2[h]) Inicio de un lazo Inicio de un lazo For { Forgeneramos un if para para imprimir el aux=vector2[i]; decir si os dos vectores son vector 2 y sumar las vector2[i]=vector2[h]; iguales y le guardamos en fila de 1 en 1 vector2[h]=aux; una variable auxiliar } } fil=8; for(i=0;i<j;i++) { Inicio de un lazo For imprimimos el gotoxy(24,fil);printf("%c", vector2[i]); vector de la posición 2 y sumamos fil=fil+1; las filas de 1 en 1 } gotoxy(25,20);printf(" Continuar 1 o Finalizar 0= => " );scanf("%d",&op); } while(op==1); getch(); Hacemos la pausa para e cierre del programa }
Abrimos con {y cerramos} para generar el programa principal voidmain
CORRIDO DEL PROGRAMA
EJE