Programma che stampa una cornice concentrica

di il
9 risposte

Programma che stampa una cornice concentrica

Salve gente, sto cercando di risolvere un programma che stampa n cornici intorno a un carattere "+" , fin'ora senza successo.
se n=0 stampa solamente il "+", altrimenti una cornice formata da "-" nei lati orizzontali e "|" nei lati verticali.

es.

n=2

+ - - - + \n
| + - + | \n
| | + | | \n
| + - + | \n
+ - - - + \n

n=3

+ - - - - - + \n
| + - - - + | \n
| | + - + | | \n
| | | + | | | \n
| | + - + | | \n
| + - - - + | \n
+ - - - - - + \n

Ho provato con la classica soluzione due "For" annidati e con l'utilizzo di una matrice M[j] ahimè senza successo.

9 Risposte

  • Re: Programma che stampa una cornice concentrica

    E quei caratteri + che compiaono?
  • Re: Programma che stampa una cornice concentrica

    Sono gli angoli delle cornici, scusate, ho dimenticato di specificare.
    inoltre ovviamente i "\n" sono gli "a capo" da non dimenticare!
  • Re: Programma che stampa una cornice concentrica

    Okay, quindi + | e - ... ma tu hai scritto del codice da cui partire ?
  • Re: Programma che stampa una cornice concentrica

    L'ho appena finito e devo dire che l'ho trovato interessante.

    Un consiglio a Mrfeede: traccia le diagonali e vedi cosa noti...
  • Re: Programma che stampa una cornice concentrica

    Io l'ho sviluppato così, mi rendo conto che è una mezza follia ma non ho ancora trovato strategie più rapide, per lo meno arrivo fino a un certo punto e mi ricredo...
    
    #define _CRT_SECURE_NO_WARNINGS
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
    	int n, i, j;
    
    
    	printf("inserisci numero di cornici: ");
    	scanf("%d", &n);
    
    	if (n == 0) fputs("+\n", stdout);
    	else {
    
    		for (i = 0; i < n * 2 + 1; i++) {
    
    			printf("\n");
    			if (i == 0){                //riga 1
    
    				fputs("+", stdout);
    				for (int x = 0; x < n * 2 - 1; x++) fputs("-", stdout);
    				fputs("+", stdout);
    			}
    
    			if(i<n){                   //righe prima della metà
    				for (int v = 0; v < i; v++) fputs("|", stdout);
    				fputs("+", stdout);
    				for (int b = 0; b < n * 2 - i; b++) fputs("-", stdout);
    				fputs("+", stdout); 
    				for (int c = 0; c < i; c++) fputs("|", stdout);
    			}
    
    			if (i = n){                //riga a metà
    
    			}
    
    			if {                       //riga dopo la metà
    
    			}
    
    			if (i == n * 2 + 1){        //ultima riga 
    
    				fputs("+", stdout);
    				for (int x = 0; x < n * 2 - 1; x++) fputs("-", stdout);
    				fputs("+", stdout);
    			}
    		}
    
    	}
    	
    getchar();
    getchar();
    
    }
    
  • Re: Programma che stampa una cornice concentrica

    Per stampare una "x" ci potrei riuscire "mimomic", penso che mi serva differenziare in un qualche modo le parti orizzontali e le verticali ma è il mio dilemma dall'inizio del programma.
  • Re: Programma che stampa una cornice concentrica

    Mrfeede ha scritto:


    penso che mi serva differenziare in un qualche modo le parti orizzontali e le verticali
    Per quello ti dicevo di guardare se noti qualcosa tracciando le diagonali... queste separano esattamente i simboli - da quelli |.
    I simboli - sono nei triangoli sopra e sotto il centro, mentre i | sono a sinistra e a destra. Capito questo lo devi "solo" tradurre in codice.

    PS. L'idea di usare una matrice è buona: imposti delle regole e poi riempi ogni casella secondo queste regole. Alla fine stampi la matrice e hai finito.
  • Re: Programma che stampa una cornice concentrica

    Ti ringrazio molto per il consiglio minomic! ora butto giù un pò di codice e ti faccio sapere.
  • Re: Programma che stampa una cornice concentrica

    Ok, aspettiamo il risultato!
Devi accedere o registrarti per scrivere nel forum
9 risposte