Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1

    stesso sorgente in un pc dà errore nell'altro no.

    ciao. oggi ho finito un sorgente, compilato era tutto a posto, funzionava alla perfezione.
    poi sono andato a casa e l'ho compilato provato, windows 7 dava errore.
    l'ho ricompilato su un altro pc a casa e funzionava.

    i 2 pc su cui funziona sono entrambi winxp 32bit;
    quello su cui non funziona è un win7 64bit.
    il software che uso per compilare è lo stesso in tutti e tre i casi (stessa versione) devc++.

    cosa può essere?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326

    Moderazione

    E che ne sappiamo noi?

    Non hai postato il sorgente.
    Non si sa che tipo di progetto sia
    Non hai nemmeno specificato il linguaggio con cui stai programmando.

    Specifica almeno l'essenziale per sapere di cosa si sta parlando.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Oh no faccio ammenda...
    Comunque è un'esercitazione in C eccola; chiedo scusa in anticipo se ci sono delle corbellerie, sono appena agli inizi.. però il compilatore la compila. in 2 pc su 3 il programma funziona, mentre nell'altro (64 bit) dà errore! ho provato a azionare il debugger di devc++ ma o non lo so usare, oppure si blocca subito dando errore di frammentazione alla main!

    Codice PHP:

    #include <stdio.h>
    #define SIZE 20
    #define MAX 10
    #define MIN 0
    long InputInt(int miint ma);
    int MinValue(int array[],int length,int min);
    void SortArray (int sorted[],int length);
    float CalcMedia(int array[], int length);
    int Max(int array[],int length);
    int Frequenza(int array[],int length,int max);
    float CalcMediana(int array[], int length);
    main() {
        
    int var,count,i,moda,max;
        
    int array[count],sorted[count];
        
    count=0;
        
    float media,mediana;
            
    i=0;
        do {
            
    printf("Scrivi l'array n.%d immetti 0 per concludere l'immissione.\n",i);
            var=
    InputInt(MIN,MAX);
            if (var!=
    0) {
                array[
    i]=var;
                
    count++;
            }
            
    i++;
        }
        while (
    i<SIZE && var!=0) ;
        for (
    i=0;i<count;i++) {
            
    sorted[i]=array[i];
        }
        
    SortArray(sorted,count);
        for (
    i=0;i<count;i++) {
            
    printf("array ordinato n.%d => %d\n",i,sorted[i]);
        }
        
    media=CalcMedia(array,count);
        
    printf("La media e\' => %2f\n",media);
        
    mediana=CalcMediana(sorted,count);
        
    printf("La mediana e\' => %4f\n",mediana);
        
    max=Max(array,count);
        
    moda=Frequenza(array,count,max);
        
    printf("La moda e\' => %4d\n",moda);
        
    system("PAUSE");
    }
    /*Funzione per il calcolo della mediana. Prende come attributi l'array immesso. 
    Per calcolare la mediana valuta prima (attraverso il modulo di length) se il numero
    è pari o dispari; se è pari, prende i due valori intermedi, li somma e divide per
    due; se è dispari prende il valore del valore mediano.*/
    float CalcMediana(int array[], int length) {
        
    float mediana;
        if (
    length%2==0) {
            
    mediana=((float)array[length/2-1]+(float)array[length/2])/2;
        } else {
            
    mediana=array[length/2];
        }
        return 
    mediana;
    }
    /*Funzione per il calcolo della moda. Il valore con maggiore frequenza viene
    restituito dalla funzione. Per calcolare tale valore si avvale della funzione 
    max che permette la creazione di un array con chiave max (rappresenta il voto
    massimo) quindi se il voto massimo è 8, l'array avrà lunghezza 0-8 (per fare ciò
    bisogna aggiungere 1 a max)..*/
    int Frequenza(int array[],int length,int max) {
        
    int j,maxvalue,store;
        
    int frequency[max+1];
        for (
    j=0;j<max+1;j++) 
        
    /*Questo ciclo si occupa di settare tutti i valori 
                                dell'array creato a 0.*/ 
    {
            
    frequency[j]=0;
        }
        for (
    j=0;j<length;j++) 
        
    /*Questo ciclo scansiona l'array e aggiunge 1 all'array
                                 frequenza alla chiave del valore riscontrato.*/ 
    {
            
    frequency[array[j]]++;
        }
        
    maxvalue=0;
        
    /*Questa variabile viene settata a zero e si occuperà di
                                 valutare quale elemento dell'array avrà la maggiore frequenza
                                 attraverso il ciclo for successivo.*/
        
    for (j=1;j<max+1;j++) {
            if (
    frequency[j]>maxvalue) {
                
    maxvalue=frequency[j];
                
    store=j;
                
    /*Viene storata la key dell'elemento dell'array con valore massimo
                                  ad esempio se maxvalue è 3 e la chiave è 6 significa che il valore
                                  dell'array 6 è frequente 3 volte.*/
            
    }
        }
        return 
    store;
    }
    /*La funzione si occupa semplicemente di trovare il valore massimo, in maniera tale da settare
    l'array per il calcolo della moda al valore massimo. Si avvale di una variabile max inizializzata
    a zero che cambia ogni volta che il ciclo rileva un valore superiore.*/
    int Max(int array[],int length) {
        
    int i;
        
    int max;
        
    max=0;
        for (
    i=0;i<length;i++) {
            if (array[
    i]>max) {
                
    max=array[i];
            }
        }
        return 
    max;
    }
    /*Funzione che calcola la media; setta una variabile somma a 0, somma tutti i valori
    dell'array (ciclo for) e divide il risultato per la lunghezza. Siccome la media è un
    valore float, si usa il casting delle variabili somma e length.*/
    float CalcMedia(int array[], int length) {
        
    int i;
        
    int somma=0;
        
    float media;
        for (
    i=0;i<length;i++) {
            
    somma+=array[i];
        }
        
    media=(float)somma/(float)length;
        return 
    media;
    }
    /*Funzione per l'ordinamento dell'array per il calcolo della mediana. Crea una
    copia dell'array immesso; il ciclo for controlla che il valore scandagliato sia
    quello minore di tutti attraverso l'interrogazione della funzione MinValue. Il secondo
    ciclo for copia nuovamente l'array che era stato modificato dalla funzione MinValue.
    La copia dell'array viene distrutta (compare solo nella funzione).*/
    void SortArray (int array[],int length) {
        
    int i;
        
    int copy[length];
        for (
    i=0;i<length;i++) {
            
    copy[i]=MinValue(array,20,MAX+1);
        }
        for (
    i=0;i<length;i++) {
            array[
    i]=copy[i];
        }
    }
    /*La funzione scandaglia l'array immesso e trova il valore minore; lo preleva e
    setta la chiave del valore in questione a 0; ritorna il valore min. alla funzione
    chiamante.*/
    int MinValue(int array[],int length,int min) {
        
    int i,key;
        for (
    i=0;i<length;i++) {
            if (array[
    i]<=min && array[i]!=0) {
                
    min=array[i];
                
    key=i;
            }
        }
        array[
    key]=0;
        return 
    min;
    }
    /********************************************************************
     * InputInt: input di int compreso tra mi e ma, ritorna il valore
     *            introdotto, ripete l'input se il valore non e' valido.
     ********************************************************************/
    long InputInt(int miint ma) {
        
    int num;
        
    /*numero introdotto*/
        
    int  risulta;
        
    /*risultato della scanf*/
        
    int  valido;
        
    /*flag di numero valido*/
        
    do {
            
    risulta scanf("%d",&num);
            
    /*legge numero*/
            
    if (risulta != EOF) {
                
    /*ripulisce se non EOF*/
                
    while (getchar() != '\n')
                                                                                                        ;
            }
            
    valido = (risulta == && num >= mi
                                                                              
    && num <= ma);
            
    /*controlla se ok*/
            
    if (! valido) {
                
    /*segnala errore*/
                
    printf("Devi introdurre un numero intero"
                                                                                                           " compreso tra %ld e %ld: \a"
    ,mi,ma);
            }
        }
        while (! 
    valido);
        
    /*ripete se non ok*/
        
    return num;
        
    /*ritorna valore*/


  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    la prima cosa che mi viene da pensare (non vedendo il codice) è che hai fatto casini coi puntatori, specie se il tuo codice li incrementa/decrementa(non aggiungo altro per non essere imprecisa)
    prova a leggere
    qui
    RTFM Read That F*** Manual!!!

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da variabile
    dà errore!
    Vuoi dirci con precisione quale errore o deve rimanere un segreto ?

    errore di frammentazione alla main!
    Errore di frammentazione? E che è?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    "il programma ha causato un errore di segmentazione"
    ho confuso la parola..
    quindi devc++ lo compila, mentre windows non riesce a eseguirlo.

  7. #7
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    int array[count] è giusto?
    Per gli Spartani e Sparta usa spartan Il mio github

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    segmentation fault causata principalmente da:
    1. usare memoria già liberata (su cui si è fatta una chiamata a free)
    2. usare in maniera scorretta i puntatori
    3. accessi hardware non corretti.

    Sono quasi sicura che nel tuo caso non lavori bene sui puntatori (come immaginavo) scordandoti che il passaggio 32/64 bit in C non è indolore (ecco la pagina che ti avevo consigliato).
    Sarebbe interessante capire a che riga hai la segmentation fault (o vai di debug o fai delle printf prima di ogni istruzione, l'ultima che vedi ti dice che l'istruzione successiva causa una segfault)
    RTFM Read That F*** Manual!!!

  9. #9
    valia, ho provato a togliere tutto dalla main, e lasciare solo la dichiarazione delle variabili, e succede sempre la stessa cosa.

    ma come si usa il debug?
    io l'ho azionato e dopo un po' è comparso a sinistra:

    *count=?

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    se vuoi fare prima fai come ti ho detto, dichiara le variabili e prima di ogni istruzione metti delle printf, non ne esci sennò
    codice:
    int var,count,i,moda,max;
    int array[count],sorted[count];
    quanto vale count?

    prova con

    codice:
    int var,i,moda,max;
    int count = SIZE; 
    int array[count],sorted[count];
    e metti le printf come ti dicevo
    RTFM Read That F*** Manual!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.