begin process at 2012 05 28 11:10:17
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > LOGIGRAMME

LOGIGRAMME


 Information sur la source

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Classé sous :logigrammes, logiciel, résolution Niveau :Initié Date de création :26/02/2005 Date de mise à jour :30/11/2005 13:44:53 Vu / téléchargé :30 557 / 468

Auteur : coucou747

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note


 Description

un fichier OO qui sert d'apui pour résoudre les logigrammes... et un logigramme en prime...

Source

  • <html>
  • <head>
  • <title>logigramme</title>
  • </head>
  • <body>
  • <p>Pour utiliser ceci, il suffit de mettre en paramètre le nom, le nombre de cases par catègories, et le tableau qui contiendra les noms désignants les catègories (Ces noms ne servent qu'a l'affichage). Ensuite, on ne peut sauvegarder, mais on peut plus facilement résoudre nos logigrammes.</p>
  • <p>Einstein avait dit que seulement 2 pourcent de la population pouvaient résoudre son logigramme... en serez vous capable...</p>
  • <p>Verstion 1.1 Tout est pris en compte... Seule chose que ce programme ne fera pas a votre place : les supositions. Nouveautées : On peut rayer d'une couleur une ligne ou une colone, on a aussi un bouton clear pour effacer les lignes surlignées. On peut également, en cliquant sur les indices, les griser pour retenir plus facilement ceux que l'on a déja exploité.</p>
  • <p>5 maisons, 5 nationalités, 5 boissons, 5 produits du tabac, 5 animaux favoris.<br />
  • 15 indices pour tout démêler...<br />
  • <script>
  • function clear_screen(taille){
  • var j, k;
  • for (j=0;j<taille;j++)
  • for (k=0;k<taille;k++)
  • document.getElementById(k+"_"+j).style.background="#FFFFFF";
  • }
  • function boldisex(i, taille){
  • var j;
  • for (j=0;j<taille;j++)
  • document.getElementById(j+"_"+i).style.background="#FFDDAA";
  • }
  • function boldisey(i, taille){
  • var j;
  • for (j=0;j<taille;j++)
  • document.getElementById(i+"_"+j).style.background="#FFDDAA";
  • }
  • function Logigramme(nom, taille, tableau){
  • /*
  • Ceci sert de constructeur....
  • */
  • taille2=tableau.length;
  • //on y déclare les variables
  • this.tableau=new Array(taille2);
  • this.nom = nom;
  • this.taille_once=taille;
  • this.taille_total=taille2;
  • this.indices_used;
  • //puis les fonctions que le logigramme peut utiliser
  • this.check=Logigramme_check;
  • this.rectifie=Logigramme_rectifie;
  • this.affiche=Logigramme_affiche;
  • this.indices=Logigramme_indices;
  • this.indice_coche=Logigramme_indice_coche;
  • //on affiche les cases
  • document.write('<input type="button" value="clear" onclick="clear_screen('+taille2+');"><br /><table style="border-spacing: 0px;"><tr><td>'+nom+'</td>');
  • for (i=0;i<taille2;i++)
  • document.write('<td><input type="button" value="'+tableau[i]+'" onclick="boldisex('+i+', '+taille2+');"></taille2;i++)></td>');
  • ci=0;
  • for (i=0;i<taille2;i++){
  • if (i%taille==0){
  • ci++;
  • change_colone=1;
  • }else
  • change_colone=0;
  • document.write('</tr><tr><td><input type="button" value="'+tableau[i]+'" onclick="boldisey('+i+', '+taille2+');"></td>');
  • this.tableau[i]=new Array(taille2); //on déclare un tableau dans un tableau
  • cj=0;
  • for (j=0;j<taille2;j++){
  • if (j%taille==0){ //marque un changement de catègorie et les bordures de gauche de chaque catègorie
  • cj++;
  • st='border-left : 3px solid;';
  • }else
  • st='';
  • if (change_colone==1) //place les bordures de haut de categories
  • st+='border-top : 3px solid;';
  • if (i==j)
  • v='O';
  • else if (ci==cj)
  • v='X';
  • else
  • v='';
  • if (j==taille2-1) //place la bordure de droite
  • st+='border-right : 3px solid;';
  • if (i==taille2-1) //et celle du dessous
  • st+='border-bottom : 3px solid;';
  • document.write('<td style="'+st+'"><input type="text" id="'+i+'_'+j+'" size="1" value="'+v+'" onchange="changed('+"'"+nom+"'"+','+i+','+j+');" /></td>');
  • this.tableau[i][j]=v; //et on en modifie la valeur
  • }
  • }
  • document.write('</tr></table><br /><input type="button" value="clear" onclick="clear_screen('+taille2+');">');
  • }
  • function Logigramme_indices(){
  • var i;
  • this.indices_used=new Array(Logigramme_indices.arguments.length);
  • document.write("<ul>");
  • for (i=0;i<Logigramme_indices.arguments.length;i++){
  • document.write('<li id="indice_'+i+'" onclick="'+this.nom+'.indice_coche('+i+');">'+Logigramme_indices.arguments[i]+"</li>");
  • this.indices_used[i]=false;
  • }
  • document.write("</ul>");
  • }
  • function Logigramme_indice_coche(i){
  • this.indices_used[i]=(this.indices_used[i])?false:true;
  • document.getElementById("indice_"+i).style.background=(this.indices_used[i])?"#DDDDDD":"#FFFFFF";
  • }
  • function Logigramme_affiche(pos_x,pos_y){
  • /*
  • cette fonction sert à changer la valeur d'une case
  • */
  • /*//alert(pos_x+'/'+pos_y+'/'+this.tableau[pos_x][pos_y]);
  • eval("a=document."+this.nom+"._"+pos_x+"_"+pos_y+".value");
  • eval("document."+this.nom+"._"+pos_x+"_"+pos_y+".value='"+this.tableau[pos_x][pos_y]+"'");*/
  • document.getElementById(pos_x+"_"+pos_y).value=this.tableau[pos_x][pos_y];
  • }
  • function Logigramme_check(pos_x,pos_y,changed){
  • /*
  • Cette fonction sertà cocher une case
  • */
  • if (changed=="O" || changed=="X" || changed==""){
  • this.tableau[pos_x][pos_y]=changed; //aplique la modification en ram
  • this.rectifie(); //complète le tableau
  • }else{
  • alert('erreur !! vous avez saisi :"'+changed+'"');
  • this.affiche(pos_x,pos_y); //efface l'erreur
  • }
  • }
  • function Logigramme_rectifie(){
  • /*
  • Pour commencer dans tout logigramme :
  • à toute case de coordonnées (x, y) on peut associer une case de même valeur et de coordonnées (y,x);
  • */
  • var scan_x, cores_x, scan_y, cores_y, point_x, point_y,i,j=0;
  • var alignO=new Array(this.taille_once*2);
  • var alignX=new Array(this.taille_once*2);
  • var manqueO_x=new Array(this.taille_once*2);
  • var manqueO_y=new Array(this.taille_once*2);
  • for (i=0;i<this.taille_once*2;i++){
  • alignX[i]=0;
  • alignO[i]=0;
  • }
  • for (scan_x=0;scan_x<this.taille_total;scan_x++){
  • for (scan_y=0;scan_y<this.taille_total;scan_y++){
  • if (this.tableau[scan_x][scan_y]!=this.tableau[scan_y][scan_x]){
  • if (this.tableau[scan_x][scan_y]==''){
  • this.tableau[scan_x][scan_y]=this.tableau[scan_y][scan_x];
  • this.affiche(scan_x,scan_y);
  • }else if (this.tableau[scan_y][scan_x]==''){
  • this.tableau[scan_y][scan_x]=this.tableau[scan_x][scan_y];
  • this.affiche(scan_y,scan_x);
  • }else{
  • alert('ERREUR CONFLIT ENTRE LES CASES : ('+scan_x+', '+scan_y+') et ('+scan_y+', '+scan_x+');');
  • }
  • }
  • }
  • }
  • /*
  • ensuite, on a strictement une seule réponse positive par ligne et par colone...
  • */
  • retour=1;
  • while(retour==1){ //comme le tableau change régulièrement, on doit faire plusieurs tours...
  • retour=0;
  • for (scan_x=0;scan_x<this.taille_total;scan_x+=this.taille_once){
  • for (scan_y=0;scan_y<this.taille_total;scan_y+=this.taille_once){
  • for (point_x=0;point_x<this.taille_once;point_x++){
  • for (point_y=0;point_y<this.taille_once;point_y++){
  • if (this.tableau[scan_y+point_y][scan_x+point_x]=='X'){
  • alignX[point_x]++;
  • alignX[point_y+this.taille_once]++;
  • }else if (this.tableau[scan_y+point_y][scan_x+point_x]=='O'){
  • alignO[point_x]++;
  • alignO[point_y+this.taille_once]++;
  • }else{
  • manqueO_x[point_x]=scan_x+point_x;
  • manqueO_x[point_y+this.taille_once]=scan_x+point_x;
  • manqueO_y[point_x]=scan_y+point_y;
  • manqueO_y[point_y+this.taille_once]=scan_y+point_y;
  • }
  • }
  • }
  • for (i=0;i<this.taille_once*2;i++){
  • //récupère les erreurs
  • if (alignX[i]==this.taille_once)
  • alert('erreur ligne de croix dans la catègorie ('+(scan_x/this.taille_once)+','+(scan_y/this.taille_once)+');'+this.taille_once);
  • if (alignO[i]>1)
  • alert('erreur deux validations dans la catègorie ('+(scan_x/this.taille_once)+','+(scan_y/this.taille_once)+');');
  • //si il ne reste qu'une case vide, et que toutes les cases sont remplies par des croix, alors on mets un O
  • if (alignX[i]==this.taille_once-1 && alignO[i]==0){
  • this.tableau[manqueO_y[i]][manqueO_x[i]]='O';
  • this.affiche(manqueO_y[i],manqueO_x[i]);
  • retour=1;
  • }
  • //quand on a un O on doit remplir toutes les cases sur les cotés de X
  • if (alignO[i]==1 && alignX[i]!=this.taille_once-1){
  • if (i<this.taille_once){
  • for (point_y=0;point_y<this.taille_once;point_y++){
  • if (this.tableau[scan_y+point_y][scan_x+i]==''){
  • this.tableau[scan_y+point_y][scan_x+i]='X';
  • this.affiche(scan_y+point_y, scan_x+i);
  • }
  • }
  • }else{
  • for (point_x=0;point_x<this.taille_once;point_x++){
  • //alert(scan_y + i + ' , ' + scan_x + point_x );
  • if (this.tableau[ scan_y + i - this.taille_once ][ scan_x + point_x]==''){
  • this.tableau[ scan_y + i - this.taille_once ][ scan_x + point_x]='X';
  • this.affiche( scan_y + i - this.taille_once , scan_x + point_x);
  • }
  • }
  • }
  • retour=1;
  • }
  • //remets les alignements à 0
  • alignX[i]=0;
  • alignO[i]=0;
  • }
  • }
  • }
  • /*
  • Quand on rencontre un O, les cases ensuite sont identiques
  • */
  • for (scan_y=0;scan_y<this.taille_total;scan_y++){
  • for (scan_x=0;scan_x<this.taille_total;scan_x++){
  • if (this.tableau[scan_y][scan_x]=='O'){
  • for (point_x=0;point_x<this.taille_total;point_x++){
  • if (this.tableau[scan_y][point_x]!=this.tableau[scan_x][point_x]){
  • if (this.tableau[scan_y][point_x]==''){
  • this.tableau[scan_y][point_x]=this.tableau[scan_x][point_x];
  • this.affiche(scan_y,point_x);
  • retour=1;
  • }else if (this.tableau[scan_x][point_x]==''){
  • this.tableau[scan_x][point_x]=this.tableau[scan_y][point_x];
  • this.affiche(scan_x,point_x);
  • retour=1;
  • }else{
  • alert('ERREUR CONFLIT ENTRE LES CASES : ('+scan_y+', '+pointx+') et ('+scan_x+', '+pointx+');');
  • }
  • }
  • }
  • }
  • }
  • }
  • }
  • }
  • function changed(nom, pos_x,pos_y){
  • /*
  • Cette fonction sert quand on change manuellement les valeurs
  • elle récupère la valeur changée
  • et l'envoi à la fonction check
  • */
  • eval("a=document.getElementById('"+pos_x+"_"+pos_y+"').value");
  • eval(nom+".check("+pos_x+","+pos_y+",'"+a+"')");
  • }
  • /*
  • (médiocre) Exemple d'utilisation
  • */
  • a=new Array(4);
  • a[0]='ang';
  • a[1]='sue';
  • a[2]='dan';
  • a[3]='nor';
  • a[4]='all';
  • a[5]='1';
  • a[6]='2';
  • a[7]='3';
  • a[8]='4';
  • a[9]='5';
  • a[10]='rou';
  • a[11]='ver';
  • a[12]='ble';
  • a[13]='jau';
  • a[14]='bla';
  • a[15]='chi';
  • a[16]='ois';
  • a[17]='cha';
  • a[18]='che';
  • a[19]='poi';
  • a[20]='thé';
  • a[21]='caf';
  • a[22]='lai';
  • a[23]='bie';
  • a[24]='eau';
  • a[25]='pal';
  • a[26]='dun';
  • a[27]='mal';
  • a[28]='win';
  • a[29]='rot';
  • //pour avoir la fonction changed il faut leur mettre le même nom....
  • /*
  • Pour plus de vitesse et de facilitée, un duplicat des cases affichés est fait en ram... ( dans this.tableau)
  • */
  • einstein=new Logigramme('einstein',5,a);
  • einstein.indices('Le Britannique habite dans une maison rouge.','Le Suédois possède un chien.','Le Danois boit du thé.','La maison verte est immédiatement à gauche de la maison blanche.','Le propriétaire de la maison verte boit du café.','La personne qui fume des cigares de marque Pall Mall élève des oiseaux.','Le propriétaire de la maison jaune fume des Dunhill.',"L'homme qui vit dans la maison du milieu boit du lait.','Le Norvégien habite dans la première maison.","L'homme qui fume des Rothmans demeure dans la maison située à côté de celui qui garde des chats.","L'homme qui possède des chevaux habite à côté de celui qui fume des Dunhill.","Le propriétaire qui fume des malboros boit de la bière.","L'Allemand fume des Winfield.","Le Norvégien habite à côté de la maison bleue.","Le voisin de l'homme qui fume des Rothmans, boit de l'eau.");
  • </script>
  • <br />
  • À qui appartient le poisson?
  • </p>
  • </body>
  • </html>
