Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: smdiegoarmando en 4 Febrero 2013, 03:24 am



Título: Ayuda S.O.S Programacion en C Arreglos!!
Publicado por: smdiegoarmando en 4 Febrero 2013, 03:24 am
Muy buenas noches Foro ahora es que estoy empezando en el entorno C y necesito que me ayuden con el siguiente programa:

Programa en C que determine si una matriz, cuyos datos son ingresados por el usuario es o no cuadrado magico dado lo siguiente:

 8    1   6      =15
 3    5   7      =15
 4    9   2      =15
 =   =   =
15  15  15

Por lo tanto la matriz es cuadrado magico!!
________________________________________________________

Necesito ayuda este tema de arreglo se me hace muy complicado :(


Título: Re: Ayuda S.O.S Programacion en C Arreglos!!
Publicado por: naderST en 4 Febrero 2013, 03:33 am
Qué problema tienes?


Título: Re: Ayuda S.O.S Programacion en C Arreglos!!
Publicado por: smdiegoarmando en 4 Febrero 2013, 03:35 am
Sinceramente no se como desenvolver el programa


Título: Re: Ayuda S.O.S Programacion en C Arreglos!!
Publicado por: BlackZeroX en 4 Febrero 2013, 03:44 am
Sinceramente no se como desenvolver el programa

¿No sabes resolverlo manualmente? madre es una suma y tal cual lo harías manual se hace en C solo que con "coordenadas"...

Mira Esto (https://www.google.com.mx/search?q=matriz+en+C&oq=matriz+en+C&aqs=chrome.0.57j5j0l2j62l2.2882&sourceid=chrome&ie=UTF-8)

Dulces Lunas!¡.


Título: Re: Ayuda S.O.S Programacion en C Arreglos!!
Publicado por: smdiegoarmando en 4 Febrero 2013, 03:54 am
¿No sabes resolverlo manualmente? madre es una suma y tal cual lo harías manual se hace en C solo que con "coordenadas"...

Mira Esto (https://www.google.com.mx/search?q=matriz+en+C&oq=matriz+en+C&aqs=chrome.0.57j5j0l2j62l2.2882&sourceid=chrome&ie=UTF-8)

Dulces Lunas!¡.

Cierto pero no se que metodologia usar en el entorno C


Título: Re: Ayuda S.O.S Programacion en C Arreglos!!
Publicado por: naderST en 4 Febrero 2013, 04:03 am
Básicamente debes pedir al usuario las dimensiones de la matriz, recorrer dicha matriz pidiéndole al usuario el valor de cada elemento, sumar los elementos de cada fila y columna respectivamente y luego validar que todas las sumas sean iguales (puedes utilizar arreglos para almacenar la suma, tanto de las filas como de las columnas).

EDIT:

Además creo que debes validar la suma de la diagonal principal y que la matriz sea cuadrada.


Título: Re: Ayuda S.O.S Programacion en C Arreglos!!
Publicado por: TopoJunior en 4 Febrero 2013, 20:28 pm
Bueno, llevo casi una hora haciendo esto, que no sabía como hacerlo.. Es una matriz de 2 filas, y 2 columnas obvio... Lo siento por no hacerla de más columnas... Pero era ya un codigo de la hostia, si me permitís la expresión xD. Es para que te hagas una idea... Yo no sabía ni lo que eran las matrices, tengo 12 años. Las busqué en internet y bueno me puse a " programarlo " Me han dicho, que es mucho más fácil con vectores, asique, mirate la estructura, entiendela y hazlo con vectores:D
Citar
#include <stdio.h>  /* Como saber si una matriz es perfecta */
main()
{
      int filas;
      int columnas;
      int eleccion1;
      int primernumero, segundonumero;
      int primernumero1, segundonumero1;
      int primernumero2, segundonumero2;
       int primernumero3, segundonumero3;
      printf("Inserta el numero de filas.\n");
      scanf("%d", &filas);
      printf("Inserta el numero de columnas.\n");
      scanf("%d", &columnas);
      if(filas == columnas)
      {
               printf("Vamos bien...\n");
      }
      else
      {
          printf("Para que sea perfecta, tiene que tener los mismos numeros de filas y columnas\n");
          }
          printf("Escribe 2 porque es de dos filas y dos columnas.\n");
          scanf("%d", &eleccion1);
      switch(eleccion1)
      {
             case 2:  printf("Introduce, seguidos, los numeros de la primera fila.\n");
             scanf("%d %d", &primernumero, &segundonumero);
             printf("Introduce, seguidos los numeros de la segunda fila\n");
             scanf("%d %d", &primernumero1, &segundonumero1);
             printf("Introduce, seguidos los numeros de la primera columna.\n");
             scanf("%d %d", &primernumero2 , &segundonumero2);
               printf("Introduce, seguidos los numeros de la segunda columna.\n");
               scanf("%d %d", &primernumero3, &segundonumero3);
             if(primernumero + segundonumero == primernumero1 + segundonumero1)
             {
             if(primernumero2 + segundonumero2 == primernumero3 + segundonumero3)
             {
               printf("Es una matriz magica\n");               
             }
             }
             else
             {
                 printf("No es una matriz magica.");
             }
                  break;
      }
      while(1);
}


Título: Re: Ayuda S.O.S Programacion en C Arreglos!!
Publicado por: amchacon en 4 Febrero 2013, 20:55 pm
Un detalle:

Código
  1.  if(primernumero + segundonumero == primernumero1 + segundonumero1)
  2.  {
  3.             if(primernumero2 + segundonumero2 == primernumero3 + segundonumero3)
Tienes que ponerlo entre parentesis las sumas para que te coja el valor entero. Además puedes concatenar 2 ifs con un &&:

Código
  1.  if((primernumero + segundonumero) == (primernumero1 + (segundonumero1) && (primernumero2 + segundonumero2) == (primernumero3 + segundonumero3))

Y en cuanto al código, es muy bonito el intento (se nota que entiendes algunos conceptos) pero te faltan algunos otros... Yo que tu me miraría estos videotutoriales:
http://minidosis.org/C++/

Las mejoras que se le podrían meter al código son varias, como hacerlo más general y usar matrices y vectores. Esta es mi versión:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. // Averiguar si una matriz es magica
  5.  
  6. int ComprobarMagica(int** Matriz,unsigned int Tamanyo);
  7.  
  8. int main()
  9. {
  10.    unsigned int Tamanyo; // He puesto unsigned porque no vamos a usar valores negativos
  11.    printf("Inserte el tamanyo de la matriz: ");
  12.    scanf("%d",&Tamanyo);
  13.  
  14.    int Matriz[Tamanyo][Tamanyo]; // Creamos una matriz con el tamanyo que nos han dado
  15.  
  16.    for (unsigned int j = 0; j < Tamanyo;j++)
  17.        for (unsigned int i = 0; i < Tamanyo;i++)
  18.        {
  19.            printf("\n Inserte un valor para la posicion (%d,%d)",i,j);
  20.            scanf("%d",Matriz[i][j]);
  21.        }
  22.  
  23.    if (ComprobarMagica(Matriz,Tamanyo) == 1)
  24.        printf("La matriz es magica \n");
  25.    else
  26.        printf("La matriz no es magica :( \n");
  27.  
  28.    getchar();
  29.    return 0;
  30. }
  31.  
  32. int ComprobarMagica(int** Matriz,unsigned int Tamanyo)
  33. {
  34.    int aux[Tamanyo*2]= {0};
  35.  
  36.    // Filas
  37.  
  38.    for (unsigned int j = 0; j < Tamanyo;j++)
  39.    {
  40.        for (unsigned int i = 0; i < Tamanyo;i++)
  41.            aux[j] += Matriz[i][j];
  42.  
  43.        if (aux[j] != aux[j-1])
  44.                return 0;
  45.    }
  46.  
  47.    // Columnas
  48.  
  49.    for (unsigned int j = 0; j < Tamanyo;j++)
  50.    {
  51.        for (unsigned int i = 0; i < Tamanyo;i++)
  52.            aux[j+Tamanyo] += Matriz[j][i];
  53.  
  54.        if (aux[j+Tamanyo] != aux[j+Tamanyo-1])
  55.                return 0;
  56.    }
  57.    return 1;
  58. }

No la he probado, asi que puede que tenga algun error (además lo mío es C++ no C  :silbar:)





Título: Re: Ayuda S.O.S Programacion en C Arreglos!!
Publicado por: TopoJunior en 4 Febrero 2013, 21:18 pm
Bueno, yo hago eso a medida de lo que yo se, como se poco, muy poquito lo he intentado hacer así, y me ha salido :D Gracias por preocuparte también en mirarlo y eso! Y bueno, el caso es que yo empezé por C y cuando sepa de C más, seguiré con C++!


Título: Re: Ayuda S.O.S Programacion en C Arreglos!!
Publicado por: durasno en 4 Febrero 2013, 21:53 pm
Citar
No la he probado, asi que puede que tenga algun error
Si, en la funcion ComprobarMagica la declaracion de Matriz debe ser:

Código
  1. int ComprobarMagica(int Matriz[FILA][COLUMNA],unsigned int Tamanyo); // donde FILA y COLUMNAS son dos constantes
tambien se puede omitir las filas:
Código
  1. int ComprobarMagica(int Matriz[][COLUMNA],unsigned int Tamanyo);



Saludos