PDA

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

andbin
16-02-2007, 14:39
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).

kniv7s
16-02-2007, 14:41
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!