Foros del Web » Programación para mayores de 30 ;) » C/C++ »

triangulo iscosceles pintado!

Estas en el tema de triangulo iscosceles pintado! en el foro de C/C++ en Foros del Web. Buenas, estoy realizando un ejercicio en c en el cual tengo que crear un programa que me pida la longitud del triangulo ISCOSCELES, el caracter ...
  #1 (permalink)  
Antiguo 27/03/2014, 13:29
Avatar de Totti7  
Fecha de Ingreso: mayo-2012
Ubicación: barcelona
Mensajes: 28
Antigüedad: 12 años, 7 meses
Puntos: 2
triangulo iscosceles pintado!

Buenas, estoy realizando un ejercicio en c en el cual tengo que crear un programa que me pida la longitud del triangulo ISCOSCELES, el caracter con el que se imprimira, y si sera un triangulo vacio o lleno. El triangulo vacio lo tengo creado, pero no consigo hacer el triangulo lleno.. adjunto codigo para que veais el programa:
Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int pintartriangulo(){
  4.     int opcion=0;
  5.     printf("\n0- No\n");
  6.     printf("\n1- Sí\n");
  7.     scanf("%d",&opcion);
  8.     printf("\n");
  9.     return opcion;
  10. }
  11.  
  12. void main(){
  13. int base, n, op1, i, j, numero;
  14. char c;
  15.  
  16. printf("\nIntroduzce la  altura del triangulo : ");
  17. scanf("%d", &n);
  18. printf("\nIntroduce el caracter a pintar: ");
  19. scanf(" %c", &c);
  20. printf("\nEstará hueco?: \n");
  21. op1=pintartriangulo();
  22.  
  23.         switch(op1){
  24.  
  25.             case 0: //triangulo lleno
  26.  
  27.                 i=0;
  28.                 while(i < n-1){
  29.                     for(j= 0; j < n; j++)
  30.                     {
  31.                         if(j == 0 || j==i || j==i-1 || j== i-2){// la cuestion es hacer j==i- (numero <=infinito)
  32.                          printf("%c",c);
  33.                         }
  34.                         else
  35.                         {
  36.                             printf(" ");
  37.                         }
  38.                        
  39.                     }
  40.                 printf("\n");
  41.                 i++;
  42.                 }
  43.              
  44.                 i=0;
  45.                 while(i < n){
  46.                     for(j= 0; j < n; j++)
  47.                     {
  48.                             if(j == 0 || j== n-i-1 || j== n-i-2 || j== n-i-3 || j== n-i-4 || j== n-i-5 || j== n-i-6 || j== n-i-7)
  49.  // la cuestion es hacer j==n-i- (numero <=infinito)
  50.                             {
  51.                                 printf("%c",c);
  52.                             }
  53.                            
  54.                             else
  55.                             {
  56.                                  printf(" ");
  57.                             }
  58.                     }
  59.                 printf("\n");
  60.                 i++;
  61.                 }
  62.        
  63.                 break;
  64.                    
  65.             case 1: //triangulo vacio
  66.                
  67.                 i=0;
  68.                 while(i < n-1){
  69.                     for(j= 0; j < n; j++)
  70.                     {
  71.                         if(j == 0 || j==i)
  72.                         {
  73.                             printf("%c",c);
  74.                         }
  75.                         else
  76.                         {
  77.                             printf(" ");
  78.                         }
  79.                     }
  80.                 printf("\n");
  81.                 i++;
  82.                 }
  83.  
  84.                 i=0;
  85.                 while(i < n){
  86.                     for(j= 0; j < n; j++)
  87.                     {
  88.                         if(j == 0 || j== n-i-1)
  89.                         {
  90.                             printf("%c",c);
  91.                         }
  92.                         else
  93.                         {
  94.                             printf(" ");
  95.                         }
  96.                     }
  97.                 printf("\n");
  98.                 i++;
  99.                 }                  
  100.                 break;
  101.         }
  102. }

El fallo es que quiero hacer una operacion: j==n-i-numero, donde numero sea un numero desde el 1 al millon por ejemplo, que haga (j==n-i-1, j==n-i-2, j==n-i-3, etc.) Gracias de antemano! Si sabeís alguna otra opción más facil de hacerlo mejor;)
el triangulo es de esta forma, de lado pero mirando hacia la derecha no hacia la izquierda:
  #2 (permalink)  
Antiguo 02/04/2014, 06:31
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años, 6 meses
Puntos: 49
Respuesta: triangulo iscosceles pintado!

Antes que nada un par de observaciones:

* la función main es de tipo int, cosas del estándar del C/C++ y así hay que declararla, con su correspondiente return.

* las instrucciones, tipo for, if, else, etc cuyo cuerpo se reduzca a una sola instrucción no necesitan de llaves. Lo único que consigues con eso es enfarragar el código.

* pon un poco más de cuidado en la indentación o sangrado.

Supongo que querías una salida como esta:

Cita:

Introduce la altura del triangulo : 10

Introduce el caracter a pintar: *

Estara hueco?:

0- No

1- Si
0

