Problema con linguaggio C

Lovaticss
Buon pomeriggio, nel fare gli esercizi di informatica sto riscontrando un problema dove non riesco ad uscirmene. Vi allego un immagine dove si vede l'esercizio che sto svolgendo:



Quello che non capisco è l'ultima riga, se qualcuno riesce ad aiutarmi ne sarei grata.
Buon pomeriggio! :D

Risposte
vict85
Eccoti la documentazione della funzione printf http://en.cppreference.com/w/c/io/fprintf

Lovaticss
Ciao e grazie per la risposta. Sono al primo anno di università e non capisco molto bene i termini tecnici ancora. Ho guardato il link che mi hai mandato, ma non sono riuscita a capirlo.
Non capisco nell'ultima riga il significato di if con la funzione printf. Dopo che faccio tutti i cicli for, non riesco a capire cosa stampa alla fine il programma. Non riesco a capire cosa centri il 2d, ecc. Potresti aiutarmi a capirlo e svolgerlo (la parte finale, quello della stampa, che è questo che non capisco), per favore?
Grazie :oops:

vict85
In quel codice ha evitato di usare le parentesi graffe, cosa che potrebbe essere discutibile in termine di stile. Nel caso manchino il compilatore suppone che le parentesi (implicite) includano la prima istruzione dopo il for o l'if.

Quindi il printf è chiamato se la condizione dell'if, ovvero a != 0[nota]Il C vede i booleani come degli interi ed è norma che 0 sia il valore falso e ogni altro numero sia vero.[/nota], è soddisfatta.

Il "%2d" significa che l'output mostrerà almeno due cifre (aggiungendo eventuali 0 prima del numero). Quindi mostrerà 2 come 02 mentre 123 lo continuerà a segnare come 123 e così via.

Da uno sguardo veloce direi che dovrebbe scriverti 01, andando a capo ogni volta, per un numero di volte pari al numero di numeri primi inferiori a N.

Lovaticss
Grazie per la risposta. Ho capito, non ho capito invece cosa significhi quel zero elevato alla 1. In teoria dato che 2d significa due cifre, tutti i possibili numeri che si possono stampare sono in base al ciclo for, sono quelli che vanno da zero a dieci, tranne l'undici che è maggiore di dieci. Quindi sono: 01, 02, 03, 04, 05, 06, 07, 08, 09, 10. Questo io lo deduco in base al ciclo for che dice i=1 se i<=N e allora i++ (cioè che incrementa). Giusto?
Grazie... :oops:

vict85
Non è un zero elevato a 1: quell'1 richiama la nota che è scritta sotto il messaggio.

Riguardo al risultato ho fatto un piccolo errore di disattenzione, stampa i numeri primi minori di N tenendo almeno 2 cifre (avevo pensato che stampasse a invece che i. Quindi per N=10 scrive
02
03
05
07
per N=20 scrive
02
03
05
07
11
13
17
19
e similmente per gli altri numeri.

Insomma se il numero non è primo allora a=0 e quindi non entra dentro l'if e quindi non esegue il printf.

Lovaticss
Grazie ancora per la risposta. Ah... perché i numeri primi? e non tutti? e perché non prendi anche la coppia 01? potresti spiegarmi meglio questo passaggio per favore?? non lo capisco :oops:

Lovaticss
Nessuno può aiutarmi???? :|

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