disegnare un rombo con il Cpp



Disegnare un rombo con il Cpp



1)Inserisci il numero che costituirà il raggio del rombo
scanf("%d",&n);

2) Usare un istruzione che sarà eseguita 2 volte sulle base del contatore. Userò un ciclo e immaginando di dividere il rombo in 2 triangoli deciderò quale parte stampare a schermo per prima.

for (m=0; m<2; m++)

3) usiamo 2 cicli:
-esterno: per contare le righe del rombo
-interno:per stampare gli spazi


esterno: for (i=1; i<=n;i++), i sarebbe la riga,la inizializzo a 1 e dico finche minore o uguale al raggio aggiungi 1

1----*
2---***
3--*****
4-*******
5*********

supponendo che raggio =5 finchè i<=5 aggiungi una riga

if(m==0) serve a decidere se stiamo stampando la prima o la seconda parte del rombo

interno
 for (k=1; k<=n-1;k++) un ciclo per stampare gli spazi che andranno prima degli asterischi.
K è inizializzato a 1,finchè è minore di n-i aggiungi 1.
Allora se all'inizio è 1, e abbiamo detto che n=5,ne risulta n-i=4.
Finchè k<=4 aggiungi 1 e stampa spazi.
In questo caso k=1 -->stampa uno spazio e aggiungi 1---->k=2-----> stampa un altro spazio e aggiungi 1 (lo spazio sarà stampato accanto dato che nn ho dato istruzioni diverse quali newline),aggiungi 1 e così via fino a 4.
Continua poi a leggere il programma.

4)ora tocca stampare gli asterischi. La prima riga stamperà solo un * in quanto all'inizio il valore di i è 1.

for (k=1; k<2*i;k++){
printf("*");

Allora poichè La prima volta che viene eseguito il ciclo i=1,k=1 e k deve essere < 2, sarà stampato un solo asterisco. 
(La seconda volta i=2, K sarà sempre =1 perchè è ricominciato il ciclo e k è stato reinizializzato, k deve essere minore di 4,stamperà 3 asterichi.)

Ora il calcolatore continuerà la lettura del programma salterà la parte del programma in cui m=1 e eseguirà la newline portando il cursore a capo.

5) per stampare l'altra parte del rombo inverto il ciclo. Dovrò stampare un solo spazio all'inizio poi dovrò aumentare.
if (m==1)
for (k=1;k<=i;k++);
printf(" ");

Quindi nel momento in cui nella prima parte del rombo il contatore di rige i diventa = n (5 nel nostro caso) il contatore m sale di 1 e quindi passa a m==1,quindi questa seconda parte.

Ora i è di nuovo 1 essendo cambiato m. Come regola ogni qual volta si passa a un ciclo più esterno la variabile di quello più interno viene re-inizializzata. Essendo i=1 sarà stampato un solo spazio. Poi quando il ciclo ricomincierà,il contatore aumenterà e ne saranno stampati altri.

6) ciclo per stampare asterischi 
for (k=1;k<=(n-i)*2;k++){ //k<(5-1)*2--->k<8 saranno stampati 7 asterischi
printf("*"); }
}
printf("\n");
}

return 0;
}



Esercizio completo: rombo.cpp

#include <stdio.h>
int main(void) {
    int m,i,k,n=1;
    printf("Inserisci il numero che costituirà il raggio");
    scanf("%d", &n);
    
    for(m=0 ; m<2 ; m++){
            for(i=1; i<=n ; i++){
                     if (m==0){
                     for (k=1; k<=n-i;k++){
                         printf(" ");
                         }
                         for(k=1; k <2*i;k++){
                            printf("*");
                            }
                         }
                         if (m==1){
                                   for(k=1;k<=i;k++){
                                   printf(" ");
                                   }
                                   for(k=1; k<(n-i)*2;k++){
                                            printf("*");
                                            }
                                            }
                                            printf("\n");
                         }
                         }
                         fflush(stdin);
                         getchar();
                         return 0;
                         }
                         






fonte: https://www.iprogrammatori.it/forum-programmazione/cplusplus/disegnare-rombo-asterischi-con-cicli-t13860.html#p8481705

Commenti

Post popolari in questo blog

Simulazioni di reti (con Cisco Packet Tracer)

Esercizi sulla rappresentazione della virgola mobile IEEE 754 (Floating Point)