Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 22
  1. #11
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    uff....niente da fare... non ci riesco proprio!
    mi servono sempre due for?
    è troppo se chiedo la soluzione in modo da potermela studiare?
    comunque.. facendo la prima riga viene una cosa tipo così?
    codice:
    for(int i=0; i<x; i++){
        if(i==5 && j==1)
          cout<<"* ";
    }

  2. #12
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    questo spezzone di codice riesce a visualizzare il vertice in alto(ma solo se la x è almeno 5)..

    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 && j==5)
                       cout<<"* ";
                       else
                       cout<<"  ";
                 }
                 cout<<endl;
           }
                 
    
    
    
    
     system("pause");
     return 0;
        
    }
    e per fare gli altri?? deve fare altri if?
    tipo if(i==2 && j==4 || j==6) per la seconda riga?
    ma io vorrei farlo generico! con qualunque x da input!

  3. #13
    Originariamente inviato da mistergks
    questo spezzone di codice riesce a visualizzare il vertice in alto(ma solo se la x è almeno 5)..

    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 && j==5)
                       cout<<"* ";
                       else
                       cout<<"  ";
                 }
                 cout<<endl;
           }
                 
    
    
    
    
     system("pause");
     return 0;
        
    }
    e per fare gli altri?? deve fare altri if?
    tipo if(i==2 && j==4 || j==6) per la seconda riga?
    ma io vorrei farlo generico! con qualunque x da input!
    Purtroppo non ho molto tempo per mettermi un po' a provare, ma sei abbastanza sulla buona strada... Come hai notato da solo, avevo per sbaglio invertito le condizioni del vertice (quelle giuste sono i = 1 && j = 5)... Comunque per farlo generico devi valutare come variano gli indici: noi abbiamo la nostra dimensione x (nel nostro caso 9)... Il vertice ha cordinate (i = 1, j = (x / 2) + 1.... attenzione che si parla di divisione di interi, 9 / 2 = 4!!! ).. Se guardi nella seconda riga, i diventa 2, mentra le due j sono rispettivamente, rispetto alla riga precedente, j - 1 e j + 1 (i vertici della seconda riga sono i = 2 e j1 = 4, i = 2 e j2 = 6)...
    Poi se ti sposti nella terza riga noti che i = 3, e le due j sono, rispetto alle due j1 e j2 della riga precedente, rispettivamente newJ1 = j1 - 1 e newJ2 = j2 + 1...
    Puoi vedere che questo decrementare da una parte e incrementare dall'altra va avanti fino all'ultima riga che ovviamente va tutta riempita di asterischi!
    Il tutto funzione se la dimensione è dispari...
    Prova un po', con calma!, e poi posta il risultato!
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  4. #14
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    ma se non so quante sono le righe mica posso fare ogni volta i==1, 2, 3, 4, 5,...cioè fino a dove arrivo? fino a x.. chiaramente...però come faccio a sapere quante i ci sono fino a x? andrebbe fatta qualcosa di generico anche per le i mi sa...
    Un'altra cosa:
    la condizione dell'if deve essere con operatore AND o OR?! cioè io ho fatto per la seconda riga: if(i==2 && j == j-1 || j == j+1)

    il codice fatto finora è questo:
    codice:
    #include <iostream>
    using namespace std;
    
    int main(){
    int x;
    cout<<"inserisci dimensione dispari"<<endl;
    cin>>x;
           if(x%2==0){
           cout<<"hai inserito una dimensione pari"<<endl;
           }
           
                       for(int i=1; i<=x; i++){
                               for(int j=1; j<=x; j++){
                                        if(i == 1 && j == (x/2)+1) //prima riga
                                        cout<<"* ";
                                        else
                                        cout<<"  ";
                                        if(i == 2 ||  j == j-1 || j == j+1) //seconda riga
                                        cout<<"* ";
                                        else
                                        cout<<"  ";
                                      //  if(i == 3 || 
                               
                 }
                 cout<<endl;
           }
                 
    
     system("pause");
     return 0;
        
    }
    Ma l'output di esso con x=9 è:
    codice:
             *  
    * * * * * * * * *

  5. #15
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    e se facessi cosi'?
    in modo molto generico? ( oppure si può fare una funzione ricorsiva in questo modo?)
    Non funziona...perchè ci sarà sicuramente qualche errore.. ma per la logica funziona...cioè mi sembra abbastanza generico...poi boh!

    codice:
    #include <iostream>
    using namespace std;
    
    int main(){
    int x;
    cout<<"inserisci dimensione dispari"<<endl;
    cin>>x;
           if(x%2==0){
           cout<<"hai inserito una dimensione pari"<<endl;
           }
           
                       for(int i=1; i<=x; i++){
                               for(int j=1; j<=x; j++){
                                        if(i == 1 && j == (x/2)+1) //prima riga
                                        cout<<"* ";
                                        else
                                        cout<<"  ";
                                        if(i == i+1 &&  j == j-1 || j == j+1) //dalla seconda riga
                                        cout<<"* ";                                      in poi
                                        else
                                        cout<<"  ";
                                      if(i == x && j==x) //ultima riga
                                      cout<<"* ";
                               
                 }
                 cout<<endl;
           }
                 
    
     system("pause");
     return 0;
        
    }

  6. #16
    L'ultimo pezzo di codice ha una condizione evidentemente sbagliata:

    codice:
    if(i == i+1 &&  j == j-1 || j == j+1)
    i non sarà mai uguale a (i + 1) cosi come j non sarà mai uguale a (j - 1) o (j + 1)....
    Ad esempio, a un certo punto del ciclo, i sarà uguale a 3 ad esempio.. La tua condizione equivarrebbe a dire 3 è uguale a 4? Ovvio che no, quindi quelle condizione non saranno mai rispettate!

    Considera che tu stai trattando solo questi cicli di stampa, mentre l'ideale sarebbe riempire una matrice di caratteri allocati dinamicamente...
    In ogni caso domani magari con un po' di calma provo a vedere anche io cosa trovo di soluzione, tu continua a ragionare sulle condizioni dei cicli..
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  7. #17
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    beh...in effetti ora che ci penso...è vero...
    provo a trovare altre condizioni

  8. #18
    Allora: ho scritto il codice funzionante, vengono fuori dei bei triangolini

    Prima che te lo posti prova a ragionarci ancora da solo dai, ti do qualche dritta:

    1) ho fatto tre cicli: uno per la stampa della prima riga; uno per le righe comprese tra la prima e l'ultima e uno per l'ultima;
    2) il ragionamento è questo: nel primo ciclo, stampo il vertice e "salvo" la posizione (l'indice di colonna) di questo vertice in due variabili (chiamate ad esempio j1 e j2) che quindi, per ora, sono uguali; nel ciclo di stampa delle righe centrali, per ogni riga che stampo controllo se l'indice di colonna (la j) è uguale o a (j1 - 1) o a (j2 + 1) e in quel caso stampo gli asterischi... poi ad ogni ciclo incremento j2 e decremento j1 (il ragionamento che facevamo qualche post fa...); questo ciclo va avanti fino a quando j1 è diverso da 2, perchè quando ciò avviene significa che ho appena stampato la penultima riga e deve uscire dal ciclo; infine stampo la base del triangolo (tutti asterischi!).

    Se poi hai bisogno ti posto il codice!
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  9. #19
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    182
    non ho risposto prima perchè sono stato fuori tutto oggi!
    ho provato a seguire le indicazioni e mi è uscito fuori questo(ho chiamato la tua j1 e j2 var1 e var2 )..anche se non funziona.. mi stampa il vertice alto e poi mi genera un loop di spazi vuoti...credo che il while sia sbagliato...non ho capito perchè j1(ovvero var1) deve essere diverso da 2..

    codice:
    #include <iostream>
    using namespace std;
    
    int main(){
    int x;
    int var1, var2;
    cout<<"inserisci dimensione dispari"<<endl;
    cin>>x;
           if(x%2==0){
           cout<<"hai inserito una dimensione pari"<<endl;
           }
           for(int i=0; i<x; i++){
                   for(int j=0; j<x; j++){
                   if(i == 1 && j == (x/2)+1)      //prima riga
                                        cout<<"* ";
                                        else
                                        cout<<"  ";
                                        var1=j; var2=j;
                                        }cout<<endl;
                                        }
          while(var1!=2){
                       for(int i1=0; i1<x; i1++) {               //altre righe
                               for(int j1=0; j1<x; j1++) {
                                       if(j1 == var1-1 || j1 == var2+1)
                                       cout<<"* ";
                                       var1--;
                                       var2++;
                               }
                               cout<<endl;
                       }
                 
          }
                            for(int i=0; i<x; i++){               //ultima
                                    for(int j=0; j<x; j++)
                                    cout<<"* ";
                                    }
                                    
                                           
    
    
    
    
     system("pause");
     return 0;
        
    }

  10. #20
    Allora, ragiona meglio intanto sui cicli di stampa della prima e dell'ultima riga: tu fai, in entrambi i casi, dei cicli innestati come se dovessi variare sia righa che colonna ma, come stiamo dicendo, questi cicli devono servire per la prima e ultima riga! Quindi in entrambi i casi andrai a variare solo l'indice di colonna, con un ciclo for sulla j!

    Nel ciclo while forse non ti conviene fare un ciclo sugli indici di riga i, semplicemente ad ogni giro cicli su tutti gli indici di colonna j e poi fa una stampa del carattere '\n' (oppure "cout<<endl", devi scusarmi io sono parecchio affezionato al C ) in modo da passare alla linea successiva.... il controllo:

    codice:
    while (var1 != 2)
    serve per capire quando si arriva a riempire la penultima riga... var1 indica la posizione dell'asterisco inserito nell'ultima riga su cui si è lavorato nel ciclo: se var1 ha raggiunto la posizione 2 significa che hai appena riempito la penultima riga (giusto?) e quindi occorre uscire dal ciclo.

    Prova a ragionare su queste cose!
    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 © 2026 vBulletin Solutions, Inc. All rights reserved.