SlackNewbie ha scritto:Ciao Ansa89 potresti spiegarmi a che servono le righe di codice:
servono per caso a definire la costante che rappresenta la lunghezza del "lato" della figura??Scusa l'ignoranza ma sono ancora alle prime armi con l'uso del linguaggio( e della programmazione in generale).
Ho usato delle direttive per il preprocessore per definire una macro "LENGTH" che viene usata come lunghezza totale della riga.
La mia intenzione era quella di parametrizzare quell'informazione, in modo che si potesse scegliere quanto deve essere lunga la riga da stampare; tuttavia (in questo caso) la scelta va fatta durante la compilazione passando a gcc il parametro "-DLENGTH=X" dove "X" è la lunghezza desiderata (se non si passa niente viene preso il "6" come valore predefinito).
Una soluzione più completa potrebbe essere questa:
Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DEFAULT_LENGTH 1
int main() {
int i, l;
printf("Inserisci la lunghezza massima della riga: ");
scanf("%d", &l);
if (l <= 0)
l = DEFAULT_LENGTH;
printf("Metodo targzeta\n");
char *stars = calloc(l + 1, sizeof(char));
memset(stars, '*', l);
for (i = 0; i < l; i++)
printf("%*.*s\n", l, i + 1, stars);
free(stars);
printf("\n\nMetodo Ansa89\n");
int j;
for (i = 0; i < l; i++) {
for (j = l - 1; j >= 0; j--) {
if (j <= i)
printf("*");
else
printf(" ");
}
printf("\n");
}
printf("\n\nMetodo SlackNewbie\n");
for (i = 1; i <= l; i++) {
for (j = l - i; j > 0; j--)
printf(" ");
for (j = i; j > 0; j--)
printf("*");
printf("\n");
}
return 0;
}
SlackNewbie ha scritto:Ma non dovrebbe essere
...
cioè con i printf dell'if-else invertiti??Non riesco a capire perchè invece funziona come hai fatto tu.
Tutto dipende da come viene impostato il codice, se vuoi invertire i "printf", basta che inverti la condizione dell'"if" ("j <= i" diventa "j > i").
SlackNewbie ha scritto:Se mi posso permettere mi sembra un po "pesantuccio" come programma rispetto a quello di targzeta che fa uso solo del ciclo for (cosa che per altro è richiesta dall'esercizio).
La soluzione di targzeta rispetto alla mia gode delle seguenti proprietà:
- è più elegante
- richiede meno tempo di esecuzione (non ha cicli "for" annidati)
- richiede più risorse di memoria per righe più lunghe di 4 caratteri (questo è vero se il tipo "int" occupa 32bit)
SlackNewbie ha scritto:riporto di seguito il codice con cui ho provato a risolvere l'esercizio
...
Il problema è che gli asterischi non mi escono incolonnati
Il problema potrebbero essere i troppi spazi nel primo "printf"?
Inoltre puoi riutilizzare la variabile "j" al posto di "k" (vedi codice che ho postato sopra).