matriz 5*5 no me da error pero no compila

Iniciado por creiko, 25 Mayo 2016, 07:12 AM

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

creiko

Buenas lo que tengo que hacer es una matriz de 5* 5 = 65 por todas su columnas , filas y diagonales

tengo este codigo de 3*3= 15 por todo lado, le cambio a  5 *5 =65 pero no me corre ya lo revise linea por linea y no logro verlo si me pueden ayudar lo agradeceria


Codigo 3 * 3 =15
Código (cpp) [Seleccionar]

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

main()
{
int s1,s2,s3,s4,s5,s6,s7,s8,m[3][3],i,j,a,num1,num2,num3,num4,num5,num6,num7,num8,num9;
srand (time(NULL));
do
{
a=0;
num1=0;
num2=0;
num3=0;
num4=0;
num5=0;
num6=0;
num7=0;
num8=0;
num9=0;
s1=0;
s2=0;
s3=0;
s4=0;
s5=0;
s6=0;
s7=0;
s8=0;
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
do
{
m[i][j]=rand()%9+1;
}
while((m[i][j]==num1) or (m[i][j]==num2) or (m[i][j]==num3) or (m[i][j]==num4) or (m[i][j]==num5) or
(m[i][j]==num6) or (m[i][j]==num7) or (m[i][j]==num8));
num1=m[0][0];
num2=m[0][1];
num3=m[0][2];
num4=m[1][0];
num5=m[1][1];
num6=m[1][2];
num7=m[2][0];
num8=m[2][1];
num9=m[2][2];
}
}
s1=num1+num2+num3;
s2=num4+num5+num6;
s3=num7+num8+num9;
s4=num1+num4+num7;
s5=num2+num5+num8;
s6=num3+num6+num9;
s7=num1+num5+num9;
s8=num2+num5+num7;
//printf("%d ",m[i][j]);
}
while((s1!=15) or (s2!=15) or (s3!=15) or (s4!=15) or (s5!=15) or (num5!=5));
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d ",m[i][j]);
}
printf("\n");
}
getch();
}




Ahora dejo el codigo 5 *5 =65
ayuda en el error por favor urgente
Código (cpp) [Seleccionar]

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

main()
{
int s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,m[5][5],i,j,a,num1,num2,num3,num4,num5,num6,num7,num8,num9;
int num10,num11,num12,num13,num14,num15,num16,num17,num18,num19,num20,num21,num22,num23,num24,num25;
srand (time(NULL));
do
{
a=0;
num1=0;
num2=0;
num3=0;
num4=0;
num5=0;
num6=0;
num7=0;
num8=0;
num9=0;
num10=0;
num11=0;
num12=0;
num13=0;
num14=0;
num15=0;
num16=0;
num17=0;
num18=0;
num19=0;
num20=0;
num21=0;
num22=0;
num23=0;
num24=0;
num25=0;

s1=0;
s2=0;
s3=0;
s4=0;
s5=0;
s6=0;
s7=0;
s8=0;
s9=0;
s10=0;
s11=0;
s12=0;
for(i=0;i<=4;i++)
{
for(j=0;j<=4;j++)
{
do
{
m[i][j]=rand()%25+1;
}
while((m[i][j]==num1) or (m[i][j]==num2) or (m[i][j]==num3) or (m[i][j]==num4) or (m[i][j]==num5) or
(m[i][j]==num6) or (m[i][j]==num7) or (m[i][j]==num8) or (m[i][j]==num9) or (m[i][j]==num10) or
(m[i][j]==num11) or (m[i][j]==num12) or (m[i][j]==num13) or (m[i][j]==num14) or (m[i][j]==num15) or
(m[i][j]==num16) or (m[i][j]==num17) or (m[i][j]==num18) or (m[i][j]==num19) or (m[i][j]==num20) or
(m[i][j]==num21) or (m[i][j]==num22) or (m[i][j]==num23) or (m[i][j]==num24));
num1=m[0][0];
num2=m[0][1];
num3=m[0][2];
num4=m[0][3];
num5=m[0][4];
num6=m[1][0];
num7=m[1][1];
num8=m[1][2];
num9=m[1][3];
num10=m[1][4];
num11=m[2][0];
num12=m[2][1];
num13=m[2][2];
num14=m[2][3];
num15=m[2][4];
num16=m[3][0];
num17=m[3][1];
num18=m[3][2];
num19=m[3][3];
num20=m[3][4];
num21=m[4][0];
num22=m[4][1];
num23=m[4][2];
num24=m[4][3];
num25=m[4][4];
}
}
s1=num1+num2+num3+num4+num5;
s2=num6+num7+num8+num9+num10;
s3=num11+num13+num13+num14+num15;
s4=num16+num17+num18+num19+num20;
s5=num21+num22+num23+num24+num25;

s6=num1+num6+num11+num16+num21;
s7=num2+num7+num13+num17+num22;
s8=num3+num8+num13+num18+num23;
s9=num4+num9+num14+num19+num24;
s10=num5+num10+num15+num20+num25;

s11=num1+num7+num13+num18+num25;
s12=num2+num21+num17+num13+num9;
//printf("%d ",m[i][j]);
}
while((s1!=65) or (s2!=65) or (s3!=65) or (s4!=65) or (s5!=65) or (s6!=65) or (s7!=65) or (s8!=65) or (s9!=65) or (num13!=13));
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("%d ",m[i][j]);
}
printf("\n");
}
getch();
}

Gracias por la atencion

JavierScars

A simple vista en la parte del for esta el error (creo) estas utilizando componentes del array que no están definidos si te dar cuenta estas con el for cambiándole el valor 25 veces a cada componente del array... El for sólo debería englobar al do while para darle valores al array... Luego si lo deberías poder usar.

Lo otro que te recomiendo es meter esos números en un array y usar más for, así quedaría más legible el código.

Saludos
Usa lo malo de la vida a tu favor, escala montañas de problemas para deslizarte sobre soluciones, derrumba muros de decepciones para encontrar la libertar de la felicidad,  y quema la leña del fracaso para calentarte con el éxito. Recuerda que sin la oscuridad la luz no brillaría tanto.

creiko

podrias ayudarme en esa parte te lo agradeceria

LaiaxanIV

Que tiene que hacer el código exactamente?
A ver si te podemos ayudar a rellenar esa matriz que no parece que se llene correctamente.

creiko

bueno

la matriz va 5*5
con números desde el 1 a 25  sin repetirse que debe dar como resultado 65 en sus columnas , filas y diagonales.

como en el ejemplo del 3*3 que va dese 1 a 9 ( el numero 5 se mantiene en el centro, los demás números al rededor se rotan sin repetirse y dan como resultado 15) corre el programa que dejo ahí arriba y lo veras.



lo que quiero en ves quede 15 debe dar 65
5*5 va desde 1 a 25 ( el numero 13 se debe mantener en el centro, los demas numeros al rededor cambian de posicion sin repetirse y deben dar como resultado 65)


hice los mismo que en e 3*3
cambie a 5*5 y ice tal cual esta en el código anterior no me arroja ningun error pero no me compila

BloodSharp

El código no lo entendí para nada lo que se suponga que haga... pero a simple vista se ven el mismo error en varios while... Reemplaza todos los or por ||


B#



tincopasan

este es un ejercicio muy viejo de resolución de matrices, nunca lo hubiese hecho como el tuyo y me da fiaca leer todo el código pero aporto uno recontraconocido:


#include <stdio.h>
    #include <stdlib.h>
    #define CUANTOS 5
    int main(int argc, char *argv[])
    {
        int Matriz[CUANTOS][CUANTOS];
        int contador=0;
        int x=0;
        int y=0;
        int vx=0;
        int vy=0;
        int limite=CUANTOS*CUANTOS;
        int limitex = CUANTOS - 1;
        int limitey = CUANTOS - 1;
        for( x=0 ; x<CUANTOS ; x++)
        {
           for( y=0 ; y<CUANTOS ; y++ )
             {
                  Matriz[x][y] = 0;
            }
        }
        x = CUANTOS / 2;
        y = 0;
        for(contador=1;contador<=limite;contador++)
        {
            Matriz[y][x] = contador;
            vx = x;
            vy = y;
            x++;
            if( x > limitex ) x = 0;
            y--;
            if( y < 0 ) y = limitey;
            if (Matriz[y][x]>0)
            {
                x = vx ;
                y = vy +1 ;
            }
        }
        printf("\n Matriz 5x5 \n");
        for( x=0 ; x<CUANTOS ; x++)
        {
             for( y=0 ; y<CUANTOS ; y++ )
             {
                  printf("|%5d|",Matriz[x][y]);
             }
             printf("\n");
        }
        system("PAUSE");
      return 0;
    }



supongo que es eso lo que buscas.

creiko

ese codigo lo tengo pero no me sirve
revisa el primer codigo 3*3
y veras las formas que quiero
pero en 5*5 amigo

MAFUS

Generar un cuadrado mágico de 5x5 llenándolo de números aleatorios puede llevarte mucho tiempo... mucho.
De todas formas tienes unos cuántos fallos en el cálculo de las sx y de los numx
Tu dices

s3=num11+num13+num13+num14+num15;

sumas dos veces el num13 y debe ser

s3=num11+num12+num13+num14+num15;

En s9, s11 y s12 vuelves a tener sendos errores.

Después la condición while del primer do termina con m[j]==num24) cuándo tienes 25 números.
La condición while del último do solo miras la condición hasta s9, te quedan demás condiciones hasta s12.

De todas formas, una fuerza bruta para resolver el cuadrado puede llevar muchísimo tiempo.

HardForo

#9
Puede llevar mucho tiempo, excepto se use metaprogramación  :xD

Aqui puedes ver como se hace exactamente este mismo programa mediante un generador de código en C++
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *