Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Mac en 15 de Septiembre 2013, 04:07
-
Quisiera como saber guardar una matriz en un vector de n*n posiciones ....Les agradecería de antemano su ayuda comunidad !
-
Hola, aquí hay una explicación sobre uso de matrices o arrays multidimensionales en Java: http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=233:arrays-arreglos-multidimensionales-en-java-declaracion-y-uso-ejemplos-y-ejercicios-resueltos-cu00904c&catid=58:curso-lenguaje-programacion-java-nivel-avanzado-i&Itemid=180
Aunque no sé si se corresponde con lo que quieres hacer ¿qué es exactamente lo que quieres hacer?
-
Bueno yo ya e mirado todo eso amigo gracias por tu ayuda !! te agradezco Mucho .... La situación es la siguiente ! .... colocare el código que e realizado necesitando solucionar la opción 8 del menú Que es Guardar en un Vector... A qui esta el código que e realizado.
------------------------------------------------------------------------------
public class Menu_matriz {
public static void main(String[] args){
String menu="MENU DE MATRICES \n";
int i,j;
int n=Integer.parseInt(JOptionPane.showInputDialog(" Cuantas filas ? "));
int a[][]=new int [n][n];
int b[][]=new int [n][n];
int c[][]=new int [n][n];
int vector []= new int[n*n];
llenar_matrices(a,b,n);
int op=0;
menu+="1. Suma de matrices\n";
menu+="2. Transpuesta de matriz\n";
menu+="3. Intercambiar filas\n";
menu+="8. Guardar en Vector\n";
menu+="12. Imprimir Matriz por consola\n";
menu+="13. Imprimir Matriz por ventanas\n";
menu+="20. Fin\n";
menu+="Escoja Opción:\n";
while (op!=20){
op=Integer.parseInt(JOptionPane.showInputDialog(menu));
switch (op){
case 1:
sumar(a,b,c,n);
break;
case 2:
transpuesta(a,c,n);
break;
case 3:
intercambia_filas(a,c,n);
break;
case 8:
Guardar_Vector(a,b,n);
break;
case 12:
imprimir (a,n);
break;
case 13:
imprime_ventana(a,n,"Matriz A-------GARROTE");
break;
case 20:
break;
}
}
}// cierre del public static void main Ojo !!!! //------------------
static void sumar(int a1[][], int b1[][],int c1[][], int n1){
for (int i=0;i<n1;i++){
for (int j=0;j<n1;j++){
c1[j] = a1[j] + b1[j];
}
}
imprime_ventana(a1,n1,"Matriz A");
imprime_ventana(b1,n1,"Matriz B");
imprime_ventana(c1,n1,"Matriz A+B");
}
static void transpuesta(int a[][],int c[][], int n){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
c[j]=a[j];
}
}
imprime_ventana(a,n,"Matriz A");
imprime_ventana(c,n,"Matriz Transpuesta");
}
static void intercambia_filas(int a[][],int c[][],int n){
int i,j,t;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
c[j]=a[j];
}
}
int f1=Integer.parseInt(JOptionPane.showInputDialog("Digite primera fila a intercambiar"));
int f2=Integer.parseInt(JOptionPane.showInputDialog("Digite segunda fila a intercambiar"));
for(j=0;j<n;j++){
t=c[f1][j];
c[f1][j]=c[f2][j];
c[f2][j]=t;
}
imprime_ventana(a,n,"Matriz A");
imprime_ventana(c,n,"Matriz de filas intercambiadas");
}
static void Guardar_Vector(int a[][],int b[][], int n){
}
static void llenar_matrices(int a1[][], int b1[][],int n1){
for (int i=0;i<n1;i++){
for (int j=0;j<n1;j++){
a1[j]=(int)(Math.random()*10);
b1[j]=(int)(Math.random()*10);
}
}
}
static void imprimir(int m[][], int n1){
for (int i=0;i<n1;i++){
for (int j=0;j<n1;j++){
System.out.print(m[j]+"\t");
}
System.out.println(" ");
}
}
static void imprime_ventana (int a[][],int n,String mensaje){
String salida="";
for (int i=0;i<n;i++){
for(int j=0;j<n;j++){
salida=salida+ a[j]+"\t";
}
salida=salida+"\n";
}
JTextArea area= new JTextArea();
area.setText(salida);
JOptionPane.showMessageDialog(null,area,mensaje,JOptionPane.PLAIN_MESSAGE);
}
}/// cierre class
-
Hola, te comento algunas cuestiones: por un lado, cuando vayas a poner código debes usar el botón con el símbolo # que te aparece en el editor del foro, e introducir el código entre los símbolos [ code] ... [/ code] que te aparecerán, sino el código puede aparecer incompleto o incorrectamente.
En segundo lugar, no repitas el mismo mensaje en varios hilos del foro porque confunde al parecer que es otro problema o cuestión distinta, y se agradece no confundir.
Sobre el código en sí, voy a poner aquí lo que creo es el código que tú pegaste añadiendo las cosas que no quedaron bien por no usar el botón #
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
public class Menu_matriz {
public static void main(String[] args){
String menu="MENU DE MATRICES \n";
int i,j;
int n=Integer.parseInt(JOptionPane.showInputDialog(" Cuantas filas ? "));
int a[][]=new int [n][n];
int b[][]=new int [n][n];
int c[][]=new int [n][n];
int vector []= new int[n*n];
llenar_matrices(a,b,n);
int op=0;
menu+="1. Suma de matrices\n";
menu+="2. Transpuesta de matriz\n";
menu+="3. Intercambiar filas\n";
menu+="8. Guardar en Vector\n";
menu+="12. Imprimir Matriz por consola\n";
menu+="13. Imprimir Matriz por ventanas\n";
menu+="20. Fin\n";
menu+="Escoja Opción:\n";
while (op!=20){
op=Integer.parseInt(JOptionPane.showInputDialog(menu));
switch (op){
case 1:
sumar(a,b,c,n);
break;
case 2:
transpuesta(a,c,n);
break;
case 3:
intercambia_filas(a,c,n);
break;
case 8:
Guardar_Vector(a,b,n);
break;
case 12:
imprimir (a,n);
break;
case 13:
imprime_ventana(a,n,"Matriz A-------GARROTE");
break;
case 20:
break;
}
}
}// cierre del public static void main Ojo !!!! //------------------
static void sumar(int a1[][], int b1[][],int c1[][], int n1){
for (int i=0;i<n1;i++){
for (int j=0;j<n1;j++){
c1[i][j] = a1[i][j] + b1[i][j];
}
}
imprime_ventana(a1,n1,"Matriz A");
imprime_ventana(b1,n1,"Matriz B");
imprime_ventana(c1,n1,"Matriz A+B");
}
static void transpuesta(int a[][],int c[][], int n){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
c[i][j]=a[j][i];
}
}
imprime_ventana(a,n,"Matriz A");
imprime_ventana(c,n,"Matriz Transpuesta");
}
static void intercambia_filas(int a[][],int c[][],int n){
int i,j,t;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
c[i][j]=a[i][j];
}
}
int f1=Integer.parseInt(JOptionPane.showInputDialog("Digite primera fila a intercambiar"));
int f2=Integer.parseInt(JOptionPane.showInputDialog("Digite segunda fila a intercambiar"));
for(j=0;j<n;j++){
t=c[f1][j];
c[f1][j]=c[f2][j];
c[f2][j]=t;
}
imprime_ventana(a,n,"Matriz A");
imprime_ventana(c,n,"Matriz de filas intercambiadas");
}
static void Guardar_Vector(int a[][],int b[][], int n){
}
static void llenar_matrices(int a1[][], int b1[][],int n1){
for (int i=0;i<n1;i++){
for (int j=0;j<n1;j++){
a1[i][j]=(int)(Math.random()*10);
b1[i][j]=(int)(Math.random()*10);
System.out.println("Control apr " + a1[i][j] + " - " + b1[i][j]);
}
}
}
static void imprimir(int m[][], int n1){
for (int i=0;i<n1;i++){
for (int j=0;j<n1;j++){
System.out.print(m[i][j]+"\t");
}
System.out.println(" ");
}
}
static void imprime_ventana (int a[][],int n,String mensaje){
String salida="";
for (int i=0;i<n;i++){
for(int j=0;j<n;j++){
salida=salida+ a[i][j]+"\t";
}
salida=salida+"\n";
}
JTextArea area= new JTextArea();
area.setText(salida);
JOptionPane.showMessageDialog(null,area,mensaje,JOptionPane.PLAIN_MESSAGE);
}
}/// cierre class
-
si el cogido esta bien cesar ... Mil y Mil Disculpas es que soy nuevo y tengo un poco de desespero es que no e podido encontrar la solución del menú 8 .. que pena de verdad pido nuevamente disculpa me gustaría que me ayudaras en este problema de como guardar en un vector la matriz ! Muchas gracias de ante mano !! ;)
-
Estoy mirándolo, en cuanto tenga algo te respondo. Saludos!
-
Gracias Cesar Muchísimas Gracias ..
-
Aquí te pongo el código que podría ser una solución, aunque no sé exactamente si es así como lo quieres.
Yo esto suponiendo que si tienes una matriz como:
[ 9 8 7
2 6 5
9 9 2 ]
Lo que quieres es generar un vector con los elementos de la matriz extrayendo fila a fila, de forma que el vector quedaría así:
[9 , 8 , 7 , 2 , 6 , 5 , 9 , 9 , 2 ]
Código ampliado:
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
public class Menu_matriz {
public static void main(String[] args){
String menu="MENU DE MATRICES \n";
int i,j;
int n=Integer.parseInt(JOptionPane.showInputDialog(" Cuantas filas ? "));
int a[][]=new int [n][n];
int b[][]=new int [n][n];
int c[][]=new int [n][n];
int vector []= new int[n*n];
llenar_matrices(a,b,n);
int op=0;
menu+="1. Suma de matrices\n";
menu+="2. Transpuesta de matriz\n";
menu+="3. Intercambiar filas\n";
menu+="8. Guardar en Vector\n";
menu+="12. Imprimir Matriz por consola\n";
menu+="13. Imprimir Matriz por ventanas\n";
menu+="20. Fin\n";
menu+="Escoja Opción:\n";
while (op!=20){
op=Integer.parseInt(JOptionPane.showInputDialog(menu));
switch (op){
case 1:
sumar(a,b,c,n);
break;
case 2:
transpuesta(a,c,n);
break;
case 3:
intercambia_filas(a,c,n);
break;
case 8:
Guardar_Vector(a, vector, n);
break;
case 12:
imprimir (a,n);
break;
case 13:
imprime_ventana(a,n,"Matriz A-------GARROTE");
break;
case 20:
break;
}
}
}// cierre del public static void main Ojo !!!! //------------------
static void sumar(int a1[][], int b1[][],int c1[][], int n1){
for (int i=0;i<n1;i++){
for (int j=0;j<n1;j++){
c1[i][j] = a1[i][j] + b1[i][j];
}
}
imprime_ventana(a1,n1,"Matriz A");
imprime_ventana(b1,n1,"Matriz B");
imprime_ventana(c1,n1,"Matriz A+B");
}
static void transpuesta(int a[][],int c[][], int n){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
c[i][j]=a[j][i];
}
}
imprime_ventana(a,n,"Matriz A");
imprime_ventana(c,n,"Matriz Transpuesta");
}
static void intercambia_filas(int a[][],int c[][],int n){
int i,j,t;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
c[i][j]=a[i][j];
}
}
int f1=Integer.parseInt(JOptionPane.showInputDialog("Digite primera fila a intercambiar"));
int f2=Integer.parseInt(JOptionPane.showInputDialog("Digite segunda fila a intercambiar"));
for(j=0;j<n;j++){
t=c[f1][j];
c[f1][j]=c[f2][j];
c[f2][j]=t;
}
imprime_ventana(a,n,"Matriz A");
imprime_ventana(c,n,"Matriz de filas intercambiadas");
}
static void Guardar_Vector(int a[][], int vector[], int n){
int i,j;
int contador = 0;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
vector[contador]=a[i][j];
contador = contador+1;
}
}
imprime_ventana(a,n,"Matriz A");
imprime_ventana_vector(vector,n,"Vector generado");
}
static void llenar_matrices(int a1[][], int b1[][],int n1){
for (int i=0;i<n1;i++){
for (int j=0;j<n1;j++){
a1[i][j]=(int)(Math.random()*10);
b1[i][j]=(int)(Math.random()*10);
//System.out.println("Control apr " + a1[i][j] + " - " + b1[i][j]);
}
}
}
static void imprimir(int m[][], int n1){
for (int i=0;i<n1;i++){
for (int j=0;j<n1;j++){
System.out.print(m[i][j]+"\t");
}
System.out.println(" ");
}
}
static void imprime_ventana (int a[][],int n,String mensaje){
String salida="";
for (int i=0;i<n;i++){
for(int j=0;j<n;j++){
salida=salida+ a[i][j]+"\t";
}
salida=salida+"\n";
}
JTextArea area= new JTextArea();
area.setText(salida);
JOptionPane.showMessageDialog(null,area,mensaje,JOptionPane.PLAIN_MESSAGE);
}
static void imprime_ventana_vector (int a[],int n,String mensaje){
String salida="[";
for (int i=0;i<n*n;i++){
salida=salida+ a[i]+" ";
if (i != n*n-1) {salida=salida+", ";} else {salida=salida+"] ";}
}
JTextArea area= new JTextArea();
area.setText(salida);
JOptionPane.showMessageDialog(null,area,mensaje,JOptionPane.PLAIN_MESSAGE);
}
}/// cierre class
Esto es lo que hace el código que te he puesto. He tenido que crear un método para imprimir el vector, revísalo a ver si te sirve. Saludos y suerte.
-
Hola cesar Muchísimas Gracias .. por entenderme lo que se tenia propuesto hacer Muchísimas Gracias... Si fila a fila , también, si fuese en el caso de columnas se tendría que colocar la matriz b[][] en el Static Guardar_Vector? (me corriges si no es a si lo que digo cesar)... ahora quisiera que me explicaras por que tuviste que haces un Static para imprimir el vector, mi pregunta es por que no se pudo colocar el imprimir_vector en el Static de Guardar_Vector ..
Gracias Cesar Me has sido de mucha ayuda muchísima Espero que podamos seguir en contacto ! !! De ante mano un saludo ! :D
-
La matriz b[][] es una matriz auxiliar respecto a la matriz a[][]. Si quisieras hacerlo por columnas tendrías que seguir usando la matriz a[][] (al menos así lo entiendo yo), únicamente tendrías que definir otro método que trabajara por columnas.
El poner el imprimir_vector por separado fue para guardar la misma lógica que traía el código: en el código por un lado se trabaja la obtención del resultado y por otro lado están los métodos para imprimir, lo único que hice fue seguir esa lógica, pero si quieres meter el código de imprimir dentro del método guardar_vector podrías hacerlo.
Saludos!
-
ahora entiendo ! Cesar estoy tratando de colocar el imprime del Vector pero me saca un error en la variable vector ! como haría para pasarlo ?
-
Si te refieres a colocar la impresión dentro del método guardar_vector puedes hacerlo así, aunque no sé si es a esto a lo que te refieres:
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
public class Menu_matriz {
public static void main(String[] args){
String menu="MENU DE MATRICES \n";
int i,j;
int n=Integer.parseInt(JOptionPane.showInputDialog(" Cuantas filas ? "));
int a[][]=new int [n][n];
int b[][]=new int [n][n];
int c[][]=new int [n][n];
int vector []= new int[n*n];
llenar_matrices(a,b,n);
int op=0;
menu+="1. Suma de matrices\n";
menu+="2. Transpuesta de matriz\n";
menu+="3. Intercambiar filas\n";
menu+="8. Guardar en Vector\n";
menu+="12. Imprimir Matriz por consola\n";
menu+="13. Imprimir Matriz por ventanas\n";
menu+="20. Fin\n";
menu+="Escoja Opción:\n";
while (op!=20){
op=Integer.parseInt(JOptionPane.showInputDialog(menu));
switch (op){
case 1:
sumar(a,b,c,n);
break;
case 2:
transpuesta(a,c,n);
break;
case 3:
intercambia_filas(a,c,n);
break;
case 8:
Guardar_Vector(a, vector, n);
break;
case 12:
imprimir (a,n);
break;
case 13:
imprime_ventana(a,n,"Matriz A-------GARROTE");
break;
case 20:
break;
}
}
}// cierre del public static void main Ojo !!!! //------------------
static void sumar(int a1[][], int b1[][],int c1[][], int n1){
for (int i=0;i<n1;i++){
for (int j=0;j<n1;j++){
c1[i][j] = a1[i][j] + b1[i][j];
}
}
imprime_ventana(a1,n1,"Matriz A");
imprime_ventana(b1,n1,"Matriz B");
imprime_ventana(c1,n1,"Matriz A+B");
}
static void transpuesta(int a[][],int c[][], int n){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
c[i][j]=a[j][i];
}
}
imprime_ventana(a,n,"Matriz A");
imprime_ventana(c,n,"Matriz Transpuesta");
}
static void intercambia_filas(int a[][],int c[][],int n){
int i,j,t;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
c[i][j]=a[i][j];
}
}
int f1=Integer.parseInt(JOptionPane.showInputDialog("Digite primera fila a intercambiar"));
int f2=Integer.parseInt(JOptionPane.showInputDialog("Digite segunda fila a intercambiar"));
for(j=0;j<n;j++){
t=c[f1][j];
c[f1][j]=c[f2][j];
c[f2][j]=t;
}
imprime_ventana(a,n,"Matriz A");
imprime_ventana(c,n,"Matriz de filas intercambiadas");
}
static void Guardar_Vector(int a[][], int vector[], int n){
int i,j;
int contador = 0;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
vector[contador]=a[i][j];
contador = contador+1;
}
}
imprime_ventana(a,n,"Matriz A");
String salida="[";
for (int k=0;k<n*n;k++){
salida=salida+ vector[k]+" ";
if (k != n*n-1) {salida=salida+", ";} else {salida=salida+"] ";}
}
JTextArea area= new JTextArea();
area.setText(salida);
JOptionPane.showMessageDialog(null,area,"Mostrando vector",JOptionPane.PLAIN_MESSAGE);
}
static void llenar_matrices(int a1[][], int b1[][],int n1){
for (int i=0;i<n1;i++){
for (int j=0;j<n1;j++){
a1[i][j]=(int)(Math.random()*10);
b1[i][j]=(int)(Math.random()*10);
//System.out.println("Control apr " + a1[i][j] + " - " + b1[i][j]);
}
}
}
static void imprimir(int m[][], int n1){
for (int i=0;i<n1;i++){
for (int j=0;j<n1;j++){
System.out.print(m[i][j]+"\t");
}
System.out.println(" ");
}
}
static void imprime_ventana (int a[][],int n,String mensaje){
String salida="";
for (int i=0;i<n;i++){
for(int j=0;j<n;j++){
salida=salida+ a[i][j]+"\t";
}
salida=salida+"\n";
}
JTextArea area= new JTextArea();
area.setText(salida);
JOptionPane.showMessageDialog(null,area,mensaje,JOptionPane.PLAIN_MESSAGE);
}
}/// cierre class
-
Si Cesar a si es que quiero ! que imprima dentro del static Guardar_Vector Muchas gracias por su gran ayuda !! Quisieras que me dieras unos consejo para ser un buen programador como tu :D
Otra pregunta quiero hacerte y es que quiero que me expliques si es ¿Necesario? o por que colocaste los condicionales if y el else, y si hay otra forma de hacerlo que no sea con condicionales .....Gracias Un Abrazo !
imprime_ventana(a,n,"Matriz A");
String salida="[";
for (int k=0;k<n*n;k++){
salida=salida+ vector[k]+" ";
if (k != n*n-1) {salida=salida+", ";} else {salida=salida+"] ";}
}
JTextArea area= new JTextArea();
area.setText(salida);
JOptionPane.showMessageDialog(null,area,"Mostrando vector",JOptionPane.PLAIN_MESSAGE);
}
-
Hola! Sobre el condicional if (k != n*n-1) {salida=salida+", ";} else {salida=salida+"] ";} lo puse para que en cada pasada por el bucle se escriba un número y una coma, excepto en la última que es lo que detecta el condicional, para que en la última se escriba un número y el cierre de corchetes.
Gracias al condicional sale por ejemplo [22,11,4,2] en vez de [22,11,4,2
Si quieres poner un símbolo de comienzo y cierre como [ y ] necesitas saber cuál es el último número a imprimir y esta es la forma que se me ocurrió, si se te ocurre otra también puedes usarla.
Sobre cómo llegar a ser un buen programador te copio lo que se ha escrito en otro hilo que en general me parece correcto, hay varios hilos donde se ha hablado de este tema:
"Llegar a ser un buen programador depende de la persona, su capacidad innata para la programación, el esfuerzo y estudio que aplique para el aprendizaje y además, de forma importante, en que ese esfuerzo y estudio esté bien organizado y estructurado.
Me explico: una persona puede dedicar 5 horas al día a estudiar y practicar delante del ordenador y si lo hace sin seguir un orden y organización adecuados, al cabo de un año no haber aprendido prácticamente nada. En cambio, si esa misma persona sigue un orden y pautas adecuadas, al cabo de un año puede estar a nivel profesional en alguna tecnología.
¿A qué me refiero con buena organización, estructuración, orden, etc.?
Me refiero a que para adquirir conocimientos de programación existen miles de fuentes de información: libros, páginas web, revistas, etc. Es importante elegir buenas fuentes: buenos libros, buenas páginas web, etc.
También me refiero a que a la hora de estudiar y practicar hay que marcarse un orden y unos objetivos. Por ejemplo, si quieres convertirte en programador web un buen itinerario empezaría con un curso de Fundamentos de Programación o quizás con HTML. Si comienzas tu formación con un curso de Dreamweaver ó un curso de CSS posiblemente pierdas el tiempo. No tiene sentido estudiar CSS sin antes tener fundamentos de HTML... al menos esa es mi opinión.
Tampoco a todo el mundo se le da la programación. Es como dibujar, hay gente que tiene facilidad y gente a la que le cuesta mucho. Si me cuesta mucho lo lógico es que no sea pintor, sino que me dedique a algo que me suponga menos esfuerzo.
Si tienes una capacidad innata y te formas siguiendo una organización y orden adecuados, lograrás comprensión sobre la lógica que hay debajo de los sistemas informáticos y esto te permitirá resolver mayor cantidad de problemas. Nadie lo sabe todo, pero hay algunas personas que con conocimiento y práctica son capaces de resolver cosas que la mayoría de la gente no sabría resolver. Y te lo digo después de haber trabajado junto a un buen número de programadores, cada uno de ellos distinto."