2013-05-11 13 views
2
#include <iostream> 
using namespace std; 
int main() 
{ 
    int a, b, c, i; 
    cin >> a >> b >> c; 

    for (i = 0; i < a; i++) 
     cout << "*" << endl; 

    for (i = 0; i < b; i++) 
     cout << "*" << endl; 

    for (i = 0; i < c; i++) 
     cout << "*" << endl; 
} 

Im conscient que la sortie est la même que:Comment imprimer un histogramme vertical en C++

for (i = 0; i < a + b + c; i++){ 
cout << "*" << endl; 
} 

Donc, pour 2 3 1 je reçois:

*

*

*

*

*

*

Ce que je veux est:

 * 

* * 

* * * //Horizontal distance between 2 shapes don't matter. 

Je ne sais pas sur la façon de mettre le curseur au bon endroit compte tenu de l'impression doit être fait de haut en bas.

EDIT: Je n'étais pas clair sur l'ordre d'impression. J'espère que l'exemple suivant aide et que, si possible, l'impression de chaque colonne doit être effectuée en utilisant une fonction séparée.

Première boucle:

* 

* 

Deuxième boucle:

* 

* * 

* * 

dernière boucle:

* 

* * 

* * * 

impression doit être fait exactement ce que order.Print la première colonne, puis la deuxième et continue comme ça.

+0

[** 'std :: setw' **] (http://en.cppreference.com/w/cpp/io/manip/setw) – 0x499602D2

Répondre

4

Vous devez repenser un peu votre impression. Pour commencer, vous devez trouver la colonne la plus haute, car c'est le nombre de lignes que vous aurez.

je ferais quelque chose comme ceci:

int high = std::max(std::max(a, b), c); 

for (int i = high; i > 0; i--) 
{ 
    if (i <= a) 
     std::cout << " * "; 
    else 
     std::cout << " "; 

    if (i <= b) 
     std::cout << " * "; 
    else 
     std::cout << " "; 

    if (i <= c) 
     std::cout << " * "; 
    else 
     std::cout << " "; 

    std::cout << std::endl; 
} 

Si vous voulez nombre arbitraire de colonnes, vous pouvez les mettre dans un std::vector, et une boucle intérieure pour cela.


Pour une quantité arbitraire de colonnes, vous pouvez utiliser quelque chose comme:

// Get the input 
std::cout << "Please enter numbers, all on one line, and end with ENTER: "; 
std::string input; 
std::getline(std::cin, input); 

// Parse the input into integers 
std::istringstream istr(input); 
std::vector<int> values(std::istream_iterator<int>(istr), 
         std::istream_iterator<int>()); 

// Get the max value 
int max_value = *std::max_element(values.begin(), values.end()); 

// Print the columns 
for (int current = max_value; current > 0; current--) 
{ 
    for (const int& value : values) 
    { 
     if (current <= value) 
      std::cout << " * "; 
     else 
      std::cout << " "; 
    } 

    std::cout << std::endl; 
} 
+0

Y at-il une façon de faire ceci sans déterminer le plus grand nombre? – SpiderRico

+0

@ user2362377 Non, pas vraiment, car ce sera le nombre de lignes à imprimer. Heureusement, il est facile de trouver cela en boucle si vous utilisez par exemple. un 'std :: vector' pour garder les valeurs. –

+0

Merci beaucoup pour votre réponse, mais je crains que je n'étais pas clair quand wasking la question.Je l'ai mis à jour je serais heureux si vous pouvez trouver le temps de le vérifier. – SpiderRico

0

code:

#include <iostream> 
using namespace std; 
int f[3]; 
int main() 
{ 
    int a, b, c, i; 
    cin >> f[0] >> f[1] >> f[2]; 

    int m = max(max(f[0],f[1]),f[2]); 
    for(int i=m;i>=1;i--) 
    { 
     for(int j=0;j<3;j++) 
      if (f[j]<i) cout <<' '; 
      else cout <<'*'; 
     cout<<endl; 
    } 
} 

Test:

Input: 2 3 1 
Output: 
* 
** 
*** 
+1

Ugh, vraiment 'using namespace std'? –

+0

Affichage du mot "Code" et un bloc de la même chose sans explication de pourquoi c'est une solution n'est pas une réponse. –

-1

CHECK CODE BON CE OUT

#include<conio.h> 
void main() 
{ 
int a[5]; 
int i,j,max; 
clrscr(); 
for(i=0;i<5;i++) 
{ 
scanf("%d",&a[i]); 
max=a[0]; 
if(max<a[i]) 
max=a[i]; 
} 
printf("\n"); 
for(i=0;i<max;i++) 
{ 
putchar(max); 
} 
printf("\n"); 
printf("\n"); 
for(i=0;i<5;i++) 
{ 
printf("%d \t--->\t",a[i],putchar(max)); 
for(j=1;j<=a[i];j++) 
{ 
printf("*"); 
} 
printf(" "); 
printf("\n"); 
} 
printf("\n"); 
for(j=max;j>0;--j) 
{ 
putchar(max); 
} 
getch();` 
} 

>