*
**
***
****
*****
******
*******
********
*********
**********
*********
********
*******
******
*****
****
***
**
*
Código C++:
Ver original
  1. #include <stdio.h>
  2.  
  3. int pintartriangulo(){
  4.     int opcion=0;
  5.     printf("\n0- No\n");
  6.     printf("\n1- Si\n");
  7.     scanf("%d",&opcion);
  8.     printf("\n");
  9.     return opcion;
  10. }
  11.  
  12. int main(){
  13.   int n, op1, i, j;
  14.   char c;
  15.  
  16.   printf("\nIntroduce la  altura del triangulo : ");
  17.   scanf("%d", &n);
  18.   printf("\nIntroduce el caracter a pintar: ");
  19.   scanf(" %c", &c);
  20.   printf("\nEstara hueco?: \n");
  21.   op1=pintartriangulo();
  22.   switch(op1){
  23.     case 0: //triangulo lleno
  24.      i=0;
  25.      while(i < n-1){
  26.        for(j= 0;  j<=i; j++)
  27.          printf("%c",c);
  28.        printf("\n");
  29.        i++;
  30.       }
  31.       i=0;
  32.       while(i < n){
  33.        for(j= 0; j< n-i; j++)
  34.          printf("%c",c);
  35.         printf("\n");
  36.         i++;
  37.       }
  38.       break;
  39.   case 1: //triangulo vacio
  40.     i=0;
  41.     while(i < n-1){
  42.     for(j= 0; j < n; j++)
  43.       if(j == 0 || j==i)
  44.         printf("%c",c);
  45.       else
  46.         printf(" ");
  47.      printf("\n");
  48.      i++;
  49.      }
  50.      i=0;
  51.      while(i < n){
  52.       for(j= 0; j < n; j++)
  53.         if(j == 0 || j== n-i-1)
  54.           printf("%c",c);
  55.          else
  56.            printf(" ");
  57.       printf("\n");
  58.       i++;
  59.       }
  60.       break;
  61.   }
  62.   return 0;
  63. }

Aunque yo soy más partidario de usar for en lugar de while ya que conoces los valores inicial y final:

Código C++:
Ver original
  1. #include <stdio.h>
  2.  
  3. int pintartriangulo(){
  4.     int opcion=0;
  5.     printf("\n0- No\n");
  6.     printf("\n1- Si\n");
  7.     scanf("%d",&opcion);
  8.     printf("\n");
  9.     return opcion;
  10. }
  11.  
  12. int main(){
  13.   int n, op1, i, j;
  14.   char c;
  15.  
  16.   printf("\nIntroduzce la  altura del triangulo : ");
  17.   scanf("%d", &n);
  18.   printf("\nIntroduce el caracter a pintar: ");
  19.   scanf(" %c", &c);
  20.   printf("\nEstara hueco?: \n");
  21.   op1=pintartriangulo();
  22.   switch(op1){
  23.     case 0: //triangulo lleno
  24.      for(i=0;i<n-1;i++){
  25.        for(j= 0;  j<=i; j++)
  26.           printf("%c",c);
  27.        printf("\n");
  28.       }
  29.       for(i=0;i<n;i++){
  30.        for(j= 0; j< n-i; j++)
  31.          printf("%c",c);
  32.         printf("\n");
  33.       }
  34.       break;
  35.   case 1: //triangulo vacio
  36.     for(i=0;i<n-1;i++) {
  37.       for(j= 0; j < n; j++)
  38.         if(j == 0 || j==i)
  39.           printf("%c",c);
  40.         else
  41.           printf(" ");
  42.        printf("\n");
  43.      }
  44.      for(i=0;i<n;i++){
  45.       for(j= 0; j < n; j++)
  46.         if(j == 0 || j== n-i-1)
  47.           printf("%c",c);
  48.          else
  49.            printf(" ");
  50.       printf("\n");
  51.       }
  52.       break;
  53.   }
  54.   return 0;
  55. }

E incluso me decanto por el operador ternario en lugar del if-else:

Código C++:
Ver original
  1. #include <stdio.h>
  2.  
  3. int pintartriangulo(){
  4.     int opcion=0;
  5.     printf("\n0- No\n");
  6.     printf("\n1- Si\n");
  7.     scanf("%d",&opcion);
  8.     printf("\n");
  9.     return opcion;
  10. }
  11.  
  12. int main(){
  13.   int n, op1, i, j;
  14.   char c;
  15.  
  16.   printf("\nIntroduzce la  altura del triangulo : ");
  17.   scanf("%d", &n);
  18.   printf("\nIntroduce el caracter a pintar: ");
  19.   scanf(" %c", &c);
  20.   printf("\nEstara hueco?: \n");
  21.   op1=pintartriangulo();
  22.   switch(op1){
  23.     case 0: //triangulo lleno
  24.      for(i=0;i<n-1;i++){
  25.        for(j= 0;  j<=i; j++)
  26.          printf("%c",c);
  27.        printf("\n");
  28.       }
  29.       for(i=0;i<n;i++){
  30.        for(j= 0; j< n-i; j++)
  31.          printf("%c",c);
  32.         printf("\n");
  33.       }
  34.       break;
  35.   case 1: //triangulo vacio
  36.     for(i=0;i<n-1;i++) {
  37.       for(j= 0; j < n; j++)
  38.         (j == 0 || j==i)? printf("%c",c):printf(" ");
  39.        printf("\n");
  40.      }
  41.      for(i=0;i<n;i++){
  42.       for(j= 0; j < n; j++)
  43.         (j == 0 || j== n-i-1) ? printf("%c",c):printf(" ");
  44.       printf("\n");
  45.       }
  46.       break;
  47.   }
  48.   return 0;
  49. }


¡¡¡Saluditos!!!


Última edición por leosansan; 02/04/2014 a las 08:01

Etiquetas: int, numero, programa, triangulo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:21.