Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TABLE DE VERITE


Information sur la source

Description

Cliquez pour voir la capture en taille normale
donne la table de verite d une expression logique

"/" : negation.
"+" : ou logique.
plusieurs lettres consecutives forme un et logique.

pour lancer taper, java table_verite avec 2 arguments.
L un est l expression logique, lautre, le nombre de variable.
 

Source

  • class binaire_reflechi{
  • //classe qui genere le code en binaire reflechi
  • boolean sequence=false;
  • int nsequence;
  • int compteur=0;
  • int max_ligne;
  • int max;
  • int bit=0;
  • int i=0;
  • int [][] table(int poids){
  • int ligne;
  • max_ligne=(int)Math.pow(2,poids);
  • max=max_ligne;
  • int element[][]=new int[poids] [max];
  • int colonne=0;
  • int debut;
  • while(colonne<poids){
  • debut=(int)Math.pow(2,colonne);
  • nsequence=1;//sequence de 2 puissance n (poids) zeros
  • ligne=0;
  • while(max>0){
  • while((i<nsequence)&&(max>0)){
  • i++;
  • int n=0;
  • while(n<debut){
  • element[colonne][ligne]=bit;
  • ligne++;
  • max--;
  • n++;
  • }
  • if((bit==0)&&(i==nsequence)) {
  • bit=1;
  • i=0;
  • }
  • nsequence=2;//sequence de 2 puissance n+1 (poids) zeros ou de uns
  • if((bit==1)&&(i==nsequence)) {
  • bit=0;
  • }
  • }
  • i=0;
  • }
  • max=max_ligne;
  • ligne=0;
  • colonne++;
  • }
  • return element;
  • }
  • }
  • import java.util.StringTokenizer;
  • class table_verite{
  • int n_var;
  • char var_C [];
  • public boolean var_L [];
  • table_verite(int n){
  • n_var=n;
  • var_C=new char[n];
  • for(int i=0;i<n;i++){
  • var_C[i]=(char)(97+i);
  • }
  • var_L=new boolean[n];
  • for(int index=0;index<n;index++) var_L[index]=false;
  • }
  • boolean logique(String lexem){
  • int i=lexem.length();
  • int j=0,k;
  • boolean bit=true,negation=false;
  • char car;
  • while(bit&&(j<i)){//des que un element est faux on sort de la boucle
  • if(lexem.charAt(j)=='/'){
  • negation=true;
  • j++;
  • }
  • car=lexem.charAt(j);
  • for(k=97;(k<=(int)car);k++);
  • if((var_L[k-98]==false)&&(negation==false)) bit=false;
  • if((var_L[k-98]==true)&&(negation==true)) bit=false;
  • j++;
  • negation=false;
  • }
  • return bit;
  • }
  • public static void main(String Arg[]){
  • String combi="";
  • int msb=Integer.parseInt(Arg[1])-1;//determination du poids le plus fort
  • int colonne=msb+1,ligne=(int)Math.pow(2,msb+1);
  • String mot="";
  • int combinaison[][]=new int[colonne][ligne];
  • binaire_reflechi b=new binaire_reflechi();
  • table_verite essai=new table_verite(Integer.parseInt(Arg[1]));
  • StringTokenizer st= new StringTokenizer(Arg[0],"+");//decoupe de l expression logique
  • combinaison=b.table(Integer.parseInt(Arg[1]));
  • for(int i=0;i<colonne;i++) mot=(char)essai.var_C[i]+" "+mot;
  • System.out.println(mot);
  • mot="";
  • for(int j=0;j<ligne;j++){
  • for(int i=0;i<colonne;i++){
  • mot=combinaison[i][j]+" "+mot;
  • if (combinaison[i][j]==0) essai.var_L[i]=false; else essai.var_L[i]=true;
  • }
  • boolean resultat=false;
  • while((st.hasMoreTokens())&&(resultat==false)) {
  • combi=st.nextToken();
  • resultat=essai.logique(combi);
  • }
  • System.out.println(mot+" resultat : "+resultat);
  • mot="";
  • st=new StringTokenizer(Arg[0],"+");
  • }
  • combi="";
  • System.out.println("fin");
  • }
  • }
class binaire_reflechi{
	
	//classe qui genere le code en binaire reflechi
	boolean sequence=false;
	int nsequence;
	int compteur=0;
	int max_ligne;
	int max;
	int bit=0;
	int i=0;
	int [][] table(int poids){
		int ligne;
		max_ligne=(int)Math.pow(2,poids);
		max=max_ligne;
		int element[][]=new int[poids] [max];
		int colonne=0;
		int debut;
		while(colonne<poids){
			debut=(int)Math.pow(2,colonne);
			nsequence=1;//sequence de 2 puissance n (poids) zeros
			ligne=0;
			while(max>0){
				while((i<nsequence)&&(max>0)){
					i++;
					int n=0;
					while(n<debut){
						element[colonne][ligne]=bit;
						ligne++;
						max--;
						n++;
					}
					if((bit==0)&&(i==nsequence)) {
						bit=1;
						i=0;
					}
					nsequence=2;//sequence de 2 puissance n+1 (poids) zeros ou de uns
					if((bit==1)&&(i==nsequence)) {
						bit=0;
					}				
				}			
				i=0;			
			}
			max=max_ligne;
			ligne=0;
			colonne++;
		}
		return element;
	}		
}


import java.util.StringTokenizer;

class table_verite{
	
	int n_var;
	char var_C [];
	public boolean var_L [];
	
	table_verite(int n){
		n_var=n;
		var_C=new  char[n];
		for(int i=0;i<n;i++){		
			var_C[i]=(char)(97+i);
		}
		var_L=new boolean[n];
		for(int index=0;index<n;index++) var_L[index]=false;
	}
		
	
	boolean logique(String lexem){
		int i=lexem.length();
		int j=0,k;
		boolean bit=true,negation=false;
		char car;
		while(bit&&(j<i)){//des que un element est faux on sort de la boucle
			if(lexem.charAt(j)=='/'){
				negation=true;
			 	j++;
			}
			car=lexem.charAt(j);
			for(k=97;(k<=(int)car);k++);
			if((var_L[k-98]==false)&&(negation==false)) bit=false;
			if((var_L[k-98]==true)&&(negation==true)) bit=false;
			j++;
			negation=false;
		}
		return bit;
	}
	
	public static void main(String Arg[]){
		String combi="";
		int msb=Integer.parseInt(Arg[1])-1;//determination du poids le plus fort
		int colonne=msb+1,ligne=(int)Math.pow(2,msb+1);
		String mot="";
		int combinaison[][]=new int[colonne][ligne];
		binaire_reflechi b=new binaire_reflechi();
		table_verite essai=new table_verite(Integer.parseInt(Arg[1]));
		StringTokenizer st= new StringTokenizer(Arg[0],"+");//decoupe de l expression logique
		combinaison=b.table(Integer.parseInt(Arg[1]));
		for(int i=0;i<colonne;i++) mot=(char)essai.var_C[i]+" "+mot;				
		System.out.println(mot);
		mot="";
		for(int j=0;j<ligne;j++){
			for(int i=0;i<colonne;i++){
				mot=combinaison[i][j]+" "+mot;
				if (combinaison[i][j]==0) essai.var_L[i]=false; else essai.var_L[i]=true;
				
			}
			boolean resultat=false;
			while((st.hasMoreTokens())&&(resultat==false)) {
				combi=st.nextToken();
				resultat=essai.logique(combi);
			}
			System.out.println(mot+" resultat      : "+resultat);
			mot="";
			st=new StringTokenizer(Arg[0],"+");
		}
		combi="";
		System.out.println("fin");
              }
}

Conclusion

ce programme comporte 2 classes :
la classe table_verite(main).
la classe binaire_reflechi.

attention à utiliser des lettres consecutives pour les variables.

exemple de 4 variable acceptee a b c d.
exemlpe de 4 variable refusee a b e f car nonconsecutives.
 

Commentaires et avis

signaler à un administrateur
Commentaire de sleep le 18/05/2004 08:32:39

C'est deja très sympa, mais pourquoi ne pas avoir mis le ET logique, puis tant qu'à faire un p'tit XOR ou d'autres ? Je sais bien qu'on peut s'en tirer avec la négation, mais ton programme serait quand meme plus complet, rien qu'avec le ET.

'fin, je dis ca, je dis rien...

signaler à un administrateur
Commentaire de kaloway le 18/05/2004 10:51:00

bonjour, sleep.

le "et" logique est sous-entendu par le regroupement de lettre (nom de variable). je pense que le fais de rajouter un symbole pour le "et", risque d'aloudir l'ecriture des expressions logiques.

le xor est envisageable, tout comme les parentheses.


mon prochain projet est de créer un tableau de Karnaugh. maintenant que je sais generer du binaire réfléchi.

signaler à un administrateur
Commentaire de sleep le 18/05/2004 13:08:41

Oui, mal vu de ma part... J'aurais du lire ton code avant de venir t'agresser, désolé....

Bon courage pour le tableau
Ciao

signaler à un administrateur
Commentaire de Dobel le 18/05/2004 22:15:26

Salut

une question qui n'a rien à voir avec le code ;-p
à quoi et à qui sert le binaire réfléchi ?
quel est son avantage par rapport au binaire classique

;-))
désolé...
;-p

A+
Dobeliou[qui ferait mieux d'aller se coucher...]

signaler à un administrateur
Commentaire de Dobel le 22/05/2004 15:38:21

;-) je veux une réponse !!!!!

;-p
Dobeliou

signaler à un administrateur
Commentaire de santoscmlb le 13/06/2005 08:30:20

Le binaire réfléchi a l'avantage que lorsqu'on passe s'une valeur à la suivante ou la précédente, il n'y a qu'un bit qui change. D'un point de vue électronique, ça évite les états intermédiaires.

Naturel   Réfléchi

000          000
001          001
010          011
011          010 (1)
100          110 (2)
101          111
110          101
111          100

par exemple dans le code réfléchi, entre l'étape (1) et l'étape (2), seul le bit de poids fort change. Donc il n'y a pas de combinaisons intermédiaires possibles; aux alentours de l'instant du changement, on a soit (1), soit (2).
Concrètement, c'est parce que tous les composants électroniques n'ont pas la même vitesse de commutation. Si on immagine un compteur électronique avec un circuit pour chacun des 3 chiffres binaires, si le circuit gérant le second chiffre est légèrement plus rapide, avec du binaire naturel on pourrait avoir en sortie, pendant une fraction de seconde lors du changement entre (1) et (2), quelque chose du genre 001 par exemple.

signaler à un administrateur
Commentaire de Dobel le 13/06/2005 09:48:43

> santoscmlb : "D'un point de vue électronique, ça évite les états intermédiaires."
merci bien :)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 5,647 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.