Beh è molto semplice: le parentesi identificano un blocco di istruzioni che vengono considerate come una sola.
Di conseguenza, metterle o non metterle fa differenza solamente quando si ha a che fare con un blocco composto da più di un'istruzione.
Riprendendo il tuo esempio, senza le parentesi nell'istruzione for più esterna, esso sarebbe esattamente equivalente a questo:
codice:
char ch;
int n;
cout << "\n inserisci un numero naturale ";
cin >> n;
cout << "\n inserisci un carattere ";
cin >> ch;
for (int i=1; i<=n; i++)
for (int j=1; j<=i; j++) {
cout << ch;
cout << "\n";
}
cout << "\n";
non farti ingannare dall'indentazione: quella serve solo a poter leggere meglio il programma.
Questa è la sintassi dell'istruzione for:
codice:
for (init; test; inc) <istruzione>
dove
init: inizializzazione di una o più variabili;
test: guardia del for, che continua finchè essa rimane vera;
inc: incremento automatico di una variabile;
<istruzione>: una istruzione (sia essa una singola istruzione o un blocco di istruzioni)
Ovviamente per avere un blocco di istruzioni è necessario utilizzare le parentesi graffe.
Ciao.