elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  crear un programa que haga triangulos y cuadrados con caracteres de relleno
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: crear un programa que haga triangulos y cuadrados con caracteres de relleno  (Leído 24,443 veces)
kikian94

Desconectado Desconectado

Mensajes: 66


Ver Perfil
crear un programa que haga triangulos y cuadrados con caracteres de relleno
« en: 19 Octubre 2012, 16:40 pm »

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




En línea

Antiproton

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: crear un programa que haga triangulos y cuadrados con caracteres de relleno
« Respuesta #1 en: 20 Octubre 2012, 20:50 pm »

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

Código:
      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.


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: crear un programa que haga triangulos y cuadrados con caracteres de relleno
« Respuesta #2 en: 20 Octubre 2012, 22:21 pm »

Sólo te queda implementar el repetir otra figura:
Código
  1. #include<stdio.h>
  2. int main(void){
  3.    /*variables*/
  4.    int numero,i,j,k;
  5.    int fila,columna,espacio,blanco;
  6.    char caracter;
  7.    char sino;
  8.  
  9.   /*entorno*/
  10.    printf("Introduce numero de filas (1-15):");
  11.    scanf("%d",&numero);
  12.    printf("numero de espacios:");
  13.    scanf("%d",&espacio);
  14.    printf("caracter de relleno:");
  15.    fflush (stdin);
  16.    scanf("%c",&caracter);
  17.    if(caracter>='0' && caracter<='9'){
  18.  
  19.      for (fila=1; fila<=numero; fila++)
  20.            {
  21.                for (blanco=1; blanco<=numero-fila+espacio; blanco++)
  22.                    printf(" ");
  23.                for (columna=1; columna<=2*fila-1; columna++)
  24.                    printf("%c",caracter);
  25.                printf("\n");
  26.            }
  27.   }
  28.      else
  29.  
  30.        for (i=1;i<=numero;i++)
  31.  
  32.            {
  33.                for (k=1; k<=espacio; k++)
  34.                    printf(" ");
  35.                    {
  36.                        for (j=1;j<=numero;j++)
  37.                            printf("%c",caracter);
  38.                        printf("\n");
  39.                    }
  40.            }
  41.        return 0;
  42. }
  43.  
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: crear un programa que haga triangulos y cuadrados con caracteres de relleno
« Respuesta #3 en: 21 Octubre 2012, 03:13 am »

Esto:
Código
  1. printf("caracter de relleno:");
  2. fflush (stdin);
  3. scanf("%c",&caracter);

Se puede sustituir por (el espacio en " %c" es critico):
Código
  1. printf("caracter de relleno: ");
  2. fflush(stdout);
  3. 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
En línea

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines