• T4CH
  • NEWS
  • VIDEO
Forum > Software

problemi programmazione in C

Discussione inserita in 'Software' da trekking, 13 Maggio 2009.

  1. trekking techNewbie

    problemi programmazione in C

    Salve a tutti!

    Provo a rivolgermi a voi per via di un programma in C che ha lo scopo di effettuare la clusterizzazione di alcuni documenti. Dopo aver affrontato una lunga serie di problemi, sono arrivata al punto in cui tutta l'esecuzione scorre correttamente e produce quello che mi aspetto ma inspiegabilmente, ad un certo punto (che è sempre lo stesso ad ogni successiva esecuzione), la stampa su schermo si blocca...l'unico risultato che viene prodotto, praticamente all'infinito, è una serie di schermate completamente bianche! Il problema è che a questo punto gcc (sto lavorando con ubuntu) smette di segnalarmi qualunque tipo di errore...né segmentation fault né cose del genere...tutto completamente bianco e basta...io a questo punto non so proprio come intervenire per rimediare..! Qualcuno di voi saprebbe suggerirmi qualcosa?

    Grazie infinite...sulla fiducia..!
    trekking, 13 Maggio 2009
    #1
  2. ubu techNewbie

    posta il codice del tuo programma ...
    ubu, 13 Maggio 2009
    #2
  3. trekking techNewbie

    problemi programmazione in C

    Il programma è piuttosto lungo visto che ho deciso, non azzeccandoci forse molto, di passare alla modularizzazione solo dopo aver avuto la certezza che nel complesso funzionasse tutto correttamente..! All'inizio leggo alcuni files e attraverso un trie ne creo un vocabolario, quindi passando per un vector space model, arrivo ad una matrice quadrata in cui sono inseriti i valori di similarità tra un testo e ciascuno degli altri. La distanza tra testi è stata calcolata con la regola del coseno. Fin qua tutto sembra tornare...dopo però cerco di effettuare una clusterizzazione agglomerativa e mi calcolo, ad ogni livello, il cossiddetto global variance ratio criterio (GVRC) grazie al quale dovrei riuscire a stabilire quale sia la clusterizzazione migliore. Per questo tento di creare un ciclo con guardia data dal numero di cluster in gioco ed ogni volta riduco la dimensione della mia matrice di similarità (con un realloc) perchè individuo man mano il più altro valore tra quelli dei coseni ottenuti (che sia minore di 1 che è il valore naturale per la distanza di ciascun cluster da sè stesso) e cancello una delle righe ed una delle colonne corrispondenti (essendo la matrice simmetrica un'altra riga ed un'altra colonna, contenenti lo stesso valore massimo di coseno, resteranno ma il loro contenuto verrà modifcato inserendovi il valore massimo tra il loro e quello del loro omologo cancellato, casella per casella. Ecco il pezzo di codice interessato dall'errore (è sicuramente migliorabile a livello formale (ci sono ad esempio dei printf con testi assurdi che ovviamente hanno il sol scopo di permettermi di controllare che il programma svolga in modo corretto i successivi passi del codice) ma per ora mi interesserebbe più che altro capire, in soldoni, perchè si"blocca"):



    while (numcluster > 1)

    {

    max = -1;

    somma = 0;

    for (i=0; i<numcluster; i = i+1)

    {

    for (k = 0; k<=i; k = k+1)

    {

    printf("bn");

    printf("Press ENTER to continue...n");

    getchar();

    somma = somma + similarita[k].distanza;

    if ((similarita[k].distanza > max)&&(similarita[k].distanza < 1))

    {

    max = similarita [k].distanza;

    y = i;

    z = k;

    printf("il valore di y è %dn",y);

    printf("Press ENTER to continue...n");

    getchar();

    printf("il valore di z è %dn",z);

    printf("Press ENTER to continue...n");

    getchar();

    }

    }

    }

    gmedia = (somma * 2) / ((numcluster * numcluster) + numcluster);

    printf("%fn",gmedia);

    printf("Press ENTER to continue...n");

    getchar();

    A = 0;

    printf("coccon");

    printf("Press ENTER to continue...n");

    getchar();

    for (i=0;i<numcluster;i = i+1)

    {

    for (k = 0; k<=i; k = k+1)

    {

    A = A + (pow ((similarita[k].distanza - gmedia),2));

    printf("%fn",A);

    printf("Press ENTER to continue...n");

    getchar();

    }

    }

    for (k = 0; k < numcluster; k = k+1)

    {

    printf("rosn");

    printf("Press ENTER to continue...n");

    getchar();

    if (k == z)

    {

    similarita[z][k].distanza = 1;

    printf("risaian");

    printf("Press ENTER to continue...n");

    getchar();

    }

    else if ((similarita[y][k].distanza) > (similarita [z][k].distanza))

    similarita[z][k].distanza = similarita[y][k].distanza;

    similarita[z][k].elcluster = similarita[z][k].elcluster + 1;

    printf("rosettan");

    printf("Press ENTER to continue...n");

    getchar();

    prox = &(similarita[z][k].nomiel.next);

    printf("baconn");

    printf("Press ENTER to continue...n");

    getchar();

    while (*prox != NULL)

    prox = &((*prox)->next);

    printf("uatàn");

    printf("Press ENTER to continue...n");

    getchar();

    vai = &(similarita[y][k].nomiel);

    printf("rostyn");

    printf("Press ENTER to continue...n");

    getchar();

    *prox = vai;

    printf("russon");

    printf("Press ENTER to continue...n");

    getchar();

    if (similarita[z][k].distmin.dist == -2)

    {

    similarita[z][k].distmin.dist = max;

    printf("%fn",(similarita[z][k].distmin.dist));

    printf("Press ENTER to continue...n");

    getchar();

    }

    else {

    ta = &(similarita[z][k].distmin.next);

    while (*ta != NULL)

    ta = &((*ta)->next);

    printf("gesson");

    printf("Press ENTER to continue...n");

    getchar();

    nuovadist (max, ta);

    }

    }

    for (i = 0; i < numcluster; i = i+1)

    {

    if (i != z)

    {

    if ((similarita[y].distanza) > (similarita [z].distanza))

    similarita[z].distanza = similarita[y].distanza;

    similarita[z].elcluster = similarita[z].elcluster + 1;

    printf("fredn");

    printf("Press ENTER to continue...n");

    getchar();

    if (similarita[z].distmin.dist == -2)

    {

    similarita[z].distmin.dist = max;

    printf("%fn",(similarita[z].distmin.dist));

    printf("Press ENTER to continue...n");

    getchar();

    }

    else

    {

    ta = &(similarita[z].distmin.next);

    while (*ta != NULL)

    ta = &((*ta)->next);

    printf("iuppyn");

    printf("Press ENTER to continue...n");

    getchar();

    nuovadist (max, ta);

    }

    }

    }

    printf("yesn");

    printf("Press ENTER to continue...n");

    getchar();

    similarita = (sim **)realloc(similarita,(sizeof(sim*)*(numcluster)));

    printf("cesn");

    printf("Press ENTER to continue...n");

    getchar();

    l = 0;

    b = 0;

    for (i=0;i<numcluster;i = i+1)

    {

    for (k = 0; k<numcluster; k = k+1)

    {if ((i != y) && (k != y))

    {

    similarita[l].distanza = similarita[k].distanza;

    similarita[l].elcluster = similarita[k].elcluster;

    similarita[l].nomiel = similarita[k].nomiel;

    similarita[l].distmin = similarita[k].distmin;

    if ((b+1) < (numcluster-1))

    {

    printf("%dn",b);

    printf("Press ENTER to continue...n");

    getchar();

    b = b+1;

    }

    else {if ((l+1) < (numcluster-1))

    {

    printf("%dn",l);

    printf("Press ENTER to continue...n");

    getchar();

    b = b+1;

    l = l+1;

    b = 0;

    }

    }

    printf("drupyn");

    printf("Press ENTER to continue...n");

    getchar();

    }

    }

    }

    printf("cabubin");

    printf("Press ENTER to continue...n");

    getchar();

    printf("cabubin");

    printf("Press ENTER to continue...n");

    getchar();

    l = 0;

    b = 0;

    C = 0;

    B = Clu (similarita, l , b);

    printf("B è uguale a supercalifragilistichespiralidoso %fn", B);

    printf("Press ENTER to continue...n");

    getchar();

    for (i=0;i<(numcluster-1);i = i+1)

    {

    printf("baboln");

    printf("Press ENTER to continue...n");

    getchar();

    for (k = 0; k<(numcluster-1); k = k+1)

    {

    printf("%fn",similarita[k].distmin.dist);

    printf("Press ENTER to continue...n");

    getchar();

    }

    }

    listacluster = (name **)malloc(sizeof(name *) * RIGHE);

    for (i= 0;i<RIGHE;i = i+1)

    {

    puntatore ba = NULL;

    listacluster = malloc(sizeof(name));

    listacluster->nome = i;

    printf("nome = %dn",listacluster->nome);

    printf("Press ENTER to continue...n");

    getchar();

    listacluster->next = ba;

    ba = listacluster;

    }

    if (B!=0)

    {

    GVRCp = (((((RIGHE * RIGHE) + RIGHE)/2) - numcluster+1)/(numcluster - 2)) * ((A-B)/B);

    printf("GVRCp = %fn",GVRCp);

    printf("Press ENTER to continue...n");

    getchar();

    if (GVRCp > GVRC)

    {

    free (listacluster);

    GVRC = GVRCp;

    clusterok = numcluster-1;

    listacluster = (name **)malloc(sizeof(name *) * clusterok);

    printf("frtghn");

    printf("Press ENTER to continue...n");

    getchar();

    printf("goblinn");

    printf("Press ENTER to continue...n");

    getchar();

    for (i = 0; i < clusterok; i = i+1)

    {

    printf("dublinon");

    printf("Press ENTER to continue...n");

    getchar();

    liscl = &(similarita[0].nomiel);

    listacluster = liscl;

    printf("yoven");

    printf("Press ENTER to continue...n");

    getchar();

    }

    }

    }

    numcluster = numcluster - 1;

    }





    SCUSATE LA LUNGAGGINE E GRAZIE ANCORA!
    trekking, 14 Maggio 2009
    #3
Password dimenticata?
SU TERMINI DI SERVIZIO CONTATTACI