Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Programma gestione lampadine [C]
Forum - C/C++ - Programma gestione lampadine [C]

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
ancestral (Normal User)
Newbie


Messaggi: 5
Iscritto: 08/05/2012

Segnala al moderatore
Postato alle 21:12
Martedì, 08/05/2012
Buon Giorno a tutti
Io devo fare un programma che gestisce l'accensione, lo spegnimento e la visualizzazione dello stato di 8 lampadine.
0=spento
1=acceso
le 8 lampadine sono rappresentate dalla variabile 'c' dichiarata char.
questo è il mio codice

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <math.h>
  3. main ()
  4. {
  5.         char c, mask, d;
  6.         int z, n, j, i, h, f;
  7.         c=c & 0 ;
  8.         i=0;
  9.         h=0;
  10.         j=0;
  11.         for(j=1;j<9;j++)
  12.         {
  13.                 h=n-1;
  14.                 c=c & (char)pow(2.0, h);
  15.                 if (c==1)
  16.                 {
  17.                         printf("1");
  18.                 }
  19.                 else
  20.                 {
  21.                         printf("0");
  22.                 }
  23.         }
  24.         printf("\n");
  25.         do
  26.         {
  27.                 printf("inserisci 1 se vuoi accendere, 0 se vuoi spegnere, 2 se vuoi visualizzare \n");
  28.                 scanf("%d", &z);
  29.                 if (z==1)
  30.                 {
  31.                         printf("inserisci il numero della lampadina che vuoi accendere \n");
  32.                         scanf("%d", &n);
  33.                         h=n-1;
  34.                         d=c | (char)pow(2, h);
  35.                         printf("%d", d);
  36.                         if (d==0)
  37.                         {
  38.                                 printf("La lampadina è gia accesa \n");
  39.                         }
  40.                         else
  41.                         {
  42.                                 printf(" Hai acceso la lampadina \n");
  43.                                 c=d;
  44.                         }
  45.                 }
  46.                 else
  47.                 {
  48.                         if (z==0)
  49.                         {
  50.                                 printf("inserisci il numero della lampadina che vuoi spegnere \n");
  51.                                 scanf("%d", &n);
  52.                                 h=n-1;
  53.                                 d=c & (char)pow(2, h);
  54.                                 printf("%d", d);
  55.                                 if (d!=0)
  56.                                 {
  57.                                         printf("La lampadina è gia spenta \n");
  58.                                 }
  59.                                 else
  60.                                 {
  61.                                         printf("Hai spento la lampadina \n");
  62.                                         c=d;
  63.                                 }
  64.                         }
  65.                         else
  66.                         {
  67.                                 for(j=0;j<8;j++)
  68.                                 {
  69.                                         c=c & (char)pow(2.0, j);
  70.                                         for(i=1;i<9;i++)
  71.                                         {
  72.                                                 c=c & (int)pow(2.0, i);
  73.                                                 if (c==1)
  74.                                                 {
  75.                                                         printf("1");
  76.                                                 }
  77.                                                 else
  78.                                                 {
  79.                                                         printf("0");
  80.                                                 }
  81.                                         }
  82.                                         printf ("\n");
  83.                                         if (c==1)
  84.                                         {
  85.                                                 printf("1");
  86.                                         }
  87.                                         else
  88.                                         {
  89.                                                 printf("0");
  90.                                         }
  91.                                         printf("\n");
  92.                         }
  93.                         }
  94.                 }
  95.                 printf(" \n");
  96.                 printf("Digita 0 se vuoi ripetere l'esecuzione, altrimenti digita 1 \n");
  97.                 scanf("%d", &i);
  98.         }while (i==0);
  99. }



putroppo non so dirvi bene dove sia l'errore, ma penso che non funzioni bene lo spegnimento e la visualizzazione.
Riuscite a correggermelo o almeno farmi capire dove sbaglio??
Grazie


Hacking is not a crime!
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5460
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:31
Martedì, 08/05/2012
Che velocità ... neanche hai atteso una risposta in

http://forum.html.it/forum/showthread.php?s=&threadid=1507123


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
Dark_light (Member)
Pro


Messaggi: 108
Iscritto: 11/04/2012

Segnala al moderatore
Postato alle 21:41
Martedì, 08/05/2012
nessuno è diventato l'addetto che combatte e scova il cross posting :)


Il silenzio non è sempre tempo perso
PM Quote
Avatar
ancestral (Normal User)
Newbie


Messaggi: 5
Iscritto: 08/05/2012

