View Single Post
Old 18-09-2005, 14:56   #18
Qu@ker
Member
 
Iscritto dal: Apr 2004
Messaggi: 130
Se non chiarisci cosa intende con scambio virtuale e scambio fisico, e' difficile risponderti. D'altra parte, di sicuro noi a lezione non c'eravamo...
Una possibile interpretazione:
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

typedef struct struttura {
	char stringa[31];
	int len;
} elemento;

void inizializza_array(elemento **e, int len)
{
	int i;

	for (i = 0; i < len; ++i) {
		int l = 1 + rand()%30;
		e[i] = malloc(sizeof(elemento));
		e[i]->len = l;
		memset(e[i]->stringa, 'A', l);
		e[i]->stringa[l] = '\0';
	}	
}

void scambio_virtuale (elemento **e, int i, int j)
{
	elemento *tmp = e[i];
	e[i] = e[j];
	e[j] = tmp;
}

void scambio_fisico (elemento **e, int i, int j)
{
	elemento tmp = *(e[i]);
	*(e[i]) = *(e[j]);
	*(e[j]) = tmp;
}

void ordina(elemento **e, int len)
{
	int i, j;

	for (i = 0; i < len-1; ++i) {
		int min = i;
		for (j = i+1; j < len; ++j)
			if (e[j]->len < e[min]->len)
				min = j;
		scambio_virtuale(e, min, i);
		/* scambio_fisico(e, min, i); */
	}
}

void elimina_array(elemento **e, int len)
{
	int i;

	for (i = 0; i < len; ++i)
		free(e[i]);
}

#define DIM 10

int main(void)
{
	int i;
	elemento *array[DIM];

	srand(time(NULL));
	inizializza_array(array, DIM);
	puts("Prima della cura:");
	for (i = 0; i < DIM; ++i)
		puts(array[i]->stringa);
	ordina(array, DIM);
	puts("\nDopo la cura:");
	for (i = 0; i < DIM; ++i)
		puts(array[i]->stringa);
	elimina_array(array, DIM);
	return 0;
}
Qu@ker è offline   Rispondi citando il messaggio o parte di esso