Creacion Matriz nxn Automatica

Iniciado por miguelc++, 21 Noviembre 2021, 22:36 PM

0 Miembros y 2 Visitantes están viendo este tema.

miguelc++

Hola, necesito ayuda para poder entender que es lo que estoy haciendo mal.

Tengo que hacer que mi programa imprima automaticamente una matriz nxn de la dimension que el usuario introduzca. No obstante, no logro que me de mas de un numero por fila.

Adjunto código:
//proyecto
#include <stdio.h>

int main(){

int i, j, filas;

printf("Ingrese diemension de matriz: ");
scanf("%i",&filas);

for(i = 1;i <= filas;i++)
{

printf("%02d ", i);

printf("\n");
}


return 0;
}



Se supone debo lograr que me imprima algo como esto:



Estoy muy seguro que en lo que estoy fallando son los for.

BloodSharp

#1
Cita de: miguelc++ en 21 Noviembre 2021, 22:36 PMEstoy muy seguro que en lo que estoy fallando son los for.

El código está casi completo, solamente te falta un for por columnas y una condición que verifique si está en la diagonal invertida...
Como medida adicional para evitar que la matriz no sea cuadrada podrías meter un do while extra al principio.

EDIT: Acabé de probarlo tu código con las recomendaciones de arriba y funciona correctamente



B#



miguelc++

#2
Hola, logré arreglar lo de las columnas y ya me da las matrices de la dimensión que quiera.

¿Cómo implemento lo de la diagonal para que me de asteriscos(**)?  



//proyecto
#include <stdio.h>

int main(){

int i, j, filas;

printf("Ingrese dimension de matriz: ");
scanf("%i",&filas);

for(i=1;i<=filas;i++)
{
   for(j=1;j<=filas;j++)

   
printf("%02d ", j);

printf("\n");
}


return 0;
}





BloodSharp

#3
Cita de: miguelc++ en 22 Noviembre 2021, 17:17 PMHola, logré arreglar lo de las columnas y ya me da las matrices de la dimensión que quiera. ¿Cómo implemento lo de la diagonal para que me de asteriscos(**)?

Bien, añadiste el for que te mencioné para las columnas ahora solo falta la condición ( if else ) que verifica si el elemento de la matriz pertenece a la diagonal principal, prestá mucha atención a la tabla de 5x5 que mostraste hace un momento, si te fijás bien hay una operación matemática elemental que se cumple si encaja justo en la posición de la tabla por filas y columnas y dicha operación equivale a la dimensión total de las filas o columnas ingresadas al principio, vale aclarar que a la operación matemática se le tiene que restar 1 porque el primer elemento de la matriz comienzan con el valor 01...


B#



miguelc++

Lo he intentado se todas las formas que se me ocurre, pero todavía no consigo entender bien.

MAFUS

Sabiendo que los asteriscos van se colocan en (hablamos de una matriz de 5x5):
Fila 1, columna 5;
Fila 2, columna 4;
Fila 3, columna 3;
Fila 4, columna 2;
Fila 5, columna 1.

¿Qué podrían tener en común los pares
(5, 1)
(4, 2)
(3, 3)
(2, 4)
(1, 5)?

Esa respuesta es la que necesita el if para dibujar el número o los asteriscos.

fzp

#6
MAFUS y BloodSharp: creo que vuestras indicaciones van en el sentido de relacionar -calcular- la posicion de los asteriscos (para el if de la j) a partir de n y de i; con una fórmula ciertamente sencilla. Pero quizá eso despiste un poco a miguelc++.

Otra forma de verlo (quizá más asequible a miguelc++) sería no buscar la posición de los astericos en función del valor de n y de i, sino con una variable distinta: esa variable empieza en n para i=1 y disminuye en 1 en cada fila (cada ciclo de i). Es menos elegante quizá pero vale igual.
----------------------------------------------------------------------
También creo que la forma de representar la matriz no es adecuada al concepto matemático de los elementos de una matriz. Lo suyo sería imprimir las parejas i-j que representarían los subíndices de los distintos elementos de la matriz. Aunque claro si lo que le piden es que lo haga de esa manera, pues es lo que hay. Supongo que el ejercicio está pensado para lo de los asteriscos mayormente.

miguelc++

Siento que no puedo lograr lo que se me pidió. Mi cabeza no logra comprender sus explicaciones para la implementación de esos asteriscos. Igualmente agradezco por el tiempo que se tomaron en responder mis dudas.

Como pudieron notar no soy muy avanzado en programación, pero se hace lo que se puede .  Intentaré buscar ejercicios mas básicos  y acordes a mi nivel para entonces ir subiendo el nivel progresivamente.

MAFUS

Te lo explico para el ejemplo de 5x5.
Dije:
Citar¿Qué podrían tener en común los pares
(5, 1)
(4, 2)
(3, 3)
(2, 4)
(1, 5)?

Si te das cuenta:
5+1 = 6
4+2 = 6
3+3 = 6
2+4 = 6
1+5 = 6

Sabiendo que tu vas desde 1 hasta 5, siendo este caso filas = 5
en tu if, dentro del for de j debería poner:

if(i+j == filas+1) {
    printf("** ");
} else {
    printf("%02d ", j);
}

BloodSharp

#9
Ya que MAFUS puso su solución muestro mi solución al problema, mi solución también controla que la dimensión ingresada sea una matriz cuadrada como puede verse en la imagen:



#include <stdio.h>

int main()
{
   int i, j, filas, columnas;

   do
   {
       printf("Ingrese la dimension de matriz: ");
       scanf("%i*%i", &filas, &columnas);
   } while (filas != columnas);

   for(i = 1; i <= filas; i++)
   {
       for(j = 1; j <= columnas; j++)
       {
           if ((i + j -1) == columnas)
               printf("** ");
           else
               printf("%02d ", j);
       }

       printf("\n");
   }

   return 0;
}



B#