11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour, je souhait générer une table binaire suivante : l'utilisateur a face à lui 8 nombres par ordre 128, 64, 32, 16, 8, 4, 2 et 1 qu'il coche à souhait mais comme seule contrainte qu'il ne puisse cocher que par nombre adjacent (128 64 32 juste, 128 32 16 faux), le résulta total du nombre de nombres cochés correspond aux nombres de bits utilisé (ex : 32 16 8 = 3 nombres = 3 bits) par la table binaire, par la suite après génération de la table il doit y avoir une addition progressif des nombres choisies au départ.

Ex. de ma table en question :

32 | 16 | 8
0 | 0 | 0 = 0
0 | 0 | 1 = 8
0 | 1 | 0 = 16
0 | 1 | 1 = 24
1 | 0 | 0 = 32
1 | 0 | 1 = 40
1 | 1 | 0 = 48
1 | 1 | 1 = 56

En s'en tordre les boyaux ? hein Smiley biggol

Comment s'y prendre ? et je remercie toute l'aide qu'on puisse m'apporter à réaliser ce défi Smiley smile

(PS : Je suis dsl si je ne suis pas dans la bonne section, mais je pense que c'est la bonne (script) sinon merci de rediriger mon sujet et encore dsl Smiley ravi )
Modifié par Zebiloute (10 Dec 2009 - 12:30)
Salut Zebiloute et bienvenue,

comme indiqué dans les règles du forum :
Aide a écrit :
Ceci est une communauté d'entraide, pas de travail à votre place.

Ceci dit j'ai trouvé ça amusant à trouver donc voici le code... Smiley cligne

par contre c'est en PHP car :
* c'est plus rapide à faire que le JavaScript pour moi.
* il faut toujours prévoir le cas où le JavaScript est désactivé donc il faut toujours un équivalent côté serveur.
<?php 
$erreurs = array(); 
 
// Récupération des valeurs choisies 
$nbres_bits = !empty($_POST['nb_bits']) ? $_POST['nb_bits'] : array(); 
 
// Si le formulaire a été envoyé, on teste les champs... 
if($_SERVER['REQUEST_METHOD'] == 'POST') { 
    // Vérification des champs 
    // Au moins 1 valeur doit être saisie 
    if(empty($nbres_bits)) { 
        $erreurs[] = 'Il faut sélectionner au moins 1 valeur !'; 
    } 
    // Les nombres de bits choisis doivent être consécutifs ! 
    if(count($nbres_bits) > 1) { 
        for($index = 0; $index < count($nbres_bits)-1; $index++) {  
            if($nbres_bits[$index] != $nbres_bits[$index+1]*2) { 
                $erreurs[] = 'Les nombres de bits choisis doivent être consécutifs !'; 
                break; 
            } 
        } 
    } 
} 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Test formulaire</title> 
<style type="text/css"> 
.alert { 
    color:#990000; 
} 

input {
	float: left;
}

label {
	display: block;
	text-align: center;
	padding-left : 20px;
	width: 30px;
}

label:hover {
	background: #33FF33;
}

table { 
    border-collapse: collapse; 
} 
table th, table td { 
    width: 50px; 
    border: 1px solid #eee; 
    padding: 2px; 
    text-align: center; 
} 
</style> 
</head> 
<body> 
<?php 
// Si premier affichage ou erreurs on affiche le formulaire 
if($_SERVER['REQUEST_METHOD'] != 'POST' || !empty($erreurs)) { 
 
    // erreur(s) à afficher ? 
    if(!empty($erreurs)) { 
        foreach($erreurs as $erreur) { 
            echo '<p class="alert">'.$erreur."</p>\n"; 
        } 
    } 
?> 
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post"> 
<?php 
    if(!empty($nbres_bits)) { 
        $valeurs_choisies = array_flip($nbres_bits); 
    } 
    $nbres_bits = 128; 
    while($nbres_bits >= 1) { 
        $checked = isset($valeurs_choisies[$nbres_bits]) ? ' checked="checked"' : ''; 
        echo "\t".'<p><input type="checkbox" name="nb_bits[]" value="'.$nbres_bits.'" id="bits_'.$nbres_bits.'"'.$checked.' /><label for="bits_'.$nbres_bits.'">'.$nbres_bits."</label></p>\n"; 
        $nbres_bits = $nbres_bits / 2; 
    } 
?> 
    <p> 
        <input type="submit" value="Valider" /> 
    </p> 
</form> 
 
<?php 
} else { // Sinon affichage du tableau de résultats 
    echo "<table><tr>\n"; 
    // Entête 
    foreach($nbres_bits as $nbre_bits) { 
        echo "\t".'<th scope="col">'.$nbre_bits."</th>\n"; 
    } 
    echo "\t<th>Total</th>\n"; 
    echo "</tr>\n"; 
    // Corps 
    // les totaux vont de 0 à la somme des valeurs choisies en étant incrémentés de la plus petite... 
    $total_max = array_sum($nbres_bits); 
    $total_ligne = 0; 
    $increment = $nbres_bits[count($nbres_bits)-1]; 
    while($total_ligne <= $total_max) { 
        $ligneTDs = ''; 
        $verif = $total_ligne; 
        foreach($nbres_bits as $nbre_bits) { 
            if($nbre_bits <= $verif) { 
                $ligneTDs .= '<td title="on">1</td>'; 
                $verif -= $nbre_bits; 
            } else { 
                $ligneTDs .= '<td title="off">0</td>'; 
            } 
        } 
        $ligneTDs .= '<td>'.$total_ligne."</td>\n"; 
        echo "<tr>\n\t".$ligneTDs."</tr>\n"; 
        $total_ligne += $increment; 
    } 
    echo "</table>\n"; 
    echo '<p><a href="'.htmlspecialchars($_SERVER['PHP_SELF']).'">Nouvelle sélection</a></p>'; 
} 
?> 
</body> 
</html>

Modifié par Heyoan (10 Dec 2009 - 11:26)
Salut... Smiley eek Awesome !

Ben écoute merci pour tout et puis passe une bonne journée Smiley biggrin .

(Et moi qui débute en javascript, toi tu viens et hop en PHP, et j'ai plus qu'a aller me rhabiller Smiley lol ).

EDIT : Il serait intéressent de mettre la "Mise en forme" suivante : [ Smiley spoiler ] au cas où les codes sont trop long Smiley cligne .
Modifié par Zebiloute (10 Dec 2009 - 12:36)