#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;
}
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;
}