Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: diegox474 en 12 Mayo 2020, 18:48 pm



Título: Colgado jaja
Publicado por: diegox474 en 12 Mayo 2020, 18:48 pm
necesito  hacer un algoritmo que pueda leer una matriz sacar todos los componentes de la diagonal cambiarlos por 1 y guardarlos en otro vector.

hasta ahora lo que tengo es que imprime los valores de la diagonal, el problema es que no se como cambiar los valores por 1 y guardarlos en el otro arreglo

#include <stdio.h>
#include <stdlib.h>
void diagonal(int matriz[100][100]);// se declara 100 para darle el tamaño suficiente al usuario de poner la amtriz por las dimensiones que necesite
int main()
{
    int filas, columnas ,i,j;
    int matriz[100][100]={0};

    printf("INGRESE EL NUMERO DE FILAS PARA SU MATRIZ CUADRADA:");
    scanf("%d",&filas);
    printf("INGRESE EL NUMERO DE COLUMNAS PARA SU MATRIZ CUADRADA:");
    scanf("%d",&columnas);
    for(i=0;i<filas;i++)
    {
        for(j=0;j<columnas;j++) // se llena la matriz
        {
            printf("INGRESE VALORES DE LA MATRIZ[%d , %d]: ",i,j);
            scanf("%d",&matriz[j]);
        }
    }
     for(i=0;i<filas;i++)
    {
        for(j=0;j<columnas;j++)
        {
            printf("%d",matriz[j]); // se imprim la matriz
        }
        printf("\n");
    }
    diagonal(matriz); // invoco la funcion
   

    return 0;
}


void diagonal(int matriz[100][100]) // esta es la funcion en donde encuentro la diagonal
{
    int i,filas,columnas;
    printf("EL VALOR DE LA DIAGONAL ES\n");
    for(i=0;i<columnas;i++)        // se pueden colocar filas o columnas ya que se tomara la misma .. mirar abajo en el printf.
    {
        printf("%d ",matriz);
    }
    printf("\n");
}


Título: Re: Colgado jaja, necesito completar este codigo
Publicado por: diegox474 en 12 Mayo 2020, 18:49 pm
necesito  hacer un algoritmo que pueda leer una matriz sacar todos los componentes de la diagonal cambiarlos por 1 y guardarlos en otro vector.

hasta ahora lo que tengo es que imprime los valores de la diagonal, el problema es que no se como cambiar los valores por 1 y guardarlos en el otro arreglo

#include <stdio.h>
#include <stdlib.h>
void diagonal(int matriz[100][100]);// se declara 100 para darle el tamaño suficiente al usuario de poner la amtriz por las dimensiones que necesite
int main()
{
    int filas, columnas ,i,j;
    int matriz[100][100]={0};

    printf("INGRESE EL NUMERO DE FILAS PARA SU MATRIZ CUADRADA:");
    scanf("%d",&filas);
    printf("INGRESE EL NUMERO DE COLUMNAS PARA SU MATRIZ CUADRADA:");
    scanf("%d",&columnas);
    for(i=0;i<filas;i++)
    {
        for(j=0;j<columnas;j++) // se llena la matriz
        {
            printf("INGRESE VALORES DE LA MATRIZ[%d , %d]: ",i,j);
            scanf("%d",&matriz[j]);
        }
    }
     for(i=0;i<filas;i++)
    {
        for(j=0;j<columnas;j++)
        {
            printf("%d",matriz[j]); // se imprim la matriz
        }
        printf("\n");
    }
    diagonal(matriz); // invoco la funcion
   

    return 0;
}


void diagonal(int matriz[100][100]) // esta es la funcion en donde encuentro la diagonal
{
    int i,filas,columnas;
    printf("EL VALOR DE LA DIAGONAL ES\n");
    for(i=0;i<columnas;i++)        // se pueden colocar filas o columnas ya que se tomara la misma .. mirar abajo en el printf.
    {
        printf("%d ",matriz);
    }
    printf("\n");
}


Título: Re: Colgado jaja
Publicado por: K-YreX en 12 Mayo 2020, 19:23 pm
Para colocar códigos utiiza las etiquetas de Código GeSHi (desplegable encima del cuadro de texto)

Tu propósito es trabajar con matrices cuadradas por lo que parece. Entonces no tiene sentido que pidas filas y columnas ya que podrían ponerte números diferentes y hacer que el programa falle. Es mejor que pidas un único valor que sea el orden de la matriz, es decir, el número de filas y columnas.

Si quieres recorrer la diagonal de una matriz cuadrada verás que las casillas que quieres recorrer son: (0,0), (1,1), (2,2),...; es decir, la i y la j avanzan a la vez o lo que es lo mismo solo utilizas una variable en el bucle:
Código
  1. for(int i = 0; i < orden; ++i){
  2.  matriz[i][i] = 1;
  3. }

Si quieres guardar los valores en otro array, tendrás que crearlo. Y si quieres guardar los valores originales poner la instrucción antes de modificar los valores por 1s y si lo que quieres guardar son los 1s (que no tiene mucho sentido) pues después:
Código
  1. #DEFINE SIZE 100 // Usa constantes para los numeros que aparezcan sueltos. Asi puedes cambiarlos todos de una vez
  2. //...
  3. int main(){
  4.  //...
  5.  int diagonal[SIZE];
  6.  //...
  7.  for(int i = 0; i < orden; ++i){
  8.    diagonal[i] = matriz[i][i];
  9.    matriz[i][i] = 1;
  10.  }
  11.  //...
  12. }

Luego recuerda usar <orden> para recorrer tanto la matriz como el array ya que son las posiciones que has ocupado realmente. El resto de posiciones desde orden hasta SIZE serán basura.