begin process at 2012 02 04 18:58:26
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Application

 > TABLE DE VERITE

TABLE DE VERITE


 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.


 Sources du même auteur

Source avec Zip Source avec une capture FENETRE CARDINALE
AJOUTER PLUSIEURS COMPOSANT À UN JPANEL
Source avec Zip Source avec une capture BELOTE
Source avec Zip VISIONEUSE POUR POWERDESSIN
Source avec Zip Source avec une capture LISTEUR

 Sources de la même categorie

Source avec Zip Source avec une capture [J2ME] MAILXPRESS, UNE PETITE APPLICATION D'ENVOI DE MAIL ÉC... par doderic
Source avec Zip CLIENT ET SERVEUR DE MESSAGERIES par lemout
Source avec Zip Source avec une capture NAVIGATEUR HTTP par lemout
Source avec Zip Source avec une capture PROGRAMME DE PARTAGE DE FICHIER EN RESEAUX par billatosco
Source avec Zip JET SPRING JSF PRIMEFACES par mendjijet

Commentaires et avis

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...

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.

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

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...]

Commentaire de Dobel le 22/05/2004 15:38:21

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

;-p
Dobeliou

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.

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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,201 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales