[C] esercizio stampare un rombo

di il
2 risposte

[C] esercizio stampare un rombo

Ciao ragazzi, sto imparando ora il linguaggio C...e ho già riscontrato alcuni problemi
Stavo facendo un esercizio dove mi era richiesto di stampare a video un rombo in qst modo:

es:
?n=5
||o||
|ooo|
ooooo
|ooo|
||o||

l'unica cosa che riesco a stampare è qst:
n=7
|||o|||
||ooo||
|o|o|o|
o||o||o
|o|o|o|
||ooo||
|||o|||

ecco il codice:

#include <stdio.h>

int main(void)
{
int n,i,j;

printf("Inserisci numero dimensione rombo (numero dispari): ");
scanf("%d", &n);

for(i=0;i<n;i++)
{
for(j=0; j<n; j++){
if(j==n/2+i || j ==i-n/2 /*|| j==2+i/n*/ || j==n/2-i ||
j==n/2+(n-i -1)|| j==n/2 || j ==(n+1) )

printf("*");
else
printf("|");

} printf("\n");
}
}

mi dareste una mano per favore?
grazie in anticipo

2 Risposte

  • Re: [C] esercizio stampare un rombo

    Ciao cri_cri, anche io sono alle prime armi con il C, un consiglio che ti posso dare e fare un controllo condizionale subito dopo il secondo for,( if (i==(n/2) || i==(n+1/2)) printf("*");) ma è un metodo poco ortodosso, funziona solo per n piccolo, un altro metodo sarebbe stampare un rombo di altezza 2n-1, quindi sempre dispari, in modo da non avere problemi di stampa, oppure fare un controllo e vedere se il dato in input % 2 = 0 lo incremento di 1 altrimenti non faccio niente.


    Per fare il programma ragiono un po'!!! Per n = 5
    All'inizio stampa 2(barra verticali) 1 * e 2(barre verticali) ||*||
    Poi decremento (|) di 2 e incremento (*) di 2 |***|
    poi decremento ancora(|) di 2, quindi ne stampo 0, e incremento gli * di 2, quindi stampo n *
    Dopo di che, incremento di 2 le (|) e decremento di 2 gli *


    Questo è l'unico metodo che mi viene in mente con le basi che ho, spero di esserti stato di aiuto poi più tardi posto il codice
  • Re: [C] esercizio stampare un rombo

    Dopo tutta la sera a scervellarmi ho fatto il programma:

    #include <stdio.h>

    int main()
    {
    int Altezza;
    int Asterischi = 1;
    int Barre= 0;
    int ContaLinee = 0;
    int ContaBarre = 0;
    int ContaAsterischi = 0;


    printf("Inserisci l'altezza del rombo:");
    scanf("%d",&Altezza);

    Barre = Altezza/2;
    /*stampo metà del rombo tranne il centro, incremento di 2 gli asterischi, e decremento di uno le barre verticali, e alla fine gli ogni ciclo vado a capo*/
    for (ContaLinee = 0; ContaLinee < Altezza/2; ContaLinee++, Barre--, Asterischi+= 2, printf("\n"))
    {
    for (ContaBarre= 0; ContaBarre < Barre; ContaBarre++)
    printf("|");
    for (ContaAsterischi = 0; ContaAsterischi < Asterischi; ContaAsterischi++)
    printf("*");
    for (ContaBarre = 0; ContaBarre < Barre; ContaBarre++)
    printf("|");
    }
    /*stampo l'altra metà del rombo, insieme alla linea di mezzo, l'altezza sarà sempre dispari */
    for (ContaLinee = 0; ContaLinee < (Altezza/2)+1; ContaLinee++, Barre++, Asterischi-= 2, printf("\n"))
    {
    for (ContaBarre = 0; ContaBarre < Barre; ContaBarre++)
    printf("|");
    for (ContaAsterischi = 0; ContaAsterischi < Asterischi; ContaAsterischi++)
    printf("*");
    for (ContaBarre = 0; ContaBarre < Barre; ContaBarre++)
    printf("|");
    }

    system("PAUSE");
    return 0;
    }
Devi accedere o registrarti per scrivere nel forum
2 risposte