<html>
<head>
<title>logigramme</title>
</head>
<body>
<p>Pour utiliser ceci, il suffit de mettre en paramètre le nom, le nombre de cases par catègories, et le tableau qui contiendra les noms désignants les catègories (Ces noms ne servent qu'a l'affichage). Ensuite, on ne peut sauvegarder, mais on peut plus facilement résoudre nos logigrammes.</p>
<p>Einstein avait dit que seulement 2 pourcent de la population pouvaient résoudre son logigramme... en serez vous capable...</p>
<p>Verstion 1.1 Tout est pris en compte... Seule chose que ce programme ne fera pas a votre place : les supositions. Nouveautées : On peut rayer d'une couleur une ligne ou une colone, on a aussi un bouton clear pour effacer les lignes surlignées. On peut également, en cliquant sur les indices, les griser pour retenir plus facilement ceux que l'on a déja exploité.</p>

<p>5 maisons, 5 nationalités, 5 boissons, 5 produits du tabac, 5 animaux favoris.<br />
15 indices pour tout démêler...<br />

<script>
function clear_screen(taille){
	var j, k;
	for (j=0;j<taille;j++)
		for (k=0;k<taille;k++)
			document.getElementById(k+"_"+j).style.background="#FFFFFF";
}
function boldisex(i, taille){
	var j;
	for (j=0;j<taille;j++)
		document.getElementById(j+"_"+i).style.background="#FFDDAA";
}
function boldisey(i, taille){
	var j;
	for (j=0;j<taille;j++)
		document.getElementById(i+"_"+j).style.background="#FFDDAA";
}
function Logigramme(nom, taille, tableau){
/*
Ceci sert de constructeur....
*/
	taille2=tableau.length;
	//on y déclare les variables
	this.tableau=new Array(taille2);
	this.nom = nom;
	this.taille_once=taille;
	this.taille_total=taille2;
	this.indices_used;
	//puis les fonctions que le logigramme peut utiliser
	this.check=Logigramme_check;
	this.rectifie=Logigramme_rectifie;
	this.affiche=Logigramme_affiche;
	this.indices=Logigramme_indices;
	this.indice_coche=Logigramme_indice_coche;
	//on affiche les cases
	document.write('<input type="button" value="clear" onclick="clear_screen('+taille2+');"><br /><table style="border-spacing: 0px;"><tr><td>'+nom+'</td>');
	for (i=0;i<taille2;i++)
		document.write('<td><input type="button" value="'+tableau[i]+'" onclick="boldisex('+i+', '+taille2+');"></taille2;i++)></td>');
	ci=0;
	for (i=0;i<taille2;i++){
		if (i%taille==0){
			ci++;
			change_colone=1;
		}else
			change_colone=0;
		document.write('</tr><tr><td><input type="button" value="'+tableau[i]+'" onclick="boldisey('+i+', '+taille2+');"></td>');
		this.tableau[i]=new Array(taille2);		//on déclare un tableau dans un tableau
		cj=0;
		for (j=0;j<taille2;j++){
			if (j%taille==0){			//marque un changement de catègorie et les bordures de gauche de chaque catègorie
				cj++;
				st='border-left : 3px solid;';
			}else
				st='';
			if (change_colone==1)		//place les bordures de haut de categories
				st+='border-top : 3px solid;';
			if (i==j)
				v='O';
			else if (ci==cj)
				v='X';
			else
				v='';
			if (j==taille2-1)			//place la bordure de droite
				st+='border-right : 3px solid;';
			if (i==taille2-1)			//et celle du dessous
				st+='border-bottom : 3px solid;';
			document.write('<td style="'+st+'"><input type="text" id="'+i+'_'+j+'" size="1" value="'+v+'" onchange="changed('+"'"+nom+"'"+','+i+','+j+');" /></td>');
			this.tableau[i][j]=v;				//et on en modifie la valeur
		}
	}
	document.write('</tr></table><br /><input type="button" value="clear" onclick="clear_screen('+taille2+');">');
}
function Logigramme_indices(){
	var i;
	this.indices_used=new Array(Logigramme_indices.arguments.length);
	document.write("<ul>");
	for (i=0;i<Logigramme_indices.arguments.length;i++){
		document.write('<li id="indice_'+i+'" onclick="'+this.nom+'.indice_coche('+i+');">'+Logigramme_indices.arguments[i]+"</li>");
		this.indices_used[i]=false;
	}
	document.write("</ul>");
}
function Logigramme_indice_coche(i){
	this.indices_used[i]=(this.indices_used[i])?false:true;
	document.getElementById("indice_"+i).style.background=(this.indices_used[i])?"#DDDDDD":"#FFFFFF";
}
function Logigramme_affiche(pos_x,pos_y){
/*
cette fonction sert à changer la valeur d'une case
*/
	/*//alert(pos_x+'/'+pos_y+'/'+this.tableau[pos_x][pos_y]);
	eval("a=document."+this.nom+"._"+pos_x+"_"+pos_y+".value");
	eval("document."+this.nom+"._"+pos_x+"_"+pos_y+".value='"+this.tableau[pos_x][pos_y]+"'");*/
	document.getElementById(pos_x+"_"+pos_y).value=this.tableau[pos_x][pos_y];

}

