PDA

View Full Version : Pascal e variabili di tipo Booleano


M86
20-09-2002, 20:57
Ho cominciato a studiare il Pascal, ma mi trovo di fronte ad un problema: non capisco come funziona ed a che serve una variabile di tipo Booleano, e soprattutto che diavolo sono quelle tavole "farcite" di true e false
tipo:

A B A And B
true true true

recoil
20-09-2002, 21:31
per le tavole farcite di true e false dovresti essere un po' più specifico.

il tipo di dato boolean può avere due valore, true o false.
gli usi possono essere molteplici, certo se mi chiedi un esempio al momento non mi viene in mente nulla di buono, cmq io li uso nei cicli o in qualche record.
mi sembra strano che programmando non ti sia mai venuto il bisogno di usare un boolean... boh :)

M86
20-09-2002, 21:42
considera che ho appena cominciato; ora pultroppo non ho molto tempo, quindi le tabelle le scanerizzo e le metto on.line, domani
Ci risentiamo

Python
20-09-2002, 23:27
non è che quelle sono tipo tabelle di verità? :D

tipo vero = vero
falso = falso
vero + vero = vero
vero + falso = vero
falso + falso = falso

cmq le variabili booleane (parlo x qualsiasi linguaggio di prog, non ho mai visto pascal :)) le usi quando fai un controllo tipo if o for

M86
22-09-2002, 10:38
scusate, ma ieri non ho proprio potuto farmi sentire

Vi posto tutto il paragrafo; cercate di spiegarmelo

PARTE 1

M86
22-09-2002, 10:39
...e parte 2 (entrambe in 1 messaggio non ci entravano)

M86
22-09-2002, 10:40
scusate se come qualità non sono al top ma ho dovuto comprimere

cionci
22-09-2002, 19:59
Quello che hai scannerizzato c'entra ben poco con il linguaggio di programmazione usato... E' così che funzionano le variaibli booleane...vero o falso...

Sai fare le operazioni Or e And in binario ? Le varaibili booleane funzionano allo stesso mobo...

M86
23-09-2002, 13:49
Originariamente inviato da cionci
[B]Quello che hai scannerizzato c'entra ben poco con il linguaggio di programmazione usato... E' così che funzionano le variaibli booleane...vero o falso...

Sai fare le operazioni Or e And in binario ? Le varaibili booleane funzionano allo stesso mobo...
allora c'è un problema di fondo, io le operazioni Or e And in binario non le so fare, non è che mi spiegate brevemente che cosa sono

recoil
23-09-2002, 13:59
operazione AND:

la tabella di verità ti dice che
a b a AND b
0 0 0
1 0 0
0 1 0
1 1 1

se vuoi al posto di 0 e 1 ci metti false e true.
significa che la AND vale vero (1) se entrambi gli operandi valgono vero.

la OR invece
a b a OR b
0 0 0
1 0 1
0 1 1
1 1 1

basta che uno dei due operandi valga 1 (vero) e il risultato sarà vero.

recoil
23-09-2002, 14:02
operazione AND:

la tabella di verità ti dice che
a b a AND b
0 0 0
1 0 0
0 1 0
1 1 1

se vuoi al posto di 0 e 1 ci metti false e true.
significa che la AND vale vero (1) se entrambi gli operandi valgono vero.

la OR invece
a b a OR b
0 0 0
1 0 1
0 1 1
1 1 1

basta che uno dei due operandi valga 1 (vero) e il risultato sarà vero.

