Oppure

Loading
08/05/12 19:12
ancestral
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

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


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
aaa
08/05/12 19:31
nessuno
Che velocità ... neanche hai atteso una risposta in

forum.html.it/forum/…
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
08/05/12 19:41
Dark_light
nessuno è diventato l'addetto che combatte e scova il cross posting :)
aaa
08/05/12 19:44
ancestral
scusatemi , ma il fatto è che purtroppo mi server per domani e pensavo di farcela da solo, invece sono bloccato
aaa
09/05/12 9:58
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...
aaa
09/05/12 15:15
ancestral
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

#include <stdio.h>
#include <math.h>
main ()
{
	char c, mask, d;
	int z, n, j, i, h, f;
	c=c & 0 ;
	i=0;
	h=0;
	j=0;

Inclusione librerie, dichiarazioni variabili, inizializzazione variabili a 0;

for(j=1;j<9;j++)
	{
		h=n-1;
		c=c & (char)pow(2.0, h);
		if (c==1)
		{
			printf("1");
		}
		else
		{
			printf("0");
		}
	}
	printf("\n");

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


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

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


if (z==1)
		{
			printf("inserisci il numero della lampadina che vuoi accendere \n");
			scanf("%d", &n);
			h=n-1;
			d=c | (char)pow(2, h);
			printf("%d", d);
			if (d==0)
			{
				printf("La lampadina è gia accesa \n");
			}
			else
			{
				printf(" Hai acceso la lampadina \n");
				c=d;
			}
		}

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;


if (z==0)
			{
				printf("inserisci il numero della lampadina che vuoi spegnere \n");
				scanf("%d", &n);
				h=n-1;
				d=c & (char)pow(2, h);
				printf("%d", d);
				if (d!=0)
				{
					printf("La lampadina è gia spenta \n");
				}
				else
				{
					printf("Hai spento la lampadina \n");
					c=d;
				}
			}

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


for(j=0;j<8;j++)
				{
					c=c & (char)pow(2.0, j);
					for(i=1;i<9;i++)
					{
						c=c & (int)pow(2.0, i);
						if (c==1)
						{
							printf("1");
						}
						else
						{
							printf("0");
						}
					}

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 ;)
aaa
09/05/12 15:23
Goblin
Tenuto conto che il mio c risale a "illo tempore" circa 20 anni fa ... io modificherei il tuo sorgente in maniera drastica:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
            char c, mask, d;
            int z, n, j, i, h, f;
            c=0 ;
            i=0;
            h=0;
            j=0;
            printf("0 0 0 0 0 0 0 0 \n");
            do
            {
                    printf("0) spegni lampadina \n");
                    printf("1) accendere lampadina \n");
                    printf("2) visualizza stato \n");
                    printf("3) uscita \n");                    
                    scanf("%d", &z);
                    if (z==1)
                    {
                            printf("inserisci il numero della lampadina che vuoi accendere \n");                            
                            scanf("%d", &n);
                            h=n-1;
                            d = (char)pow(2, h);
                            if ((c & d) == d)
                            {
                                    printf("La lampadina %d è gia accesa \n", n);
                            }
                            else
                            {
                                    printf(" Hai acceso la lampadina %d \n", n);
                                    c=c+d;
                            }
                    }
                    else if (( z==0) |(z==2) )
                    {
                            if (z==0)
                            {
                                    printf("inserisci il numero della lampadina che vuoi spegnere \n");
                                    scanf("%d", &n);
                                    h=n-1;
                                    d=(char)pow(2, h);
                                    if ((c & d) == d)
                                    {
                                            printf("Hai spento la lampadina %d \n", n);
                                            c=c-d;                                       
                                    }
                                    else
                                    {
                                            printf("La lampadina %d è gia spenta \n", n);                                        
                                    }
                            }
                            else
                            {
                                    printf(" \n", n);
                                    for(j=0;j<8;j++)
                                    {
                                            d=(char)pow(2.0, j);
                                            if ((c & d)==d)
                                            {
                                              printf("1 ");
                                            }
                                            else
                                            {
                                              printf("0 ");
                                            }
                                    }
                            }
                    }
                    else if (z==3)
                    {break;}
                    printf(" \n");
            }while (i==0);
  system("PAUSE");	
  return 0;
}



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

Esercizio .. trova le differenze :)
Ibis redibis non morieris in bello
09/05/12 16:27
ancestral
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:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
            char c, mask, d;
            int z, n, j, i, h, f;
            c=0 ;
            i=0;
            h=0;
            j=0;
            printf("0 0 0 0 0 0 0 0 \n");
            do
            {
                    printf("0) spegni lampadina \n");
                    printf("1) accendere lampadina \n");
                    printf("2) visualizza stato \n");
                    printf("3) uscita \n");                    
                    scanf("%d", &z);
                    if (z==1)
                    {
                            printf("inserisci il numero della lampadina che vuoi accendere \n");                            
                            scanf("%d", &n);
                            h=n-1;
                            d = (char)pow(2, h);
                            if ((c & d) == d)
                            {
                                    printf("La lampadina %d è gia accesa \n", n);
                            }
                            else
                            {
                                    printf(" Hai acceso la lampadina %d \n", n);
                                    c=c+d;
                            }
                    }
                    else if (( z==0) |(z==2) )
                    {
                            if (z==0)
                            {
                                    printf("inserisci il numero della lampadina che vuoi spegnere \n");
                                    scanf("%d", &n);
                                    h=n-1;
                                    d=(char)pow(2, h);
                                    if ((c & d) == d)
                                    {
                                            printf("Hai spento la lampadina %d \n", n);
                                            c=c-d;                                       
                                    }
                                    else
                                    {
                                            printf("La lampadina %d è gia spenta \n", n);                                        
                                    }
                            }
                            else
                            {
                                    printf(" \n", n);
                                    for(j=0;j<8;j++)
                                    {
                                            d=(char)pow(2.0, j);
                                            if ((c & d)==d)
                                            {
                                              printf("1 ");
                                            }
                                            else
                                            {
                                              printf("0 ");
                                            }
                                    }
                            }
                    }
                    else if (z==3)
                    {break;}
                    printf(" \n");
            }while (i==0);
  system("PAUSE");	
  return 0;
}



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
int main(int argc, char *argv[])


2)cosa è questo:
{break;}


3)cosa è questo:
system("PAUSE");     
  return 0;


4)Quando finisco l'esecuzione del programma e digito 3, prima di chiudere il programma mi esce
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 09/05/12 16:29
aaa