Segnala al moderatore
Postato alle 21:44
Martedì, 08/05/2012
scusatemi , ma il fatto è che purtroppo mi server per domani e pensavo di farcela da solo, invece sono bloccato


Hacking is not a crime!
PM Quote
Avatar
beeonbit (Normal User)
Newbie


Messaggi: 7
Iscritto: 09/05/2012

Segnala al moderatore
Postato alle 11:58
Mercoledì, 09/05/2012
Ad una prima occhiata, mi vengono dubbi sull'utilizzo che hai fatto di alcune variabili...potresti perfavore descrivere brevemente le varie porzioni di codice? così riesco a capire come hai ragionato e come vorresti che funzionasse...
Poi credo che qualche switch ogni tanto potresti metterlo per strutturare il menu...  


"Vola solo chi osa farlo..."
PM Quote
Avatar
ancestral (Normal User)
Newbie


Messaggi: 5
Iscritto: 08/05/2012

Segnala al moderatore
Postato alle 17:15
Mercoledì, 09/05/2012
Testo quotato

Postato originariamente da beeonbit:

Ad una prima occhiata, mi vengono dubbi sull'utilizzo che hai fatto di alcune variabili...potresti perfavore descrivere brevemente le varie porzioni di codice? così riesco a capire come hai ragionato e come vorresti che funzionasse...
Poi credo che qualche switch ogni tanto potresti metterlo per strutturare il menu...  


