ciao a tutti avrei bisogno di una mano per risolvere un esercizio..non so da dove iniziare![]()
1.Scrivere il codice di una funzione java o C che implementi una funzione booleana con i seguenti mintermini:
3, 4, 5, 7, 12, 15, 18.
ciao a tutti avrei bisogno di una mano per risolvere un esercizio..non so da dove iniziare![]()
1.Scrivere il codice di una funzione java o C che implementi una funzione booleana con i seguenti mintermini:
3, 4, 5, 7, 12, 15, 18.
In sostanza devi fare un metodo (Java) o funzione (C) che ha come tipo di ritorno un "booleano" e che ritorni un "true" quando l'input rappresenta uno dei mintermini che hai elencato. O "false" in qualunque altro caso.Originariamente inviato da spider550
1.Scrivere il codice di una funzione java o C che implementi una funzione booleana con i seguenti mintermini:
3, 4, 5, 7, 12, 15, 18.
Ora .. è solo questione di capire come ti è stato chiesto di passare l'input alla funzione. Se fosse un normale valore intero ... sarebbe banale/stupido come esercizio. Quindi sarei portato a pensare che l'input debba essere composto da N valori booleani, ognuno che rappresenta un "bit" che forma il valore con un peso 2^n. Visto il massimo che è 18, hai bisogno di almeno 5 bit.
Questo però dovresti saperlo tu ... non io. Non so cosa ti è stato chiesto precisamente di fare a livello tecnico ... e se il testo dell'esercizio che hai citato è tutto lì, è molto poco chiaro/completo.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
infatti penso non si tratti di inserire interi poichè bisognerebbe semplicemente confrontare l'intero passato come argomento con i vari mintermini....quindi bisognerebbe utilizzare i bit...ma come?
un altra domanda: il metodo mi deve restituire true se i bit sono uguali ai bit di uno dei mintermini o devo passare al metodo una sequenza di bit uguale a tutti i mintermini?
mi spiego meglio... se passo il valore 5 al metodo mi deve dare true perchè fa parte dei mintermini o mi deve dare false perchè 5 è diverso dalla sequenza 3,4,5,7 ecc...?
Appunto ... sarebbe scontato.Originariamente inviato da spider550
infatti penso non si tratti di inserire interi poichè bisognerebbe semplicemente confrontare l'intero passato come argomento con i vari mintermini....
Fai un metodo che ha N parametri booleani e come ho detto prima, minimo 5. In sostanza, in Java:Originariamente inviato da spider550
quindi bisognerebbe utilizzare i bit...ma come?
public static boolean miaFunzioneBooleana(boolean b4, ....altri....., boolean b0) { ..... }
Devi restituire 'true' se la combinazione di bit passata in input rappresenta uno dei mintermini. Altrimenti false.Originariamente inviato da spider550
un altra domanda: il metodo mi deve restituire true se i bit sono uguali ai bit di uno dei mintermini o devo passare al metodo una sequenza di bit uguale a tutti i mintermini?
mi spiego meglio... se passo il valore 5 al metodo mi deve dare true perchè fa parte dei mintermini o mi deve dare false perchè 5 è diverso dalla sequenza 3,4,5,7 ecc...?
Tu sai per quali mintermini devi restituire true, quindi nel metodo andrai a testare i bit in input. E ovviamente (e questo è l'esercizio) devi conoscere l'algebra booleana.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
in pratica dovrei far leggere i mintermini come sequenza di booleani (bit)...inserire i bit al metodo come parametro e confrontarli...giusto?Fai un metodo che ha N parametri booleani e come ho detto prima, minimo 5. In sostanza, in Java:
public static boolean miaFunzioneBooleana(boolean b4, ....altri....., boolean b0) { ..... }
public class Mintermini {
static int []leggiBit(int a) {
int t[]= new int [6];
for (int pos = 5; pos <= 0; pos--){
if ((a &(1<< pos)) !=0){
t[pos] = 1;
}
else{
t[pos] = 0;
}
}
return t;
}
static boolean mintermini(int a){
boolean sequenza = false;
if (leggiBit(a)== leggiBit(4)||leggiBit(a)== leggiBit(5)||leggiBit(a)== leggiBit(7)||leggiBit(a)== leggiBit(3)||leggiBit(a)== leggiBit(12)||leggiBit(a)== leggiBit(15)||leggiBit(a)== leggiBit(18)){
sequenza = true;
}
return sequenza;
}
}
avevo pensato di fare una cosa del genere anke se è sbagliata....come ti sembra?
public class AlgebraBool {
public static boolean funzione(boolean b4,boolean b3,boolean b2,boolean b1,boolean b0){
boolean mintermine = false;
if (b4 == false && b3== false && b2 == false && b1 == true && b0 == true){
mintermine = true;
}
if (b4 == false && b3== false && b2 == true && b1 == false && b0 == false){
mintermine = true;
}
if (b4 == false && b3== false && b2 == true && b1 == false && b0 == true){
mintermine = true;
}
if (b4 == false && b3== false && b2 == true && b1 == true && b0 == true){
mintermine = true;
}
if (b4 == false && b3== true && b2 == true && b1 == true && b0 == false){
mintermine = true;
}
if (b4 == false && b3== true && b2 == true && b1 == true && b0 == true){
mintermine = true;
}
if (b4 == true && b3== false && b2 == false && b1 == true && b0 == false){
mintermine = true;
}
return mintermine;
}
}
penso ke l'esercizio kieda questo no?
Ci sono diverse cose da farti notare:Originariamente inviato da spider550
penso ke l'esercizio kieda questo no?
1) Il 5° test non è il mintermine 12, controlla bene il valore binario!
2) Testare con == se è un boolean è true o false ovviamente sì, è corretto. Ma superfluo!! Un boolean già da solo rappresenta la condizione true/false e se vuoi negarlo usa l'operatore ! (che dovresti conoscere).
3) Non ci sarebbe bisogno di usare una variabile, una prima semplificazione potrebbe essere far ritornare subito true se un if dà true e alla fine far ritornare false. Una semplificazione estrema è far ritornare direttamente il valore della espressione di test dei mintermini messi in OR, quindi senza alcun if!
4) Non so se conosci le tecniche di "minimizzazione" di una funzione booleana e in caso affermativo se ti è stato chiesto/proposto di usarle. Minimizzare significa ridurre la funzione in modo che abbia il minor numero possibile di mintermini e di variabili.
Ti faccio l'esempio. Data la tavola della verità:
La funzione è certamente:codice:ABC O 000 1 001 1 010 0 011 0 100 0 101 0 110 1 111 1
Ma è lunga e ridondante!! Cosa noti dei primi due valori? A e B sono sempre a 0 e C "non conta" nel senso che in ogni caso il risultato è 1.codice:___ __ _ f(A,B,C) = ABC + ABC + ABC + ABC
Quindi si può riscrivere come:
E nel tuo caso si può minimizzare .... e probabilmente forse è anche quello l'esercizio.codice:__ f(A,B,C) = AB + AB
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
1) hai ragione non me ne ero accortoOriginariamente inviato da andbin
Ci sono diverse cose da farti notare:
1) Il 5° test non è il mintermine 12, controlla bene il valore binario!
2) Testare con == se è un boolean è true o false ovviamente sì, è corretto. Ma superfluo!! Un boolean già da solo rappresenta la condizione true/false e se vuoi negarlo usa l'operatore ! (che dovresti conoscere).
3) Non ci sarebbe bisogno di usare una variabile, una prima semplificazione potrebbe essere far ritornare subito true se un if dà true e alla fine far ritornare false. Una semplificazione estrema è far ritornare direttamente il valore della espressione di test dei mintermini messi in OR, quindi senza alcun if!
4) Non so se conosci le tecniche di "minimizzazione" di una funzione booleana e in caso affermativo se ti è stato chiesto/proposto di usarle. Minimizzare significa ridurre la funzione in modo che abbia il minor numero possibile di mintermini e di variabili.
Ti faccio l'esempio. Data la tavola della verità:
La funzione è certamente:codice:ABC O 000 1 001 1 010 0 011 0 100 0 101 0 110 1 111 1
Ma è lunga e ridondante!! Cosa noti dei primi due valori? A e B sono sempre a 0 e C "non conta" nel senso che in ogni caso il risultato è 1.codice:___ __ _ f(A,B,C) = ABC + ABC + ABC + ABC
Quindi si può riscrivere come:
E nel tuo caso si può minimizzare .... e probabilmente forse è anche quello l'esercizio.codice:__ f(A,B,C) = AB + AB![]()
2) come dovrei fare con "!"?
3)si forse sarebbe meglio mettere le espressioni con gli or
4)si conosco le tecniche di minimizzazione ma penso ke il testo non lo kieda
5) grazie di tutto![]()
Esempio:Originariamente inviato da spider550
2) come dovrei fare con "!"?
a && !b && c && !d
vale 'true' se i 4 boolean hanno rispettivamente T F T F
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet