Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182

    [C++] Disegno figure geometriche

    So che per disegnare figure geometriche vanno fatti cicli for nidificati...
    però non ci riesco proprio...dovrei capire bene il meccanismo.
    Ad esempio questo programma:
    leggere da input la misura dwel lato di un quadrato e visualizzare un quadrato il cui lato formato del numero di asterischi digitato. Gli unici caratteri stampati sono asterischi e spazi. Il programma deve funzionare per qualsiasi numero intero tra 1 e 20. Per esempio se l'utente digita 5 il programma visualizza:
    *****
    * *
    * *
    * *
    * *
    *****

    la mia bozza:
    codice:
    #include <iostream>
    using namespace std;
    
    int main(){
        int x;
        cin>>x;
                  for(int i=1; i<=x; i++){
                          for(int j=1; j<=x; j++)
                          cout<<'*';
                          cout<<endl;
                          }
        
     system("pause");
     return 0;
        
    }
    Questo visualizza un quadrato pieno...a me servirebbe un quadrato delimitato e vuoto all'interno..come si fa?!

  2. #2
    Devi ragionare sugli indici... tu devi riempire prima riga (i = 1), ultima riga (i = x), prima colonna (j = 1), ultima colonna (j = x), giusto?
    Quindi all'interno del ciclo dovrai verificare se sono rispettate queste condizioni:

    Pseudocodice:

    codice:
    for (i = 1; i <= x; i++)
    {
          for (j = 1; j <= x; j++)
          {
               if (i = 1 || i = x || j = 1 || j = x) stampare '*';
               altrimenti stampare ' ';
           }
    }
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    ah è piu' semplice di quel che pensavo! e invece per quanto riguarda un triangolo ad esempio? mi sembra piu difficile:

    faccio sempre i due for innestati e gioco con gli indici in un if?

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    ho provato a scrivere in codice c++ lo pseudocodice tuo...e mi da un output sbagliato:
    ***** ** ** *****

    il codice è questo:
    codice:
    #include <iostream>
    using namespace std;
    
    int main(){
        int x;
        cin>>x;
        
                  for (int i = 1; i <= x; i++){
    
          for (int j = 1; j <= x; j++){
               if (i == 1 || i == x || j == 1 || j == x)
               cout<<'*';
               else
                cout<<' ';
           
           
    }
    }
     system("pause");
     return 0;
        
    }

  5. #5
    Ho fatto un paio di prove e in sostanza va bene anche se manca l' "andare a capo" dopo ogni ciclo!
    Il ciclo ottimale è così secondo me:

    codice:
    for (i = 1; i <= x; i++)
    	{
    		for (j = 1; j <= x; j++)
    		{
    			if (i == 1 || j == 1 || i == x || j == x)
    				cout<<"* ";
    			else	
    				cout<<"  ";
    		}
    		cout<<endl;
    	}
    Nota che ho aggiunto uno spazio sia all'asterisco che allo spazio, in modo da fare un'incolonnamento regolare!

    Funziona??
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    ok ora è perfetto! posto la versione completa compilata e funzionante per i lettori!

    codice:
    #include <iostream>
    using namespace std;
    
    int main(){
        int x;
        cin>>x;
        
                  for (int i = 1; i <= x; i++){
    
          for (int j = 1; j <= x; j++){
               if (i == 1 || i == x || j == 1 || j == x)
               cout<<"* ";
               else
                cout<<"  ";    
                  
    }
               cout<<endl;
    }
     system("pause");
     return 0;
        
    }
    Da quel che ho capito...il primo for controlla gli asterischi in colonna, il secondo for controlla le righe?!
    Per quanto riguarda i triangoli e le altre figure geometriche il procedimento è sempre lo stesso?

  7. #7
    Originariamente inviato da mistergks
    ok ora è perfetto! posto la versione completa compilata e funzionante per i lettori!

    codice:
    #include <iostream>
    using namespace std;
    
    int main(){
        int x;
        cin>>x;
        
                  for (int i = 1; i <= x; i++){
    
          for (int j = 1; j <= x; j++){
               if (i == 1 || i == x || j == 1 || j == x)
               cout<<"* ";
               else
                cout<<"  ";    
                  
    }
               cout<<endl;
    }
     system("pause");
     return 0;
        
    }
    Da quel che ho capito...il primo for controlla gli asterischi in colonna, il secondo for controlla le righe?!
    Per quanto riguarda i triangoli e le altre figure geometriche il procedimento è sempre lo stesso?
    Bè devi pensare che agli indici "i" fai corrispondere le righe e agli indici "j" fai corrispondere le colonne:
    in pratica per ognuna delle "i" del primo ciclo, hai un sottociclo che fa variare gli indici "j", ossia per ogni riga variano tutti gli indici di colonna, capito circa?

    Una soluzione forse più efficiente sarebbe quella di usare una matrice di caratteri e di riempirla di spazi o di asterischi a seconda delle esigenze!
    In ogni caso, per tutte le figure geometriche devo solo riflettere su quali posizioni della tua tabella bi-dimensionale riempire!
    E' chiaro che con figure diverse da un quadrato la faccenda si può parecchio complicare!
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    sisi ho capito! magari provo a fare un triangolo a qualcos altro e posto la mia soluzione...e ne riparliamo! grazie

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    credevo di aver capito...ma invece mi rendo conto che non ho ancora capito molto....
    potreste spiegarmi come ragionare in termini di indice???
    Cioè per un quadrato ho capito perchè ho visto il codice ...
    ma un triangolo come lo formo?
    dovrei cambiare solo la condizione dell'if vero?
    ho provato a fare cosi'. ma nulla:

    codice:
     int x;
        cin>>x;
               for(int i=1; i<=x; i++){
                       for(int j=1; j<=x; j++){
                       if( j==x/2 || i==x/2 )
                       cout<<'*';
                       else
                       cout<<' ';
                       }
                       cout<<endl;

  10. #10
    Originariamente inviato da mistergks
    credevo di aver capito...ma invece mi rendo conto che non ho ancora capito molto....
    potreste spiegarmi come ragionare in termini di indice???
    Cioè per un quadrato ho capito perchè ho visto il codice ...
    ma un triangolo come lo formo?
    dovrei cambiare solo la condizione dell'if vero?
    ho provato a fare cosi'. ma nulla:

    codice:
     int x;
        cin>>x;
               for(int i=1; i<=x; i++){
                       for(int j=1; j<=x; j++){
                       if( j==x/2 || i==x/2 )
                       cout<<'*';
                       else
                       cout<<' ';
                       }
                       cout<<endl;
    Eh per un triangolo la faccenda è complessa... Perchè ogni riga fa conto per sè...
    Intanto bisognerebbe capire come si vuole questo triangolo, direi che la cosa più semplice è farlo isoscele..
    Prova a immaginarti una matrice ad esempio 5x9 di caratteri, per ora riempita di punti:

    codice:
    .  .  .  .  .  .  .  .  .
    .  .  .  .  .  .  .  .  .
    .  .  .  .  .  .  .  .  .
    .  .  .  .  .  .  .  .  .
    .  .  .  .  .  .  .  .  .
    Adesso devi pensare a come riempirla di asterischi, per ottenere una cosa come:

    codice:
    .  .  .  . * .  .  .  .
    .  .  . * .  * .  .  .
    .  . * .  .  .  * .  .
    .  * .  .  .  .  . * .
    *  *  *  * * *  *  *  *
    La base è facile (è la riga i = 5), i lati molto meno, mi sa che devi pensare ad ogni singolo asterisco dove si trova (ad esempio il vertice in alto è i = 5 && j = 1)...
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.