function Logigramme_check(pos_x,pos_y,changed){
	/*
	Cette fonction sertà cocher une case 
	*/
	if (changed=="O" || changed=="X" || changed==""){
		this.tableau[pos_x][pos_y]=changed;				//aplique la modification en ram
		this.rectifie();									//complète le tableau
	}else{
		alert('erreur !! vous avez saisi :"'+changed+'"');
		this.affiche(pos_x,pos_y);						//efface l'erreur
	}
}

function Logigramme_rectifie(){
	/*
	Pour commencer dans tout logigramme :
		à toute case de coordonnées (x, y) on peut associer une case de même valeur et de coordonnées (y,x);
	*/
	var scan_x, cores_x, scan_y, cores_y, point_x, point_y,i,j=0;
	var alignO=new Array(this.taille_once*2);
	var alignX=new Array(this.taille_once*2);
	var manqueO_x=new Array(this.taille_once*2);
	var manqueO_y=new Array(this.taille_once*2);
	for (i=0;i<this.taille_once*2;i++){
		alignX[i]=0;
		alignO[i]=0;
	}
	for (scan_x=0;scan_x<this.taille_total;scan_x++){
		for (scan_y=0;scan_y<this.taille_total;scan_y++){
			if (this.tableau[scan_x][scan_y]!=this.tableau[scan_y][scan_x]){
				if (this.tableau[scan_x][scan_y]==''){
					this.tableau[scan_x][scan_y]=this.tableau[scan_y][scan_x];
					this.affiche(scan_x,scan_y);
				}else if (this.tableau[scan_y][scan_x]==''){
					this.tableau[scan_y][scan_x]=this.tableau[scan_x][scan_y];
					this.affiche(scan_y,scan_x);
				}else{
					alert('ERREUR CONFLIT ENTRE LES CASES : ('+scan_x+', '+scan_y+') et ('+scan_y+', '+scan_x+');');
				}
			}
		}
	}
	/*
	ensuite, on a strictement une seule réponse positive par ligne et par colone...
	*/
	retour=1;
	while(retour==1){				//comme le tableau change régulièrement, on doit faire plusieurs tours...
		retour=0;
		for (scan_x=0;scan_x<this.taille_total;scan_x+=this.taille_once){
			for (scan_y=0;scan_y<this.taille_total;scan_y+=this.taille_once){
				for (point_x=0;point_x<this.taille_once;point_x++){
					for (point_y=0;point_y<this.taille_once;point_y++){
						if (this.tableau[scan_y+point_y][scan_x+point_x]=='X'){
							alignX[point_x]++;
							alignX[point_y+this.taille_once]++;
						}else if (this.tableau[scan_y+point_y][scan_x+point_x]=='O'){
							alignO[point_x]++;
							alignO[point_y+this.taille_once]++;
						}else{
							manqueO_x[point_x]=scan_x+point_x;
							manqueO_x[point_y+this.taille_once]=scan_x+point_x;
							manqueO_y[point_x]=scan_y+point_y;
							manqueO_y[point_y+this.taille_once]=scan_y+point_y;
						}
					}
				}
				for (i=0;i<this.taille_once*2;i++){
					//récupère les erreurs
					if (alignX[i]==this.taille_once)
						alert('erreur ligne de croix dans la catègorie ('+(scan_x/this.taille_once)+','+(scan_y/this.taille_once)+');'+this.taille_once);
					if (alignO[i]>1)
						alert('erreur deux validations dans la catègorie ('+(scan_x/this.taille_once)+','+(scan_y/this.taille_once)+');');
					//si il ne reste qu'une case vide, et que toutes les cases sont remplies par des croix, alors on mets un O
					if (alignX[i]==this.taille_once-1 && alignO[i]==0){
						this.tableau[manqueO_y[i]][manqueO_x[i]]='O';
						this.affiche(manqueO_y[i],manqueO_x[i]);
						retour=1;
					}
					//quand on a un O on doit remplir toutes les cases sur les cotés de X
					if (alignO[i]==1 && alignX[i]!=this.taille_once-1){
						if (i<this.taille_once){
							for (point_y=0;point_y<this.taille_once;point_y++){
								if (this.tableau[scan_y+point_y][scan_x+i]==''){
									this.tableau[scan_y+point_y][scan_x+i]='X';
									this.affiche(scan_y+point_y, scan_x+i);
								}
							}
						}else{
							for (point_x=0;point_x<this.taille_once;point_x++){
								//alert(scan_y + i + ' , ' + scan_x + point_x );
								if (this.tableau[	scan_y + i - this.taille_once		][ scan_x + point_x]==''){
									this.tableau[	scan_y + i - this.taille_once		][ scan_x + point_x]='X';
									this.affiche(	scan_y + i - this.taille_once		,   scan_x + point_x);
								}
							}
						}
						retour=1;
					}
					//remets les alignements à 0
					alignX[i]=0;
					alignO[i]=0;
				}
			}
		}
		/*
		Quand on rencontre un O, les cases ensuite sont identiques
		*/
		for (scan_y=0;scan_y<this.taille_total;scan_y++){
			for (scan_x=0;scan_x<this.taille_total;scan_x++){
				if (this.tableau[scan_y][scan_x]=='O'){
					for (point_x=0;point_x<this.taille_total;point_x++){
						if (this.tableau[scan_y][point_x]!=this.tableau[scan_x][point_x]){
							if (this.tableau[scan_y][point_x]==''){
								this.tableau[scan_y][point_x]=this.tableau[scan_x][point_x];
								this.affiche(scan_y,point_x);
								retour=1;
							}else if (this.tableau[scan_x][point_x]==''){
								this.tableau[scan_x][point_x]=this.tableau[scan_y][point_x];
								this.affiche(scan_x,point_x);
								retour=1;
							}else{
								alert('ERREUR CONFLIT ENTRE LES CASES : ('+scan_y+', '+pointx+') et ('+scan_x+', '+pointx+');');
							}
						}
					}
				}
			}
		}
	}
}

