Devo scrivere una funzione che calcola il floor della base di log 16 di un unsigned int passato. Ci sono delle restrizioni su quali operatori e quali costanti possiamo utilizzare, e possiamo usare solo i loop for
.Per il ciclo senza la seconda condizione, ad esempio il controllo booleano?
Per chiarezza, non è possibile utilizzare alcuna istruzione condizionale (se, altrimenti, passare ...). Il prototipo di funzione è:
int floor_log16(unsigned int x);
operatori ammessi: ++
--
=
&
|
~
^
<<
!
>>
costanti ammessi: 1
2
3
4
8
16
ho scritto una versione del programma come segue:
int floor_log16(unsigned int x) {
int index=1;
int count=(1!=1);
count--;
for(; index<=x; index<<=4) {
count++;
}
return count;
}
che sembra funzionare come desiderato. Tuttavia, mi sono reso conto che sulla base delle funzioni successive e della descrizione delle funzionalità necessarie che dobbiamo scrivere, ho notato che sotto "operatori consentiti" a volte erano elencati >
e <
.
Ne deduco questo implica che in quanto per la funzione floor_log16
di cui sopra, c'è stato non esplicitamente detto di usare >
o <
, posso solo supporre che la soluzione postato sopra non saranno accettate.
Questo mi lascia piuttosto confuso perché non capisco come si possa avere un ciclo for senza un controllo booleano?
Non è l'intera idea di un ciclo per iterare mentre una condizione è soddisfatta?
Per motivi di interesse, è possibile creare un'istruzione if utilizzando un ciclo for, quindi la restrizione dell'istruzione if è piuttosto banale (analogamente per 'else') - istruzione' if (condition); '=' for (; condizione;) {dichiarazione; pausa;} ', ma non credo che tu abbia intenzione di farlo. – Dukeling
Forse qualcosa come 'for (; x; x >> 4)'? che si fermerà quando 'x == 0' –
" Non capisco come si possa avere un ciclo for senza un controllo booleano? " - Il ciclo for stesso esegue un controllo booleano ... o continua o termina in base al valore di un'espressione. "Non è tutta l'idea di un ciclo per iterare mentre una condizione è soddisfatta?" - No, è per iterare mentre l'espressione è diversa da zero. Questo sarebbe chiaro se dovessi effettivamente leggere la documentazione piuttosto che filosofare su "l'intera idea" delle cose. Considera che gli studenti con le giuste capacità intellettuali otterranno voti migliori e otterranno il lavoro. –