2013-05-14 13 views
8

Sto imparando e migliorando le mie capacità di programmazione dal libro "Pensa come un programmatore" e mi è stato chiesto di mostrare questo tipo di piramide.C++: caratteri visualizzati

######## 
###### 
    #### 
    ## 

ho fatto con questo codice

for(int i = 0; i < 4; i++){ 

    for(int k = 0; k < i; k++) 
     cout << ' '; 

    for(int j = 0; j < 8 - i * 2; j++) 
     cout << '#'; 

    cout << '\n'; 
} 

Ma ... le domande era "Utilizzando la stessa regola, come i programmi di forme di precedenza nel capitolo (solo due uscite statements- uno che emette il segno cancelletto e uno che emette un fine riga), scrivere un programma che produce la seguente forma: "

Non sono sicuro, ma è possibile visualizzare qualcosa di simile con solo 2 affermazioni e senza usare il carattere dello spazio?

modifica.

Grazie per una risposta ragazzi. Ma secondo l'autore dovrei farlo con solo cout << '#' e cout << '\n'. Ed ecco il mio punto, perché sembra che manipolare con alcuni metodi o funzioni non sia un'opzione.

Scrivere un programma che utilizza solo due dichiarazioni di output, cout < < "#" e cout < < "\ n", per produrre un modello di simboli hash a forma di ... Of Course con l'uso di loop: P

+1

È necessario trovare un modo per emettere gli spazi in modo implicito. –

+1

È persino possibile avere una singola istruzione 'cout' che restituisca spazi, hash e fine riga. ;) In altre parole: hai bisogno solo del tuo ciclo esterno ('i') e di questa singola istruzione' cout'. – syam

+0

Se bulid una corda per riga, è necessario utilizzare una sola istruzione di uscita – gkovacs90

risposta

5

Sfortunatamente, la risposta a questa domanda è molto più semplice: errore dell'autore. Queste prime domande avrebbero dovuto essere formulate per consentire l'uso di una sola uscita spaziale (cout < < "";). Non so come ci siamo persi in questo montaggio, e mi scuso per la confusione che ciò ha causato. In generale, qualsiasi esercizio inteso a costringere il lettore a "scavare" sarà chiaro su questo punto.

A proposito, questo e altri problemi della prima edizione sono discussi nel documento che può essere trovato sul mio sito here.Se hai ulteriori domande o problemi con il libro, per favore contattami.

+0

Grazie, questo cancella tutto, eppure sono confuso dall'esercizio 2.3 dello stesso capitolo: chiede di mostrare qualche tipo di oggetto simile a una stella, ma, di nuovo, è possibile con un solo << ""? Ho diviso questo problema in due parti: superiore e inferiore, in secondo luogo facendo un algoritmo per visualizzare 2 righe che hanno lo stesso valore (metà della stella) è impossibile immagino. – ashur

10
#include <iostream> 
#include <iomanip> 
#include <string> 

using namespace std; 

int main() 
{ 
    for(int i = 0; i < 4; i++) { 
     cout << setw(8-i) << string(8-i*2, '#') << endl; 
    } 
    return 0; 
} 
0

È possibile controllare la posizione in un ciclo per ogni riga. Questo combinato con un operatore di 3 operandi potrebbe risolvere questo problema con due istruzioni di output.

for(int i = 0; i < 4; i++){ 

    for(int k = 0; k <= 8-i; k++) 
     cout << k<i ? ' ' : '#'; 

    cout << endl; 
} 

I personaggi dello spazio principale ci saranno comunque, non è possibile creare uno spazio "vuoto" al posto di loro.

+0

Grazie, ma non sono sicuro È questo quello che voglio sapere. Ho modificato la domanda per dissipare la confusione. – ashur

0

Non so se si tratta di "arte" di non utilizzare cout << ' ', ma in quel caso non v'è un'altra soluzione pulita:

#include <iostream> 

int main() { 
    for (int i = 0; i < 4; ++i, std::cout << '\n') { 
     for (int j = 0; j < 8-i; ++j) { 
      std::cout << (char)('#' - 3*(j<i)); 
     } 
    } 
} 

E, un altro, anche versione più oscura che utilizza l'ASCII rappresentazione piuttosto che scrivere ' ' esplicitamente, utilizzando un solo ciclo for:

int main() { 
    for (int i = 1; i < 37; ++i) { 
     std::cout << (char)(35-3*((i%9)<=((i-1)/9)) - 3*((i%9)>=(9-(i-1)/9)) \ 
      - 22*(!(i%9))); 
    } 
} 

non mi dire che questo è buona pratica di programmazione, ma forse aiuta qualcuno nella realizzazione - ancora una volta - che è, alla fine, tutti i numeri e registri .

+0

Si potrebbe anche semplicemente usare il codice di '''' esplicitamente. – unkulunkulu

+0

Dipende totalmente dall'autore del libro. L'autore potrebbe voler dire incoraggiare le persone a guardare il codice ASCII sottostante. Inoltre, non posso immaginare che 'setw' per esempio, NON usi' '' 'esplicitamente nel suo codice da qualche parte lungo la linea. –

+0

Intendevo dire che non è corretto fare matematica su ascii per ottenere il codice di ''', basta usare direttamente quel codice! Non è divertente per questo motivo. Questo è il mio punto. – unkulunkulu

Problemi correlati