function changed(nom, pos_x,pos_y){
	/*
	Cette fonction sert quand on change manuellement les valeurs
	elle récupère la valeur changée
	et l'envoi à la fonction check
	*/
	eval("a=document.getElementById('"+pos_x+"_"+pos_y+"').value");
	eval(nom+".check("+pos_x+","+pos_y+",'"+a+"')");
}
/*
(médiocre) Exemple d'utilisation
*/
a=new Array(4);
a[0]='ang';
a[1]='sue';
a[2]='dan';
a[3]='nor';
a[4]='all';

a[5]='1';
a[6]='2';
a[7]='3';
a[8]='4';
a[9]='5';

a[10]='rou';
a[11]='ver';
a[12]='ble';
a[13]='jau';
a[14]='bla';

a[15]='chi';
a[16]='ois';
a[17]='cha';
a[18]='che';
a[19]='poi';

a[20]='thé';
a[21]='caf';
a[22]='lai';
a[23]='bie';
a[24]='eau';

a[25]='pal';
a[26]='dun';
a[27]='mal';
a[28]='win';
a[29]='rot';

//pour avoir la fonction changed il faut leur mettre le même nom....
/*
Pour plus de vitesse et de facilitée, un duplicat des cases affichés est fait en ram... ( dans this.tableau)
*/
einstein=new Logigramme('einstein',5,a);
einstein.indices('Le Britannique habite dans une maison rouge.','Le Suédois possède un chien.','Le Danois boit du thé.','La maison verte est immédiatement à gauche de la maison blanche.','Le propriétaire de la maison verte boit du café.','La personne qui fume des cigares de marque Pall Mall élève des oiseaux.','Le propriétaire de la maison jaune fume des Dunhill.',"L'homme qui vit dans la maison du milieu boit du lait.','Le Norvégien habite dans la première maison.","L'homme qui fume des Rothmans demeure dans la maison située à côté de celui qui garde des chats.","L'homme qui possède des chevaux habite à côté de celui qui fume des Dunhill.","Le propriétaire qui fume des malboros boit de la bière.","L'Allemand fume des Winfield.","Le Norvégien habite à côté de la maison bleue.","Le voisin de l'homme qui fume des Rothmans, boit de l'eau.");
</script>
<br />
À qui appartient le poisson? 
</p>
</body>
</html>


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