queste tabelle ti vengono utili nei casi di costrutti di selezione o iterazione (così c'è scritto sui libri, in pratica con la IF oppure con il WHILE e il FOR).
quando fai ad esempio una IF devi mettere una condizione, ecco nelle condizioni puoi usare la OR e la AND (ad esempio, i > 0 AND i < 4 significa che la condizione è vera se i è compreso tra 1 e 3).

cn73
23-09-2002, 18:38
Il problema trascende dal Pascal...le variabili booleane fanno parte della "logica". Una variabile booleana può assumere solo 2 valori: vero, falso, ovvero 1 e 0 , ovvero acceso, spento.

La tabella dell'allegato spiega come funzionano gli operatori logici AND , OR e NOT.

Il più semplice è il NOT, la negazione: se tu neghi il vero, ottieni il falso (se neghi lo 0 ottieni l'1) e viceversa.

L'operatore OR: ottieni "vero" solo quando almeno unop dei 2 operatori e vero:

0 OR 0 = 0
0 OR 1 = 1
1 OR 0 = 1
1 OR 1 = 1

L'operatore AND: ottieni "vero" solo quando tutti e due gli operatori sono veri:

0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1

A cosa servono nella programmazione...bhè...servono come condizioni nelle "if" o nei cicli!

Es: (java)
boolean a = true;
boolean b = false;

if (a || b){ // a OR b
...istruzioni...
}

while (a && b){ // a AND b
...istruzioni...
}

Naturalmente a e b possono derivare da una qualunque istruzione, che so, ad es a è vera se una certa stringa ha lunghezza maggiore di 4 e b se ha lunghezza minore di 9...

M86
23-09-2002, 22:37
ora non ho il tempo di ragionarci, domani ci provo con comodo e vediamo che cosa capisco
Il sonno mi ha annebbiato la vista; comunque mi siete sembrati molto chiari
Grazie ed a domani

M86
24-09-2002, 21:42
comincio a capirci qualcosa finalmente; chissà se su internet c'è una documentazione completa rispetto alla matematica Booleana in italiano ad un livello comprensibile ad uno studente del liceo scientifico nel 3° anno
Ne sapete qualcosa???

cionci
25-09-2002, 09:08
Originariamente inviato da M86
[B]comincio a capirci qualcosa finalmente; chissà se su internet c'è una documentazione completa rispetto alla matematica Booleana in italiano ad un livello comprensibile ad uno studente del liceo scientifico nel 3° anno
Ne sapete qualcosa???
Non vedo cosa ci sia da capire :rolleyes: :D

Comunque vedi l'OR come una somma...e l'AND come un prodotto..

Quindi (utilizzando 0 e 1 al posto di falso e vero) :

0 OR 0 = 0 (0+0=0)
1 OR 0 = 1
0 OR 1 = 1
1 OR 1 = 1 (attenzione 1+1 = 1)

0 AND 0 = 0 (0*0=0)
1 AND 0 = 0
0 AND 1 = 0
1 AND 1 = 1

Il NOT poi è molto banale...
NOT 1 = 0
NOT 0 = 1

Ti scrivo qualche test :

a = 5
b = 7

((a < 5) OR (b < 8)) AND ((b-a) > 0)

a < 5 : no...falso (cioè 0)
b < 8 : sì...vero (cioè 1)
(b-a) > 0 : sì...vero (cioè 1)

Quindi : (falso OR vero) AND vero = (0 + 1) * 1 = 1 cioè vero...

Puoi ottenere anche na spiegazione a parole :
a < 5 oppure b < 8 : sì (vero) b è minore di 8 (quindi une dei due predicati è vero...oppure : o l'uno e/o l'altro deve essere vero per ritornare vero)...
Se la prima parte è vera e la seconda (b-a > 0) è vera ritorno vero...
La prima parte è vera...e l'abbiamo visto prima...la seconda è vera (è vero che (b-a) > 0)...quindi il risultato è VERO...

Prova tu a fare lo stesso ragionamento con a = 9 e b = 8...

cn73
25-09-2002, 12:34
Originariamente inviato da cionci
[B]
Non vedo cosa ci sia da capire :rolleyes: :D



Bhè trattandosi di logica...bisogna capirla eccome...se non ti insegnavano a fare le addizioni, mica si ha nel DNA come fare 1 +1 :p

cionci
25-09-2002, 12:39
Originariamente inviato da cn73
[B]Bhè trattandosi di logica...bisogna capirla eccome...se non ti insegnavano a fare le addizioni, mica si ha nel DNA come fare 1 +1 :p
Non intendevo quello...volevo dire che sulle operazioni di base non che c'è da capirci molto...sono così...punto e basta...

Non è che ti puoi chiedere perchè l'OR e l'AND sono così...o meglio..te lo puoi chiedere, ma tutto deriva dal linguaggio parlato "o questo e/o quell'altro" e "sia quello che quell'altro" :)

M86
25-09-2002, 13:12
il punto è che ci sono anche altre funzioni tipo >= <= e così via
Comunque sono a buon punto

cionci
25-09-2002, 15:15
Che ti importa che ci siano quegli operatori...
Basta sapere quando ti ritornano vero (e questo lo vedi dal significato dell'operatore) e quando ti ritornano falso...

memphis raines
25-09-2002, 15:28
Gli operatori di cui parli non ti servono con le variabili booleane
ma per fare confronti fra numeri o fra variabili numeriche

cionci
25-09-2002, 15:31
Originariamente inviato da memphis raines
[B]Gli operatori di cui parli non ti servono con le variabili booleane
ma per fare confronti fra numeri o fra variabili numeriche
Sì, ma ritornano variabili booleane...

M86
25-09-2002, 19:22
Originariamente inviato da memphis raines
[B]Gli operatori di cui parli non ti servono con le variabili booleane
ma per fare confronti fra numeri o fra variabili numeriche

ti ringrazio di aver fatto il tuo primo post proprio qui

memphis raines
25-09-2002, 19:48
Figurati grazie a voi per l'aiuto che mi darete

memphis raines
25-09-2002, 19:55
Originariamente inviato da cionci
[B]
Sì, ma ritornano variabili booleane...

E' vero ma non sono variabili esplicite nel senso che non vengono
dichiarate all'interno del programma

cionci
25-09-2002, 19:58
Originariamente inviato da memphis raines
[B]E' vero ma non sono variabili esplicite nel senso che non vengono
dichiarate all'interno del programma
Beh...volendo sì...e lo puoi fare in molti linguaggi...

memphis raines
25-09-2002, 20:03
ok ma non ti serve a nulla dichiarare una variabile che poi non
utilizzi

cionci
25-09-2002, 20:19
Originariamente inviato da memphis raines
[B]ok ma non ti serve a nulla dichiarare una variabile che poi non
utilizzi
E chi l'ha detto che uno non la utilizza ?

In C :

int flag = 2 > 3;

if(flag) {
....
....
....
}
....
....
....
....
....
if(!flag & (a > b)) {
....
....
....
}

memphis raines
25-09-2002, 20:30
Se non ricordo male una cosa del genere... int flag = 2 > 3...
in Pascal non puoi farla

cionci
25-09-2002, 20:39
Non credo...anche se non ne sono sicuro...il mio Pascal è un po' arrugginito...

memphis raines
25-09-2002, 20:40
Allora siamo in due

M86
26-09-2002, 13:16
il mio pascal non c'è ancora:D

mjordan
27-09-2002, 02:04
Originariamente inviato da M86
[B]comincio a capirci qualcosa finalmente; chissà se su internet c'è una documentazione completa rispetto alla matematica Booleana in italiano ad un livello comprensibile ad uno studente del liceo scientifico nel 3° anno
Ne sapete qualcosa???

L'Algebra di Boole sostanzialmente si basa su quella tabella che hai sul libro. Andare oltre non ti sevirebbe a niente per adesso.
Considerala come una cosa da "imparare a memoria", come fanno tutti.
Capire effettivamente "perchè" è cosi richiede un'attento studio di quella disciplina che si chiama Logica Matematica.

mjordan
27-09-2002, 02:21
Originariamente inviato da memphis raines
[B]Se non ricordo male una cosa del genere... int flag = 2 > 3...
in Pascal non puoi farla

Il Pascal standard non consente di inizializzare variabili in fase di dichiarazione (ma neanche gli altri flavour, credo).

Dovresti usare una sequanza del tipo:


...
var a : boolean;

begin
a := b > c;
...
end;


Per un principiante che deve solo apprendere i concetti astenendosi il + possibile dai tecnicismi del linguaggio, direi che è molto + comprensibile che scrivere:


bool a = b > c;


sebbene la seconda forma sia + elegante della prima. :D :D

memphis raines
27-09-2002, 09:49
Allora mi ricordavo bene che non si poteva fare l'inizializzazione di una variabile in fase di dichiarazione.

Hai ragione è sicuramente più elegante la seconda forma ma il problema è che in Pascal non puoi farla quindi devi per forza utilizzare la prima forma

cionci
27-09-2002, 11:21
Vabbè...io infatti lo avevo scritto in C...ma non è quello il punto...
Era solo un esempio non mi importava niente dell'inizializzazione...

M86
27-09-2002, 14:39
ho finalmente capito
ieri ho provato a fare qualche esempio più quello che era stato postato qua e sono riuscito a capire quelle maledette variabili, un ultimo dubbio: che applicazione hanno nel pascal simboli tipo <=, servono forse con le istruzioni condizionali???

memphis raines
27-09-2002, 15:11
Esatto ti servono per fare dei confronti fra variabili numeriche come:

a:=4
b:=10

if b<=4
then
...
...
...
end;

<= sta per minore o uguale e >= naturalmente per maggiore o uguale

Spero di essere stato più o meno chiaro

M86
27-09-2002, 15:17
Originariamente inviato da memphis raines
[B]Esatto ti servono per fare dei confronti fra variabili numeriche come:

a:=4
b:=10

if b<=4
then
...
...
...
end;

<= sta per minore o uguale e >= naturalmente per maggiore o uguale

Spero di essere stato più o meno chiaro

chiarissimo:D