[C] HELP! Stampa rettangolo

Bush1
Ciao a tutti!
Devo scrivere un programma che stampi un rettangolo la cui cornice sia costituita da caratteri asterisco e la parte interne da caratteri Q. Il numero di linee e di colonne del rettangolo viene deciso a tempo di esecuzione da utente.

come posso fare? :cry:


es. 5 righe e 6 colonne

* * * * * *
* QQQQ *
* QQQQ *
* QQQQ *
* * * * * *

[EDIT] ho scritto questo, ma non riesco a far venire la cornice di asterischi

#include

int main ()
{
int i,j, n,m;
printf("Inserire numero linee:\n");
scanf("%d", &n);
printf("Inserire numero colonne:\n");
scanf("%d", &m);

for(i = 1; i <= n; i++){

printf("\n");
printf("*");
for(j =1; j <= m; j++)

printf("Q");
printf("*");
}

printf("\n");
}

Risposte
vict85
Sai fare un programma che stampi il seguente rettangolo?

es. 5 righe e 6 colonne
QQQQQQ
QQQQQQ
QQQQQQ
QQQQQQ
QQQQQQ

Bush1
Si ho modificato ora la domanda sopra :D mi manca giusto la cornice..
come posso fare in modo che la prima e l'ultima riga siano solo composte da asterischi?

vict85
Il tuo programma dovrebbe avere la forma:

for(int i = 0; i < N; ++i)
{
  for(j = 0; j < M; ++j)  { stampa(i,j); }
  printf("\n");
} 


dove
stampa(i,j)
stampa a video * se ti trovi nella cornice e Q altrimenti.

Insomma dovrebbe avere una forma del tipo:
if( in_cornice(i,j) )
  printf("*");
else
  printf("Q");

dove per la condizione ci devi ragionare tu.

Bush1
ok grazie mille!

un'ultima cosa, se volessi far scegliere all'utente i caratteri da inserire non bastano due scanf di due char che sostituiranno poi i caratteri * e Q?

vict85
Ti bastano due scanf, due variabili e devi modificare adeguatamente i printf.

onlyReferee
"Bush":
ok grazie mille!

un'ultima cosa, se volessi far scegliere all'utente i caratteri da inserire non bastano due scanf di due char che sostituiranno poi i caratteri * e Q?

Consiglio mio: fai prima il programma richiesto, questa è una modifica di seconda mano molto semplice che viene dopo. A tal proposito ti suggerisco: pensa maggiormente alla condizione che ti fa stampare l'uno o l'altro carattere (non è complesso).

Bush1
Ho provato a far cosi ma non funziona.... :cry: :cry: :cry:

#include

int main ()
{
int m,n,i,j;
char car_1, car_2, spazio;

printf("Inserire numero righe:\n");
scanf("%d", &n);
printf("Inserire numero colonne:\n");
scanf("%d", &m);
printf("Inserire carattere esterno:\n");
scanf("%c", &car_1);
scanf("%c", &spazio);
printf("Inserire carattere interno:\n");
scanf("%c", &car_2);
scanf("%c", &spazio);

for(i = 1; i++<= s; ){


printf("\n");
printf("%c", car_1);
for(j =1; ++j < m; )

printf("%c", car_2);
printf("%c", car_1);

}
printf("\n");
}

onlyReferee
Intanto il numero delle righe è $n$ e non $s$ come hai scritto te le primo ciclo for. Poi: seppur apparentemente corretto quell'uso dell'incremento in notazione prefissa e postfissa direttamente nella condizione del for mi sembra che riduca la leggibilità del programma. Hanno messo una terza parte nel for apposta per questo tipo istruzioni... Poi: che output ti dà :?:

vict85
A me sembra di averti fornito un codice sensato, seppur incompleto. Sarebbe opportuno che lo guardassi e capissi che fa per correggere i tuoi errori.

P.S.: Metti il codice all'interno del tag CODE:
[code]
[/code]

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.