04 mars 2005 23:46:24 :
ajout d'un exemple, ajout de commentaires, puis la fonctionalitée "déduction"...
14 mai 2005 01:30:11 :
ajout d'un mode de surlignage + remplacement des document.forumulaire.name par des document.getElementById... défaut de cette maj : on ne peut plus mettre plusieurs logigrammes sur la même page...
30 novembre 2005 13:44:53 :
ajouts de mots clefs

 Sources du même auteur

NOTATION CLASSIQUE VERS NOTATION NPI
LIST.ML D'OCAML EN JAVASCRIPT
Source avec Zip Source avec une capture UN CHRONOMETRE EN SVG+JAVASCRIPT
Source avec Zip Source avec une capture WYSIWYG TOTALEMENT OO
Source avec Zip Source avec une capture DU DOM EN SVG : UNE HORLOGE ANALOGIQUE

 Sources de la même categorie

Source avec Zip Source avec une capture SLIDESHOW IMAGES ET TEXTES EN PUR JAVASCRIPT par ansuzpeorth
Source avec Zip INPUT TEXT AUTOMATIQUE CREATION SUPPRESSION par lycanges
Source avec Zip Source avec une capture TABLE_SV : TABLEAU DYNAMIQUE, MONTRER/CACHER COLONNE SUR DEM... par synanceia
COLONNES ADAPTABLES EN HAUTEUR par dronoide
Source avec Zip VECTEURS ET MATRICES: OUTILS GRAPHIQUES UTILES par william voirol

 Sources en rapport avec celle ci