Sull'utilizzo di alcune variabile premetto che alcune sono inutili perchè ho fatto diverse prove e mi sono scordato di cancellare le variabili superflue.
ti aggiungo le porzioni di codice

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <math.h>
  3. main ()
  4. {
  5.         char c, mask, d;
  6.         int z, n, j, i, h, f;
  7.         c=c & 0 ;
  8.         i=0;
  9.         h=0;
  10.         j=0;


Inclusione librerie, dichiarazioni variabili, inizializzazione variabili a 0;

Codice sorgente - presumibilmente C/C++

  1. for(j=1;j<9;j++)
  2.         {
  3.                 h=n-1;
  4.                 c=c & (char)pow(2.0, h);
  5.                 if (c==1)
  6.                 {
  7.                         printf("1");
  8.                 }
  9.                 else
  10.                 {
  11.                         printf("0");
  12.                 }
  13.         }
  14.         printf("\n");


Ciclo che mi stampa in sequenza i bit contenuti in 'c' in modo da verificare l'inizializzazione a 0 di 'c';


Codice sorgente - presumibilmente Plain Text

  1. printf("inserisci 1 se vuoi accendere, 0 se vuoi spegnere, 2 se vuoi visualizzare \n");
  2.                 scanf("%d", &z);


Specie di menù con il quale chiedo all'utente cosa desidera fare;


Codice sorgente - presumibilmente C/C++

  1. if (z==1)
  2.                 {
  3.                         printf("inserisci il numero della lampadina che vuoi accendere \n");
  4.                         scanf("%d", &n);
  5.                         h=n-1;
  6.                         d=c | (char)pow(2, h);
  7.                         printf("%d", d);
  8.                         if (d==0)
  9.                         {
  10.                                 printf("La lampadina è gia accesa \n");
  11.                         }
  12.                         else
  13.                         {
  14.                                 printf(" Hai acceso la lampadina \n");
  15.                                 c=d;
  16.                         }
  17.                 }


Se l'utente digita 1 allora gli chiedo la lampadina da accende, poi in 'd' metto l' or tra 'c' e la potenza di 2 e controllo il risultato in modo che poi posso dire se l'aveva già accesa oppure no;


Codice sorgente - presumibilmente C/C++

  1. if (z==0)
  2.                         {
  3.                                 printf("inserisci il numero della lampadina che vuoi spegnere \n");
  4.                                 scanf("%d", &n);
  5.                                 h=n-1;
  6.                                 d=c & (char)pow(2, h);
  7.                                 printf("%d", d);
  8.                                 if (d!=0)
  9.                                 {
  10.                                         printf("La lampadina è gia spenta \n");
  11.                                 }
  12.                                 else
  13.                                 {
  14.                                         printf("Hai spento la lampadina \n");
  15.                                         c=d;
  16.                                 }
  17.                         }


Se l'utente digita 2, allora faccio la stessa cosa di sopra, solo che con l'and perchè devo controllare lo spegnimento;


Codice sorgente - presumibilmente C/C++

  1. for(j=0;j<8;j++)
  2.                                 {
  3.                                         c=c & (char)pow(2.0, j);
  4.                                         for(i=1;i<9;i++)
  5.                                         {
  6.                                                 c=c & (int)pow(2.0, i);
  7.                                                 if (c==1)
  8.                                                 {
  9.                                                         printf("1");
  10.                                                 }
  11.                                                 else
  12.                                                 {
  13.                                                         printf("0");
  14.                                                 }
  15.                                         }


Se l'utente digita 2 allora gli faccio visualizzare lo stato delle lampadine facendo l'and tra 'c' e la potenza di 2;

P.s: l'ultima parte di codice è superflua, rientra sempre nel campo dei vari esperimenti che ho provato a fare ;)


Hacking is not a crime!
PM Quote
Avatar
Goblin (Member)
Expert


Messaggi: 268
Iscritto: 02/02/2011

Segnala al moderatore
Postato alle 17:23
Mercoledì, 09/05/2012
Tenuto conto che il mio c risale a "illo tempore" circa 20 anni fa ... io modificherei il tuo sorgente in maniera drastica:
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7.             char c, mask, d;
  8.             int z, n, j, i, h, f;
  9.             c=0 ;
  10.             i=0;
  11.             h=0;
  12.             j=0;
  13.             printf("0 0 0 0 0 0 0 0 \n");
  14.             do
  15.             {
  16.                     printf("0) spegni lampadina \n");
  17.                     printf("1) accendere lampadina \n");
  18.                     printf("2) visualizza stato \n");
  19.                     printf("3) uscita \n");                    
  20.                     scanf("%d", &z);
  21.                     if (z==1)
  22.                     {
  23.                             printf("inserisci il numero della lampadina che vuoi accendere \n");                            
  24.                             scanf("%d", &n);
  25.                             h=n-1;
  26.                             d = (char)pow(2, h);
  27.                             if ((c & d) == d)
  28.                             {
  29.                                     printf("La lampadina %d è gia accesa \n", n);
  30.                             }
  31.                             else
  32.                             {
  33.                                     printf(" Hai acceso la lampadina %d \n", n);
  34.                                     c=c+d;
  35.                             }
  36.                     }
  37.                     else if (( z==0) |(z==2) )
  38.                     {
  39.                             if (z==0)
  40.                             {
  41.                                     printf("inserisci il numero della lampadina che vuoi spegnere \n");
  42.                                     scanf("%d", &n);
  43.                                     h=n-1;
  44.                                     d=(char)pow(2, h);
  45.                                     if ((c & d) == d)
  46.                                     {
  47.                                             printf("Hai spento la lampadina %d \n", n);
  48.                                             c=c-d;                                      
  49.                                     }
  50.                                     else
  51.                                     {
  52.                                             printf("La lampadina %d è gia spenta \n", n);                                        
  53.                                     }
  54.                             }
  55.                             else
  56.                             {
  57.                                     printf(" \n", n);
  58.                                     for(j=0;j<8;j++)
  59.                                     {
  60.                                             d=(char)pow(2.0, j);
  61.                                             if ((c & d)==d)
  62.                                             {
  63.                                               printf("1 ");
  64.                                             }
  65.                                             else
  66.                                             {
  67.                                               printf("0 ");
  68.                                             }
  69.                                     }
  70.                             }
  71.                     }
  72.                     else if (z==3)
  73.                     {break;}
  74.                     printf(" \n");
  75.             }while (i==0);
  76.   system("PAUSE");     
  77.   return 0;
  78. }



NB: ho tenuto come base il vecchio sorgente, ma volendo si potrebbe modificare inserendo 2 procedure che fanno tutto.

Esercizio .. trova le differenze :)


Ibis et redibis non morieris in bello
PM Quote
Avatar
ancestral (Normal User)
Newbie


Messaggi: 5
Iscritto: 08/05/2012

Segnala al moderatore
Postato alle 18:27
Mercoledì, 09/05/2012
Testo quotato

Postato originariamente da Goblin:

