Quadrato di asterischi con spazio al centro???

di il
6 risposte

Quadrato di asterischi con spazio al centro???

Salve ripropongo un problema sicuramente banale, ma essendo all' inizio del prima anno di programmazione, sto avendo difficoltà con la risoluzione di un piccolo problema, cioè inserire degli spazi vuoti all' interno del quadrato. Posto il codice scritto fin ad ora. Immagino ci voglia una if ma dopo vari tentativi non riesco a capire il problema e vorrei un aiuto per arrivare alla soluzione. Grazie.

P.S.  l' esercizio non prevede l' utilizzo del for.

#include <stdio.h>

int main (void)

{
	
int colonna;
int riga;
int dimensione;

printf ("inserisci la dimensione del quadrato: ");
scanf ("%d", &dimensione);

printf("la dimensione inserita e': %d e il quadrato sara'\n", dimensione);

riga = dimensione;


while (riga > 0 ){
	colonna = dimensione;
	


while (colonna > 0){
	printf("*");
--colonna;

}


puts("");
--riga;



}
}
	
	
	

 

6 Risposte

  • Re: Quadrato di asterischi con spazio al centro???

    I cicli while devono essere annidati, più o meno così:

    int col = colonna;
    int row = riga;
    while (riga){
    	while (colonna){
    		if ((row == riga)||(riga <= 0)){
    			int i = col;
    			while (i){
    				printf("*");
    				--i;
    			}
    		} else {
    			printf("*");
    			int i = col - 2;
    			while (i){
    				printf(" ");
    				--i;
    			}
    			printf("*");
    		}
    		printf("\n");
    		--colonna;
    	}
    	--riga;
    }

    Non ho testato, ma a grandi linee dovrebbe funzionare.

  • Re: Quadrato di asterischi con spazio al centro???

    Ciao grazie dell' aiuto, ho provato il codice dichiarando le variabili ma comunque non mostra il quadrato.

  • Re: Quadrato di asterischi con spazio al centro???

    Partendo dal tuo codice, puoi modificare i cicli while in questo modo, inserendo opportuni controlli condizionali:

    	while(riga > 0 )
    	{
    		colonna = dimensione;
    		
    		if(riga==dimensione || riga==1)
    		{
    			while(colonna > 0)
    			{
    	
    				printf("*");
    				--colonna;
    			}
    		}
    		else
    		{
    			while(colonna > 0)
    			{
    				if(colonna==dimensione || colonna==1)
    					printf("*");
    				else
    					printf(" ");
    				--colonna;
    			}
    		}
    		
    		puts("");
    		--riga;
    	}
    
  • Re: Quadrato di asterischi con spazio al centro???

    29/11/2022 - ciccio158 ha scritto:


    Ciao grazie dell' aiuto, ho provato il codice dichiarando le variabili ma comunque non mostra il quadrato.

    Come ti avevo detto, ho scritto il codice senza fare test. Modificalo così:

    int col = colonna;
    int row = riga;
        
    while (riga){
    	while (colonna){
    		if ((row == riga)||(riga <= 1)){
    			int i = col;
    			while (i){
    				printf("*");
    				--i;
    			}
    			--riga;
    		} else {
    		    printf("*");
    		    int i = col - 2;
    		    while (i){
    			    printf(" ");
    			    --i;
    		    }
    		    printf("*");
    		    --riga;
    		}
    		printf("\n");
    		--colonna;
    	}
    	    
    }
  • Re: Quadrato di asterischi con spazio al centro???

    Buonasera, siete stati gentilissimi entrambi. Proprio ora sto vedendo cosa ho sbagliato o a cosa non ho pensato, utilizzando i codici che mi avete fornito. Sicuramente rivedrò il capitolo. Grazie mille per il vostro aiuto.

  • Re: Quadrato di asterischi con spazio al centro???

    Ho provato a vedere, se rispetta le richieste 

    
    #include <stdio.h>
    
    int main (void)
    {
    int dimensione;
    int c1,c2;
    
    printf ("inserisci la dimensione del quadrato: ");
    scanf ("%d", &dimensione);
    printf("la dimensione inserita e': %d e il quadrato sara'\n", dimensione);
    dimensione--;
    c1=-1;
    while(c1++<dimensione)
     {
        c2=-1;
        while(c2++<dimensione)
         {
           printf("%c",c1%(dimensione)?c2%(dimensione)?' ':'*':'*');
         }
      printf("\n");
     }
     scanf ("%d", &dimensione); /* scanf solo per bloccare l'esecuzione */
     return 0;
    }
Devi accedere o registrarti per scrivere nel forum
6 risposte