View Full Version : [c] aiuto comprensione codice sorgente
Death By Stereo
16-02-2007, 14:30
Salve, sono un niubbo di c e non capisco alcuni passaggi di un codice che invece dovrei capire al 100%.
Prima cosa, qualcuno sa dirmi che razza di condizione è questa?
while( 1)
{
}
Seconda cosa, se qualcuno conoscesse l'algoritmo di ordinamento per inserimento, saprebbe dirmi perchè questo ciclo for:
for (i=inizio+1; i<fine; i=i+1)
{
strcpy(box, a[i]);
f = i;
.......
}
va fatto partire da inizio+1 anzichè da inizio?
Grazie
Prima cosa, qualcuno sa dirmi che razza di condizione è questa?
while( 1)
{
}Visto che la condizione è sempre vera, cicla all'infinito. A meno che, all'interno del ciclo, in base a qualche condizione si esegua ad un certo punto un break o un return che fa terminare il ciclo o la funzione.
Sarebbe la stessa cosa con un for così:
for (;;) { ... }
Seconda cosa, se qualcuno conoscesse l'algoritmo di ordinamento per inserimento, saprebbe dirmi perchè questo ciclo for:
for (i=inizio+1; i<fine; i=i+1)
{
strcpy(box, a[i]);
f = i;
.......
}
va fatto partire da inizio+1 anzichè da inizio?Senza vedere il resto del codice, è oggettivamente difficile da dire (almeno per me).
Potrebbe partire da inizio+1 perchè se effettuasse un confronto con l elemento precedente, uscirebbe dai limiti dell array.
yorkeiser
16-02-2007, 14:42
while(1) -> cicla all'infinito le istruzioni del blocco. Dal momento che il while cicla finchè la condizione tra parentesi è vera, e siccome 1 è sinonimo di vero in c (in realtà puoi scriverci qualsiasi numero diverso da 0), eseguirai all'infinito le istruzioni del blocco while
Di seguito ti riporto un insertion sort:
void insertion_sort(int x[], int n)
{
int i, j, app;
for (i=1; i<n; i++) {
app = x[i];
j = i-1;
while ((j>=0) && (x[j]>app)) {
x[j+1] = x[j];
j--;
}
x[j+1] = app;
}
}
Funziona così: prendi l'elemento i-esimo dell'array e lo confronti con quelli precedenti, inserendolo appena l'elemento con cui lo stai confrontando è minore. Quindi, al primo passo, prendi il secondo elemento (i=1), lo confronti col primo (i=0) e se è minore lo porti in testa all'array; se prendessi il primo elemento (i=0) con cosa lo confronteresti?
Questa è comunque solo una filosofia d'implementazione - quella classica; potresti tranquillamente partire dal primo elemento (i=0) e confrontare verso destra mettendo gli elementi in fondo all'array
Death By Stereo
16-02-2007, 14:53
Capito tutto, vi ringrazio molto, se avrò ancora bisogno (esame in avvicinamento) posterò ancora in questo thread per non continuare ad aprirne inutilmente.
Comunque per adesso sono a posto, grazie ancora. ;)
Ciao!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.