TAILLE DE TEXTE EN FONCTION DE LA RÉSOLUTION par tefa24600
DETECTER LA RESOLUTION DE L'ECRAN par Jo

Commentaires et avis

Commentaire de LocalStone le 27/02/2005 19:31:07

Je risque de paraître un peu idiot, mais qu'est ce qu'un logigramme ?
J'ai cherché sur Google, mais j'ai plus ou moins compris qu'un logigramma était un organigramme. Or, là ... Bah non. Et je vais pas mettre une bonne note avant de comprendre ! Non mais ...
Alors, c'est kwaaaaaaaaa ?
++ !
LocalStone.

Commentaire de coucou747 le 27/02/2005 19:44:59 administrateur CS

un logigramme est une énigme : on a une petite phrase de présentation, une question et des indices, on doit trouver la solution...

la solution est parfois (souvent sinon c'est pas drole) très compliquée à trouver si on ne fait pas de shémat, on fait alors une grille et on y place les diférents paramètres....

ici, les déductions se font en partie automatiquement... J'ai une version en cours de dévelopement ou le logiciel fait toutes les déductions...

Commentaire de vdzh le 28/02/2005 05:47:05

Voici un très bon exemple d'un problème qui peut trouver sa solution via un logigramme :

ENONCE :
- 5 hommes de nationalités différentes habitent 5 maisons de 5 couleurs différentes.                                                                      
- Ils fument des cigarettes de 5 marques différentes et boivent 5 boissons différentes.                                      
- Ils élèvent des animaux de 5 espèces différentes.

INDICES :
1 Le Norvégien habite la première maison
2 L'anglais habite la maison rouge
3 La maison verte est située à gauche de la maison blanche
4 Le danois boit du thé
5 Celui qui fume des Rothmans habite à coté de celui qui élève des chats
6 Celui qui habite la maison jaune fume des Dunhill
7 L'allemand fume des Marlboro
8 Celui qui habite la maison du milieu boit du lait
9 Celui qui fume des Rothmans habite a un voisin qui boit de l'eau
10 Celui qui fume des Pall Mall élève des oiseaux
11 Le suédois élève des chiens
12 Le Norvégien habite à coté de la maison bleue
13 Celui qui élève des chevaux habite à coté de la maison jaune
14 Celui qui fume des Philip Morris boit de la bière
15 Dans la maison verte, on boit du café
QUESTION : Qui élève des poissons ?


Commentaire de coucou747 le 28/02/2005 19:15:43 administrateur CS

c'est l'exemple que j'ai pris pour ma nouvelle verstion... c'est celui d'einstein, ce grand physicien avait dit que seulement 2 pourcent de la population était capable de le faire...

Commentaire de coucou747 le 04/03/2005 23:47:30 administrateur CS

je viens de le mettre à jours, j'ai mis ce logigramme pour illustrer ma source, mais je n'ai pas remis à jours le zip...

Commentaire de Mannex le 13/05/2005 22:08:34

en effet le zip n'est pas à jour ;)
ca marche très bien, aucun problème apparent
et je sais maintenant à qui appartient le poisson rouge :)

Voici quelques idées pour rendre plus sympa ce programme:
- il serait intéressant (surtout quand on a une grille avec un nombre important de lignes et colonnes) que la ligne et la colonne (ou juste un des deux selon un choix qu'on ferait en cliquant quelque part) soit mise en surbrillance quand on sélectionne une case. Quand la case à remplir est très à droite ou très en bas, c'est quelquefois un peu sportif de ne pas dévier en cours de route...
- j'ai copié le logigramme dans le code source afin qu'il apparaisse à l'écran, comme tu l'as fait dans la source. Un autre petit + serait de donner la possibilité de rayer (ou changer sa couleur ou le cacher...) un indice qu'on a exploité dans sa totalité pour y voir plus clair à la fin
- enfin, il serait agréable qu'il ne s'agisse pas de cases à remplir mais pourquoi pas quelque chose du genre ou on clique dans le coin de la case sur un rond vert ou une croix croix rouge pour la remplir avec ce symbole, ou alors clic gauche pour un rond vert et clic droit pour une croix rouge,... Pourquoi pas aussi foncer (mais laisser accessible pour corrections éventuelles) les lignes et colonnes entièrement complétées ?

hum, ça se voit tant que ça que je suis fan de logigrammes ?

Ces trois propositions ne remettent pas en cause le bon fonctionnement du programme. je note 9

Commentaire de coucou747 le 14/05/2005 00:39:43 administrateur CS

merci, je verrais ce que je peux faire...

Commentaire de coucou747 le 14/05/2005 01:33:09 administrateur CS

je l'ai mis à jour...
je n'ai pas ajouté tout ce que tu as suggéré : je n'ai pas arrangé la sélection des cases... J'ai trouvé ça trop contraignant... De plus, ça aurait entrainé un gaspillage de mémoire (enfin, pas forcément, mais j'aurais dans ce cas perdu en cpu...)

ça fait plaisir de voir que ce petit programme aura servi à quelqu'un!

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Se connecT à 1 site [ par Ken2K ] 'luuje cherche a automatiser, un logiciel de mise à jour d'une base de donnée. Donc comment on peut faire pour se connecter à un site. Sans que l'util fenetre scrollable en fonction de la résolution ????? [ par fcdconnect ] lut tlm... une fois de plus une question je l'espère pertinente :je souhaiterai rendre une page scrollable en fonction de la résolution d'affichage du Quel logiciel??? [ par Nargzul ] Salut tlm!!! Je veux commencer aujourd'hui le java, et je ne sais pas quel programme utiliser. Qu'est-ce que vous avez à me conseiller? (préciser si p Taille des images variable selon la taille de la fenetre ou la résolution [ par motenai ] Salut,En fait, j'aimerais trouver le moyen pour que mes images changent toutes seules de taille soit selon la résolution de l'écran soit selon la tail redirection navigateur ET résolution [ par cristina49 ] bonjour,je voudrait juste avoir un petit renseignement. j'ai trouvé sur internet des scripts pour rediriger en fonction de la résolution et d'autres e Adapter son site [ par Manu29 ] Comment faire si j'ai créé mon site sous la résolution 800*600 et que le visiteur lui est en 1024*768 ? Je souhaiterai donc trouver un code java pour Recherche script pour affichage selon la résolution [ par Emaux ] Bonjour à tous !En tant qu'amateur, je tente de faire un site pour rendre service.Je vous expose mon souci :j'ai crée ma page sur un tableau 800 centr Problème de placement d'une boite div selon la résolution [ par optimed ] Bonjour!Je vous explique mon problème:je suis en train de travailler sur un site optimisé pour du 800x600 avec une boîte div (en position absolue) qui Changer la Résolution automatiquement [ par massacr ] BonjourJe voudrais faire un script qui, lors du chargement de la page, détecte la résolution de l'écran. Si elle est mauvaise (800*600 par ex), il cha connaitre la résolution d'un pc [ par Nargzul ] voila bonjour,je sais que ca doit etre tout con, mais comment arrive-t-on à connaitre la résolution d'un pc???merci beaucoup


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
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 : 12,886 sec (4)

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