Tenuto conto che il mio c risale a "illo tempore" circa 20 anni fa ... io modificherei il tuo sorgente in maniera drastica:
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7.             char c, mask, d;
  8.             int z, n, j, i, h, f;
  9.             c=0 ;
  10.             i=0;
  11.             h=0;
  12.             j=0;
  13.             printf("0 0 0 0 0 0 0 0 \n");
  14.             do
  15.             {
  16.                     printf("0) spegni lampadina \n");
  17.                     printf("1) accendere lampadina \n");
  18.                     printf("2) visualizza stato \n");
  19.                     printf("3) uscita \n");                    
  20.                     scanf("%d", &z);
  21.                     if (z==1)
  22.                     {
  23.                             printf("inserisci il numero della lampadina che vuoi accendere \n");                            
  24.                             scanf("%d", &n);
  25.                             h=n-1;
  26.                             d = (char)pow(2, h);
  27.                             if ((c & d) == d)
  28.                             {
  29.                                     printf("La lampadina %d è gia accesa \n", n);
  30.                             }
  31.                             else
  32.                             {
  33.                                     printf(" Hai acceso la lampadina %d \n", n);
  34.                                     c=c+d;
  35.                             }
  36.                     }
  37.                     else if (( z==0) |(z==2) )
  38.                     {
  39.                             if (z==0)
  40.                             {
  41.                                     printf("inserisci il numero della lampadina che vuoi spegnere \n");
  42.                                     scanf("%d", &n);
  43.                                     h=n-1;
  44.                                     d=(char)pow(2, h);
  45.                                     if ((c & d) == d)
  46.                                     {
  47.                                             printf("Hai spento la lampadina %d \n", n);
  48.                                             c=c-d;                                      
  49.                                     }
  50.                                     else
  51.                                     {
  52.                                             printf("La lampadina %d è gia spenta \n", n);                                        
  53.                                     }
  54.                             }
  55.                             else
  56.                             {
  57.                                     printf(" \n", n);
  58.                                     for(j=0;j<8;j++)
  59.                                     {
  60.                                             d=(char)pow(2.0, j);
  61.                                             if ((c & d)==d)
  62.                                             {
  63.                                               printf("1 ");
  64.                                             }
  65.                                             else
  66.                                             {
  67.                                               printf("0 ");
  68.                                             }
  69.                                     }
  70.                             }
  71.                     }
  72.                     else if (z==3)
  73.                     {break;}
  74.                     printf(" \n");
  75.             }while (i==0);
  76.   system("PAUSE");     
  77.   return 0;
  78. }



NB: ho tenuto come base il vecchio sorgente, ma volendo si potrebbe modificare inserendo 2 procedure che fanno tutto.

Esercizio .. trova le differenze :)



Grazie mille Goblin!!!!!
Sei il mio salvatore.... ahahah adesso mi metto a trovarle tutte ahahah .... mi sa che finirò l'anno possimo.
Comunque, apparte le battute, vorrei chiederti delle cose:
1) cosa vuol dire questo passaggio di parametri
Codice sorgente - presumibilmente C/C++

  1. int main(int argc, char *argv[])



2)cosa è questo:
Codice sorgente - presumibilmente Plain Text

  1. {break;}



3)cosa è questo:
Codice sorgente - presumibilmente C/C++

  1. system("PAUSE");    
  2.   return 0;



4)Quando finisco l'esecuzione del programma e digito 3, prima di chiudere il programma mi esce
Codice sorgente - presumibilmente C/C++

  1. sh: 1: PAUSE: not found



Scusatemi se vi rompo ancora, ma oltre alla soluzione, mi interessa di più capire il funzionamento e la logica che c'è dietro

Ultima modifica effettuata da ancestral il 09/05/2012 alle 18:29


Hacking is not a crime!
PM Quote
Avatar
beeonbit (Normal User)
Newbie


Messaggi: 7
Iscritto: 09/05/2012

Segnala al moderatore
Postato alle 21:55
Mercoledì, 09/05/2012
Ah! Goblin mi ha preceduto con una bella modifica, mi sarei divertito a riprendere a scrivere un pò di codice :D Comunque il passaggio di parametri
Codice sorgente - presumibilmente C/C++

  1. int argc, char *argv[]

non è indispensabile nel tuo caso: è utilizzato per immettere dei parametri al richiamo del programma,
Codice sorgente - presumibilmente Plain Text

  1. argc

è il numero di parametri e
Codice sorgente - presumibilmente Plain Text

  1. argv

un puntatore al vettore dove saranno registrati i parametri. Mentre
Codice sorgente - presumibilmente Plain Text

  1. break

è utilizzato per uscire da un ciclo o da uno switch.
Avrei strutturato il tutto con uno switch per il menù e per uscire dal programma semplicemente in questo modo:
Codice sorgente - presumibilmente C/C++

  1. case 3:    
  2.                              break;
  3.                         }
  4.                        
  5.                         printf(" \n");
  6.                 }while (z!=3);    
  7.     }


Immagino che la tua richiesta sia non altro che un compito a casa di scuola vero? :rofl: quindi non scrivo il codice intero.


"Vola solo chi osa farlo..."
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo