[ Foro de C ]

Problema de dev c++: figura en arreglo bidimensional

16-Nov-2013 22:28
Jesús ++
5 Respuestas

Se pide realizar un programa que imprima una figura usando el numero 0, distribuida den un tablero de 5x5, segun los siguientes datos:
-numero de fila y numero de ceros en la fila
-numero de columna y numero de ceros en la columna
Ej:
2,4
3,5
   0
0 0 0 0
   0
   0
   0

1,3
5,5
0 0 0   0
       0
       0
       0
       0

yo lo hice asi, no encuentro mi error


#include<stdio.h>
#include<conio.h>
int main()
{int f,a,i,j,c,b,k,l;
    printf("numero de fila: ");
    scanf("%d",&f);
    printf("cantidad de ceros: ");
    scanf("%d",&a);
    printf("numero de columna: ");
    scanf("%d",&c);
    printf("cantidad de ceros: ");
    scanf("%d",&b);
    
    for (i=1; i<=a; i++)
    {
        for (j=1; j<f;j++)
        {
            printf("\n");
        }
            printf("0\t");
    }
   
    for (k=1; k<=b; k++)
    {
        for (l=1; l<c;l++)
        {
            printf("\t");
        }
            printf("0\n");
    }
    
            getch();
}


alguna sugerencia ?


18-Nov-2013 23:07
Nacho Cabanes (+83)

Es que no entiendo muy bien qué es lo que pretendes hacer... pero me temo que tú tampoco.

Si usas nombres de variables más claros, te ayudará a descubrir qué estás haciendo bien y qué no. Tu fuente, quitando dos variables redundantes, se puede reescribir así:


#include <stdio.h>
int main()
{
    int filaDibujar,cantidadCerosFila,
        filaActual,columnaActual,columnaDibujar,
        cantidadCerosCol;
    
    printf("numero de fila: ");
    scanf("%d",&filaDibujar);
    printf("cantidad de ceros: ");
    scanf("%d",&cantidadCerosFila);
    printf("numero de columna: ");
    scanf("%d",&columnaDibujar);
    printf("cantidad de ceros: ");
    scanf("%d",&cantidadCerosCol);
 
    for (filaActual=1; filaActual<=cantidadCerosFila; filaActual++)
    {
        for (columnaActual=1; columnaActual<filaDibujar;columnaActual++)
        {
            printf("\n");
        }
        printf("0\t");
    }
 
    for (filaActual=1; filaActual<=cantidadCerosCol; filaActual++)
    {
        for (columnaActual=1; columnaActual<columnaDibujar;columnaActual++)
        {
            printf("\t");
        }
        printf("0\n");
    }
    getchar();
}


Verás que estás comparando filas con columnas, y eso no debería ocurrir.

La forma de escribir un cuadrado o un rectángulo debería ser ésta:


#include <stdio.h>
int main()
{
    int numFilas = 5;
    int numColumnas = 5;
    int filaActual;
    int columnaActual;
 
    for (filaActual=1; filaActual<=numFilas; filaActual++)
    {
        for (columnaActual=1; columnaActual<numColumnas;columnaActual++)
        {
            printf(".");
        }
        printf("\n");
    }
    getchar();
}


Es decir, dibujar varias filas, y cada fila está formada por varias columnas. Al final de cada columna se debe avanzar de línea.

Si entiendes esa idea, estás mucho más cerca de la solución que buscas. Por ejemplo, para dibujar ceros a los largo de toda una columna podrías hacer:


#include <stdio.h>
int main()
{
    int numFilas = 5;
    int numColumnas = 5;
    int filaActual;
    int columnaActual;
    int columnaDibujar = 2;
 
    for (filaActual=1; filaActual<=numFilas; filaActual++)
    {
        for (columnaActual=1; columnaActual<numColumnas;columnaActual++)
        {
            if (columnaActual == columnaDibujar)
				printf("0");
            else
				printf(".");
        }
        printf("\n");
    }
    getchar();
}


Ampliando un poco esa idea, puedes hacer que también te marque una cierta fila, y ampliando apenas un poco más puedes hacer que no llene por completo la fila o la columna, sino que dibuje sólo una cierta cantidad de ceros.


25-Nov-2013 01:47
Jesús ++

creo q no me esta entendiendo, lo q quiero es esto y hasta ahora no me sale

http://fotos.subefotos.com/16fc8576012d90d6dec10cd3518579a9o.jpg

el primer caso si me sale, pero un caso mas general no, quisiera q me de una mano


25-Nov-2013 11:23
Nacho Cabanes (+83)

Sí, sé a lo que te refieres. Pero te puse un primer acercarmiento para intentar ayudarte a entender el problema y formas de "atacarlo". Porque la forma razonable de resolverlo por completo es usando un array bidimensional, como dice el título de tu pregunta, pero en tu propuesta de solución no hay ningún array.

Si quieres hacerlo realmente con arrays, el primer paso sería crear un array de 5x5, rellenarlo con espacios y mostrar su contenido en pantalla. Para comprobar que todo va bien, puedes guardar un 0 en la posición [4][4] antes de mostrar todo.

¿Eso sabrías hacerlo?


25-Nov-2013 14:55
Jesús ++

a varios de mis compañeros les salio de esta forma, hasta ahora no he intentando con arrays, quizas me ligue
gracias...


25-Nov-2013 16:39
Nacho Cabanes (+83)

Sin arrays es fácil mostrar una fila o una columna, no tanto hacer las dos cosas a la vez.

Mira las nociones de arrays bidimensionales aquí y pregunta tus dudas:
http://aprendeaprogramar.com/mod/resource/view.php?id=492






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)