crear un programa que haga triangulos y cuadrados con caracteres de relleno

Iniciado por kikian94, 19 Octubre 2012, 16:40 PM

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

kikian94

hola, tengo que hacer esto:
Diseñar y codificar en C un programa que dibuje figuras geométricas en la pantalla (salida estándar) de acuerdo a las siguientes especificaciones:
 El programa inicialmente solicitará por el teclado (entrada estándar) los siguientes datos:
o Número de filas de la figura a dibujar (entre 1 y 15).
o Desplazamiento respecto al comienzo de la pantalla del vértice inferior izquierdo de la figura.
o Carácter que se usará para rellenar la figura.
 Tras pedir los datos anteriores, el programa dibujará la figura solicitada teniendo en cuenta lo siguiente:
o Si el carácter que se usará para rellenar la figura es un dígito numérico, se dibujará un triángulo. Con cualquier otro carácter se dibujará un cuadrado.
o Una vez dibujada una figura, el programa preguntará si dibujar otra o no. Si la respuesta es afirmativa, volverá a empezar un nuevo proceso de dibujo pidiendo nuevos datos. Si la respuesta es negativa, el programa finalizará su ejecución.

el problema es que lo he he hecho pero no hace nada:

#include<stdio.h>
int main(void){


   /*variables*/
   int numero;
   int fila;
   int columna;
   int espacio;
   int blanco;
   char caracter;
   char sino;

   /*entorno*/
   printf("Introduce numero de filas (1-15):");
   scanf("%d",&numero);
   printf("numero de espacios:");
   scanf("%d",&espacio);
   printf("caracter de relleno:");
   scanf("%c",&caracter);
   if((caracter>='0')&&(caracter<='9')){

      for(fila=1;fila<=numero;fila++){
         for(columna=1;columna<=numero-fila+espacio;columna++){

         printf(" ");
      }
      }
      for(columna=1; columna<=2*numero-1; columna++){
         printf("%c",caracter);
      }
      printf("\n");
   }else{
      for(fila=1;fila<=fila;fila++){
         for(blanco=1;blanco<=fila-fila+espacio;blanco++){
            printf(" ");
      }
      }
      for(fila=1;fila<=fila;fila++){
         for(columna=1;columna<=fila;columna++){
         printf("%c",caracter);
      }
         printf("\n");
   }
   }


   printf("otra figura(Ss/Nn):");
   scanf("%c",&sino);

      if(sino ='s'||'S'){
         printf("Introduce numero de filas (1-15):");
         scanf("%d",&fila);
         printf("numero de espacios:");
         scanf("%d",&espacio);
         printf("caracter de relleno:");
         scanf("%c",&caracter);
         if((caracter>='0')&&(caracter<='9')){

               for(fila=1;fila<=numero;fila++){
                  for(columna=1;columna<=numero-fila+espacio;columna++){

                  printf(" ");
               }
               }
               for(columna=1; columna<=2*numero-1; columna++){
                  printf("%c",caracter);
               }
               printf("\n");
            }else{
               for(fila=1;fila<=fila;fila++){
                  for(blanco=1;blanco<=fila-fila+espacio;blanco++){
                     printf(" ");
               }
               }
               for(fila=1;fila<=fila;fila++){
                  for(columna=1;columna<=fila;columna++){
                  printf("%c",caracter);
               }
                  printf("\n");
            }
            }
      }else{

      }

      printf("muchas gracias por utilizar el programa");

   return 0;
}



Antiproton

Buenas, he visto algunos fallos en el programa.

Primero, al dibujar el triangulo, tendria que ir la escritura de " " y de caracter dentro del for de la fila, y al acabar de escribir la fila, hacer el salto de linea.
Tambien, veo que escribes el caracter dependiendo del numero de espacios, pero depende de la fila.
Finalmente, el codigo del triangulo creo que quedaria así:


      for(fila=1;fila<=numero;fila++){
for(columna=1;columna<=numero-fila+espacio;columna++){
printf(" ");
}
for(columna=1; columna<=2*fila-1; columna++){
printf("%c",caracter);
}
printf("\n");
      }


El codigo del cuadrado te lo tendrias que mirar mas:
for(fila=1;fila<=fila;fila++)  no acaba, ya que fila siempre es igual a fila
for(blanco=1;blanco<=fila-fila+espacio;blanco++) fila - fila = 0. Siempre comparas blanco con espacio

Tambien iria bien que vaciaras el buffer de teclado antes y despues de leer los caracteres, ya que normalmente hay problemas con los saltos de linea.

leosansan

Sólo te queda implementar el repetir otra figura:
Código (cpp) [Seleccionar]
#include<stdio.h>
int main(void){
    /*variables*/
    int numero,i,j,k;
    int fila,columna,espacio,blanco;
    char caracter;
    char sino;

   /*entorno*/
    printf("Introduce numero de filas (1-15):");
    scanf("%d",&numero);
    printf("numero de espacios:");
    scanf("%d",&espacio);
    printf("caracter de relleno:");
    fflush (stdin);
    scanf("%c",&caracter);
    if(caracter>='0' && caracter<='9'){

      for (fila=1; fila<=numero; fila++)
            {
                for (blanco=1; blanco<=numero-fila+espacio; blanco++)
                    printf(" ");
                for (columna=1; columna<=2*fila-1; columna++)
                    printf("%c",caracter);
                printf("\n");
            }
   }
      else

        for (i=1;i<=numero;i++)

            {
                for (k=1; k<=espacio; k++)
                    printf(" ");
                    {
                        for (j=1;j<=numero;j++)
                            printf("%c",caracter);
                        printf("\n");
                    }
            }
        return 0;
}

rir3760

Esto:
printf("caracter de relleno:");
fflush (stdin);
scanf("%c",&caracter);


Se puede sustituir por (el espacio en " %c" es critico):
printf("caracter de relleno: ");
fflush(stdout);
scanf(" %c", &caracter);

Y así evitamos la llamada a "fflush(stdin)".

La llamada a "fflush(stdout)" es necesaria ya que si el texto no termina con '\n' no hay garantía de que este se haya enviado a la salida estándar (podría estar, todavía, en el bufer correspondiente).

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language