Programma controllo lampadine

di il
2 risposte

Programma controllo lampadine

Salve a tutti,
mi sono appena registrato e chiedo scusa se ho sbagliato qualcosa.
Io avrei bisogno di un aiutino in questo programma in C:
Dovrei creare un programma che mi gestisca 8 lampadine con una variabile "c" come char che, lavorando su 8 bit mi consente di andare a modificare il valore di ognuno di essi grazie ad una maschera e agli | o & .
Non capisco dove sbaglio, ma a quanto pare, l'inizializzazione a 0 di c non mi riesce in quanto, se stampo il valore, mi esce vuoto; poi se al primo avvio digito 0 per accendere una lampadina a mia scelta (le quali, teoricamente dovrebbero essere a 0), mi dice "Hai spento la lampadina";
non capisco dove ho sbagliato.
Eccovi il codice

#include <stdio.h>
main ()
{
	char c;
	int z, n, j, i;
	char mask;
	//c=0b0000;
	i=0;
	c=0;
	do
	{	
		printf("inserisci 1 se vuoi accendere, 0 se vuoi spegnere, 2 se vuoi visualizzare \n");
		scanf("%d", &z);
		if (z==1)
		{
			mask=1;
			printf("inserisci il numero della lampadina che vuoi accendere \n");
			scanf("%d", &n);
			mask=mask<<(n-1);
			c=c|mask;
			if (c==0)
			{
				printf("La lampadina è gia accesa \n");
			}
			else
			{
				printf(" Hai acceso la lampadina \n");
			}
		}
		else
		{
			if (z==0)
			{
				mask=0;
				printf("inserisci il numero della lampadina che vuoi spegnere \n");
				scanf("%d", &n);
				mask=mask<<(n-1);
				c=c&mask;
				if (c!=0)
				{
					printf("La lampadina è gia spenta \n");
				}
				else
				{
					printf("Hai spento la lampadina \n");
				}
			}
			else
			{	
				mask=0;
				for(j=1;j<9;j++)
				{
					mask=mask<<(j-1);
					c=c&mask;
					if (c==1)
					{
						printf("1");
					}
					else
					{
						printf("0");
					}
				}
			}
		}
		printf(" Digita 0 se vuoi ripetere l'esecuzione, altrimenti digita 1 \n");
		scanf("%d", &i);
	}
	while (i==0);
}
//char x=0xff;
//char x=01011111b;

2 Risposte

  • Re: Programma controllo lampadine

    Secondo me non ti sono chiari gli operatori bitwise..

    Da quello che ho capito tu hai una variabile a 8 bit inizializzata a tutti 0 il che vuol dire che 0=spento, 1=acceso..

    Per azzerare i bit puoi provare a fare un c & 0

    Quando scegli il la lampadina da accendere o spegnere devi calcolarti il valore corrispondente con la potenza..

    esempio: hai 00000000 tutte spente.. vuoi accendere la 2° da destra, allora devi fare c OR pow(2,1)

    in questo modo avrai 00000000 OR 00000010 = 00000010

    e così via..
  • Re: Programma controllo lampadine

    Tonix ha scritto:


    Secondo me non ti sono chiari gli operatori bitwise..

    Da quello che ho capito tu hai una variabile a 8 bit inizializzata a tutti 0 il che vuol dire che 0=spento, 1=acceso..

    Per azzerare i bit puoi provare a fare un c & 0

    Quando scegli il la lampadina da accendere o spegnere devi calcolarti il valore corrispondente con la potenza..

    esempio: hai 00000000 tutte spente.. vuoi accendere la 2° da destra, allora devi fare c OR pow(2,1)

    in questo modo avrai 00000000 OR 00000010 = 00000010

    e così via..
    Grazie del consiglio, in effetti non sono molto ferrato su questi concetti;
    comunque l'azzeramento con l' & tra c e 0 l'ho capito e mi funziona.
    ora il problema è che qualcosa (se non tutto) nell'algoritmo non funziona...... non riseco ad accendere la 2° lampadina come nel tuo esempio (non capisco se non riesco ad accenderla oppure a visualizzarla) fatto sta che non mi va nulla .... sto impazzendo
Devi accedere o registrarti per scrivere nel forum
2 risposte