begin process at 2010 02 10 08:55:30
  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 ANALYSEUR DE PROXY IRC ET HTTP AVEC UNE INTERFACE GRAPHIQUE par sisisousou
Source avec Zip Source avec une capture "PROGRAMMEUR", EST UN PROGRAMME QUI PERMET DE TAPER QUELQUE ... par edouard333
Source avec Zip Source avec une capture "NARRATEUR", PROGRAMME QUI "LIT" SE QU'ON ÉCRIT... par edouard333
Source avec Zip Source avec une capture RENAME-MOAR par cotepierrot
Source avec Zip Source avec une capture DWIKI (DESKTOPWIKI) par xsimo

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

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 0,874 sec (3)

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