[Coding] Variabili globali in c, mi aiutate?
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Visualizzazione risultati da 1 a 12 di 12

Discussione: Variabili globali in c, mi aiutate?

Cambio titolo
  1. #1
    Utente
    Registrato il
    07-15
    Messaggi
    132

    Variabili globali in c, mi aiutate?

    Salve ragazzi, per favore mi serve gentilmente il vostro aiuto, mi scuso se ho sbagliato sezione o quant'altro e mi scuso per il mio italiano.
    Potreste gentilmente illustrarmi come funzionano le variabili globali , i loro vantaggi e i loro difetti e valide alternative come se non erro il passaggio di parametri nelle funzioni. Grazie in anticipo a chi risponderà.

  2. #2
    panzone
    Ospite
    Una variabile globale è una variabile accessibile a qualsiasi funzione del programma. Normalmente infatti una funzione può accedere solo alle variabili presenti nel suo scope, mentre invece ogni funzione può accedere alle variabili globali del programma.

    Vantaggi:

    - La variabile è gestibile da ogni punto del programma. Se è un valore che deve essere acceduto da tante funzioni in diversi punti del programma, con una variabile globale non devi stare a passartele.

    Svantaggi:

    - Questo però significa anche che ogni funzione modifica il valore di quella variabile ed incrementa la complessità del codice.
    - Terribili per il multithreading
    - Rappresentano un potenziale pericolo per la sicurezza del programma.
    - Un disastro da debuggare
    - Le variabili globali, essendo accessibili da dovunque, restano in memoria fino al termine dell' esecuzione del programma: non si possono deallocare.

    E' davvero raro utilizzare variabili globali, visto che portano più svantaggi che vantaggi (questo non significa che non si debbano MAI usare: se il dato deve essere mantenuto in vita per tutta l' esecuzione del programma e son certo certo che sia unico (ehi, ho appena descritto un singleton, coincidenze ?) ha molto più senso una variabile globale che il passaggio di puntatori per tutto il programma)
    Ultima modifica di panzone; 5-07-2015 alle 17:18:24

  3. #3
    Utente
    Registrato il
    07-15
    Messaggi
    132
    Ad esempio come posso migliorare questo programma, ti prego aiutami a capire questo passaggio di parametri, perchè ho fatto tutto con variabili globali e da quello che hai scritto sono un cretino che non ci capisce un accidente ti prego di aiutarmi e per favore so di aver sbagliato tutto il codice ma non insultarmi .
    #include <stdio.h>


    int b,b2,a,a2,c,mcd,x,y,differenza;
    char segno1[8];
    char segno2[8];


    void eqprimogrado(){
    printf("Inserisci il segno e il valore del coefficiente e del termine noto di un equazione e riceverai il valore dell'incognita in output tranne nei casi di un equazione impossibile o inderterminata\n\n x=b/a\n\n");
    printf("Inserisci il segno del termine noto (es. +/- oppure positivo/negativo) ");
    scanf("%s",&segno1);
    printf("Valore del termine noto: ");
    scanf("%d",&b);
    printf("Inserisci il segno del coefficiente (es. +/- oppure positivo/negativo) ");
    scanf("%s",&segno2);
    printf("Valore del coefficiente: ");
    scanf("%d",&a);
    b2=b;
    a2=a;
    if(a==0 && b!=0){
    printf("L'equazione è impossibile");
    }
    else if (a==0 && b==0){
    printf("L'equazione è indeterminata, ha infinite soluzioni.\n");
    }
    else if (a!=0 && b!=0){
    while(b>0){
    if(a>b){
    c=a;
    a=b;
    b=c;
    }
    else{
    b=b-a;
    }
    }
    }
    mcd=a;
    b2=b2/mcd;
    a2=a2/mcd;
    differenza=strcmp(segno1,segno2);
    if(differenza==0){
    printf("L'equazione è determinata. x = + %d%/%d%\n",b2,a2);
    }
    else{
    printf("L'equazione è determinata. x = - %d%/%d%\n",b2,a2);
    }
    printf("Vuoi risolvere un altra incognita?\n1.Si\n2.No\n");
    scanf("%d",&y);
    switch(y){
    case 1:
    system("cls");
    eqprimogrado();
    break;
    case 2:
    system("cls");
    printf("Premi un tasto per uscire...");
    getch();
    exit(1);
    break;
    }
    }


    main()
    {
    printf("Benvenuto su DII, digita il tasto che corrisponde alla funzione che vuoi eseguire e premi invio\n");
    printf("1. DII equazione primo grado\n");
    scanf("%d",&x);
    switch(x){
    case 1:
    eqprimogrado();
    }
    }

  4. #4
    Utente
    Registrato il
    07-15
    Messaggi
    132
    Il codice non è commentato, ma tralasciando questo, in cosa devo correggermi, mi daresti una mano?

    Inviato dal mio Nexus 5 utilizzando Tapatalk

  5. #5
    A-10C (IQT BAQ BMC TAC20) L'avatar di Affa
    Registrato il
    02-08
    Località
    Trento
    Messaggi
    15.267
    Usa il tag [CODE]

    Yay!

  6. #6
    Utente
    Registrato il
    07-15
    Messaggi
    132
    [Code]
    #include &lt;stdio.h&gt;<br />
    <br />
    <br />
    int b,b2,a,a2,c,mcd,x,y,differenza;<br />
    char segno1[8];<br />
    char segno2[8];<br />
    <br />
    <br />
    void eqprimogrado(){<br />
    printf(&quot;Inserisci il segno e il valore del coefficiente e del termine noto di un equazione e riceverai il valore dell'incognita in output tranne nei casi di un equazione impossibile o inderterminata\n\n x=b/a\n\n&quot;<br />
    printf(&quot;Inserisci il segno del termine noto (es. +/- oppure positivo/negativo) &quot;<br />
    scanf(&quot;%s&quot;,&amp;segno1);<br />
    printf(&quot;Valore del termine noto: &quot; <br />
    scanf(&quot;%d&quot;,&amp;b);<br />
    printf(&quot;Inserisci il segno del coefficiente (es. +/- oppure positivo/negativo) &quot;<br />
    scanf(&quot;%s&quot;,&amp;segno2);<br />
    printf(&quot;Valore del coefficiente: &quot;<br />
    scanf(&quot;%d&quot;,&amp;a);<br />
    b2=b; <br />
    a2=a; <br />
    if(a==0 &amp;&amp; b!=0){<br />
    printf(&quot;L'equazione è impossibile&quot;<br />
    }<br />
    else if (a==0 &amp;&amp; b==0){<br />
    printf(&quot;L'equazione è indeterminata, ha infinite soluzioni.\n&quot;<br />
    }<br />
    else if (a!=0 &amp;&amp; b!=0){<br />
    while(b&gt;0){<br />
    if(a&gt;b){<br />
    c=a; <br />
    a=b; <br />
    b=c;<br />
    }<br />
    else{<br />
    b=b-a;<br />
    }<br />
    }<br />
    }<br />
    mcd=a;<br />
    b2=b2/mcd;<br />
    a2=a2/mcd;<br />
    differenza=strcmp(segno1,segno2);<br />
    if(differenza==0){<br />
    printf(&quot;L'equazione è determinata. x = + %d%/%d%\n&quot;,b2,a2);<br />
    }<br />
    else{<br />
    printf(&quot;L'equazione è determinata. x = - %d%/%d%\n&quot;,b2,a2);<br />
    }<br />
    printf(&quot;Vuoi risolvere un altra incognita?\n1.Si\n2.No\n&quot;<br />
    scanf(&quot;%d&quot;,&amp;y);<br />
    switch(y){<br />
    case 1:<br />
    system(&quot;cls&quot;<br />
    eqprimogrado();<br />
    break;<br />
    case 2:<br />
    system(&quot;cls&quot;<br />
    printf(&quot;Premi un tasto per uscire...&quot;<br />
    getch();<br />
    exit(1);<br />
    break;<br />
    }<br />
    }<br />
    <br />
    <br />
    main()<br />
    {<br />
    printf(&quot;Benvenuto su DII, digita il tasto che corrisponde alla funzione che vuoi eseguire e premi invio\n&quot;<br />
    printf(&quot;1. DII equazione primo grado\n&quot;<br />
    scanf(&quot;%d&quot;,&amp;x);<br />
    switch(x){<br />
    case 1:<br />
    eqprimogrado();<br />
    }<br />
    }

    Inviato dal mio Nexus 5 utilizzando Tapatalk

  7. #7
    A-10C (IQT BAQ BMC TAC20) L'avatar di Affa
    Registrato il
    02-08
    Località
    Trento
    Messaggi
    15.267
    Devi inserire il codice tra ["CODE"] e ["/CODE"] senza le virgolette nei tag.

    Yay!

  8. #8
    Utente
    Registrato il
    07-15
    Messaggi
    132
    ok grazie, posto il codice un pò corretto, adesso che ve ne pare?
    ["CODE"]#include <stdio.h>

    int getmcd( int, int );


    main()
    {
    int b,b2,a,a2,c,y,mcd,differenza;
    char segno1[8];
    char segno2[8];
    printf("Inserisci il segno e il valore del coefficiente e del termine noto di un equazione e riceverai il valore dell'incognita in output tranne nei casi di un equazione impossibile o inderterminata\n\n x=b/a\n\n");
    printf("Inserisci il segno del termine noto (es. +/- oppure positivo/negativo) ");
    scanf("%s",&segno1);
    printf("Valore del termine noto: ");
    scanf("%d",&b);
    printf("Inserisci il segno del coefficiente (es. +/- oppure positivo/negativo) ");
    scanf("%s",&segno2);
    printf("Valore del coefficiente: ");
    scanf("%d",&a);
    b2=b;
    a2=a;
    if(a==0 && b!=0){
    printf("L'equazione è impossibile");
    }
    else if (a==0 && b==0){
    printf("L'equazione è indeterminata, ha infinite soluzioni.\n");
    }
    else if (a!=0 && b!=0){
    mcd=getmcd(b,a);
    b2=b2/mcd;
    a2=a2/mcd;
    differenza=strcmp(segno1,segno2);
    if(differenza==0){
    printf("L'equazione è determinata. x = + %d%/%d%\n",b2,a2);
    }
    else{
    printf("L'equazione è determinata. x = - %d%/%d%\n",b2,a2);
    }
    }
    printf("Vuoi risolvere un altra incognita?\n1.Si\n2.No\n");
    scanf("%d",&y);
    switch(y){
    case 1:
    system("cls");
    main();
    break;
    case 2:
    system("cls");
    printf("Premi un tasto per uscire...");
    getch();
    exit(1);
    break;
    }
    }


    int getmcd(int n,int d)
    {
    int c;
    while(n>0){
    if(d>n){
    c=d;
    d=n;
    n=c;
    }
    else{
    n=n-d;
    }

    }
    }
    ["/CODE"]

  9. #9
    Utente
    Registrato il
    07-15
    Messaggi
    132
    Meno male che hai detto senza virgolette nei tag... scusa l'ho letto dopo , lo posto di nuovo e perdonami.

    Codice:
    #include <stdio.h>
    
    
    int getmcd( int, int );
    
    
    main()
    {
          int b,b2,a,a2,c,y,mcd,differenza;
          char segno1[8];
          char segno2[8];
          printf("Inserisci il segno e il valore del coefficiente e del termine noto di un equazione e riceverai il valore dell'incognita in output tranne nei casi di un equazione impossibile o inderterminata\n\n x=b/a\n\n");
          printf("Inserisci il segno del termine noto (es. +/- oppure positivo/negativo) ");
          scanf("%s",&segno1);
          printf("Valore del termine noto: "); 
          scanf("%d",&b);
          printf("Inserisci il segno del coefficiente (es. +/- oppure positivo/negativo) ");
          scanf("%s",&segno2);
          printf("Valore del coefficiente: ");
          scanf("%d",&a);
          b2=b; 
          a2=a;
          if(a==0 && b!=0){
                           printf("L'equazione è impossibile");
                           }
                           else if (a==0 && b==0){
                                                  printf("L'equazione è indeterminata, ha infinite soluzioni.\n");
                                                  }
                                                  else if (a!=0 && b!=0){
                                                                         mcd=getmcd(b,a);
                                                                         b2=b2/mcd;
                                                                         a2=a2/mcd;
                                                                         differenza=strcmp(segno1,segno2);
                                                                         if(differenza==0){
                                                                                            printf("L'equazione è determinata. x = + %d%/%d%\n",b2,a2);
                                                                                            }
                                                                                            else{
                                                                                            printf("L'equazione è determinata. x = - %d%/%d%\n",b2,a2);
                                                                                            }
                                                                         }
      printf("Vuoi risolvere un altra incognita?\n1.Si\n2.No\n");
      scanf("%d",&y);
      switch(y){
                case 1:
                       system("cls");
                       main();
                       break;
                case 2:
                       system("cls");
                       printf("Premi un tasto per uscire...");
                       getch();
                       exit(1);
                       break;
                }
    }
    
    
    int getmcd(int n,int d)
    {
        int c;
        while(n>0){
                   if(d>n){
                           c=d; 
                           d=n; 
                           n=c;
                           }
                           else{
                           n=n-d;
                                 }
       
                   }
    }

  10. #10
    E dove sarebbero le variabili globali?
    I racconti dei miei viaggi: GV, Facebook, Youtube , Twitter, Pinterest, Website
    Vuoi propormi la tua musica da inserire nel mio prossimo video? scrivimi in privato

  11. #11
    Utente
    Registrato il
    07-15
    Messaggi
    132
    No ora l'ho aggiustato... Le variabili erano in qui
    Codice:
    int b,b2,a,a2,c,mcd,x,y,differenza;
    char segno1[8];
    char segno2[8];
    
    
    void eqprimogrado(){
                        printf("Inserisci il segno e il valore del coefficiente e del termine noto di un equazione e riceverai il valore dell'incognita in output tranne nei casi di un equazione impossibile o inderterminata\n\n x=b/a\n\n");
                        printf("Inserisci il segno del termine noto (es. +/- oppure positivo/negativo) ");
                        scanf("%s",&segno1);
                        printf("Valore del termine : "); 
                        scanf("%d",&b);
                        printf("Inserisci il segno del coefficiente (es. +/- oppure positivo/negativo) ");
                        scanf("%s",&segno2);
                        printf("Valore del coefficiente: ");
                        scanf("%d",&a);
                        b2=b; 
                        a2=a; 
                        if(a==0 && b!=0){
                                         printf("L'equazione è impossibile");
                                         }
                        else if (a==0 && b==0){
                                               printf("L'equazione è indeterminata, ha infinite soluzioni.\n");
                                               }
                        else if (a!=0 && b!=0){
                                               while(b>0){
                                                          if(a>b){
                                                                  c=a; 
                                                                  a=b; 
                                                                  b=c;
                                                                  }
                                                          else{
                                                               b=b-a;
                                                               }
                                                          }
                                               }
                        mcd=a;
                        b2=b2/mcd;
                        a2=a2/mcd;
                        differenza=strcmp(segno1,segno2);
                        if(differenza==0){
                                         printf("L'equazione è determinata. x = + %d%/%d%\n",b2,a2);
                                         }
                                         else{
                                              printf("L'equazione è determinata. x = - %d%/%d%\n",b2,a2);
                                              }
                        printf("Vuoi risolvere un altra incognita?\n1.Si\n2.No\n");
                        scanf("%d",&y);
                        switch(y){
                                  case 1:
                                           system("cls");
                                           eqprimogrado();
                                           break;
                                  case 2:
                                           system("cls");
                                           printf("Premi un tasto per uscire...");
                                           getch();
                                           exit(1);
                                           break;
                                           }
    }
    
    
    main()
    {
          printf("Benvenuto su DII, digita il tasto che corrisponde alla funzione che vuoi eseguire e premi invio\n");
          printf("1. DII equazione primo grado\n");
          scanf("%d",&x);
          switch(x){
                    case 1:
                         eqprimogrado();
                         }
    }
    Inviato dal mio Nexus 5 utilizzando Tapatalk

  12. #12
    Utente
    Registrato il
    07-15
    Messaggi
    132
    Questo* scusa ho sbagliato a scrivere

    Inviato dal mio Nexus 5 utilizzando Tapatalk

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •