PDA

View Full Version : [C++]Visualizzare 4 triangoli in console


rnuzzo
06-01-2009, 09:56
Ciao a tutti,sto cercando d'imparare il c++ studiando un corso Deitel per neofiti
Alla fine di ogni capitolo ci sono svariati esercizi per testare le conoscenze acquisite
ma certi esercizi sono vere e proprie torture mentali.Ecco l'esercizio:

Scrivete un programma che visualizzi queste figure una sotto l'altra utilizzando i cicli for nidificati

* ********** ********** *
** ********* ********* **
*** ******** ******** ***
**** ******* ******* ****
***** ****** ****** *****
****** ***** ***** ******
******* **** **** *******
******** *** *** ********
********* ** ** *********
********** * * **********


Il listato che segue è la prima versione dove ogni triangolo ha il suo primo e secondo " for "
//Esercizio 5.12

#include<iostream>
using std::cout;
using std::endl;

int main()
{

for ( int a = 10 ; a >= 1 ; a-- )
{
for ( int b = 10 ; b >= a ; b-- )
{
cout << "*";
}
cout << endl;

}

for (int a = 10 ; a >= 0 ; a--)
{
for (int c = 1 ; c <= a ; c++)
{
cout << "*";
}

cout << endl;
}

cout << endl;

for ( int a = 10 ; a >= 1 ; a-- )
{

for ( int d = 10 ; d >= 1 ; d-- )
{
if (d <= a)
cout << "*";
else
cout << " ";
}

cout << endl;
}

cout << endl;

for ( int a = 10 ; a >= 0 ; a-- )
{

for ( int e = 1 ; e <= 10 ; e++ )
{
if (e <= a)
cout << " ";
else
cout << "*";
}

cout << endl;
}

cout << endl;

system("PAUSE");
return 0;
}


La seconda versione invece richiede di combinare il codice delle quattro figure in un unico programma che le visualizzi tutte insieme.
Ecco come ho iniziato:
//Esercizio 5.12_a

#include<iostream>
using std::cout;
using std::endl;

int main()
{

for ( int a = 10, cont = 0 ; a >= 1 ; a--)
{

//Corpo principale
if (cont == 0 || cont == 2)
{
for ( int b = 10 ; b >= a ; b--)
{
if ( b >= a)
{
cout << "*";
}
}

}

else if (cont == 1 || cont == 3)
{
for ( int c = 0 ; c <= 10 , c >= a ; c++)
{
if (c < a)
{
if (c < a)
{
cout << "*";
}
}
else
{
continue;
}
}
}

cout << endl;


//setta a ad 11
if (a == 1 || cont == 4)
{
if (a == 1)
{
a = 11;
cont++;
}
else if (cont == 4)//Interrompe il primo for
{
break;
}
}


}

system("PAUSE");
return 0;
}



Ovviamente non visualizza quello che dovrebbe perciò chiedo una mano a voi! ;D
un grazie fin da adesso
Credo che certi esercizi siano un po troppo difficili per menti poco allenate, almeno per chi è all'inizio come me :-\

cionci
06-01-2009, 10:33
Il primo esercizio funziona...cerca di ragionare in modo diverso per il secondo. Utilizza solo due for e un if per specificare quando devi stampare uno spazio e non un *.
Lo spazio centrale rimane sempre lì, quindi è facile stampare lo spazio nella posizione corretta (inizia da quello)
Nota che lo spazio si sposta su ogni riga di una posizione a destra (o a sinistra).

rnuzzo
07-01-2009, 04:50
Scusami se non ho potuto rispondere.Problemi sulla linea...
2 for nidificati nel primo?

cionci
07-01-2009, 09:58
Il primo esercizio va bene.
Nel secondo esercizio bastano due for nidificati e un if che seleziona i casi in cui stampare lo spazio al posto del *.
Si tratta di fatto di ristrutturare tutto il codice. A volte mettere insieme parti di codice già fatto è più difficile di riscrivere il codice in un'ottica diversa.

rnuzzo
07-01-2009, 11:37
ok mi mettero al lavoro anche se ora vedo tutto come un "asterisco"

cionci
07-01-2009, 11:51
anche se ora vedo tutto come un "asterisco"
In che senso ?

rnuzzo
07-01-2009, 12:16
Senza offesa nei tuoi confronti cionci

Nel senso che è circa una settimana che quest 'esercizio mi danna la vita!!

cionci
07-01-2009, 12:59
Stampa intanto un rettangolo di 25*10 asterischi. A questo punto ragiona: su una linea come puoi fare per stampare lo spazio centrale al posto di un asterisco ? E come puoi fare per stampare gli altri spazi ? Nota che c'è una relazione fra l'indice della riga stampata (il contatore del for esterno) e la posizione in cui vanno stampati gli spazi.