Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2014
    Messaggi
    7

    [C] Ordinamento vettore tramite funzione senza passarlo come parametro

    Ciao a tutti nel risolvere questo esercizio mi è venuto un dubbio: (posto il testo)
    Si scriva un programma C che svolge il compito illustrato nel seguito e il cui codice sorgente sia suddiviso in due distinti file sorgenti. Il compito del programma è ordinare un array di elementi di tipo unsigned chiamato "dati_comuni" e successivamente stamparne il contenuto, un valore su ciascuna riga. Il primo dei due file sorgente deve contenere l'array e la funzione main. Il secondo file sorgente deve contenere la funzione di ordinamento, che deve rispettare il prototipo seguente:
    void ordina_dati(void);

    Tralasciando il fatto che non ho diviso il codice in due file sorgente volevo provare a scrivere la funzione di ordinamento. Ragionando però non capisco proprio come una funzione che non accetta nessun parametro possa ordinare un array. è sbagliato il testo dell'esercizio? Oppure c'è qualcosa che non so? il prototipo non dovrebbe essere del tipo " void ordina_dati(unsigned array[])"???

    Vi posto anche quello che ho provato a scrivere..però non funziona, cioè mi ristampa l'array senza ordinarlo
    Maledetto C!
    Grazie in anticipo! Help me!



    #define LEN 10
    #include <stdio.h>




    void ordina_dati(void);
    int main(void)
    {
    unsigned dati_comuni[LEN]={56,3,4,7,1,5,0};
    ordina_dati();
    int i;
    for (i=0; i<LEN; i++)



    printf("%u\n",dati_comuni[i]);





    return 0;
    }


    void ordina_dati(void){
    int i,j,min,temp;
    unsigned vet[LEN];


    for(i=0; i<LEN-1; i++)
    {
    min = i;

    for(j=i+1; j<LEN; j++)
    if(vet[j] < vet[min])
    min = j;

    temp=vet[min];
    vet[min]=vet[i];
    vet[i]=temp;
    }





    }


  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    Il linguaggio C permette l'uso di variabili globali, la soluzione al tuo problema è dichiarare l'array all'esterno della funzione main, e quindi di renderlo globale, visibile cioè a tutte le funzioni .

    Se la funzione dovrai inserirla in un altro file sorgente, in quel file dovrai dichiarare,



    codice:
    extern unsigned int array[];

    in modo da dire al compilatore che l'array usato è dichiarato in un altro file.
    Tecnologia

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2014
    Messaggi
    7
    Grazie della risposta!
    Ho provato a fare così ma ancora non riesco a risolvere, posto il codice.
    Questo è il file "main.c"
    codice:
    #include "funzione.c"
    #include <stdio.h>
    
    
    
    
    
    
    
    
    unsigned dati_comuni[]={2,5,7,1,65,34,8,10};
    int main(void)
    {
    
    ordina_dati();
    
    
        for (int i=0; i<sizeof(dati_comuni)/sizeof(dati_comuni[0]); i++) {
    printf("elemento %d vale %d\n",i,dati_comuni[i]);
        }
    
        return 0;
    }
    
    
    Questo invece è il file che ho chiamato "funzione.c". Il compilatore mi segnala errore quando provo a calcolarmi la lunghezza dell'array tramite operatore sizeof. Come posso fare per sapere la lunghezza di un array che è stato dichiarato in un altro file??
    codice:
    #include <stdio.h>
    #include <string.h>
    
    
    
    
    
    
    void ordina_dati(void){
        int i,j,min,temp,len;
    
        extern unsigned int dati_comuni[];
    
    
        len=sizeof(dati_comuni)/sizeof(dati_comuni[0]);
    
        for(i=0; i<len-1; i++)
        {
            min = i;
    
            for(j=i+1; j<len; j++)
                if(dati_comuni[j] < dati_comuni[min])
                    min = j;
    
            temp=dati_comuni[min];
    dati_comuni[min]=dati_comuni[i];
            dati_comuni[i]=temp;
        }
    
    }

  4. #4
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    Non ho mai usato sizeof su un elemento di un array, non so se sia possibile.

    Ho provato è corretto il tuo modo di usare sizeof(), spiacente ma non capisco quale sia il problema, prova a postare il messaggio
    dato dal compilatore, cosi agevolerai eventuali risposte.
    Ultima modifica di torn24; 04-09-2014 a 18:54 Motivo: Correzioni
    Tecnologia

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2014
    Messaggi
    7
    quindi potresti provare a dichiarare esplicitamente,codice:
    unsigned int dati_comuni[]={2,5,7,1,65,34,8,10};

    in quanto non so se int sia di default.

    Non ho capito bene cosa intendi per dichiarare esplicitamente. Dici nella funzione o nel main?
    Inoltre provando a fare come dici tu mi segnala il seguente errore nella funzione:
    "invalid application of sizeof to an incomplete type unsigned int [] "
    Ultima modifica di delghi; 04-09-2014 a 19:01

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2014
    Messaggi
    7
    Allora il problema è questo: io scrivo il main in un file chiamato 'main.c' e mi dichiaro il mio array senza la parola extern giusto?
    codice:
    unsigned int dati_comuni[]={2,5,7,1,65,34,8,10};
    Poi creo un nuovo file e lo chiamo 'funzione.c', qui mi dichiaro il mio array che deve essere esterno e scrivo la funzione di ordinamento.
    Il problema è: come faccio a far capire alla funzione che la dimensione dell array la deve "prendere" dal main dove questo è stato dichiarato e inizializzato? Devo includere il file come ho fatto nel main? (ovvero #include "funzione.c") (#include "main.c")
    codice:
    externunsignedint dati_comuni[];
    



  7. #7
    Quote Originariamente inviata da delghi Visualizza il messaggio
    quindi potresti provare a dichiarare esplicitamente,codice:
    unsigned int dati_comuni[]={2,5,7,1,65,34,8,10};

    in quanto non so se int sia di default.

    Non ho capito bene cosa intendi per dichiarare esplicitamente. Dici nella funzione o nel main?
    Inoltre provando a fare come dici tu mi segnala il seguente errore nella funzione:
    "invalid application of sizeof to an incomplete type unsigned int [] "
    Se definisci un array statico prima di utilizzare sizeof, allora il compilatore sostituisce, alla macro sizeof, il numero degli elementi presenti nell'array. Non vale lo stesso discorso se ti trovi in un file diverso, quindi devi specificare la dimensione dell'array.
    codice:
    extern unsigned int dati_comuni[8];
    In ogni caso l'utilizzo di sizeof sugli array, e la definizione di array globali, potrebbe non funzionare correttamente (e in egual modo) su tutti i compilatori.
    Ultima modifica di Xaratroom; 04-09-2014 a 19:19
    Experience is what you get when you don’t get what you want

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da delghi Visualizza il messaggio
    Grazie della risposta!
    codice:
    #include <stdio.h>
    #include <string.h>
    
    void ordina_dati(void){
        int i,j,min,temp,len;
    
        extern unsigned int dati_comuni[];
    Sbaglio o l'extern va usato FUORI da una funzione?
    (è un po' che non tocco C)
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Sbaglio o l'extern va usato FUORI da una funzione?
    (è un po' che non tocco C)
    No, in C lo puoi usare dove ti pare. Ovviamente, in questo caso, la visibilità è locale.
    Experience is what you get when you don’t get what you want

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da Xaratroom Visualizza il messaggio
    No, in C lo puoi usare dove ti pare. Ovviamente, in questo caso, la visibilità è locale.
    Grazie, stavo comunque googlando per curiosità

    Ho trovato questo: http://stackoverflow.com/questions/3...e-arrays-in-cs
    Magari è utile all'autore del thread
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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 © 2024 vBulletin Solutions, Inc. All rights reserved.