Info codice

di il
2 risposte

Info codice

Mi potete spiegare che cosa fà questo codice che io non lo capisco? mi potete spiegare passo-passo con dei commenti

#include <stdio.h>
#include <stdlib.h>
 
int main(void) {
        int interspazio,prespazio,lato,i;
        printf("inserisci il lato del rombo");
        fflush(stdout);
        scanf("%d",&lato);
 
        for( i = 0   ; i < lato ; i++   )
        {
 
                for(prespazio = lato-i  ;prespazio >= 0; prespazio--)
                                printf(" ");
 
                printf("*");
                if(i > 0)
                {
                        for(interspazio = 1+(i-1)*2  ;interspazio > 0; interspazio--)
                                printf(" ");
 
                        printf("*");
                }
 
                printf("\n");
        }
 
        for( i = lato-1   ; i>0  ; i--   )
        {
 
                for(prespazio = 0 ; prespazio <= (lato-i)+1 ; prespazio++)
                                printf(" ");
 
                printf("*");
 
                if(i > 1)
                {
                        for(interspazio =0   ; interspazio < ((i-1)*2)-1 ; interspazio++)
                                printf(" ");
 
                        printf("*");
                }
 
                printf("\n");
        }
        fflush(stdout);
        return EXIT_SUCCESS;
}


Cortesemente, vorrei cercare anche io di creare questa determinata figura, comprendendo con chiarezza che cosa fa questo codice.
In attesa di risposta

2 Risposte

  • Re: Info codice

    Hai detto che il codice crea una figura a schermo, quindi sai benissimo 'cosa' fa, il tuo problema e che non sai 'come' lo fa.
  • Re: Info codice

    Ecco il codice commentato.
    
    	int interspazio,prespazio,lato,i;
    	printf("inserisci il lato del rombo");
    	fflush(stdout);
    	scanf("%d",&lato);
    
    	// disegna la parte superiore del rombo
    	//
    	//    *
    	//   * *
    	//  *   *
    
    	// i indica la linea che stai stampando (era meglio chiamarlo 'linea' invece di 'i')
    
    	for(i = 0; i < lato; i++)
    	{
    		// se il lato del rombo è lungo 3 all' inizio metti 2 spazi (lato-1) e poi un asterisco, 
    		// nelle righe successive il numero di spazi cala di uno ogni linea
    
    		for(prespazio = lato-i; prespazio >= 0; prespazio--)
    			printf(" ");
    
    		printf("*"); // dopo il prespazio mette un asterisco
    
    		if(i > 0) // gli interspazi ci sono solo dopo il primo elemento (che è un solo asterisco)
    		{
    			// gli interspazi seguono questa progressione (1, 3, 5, 7) ovvero 1+(i-1)*2
    
    			for(interspazio = 1+(i-1)*2; interspazio > 0; interspazio--)
    				printf(" ");
    
    			printf("*"); // dopo gli interspazi mette il secondo asterisco
    		}
    
    		printf("\n"); // fine linea, scrive un a capo
    	}
    
    	// disegna la parte inferiore del rombo
    	//
    	//  *   * 
    	//   * * 
    	//    * 
    
    	// a questo punto hai capito il trucco e non servono altri commenti
    
    	for(i = lato-1; i > 0  ; i--)
    	{
    
    		for(prespazio = 0; prespazio <= (lato-i)+1; prespazio++)
    			printf(" ");
    
    		printf("*");
    
    		if(i > 1)
    		{
    			for(interspazio=0; interspazio < ((i-1)*2)-1 ; interspazio++)
    				printf(" ");
    
    			printf("*");
    		}
    
    		printf("\n");
    	}
    	fflush(stdout);
    }
    
    Dovrebbe essere tutto chiaro.
Devi accedere o registrarti per scrivere nel forum
2 risposte