Ayuda S.O.S Programacion en C Arreglos!!

Iniciado por smdiegoarmando, 4 Febrero 2013, 03:24 AM

0 Miembros y 1 Visitante están viendo este tema.

smdiegoarmando

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 :(

naderST


smdiegoarmando

Sinceramente no se como desenvolver el programa

BlackZeroX

Cita de: smdiegoarmando en  4 Febrero 2013, 03:35 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

Dulces Lunas!¡.
The Dark Shadow is my passion.

smdiegoarmando

Cita de: BlackZeroX (Astaroth) en  4 Febrero 2013, 03:44 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

Dulces Lunas!¡.

Cierto pero no se que metodologia usar en el entorno C

naderST

#5
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.

TopoJunior

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);
}

amchacon

#7
Un detalle:

Código (cpp) [Seleccionar]
 if(primernumero + segundonumero == primernumero1 + segundonumero1)
 {
            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 (cpp) [Seleccionar]
 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:

#include <stdio.h>
#include <stdlib.h>

// Averiguar si una matriz es magica

int ComprobarMagica(int** Matriz,unsigned int Tamanyo);

int main()
{
   unsigned int Tamanyo; // He puesto unsigned porque no vamos a usar valores negativos
   printf("Inserte el tamanyo de la matriz: ");
   scanf("%d",&Tamanyo);

   int Matriz[Tamanyo][Tamanyo]; // Creamos una matriz con el tamanyo que nos han dado

   for (unsigned int j = 0; j < Tamanyo;j++)
       for (unsigned int i = 0; i < Tamanyo;i++)
       {
           printf("\n Inserte un valor para la posicion (%d,%d)",i,j);
           scanf("%d",Matriz[i][j]);
       }

   if (ComprobarMagica(Matriz,Tamanyo) == 1)
       printf("La matriz es magica \n");
   else
       printf("La matriz no es magica :( \n");

   getchar();
   return 0;
}

int ComprobarMagica(int** Matriz,unsigned int Tamanyo)
{
   int aux[Tamanyo*2]= {0};

   // Filas

   for (unsigned int j = 0; j < Tamanyo;j++)
   {
       for (unsigned int i = 0; i < Tamanyo;i++)
           aux[j] += Matriz[i][j];

       if (aux[j] != aux[j-1])
               return 0;
   }

   // Columnas

   for (unsigned int j = 0; j < Tamanyo;j++)
   {
       for (unsigned int i = 0; i < Tamanyo;i++)
           aux[j+Tamanyo] += Matriz[j][i];

       if (aux[j+Tamanyo] != aux[j+Tamanyo-1])
               return 0;
   }
   return 1;
}


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



Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

TopoJunior

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++!

durasno

CitarNo la he probado, asi que puede que tenga algun error
Si, en la funcion ComprobarMagica la declaracion de Matriz debe ser:

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



Saludos
Ahorrate una pregunta, lee el man