Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106

    [C] Impostare le variabili come locali e non globali

    Ho finito il programma che mi permette di copiare i valori pari di vett_1 e vett_2 in un terzo vettore vett_3 e funziona correttamente adesso:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    /*Funzioni*/
    void inserimento();
    void scansione();
    void pari();
    /*Variabili*/
    int l,n,i,z;
    int vett_1[]; 
    int vett_2[];
    int vett_3[];
    main()
    { 
          inserimento();
          scansione();
          pari();  
        system("PAUSE");	
    }
    
    
    void inserimento()
    {
        printf("Numero valori da inserire nei vettori: ");
        scanf("%d",&l);
        vett_1[l]; 
        vett_2[l];
        vett_3[l*2];
        printf("\n");
        for(i=0;i<l;i++){
                         printf("Inserisci il %d%c valore del primo vettore: ",i+1,248);
                         scanf("%d",&vett_1[i]);
                         }
        printf("\n");
        for(i=0;i<l;i++){                
                         printf("Inserisci il %d%c valore del secondo vettore: ",i+1,248);
                         scanf("%d",&vett_2[i]);
                         }
    }
    
    
    void scansione()
    {
        z=0;
        for(i=0;i<l;i++){
                         if(vett_1[i]%2==0){
                                            vett_3[z]=vett_1[i];
                                            z++;
                                           }               
                         }
        for(i=0;i<l;i++){
                         if(vett_2[i]%2==0){
                                            vett_3[z]=vett_2[i];
                                            z++;
                                            }               
                         }
    }
    
    
    void pari()
    {
         int MAX=z;
         printf("\nNumeri pari inseriti nei due vettori %d \n",z); 
         printf("Elenco dei numeri pari :\n") ;               
         for(z=0;z<MAX;z++)                               
                printf("Elementi pari %d\n",vett_3[z]);
    }
    Mi chiedevo: C'è un modo per evitare di scrivere tutte le variabili utilizzate come globali ma farle utilizzare solo all'interno delle funzioni in modo che il programma continua a funzionare correttamente?? Perchè facendo diverse prove quando cercavo di scriverle solo all'interno delle funzioni il programma non funziona...avete qualche suggerimento?? Grazie in anticipo per gli aiuti.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Dichiarale nel main e passale alle funzioni come argomento.

    Prova e facci vedere come modifichi il codice ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    /*Funzioni*/
    void inserimento(int, int);
    void scansione(int, int, int);
    void pari(int);
    /*Variabili*/
    int vett_1[]; 
    int vett_2[];
    int vett_3[];
    main()
    {     
          int l,n,i,z;
          inserimento(l,i);
          scansione(z,i,l);
          pari(z);  
        system("PAUSE");	
    }
    
    
    void inserimento(int l, int i)
    {
        printf("Numero valori da inserire nei vettori: ");
        scanf("%d",&l);
        vett_1[l]; 
        vett_2[l];
        vett_3[l*2];
        printf("\n");
        for(i=0;i<l;i++){
                         printf("Inserisci il %d%c valore del primo vettore: ",i+1,248);
                         scanf("%d",&vett_1[i]);
                         }
        printf("\n");
        for(i=0;i<l;i++){                
                         printf("Inserisci il %d%c valore del secondo vettore: ",i+1,248);
                         scanf("%d",&vett_2[i]);
                         }
    }
    
    
    void scansione(int z, int i, int l)
    {
        z=0;
        for(i=0;i<l;i++){
                         if(vett_1[i]%2==0){
                                            vett_3[z]=vett_1[i];
                                            z++;
                                           }               
                         }
        for(i=0;i<l;i++){
                         if(vett_2[i]%2==0){
                                            vett_3[z]=vett_2[i];
                                            z++;
                                            }               
                         }
    }
    
    
    void pari(int z)
    {
         int MAX=z;
         printf("\nNumeri pari inseriti nei due vettori %d \n",z); 
         printf("Elenco dei numeri pari :\n") ;               
         for(z=0;z<MAX;z++)                               
                printf("Elementi pari %d\n",vett_3[z]);
    }
    Dici così? E i vett dove li dichiaro? Xò non funziona...

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    41
    Ci credo che non funziona.

    Se scrivi cosi', all'uscita delle funzioni inserimento(), scansione() e pari() nelle variabili che utilizzi come parametro avrai gli stessi valori che avevi in partenza, poiché tali variabili vengono passate per COPIA e non per RIFERIMENTO. Dovresti piuttosto usare una forma del tipo:

    void scansione(int *z, int *i, int *l)

    ed invocarla da main() con

    scansione(&z,&i,&l);

    perché possa funzionare.

    Altra cosa: volevi rendere locali solo le variabili l,n,i e z o anche i vettori?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Così stai utilizzando i puntatori giusto?? cmq volevo rendere locali anche i vettori...e grazie per l'aiuto !

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da giumanji
    Così stai utilizzando i puntatori giusto?? cmq volevo rendere locali anche i vettori...e grazie per l'aiuto !
    Devi usare i puntatori se devi passare argomenti che devono essere modificati.

    Prova anche da solo con i vettori ... poi vediamo cosa hai scritto (altrimenti non impari ...)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Ho capito ...ho un pò di problemi con i puntatori perchè sul libro vengono spiegati male. Appena trovo una lezione completa ed imparo ad usarli allora proverò a farlo in questo modo. Grazie per l'aiuto.

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    643

    Re: [C] Impostare le variabili come locali e non globali

    Originariamente inviato da giumanji
    Ho finito il programma che mi permette di copiare i valori pari di vett_1 e vett_2 in un terzo vettore vett_3 e funziona correttamente adesso:
    .....
    Ma quando compili questo codice, il tuo originale, non ti segnala 3 warning per tutti e 3 i vettori ?
    codice:
    [Warning] array 'vett_1' assumed to have one element

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    106
    Si me li da xkè sono dichiarati fuori dal main senza scrivere nnt dentro le parentsi quadre...se non utilizzo le funzioni e dichiaro i vettori all'interno del main dopo avere richiesto la lunghezza così:
    codice:
    ......
    ......
    main()
    {
    printf("Numero valori da inserire nei vettori: ");
        scanf("%d",&l);
        int vett_1[l]; 
        int vett_2[l];
        int vett_3[l*2];
        printf("\n");
        for(i=0;i<l;i++){
                         printf("Inserisci il %d%c valore del primo vettore: ",i+1,248);
                         scanf("%d",&vett_1[i]);
                         }
    ......
    ......
    ......
    non mi segna nessun errore xò siccome non so come passarli alle funzioni sono costretto a dichiararli fuori dal main...tu sai come eliminare questi warning??

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Il fatto di allocarli in quel modo è consentito solo con compilatori C99.

    Non lo puoi fare con tutti gli altri e non è raccomandabile.

    Dovresti utilizzare l'allocazione dinamica usando dei puntatori e le funzioni apposite (malloc, calloc).

    Alle funzioni passerai i puntatori dopo avere allocato nel main lo spazio necessario ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.