Problème sur un test entre 2 nombres entiers
Résolu
                    
        
     
             
                    zatox
    
        
    
                    Messages postés
            
                
     
             
            663
        
            
                                    Statut
            Membre
                    
                -
                                     
zatox Messages postés 663 Statut Membre -
        zatox Messages postés 663 Statut Membre -
        Bonjour, je crée un tableau de 12 postes et je charge ce tableau par un nombre aléatoire à chaque fois. Je souhaite recommencer tant qu'il y a des doublons dans mon tableau, je  veux qu'il n'y ait que des entiers uniques. Après le chargement du tableau, je fais un tri, puis je regarde si je trouve deux postes consécutifs qui auraient la même valeur, dans ce cas je recommence à charger.
Mon problème est que le test:
if [ "$tableau_trie[$i]" == "$tableau_trie[$j]" ];
then
doublon_trouve=1
i=$nombre_tirage
echo "AHHHH !! y a un DOUBLON !!!!!!!!!";
fi
ne fonctionne pas.
Voici la totalité de mon code et le résultat que j'obtiens suite à une exécution de ce code:
#! /bin/bash
# $RANDOM renvoie un entier différent à chaque appel.
# Échelle : 0 - 32767 (entier signé sur 16 bits).
min=1
max=49
nombre_aleatoire=0
nombre_tirage=12
tableau=[0]
tableau_trie=[0]
i=0
doublon_trouve=1
while [ "$doublon_trouve" -eq "1" ]
do
#****** CHARGEMENT DU TABLEAU AVEC NOMBRES ALEATOIRES *********
while [ "$i" -lt $nombre_tirage ]
do
nombre_aleatoire=$[($RANDOM % ($[$max - $min] + $min)) + $min]
tableau[$i]=$nombre_aleatoire
i=$(($i + 1))
done
#****** TRI DU TABLEAU *********
tableau_trie=$( echo ${tableau[*]} | sed -e 's/ /\n/g' | sort -n )
#****** ON CHERCHE S'IL Y A DES DOUBLONS *********
i=0
j=1
doublon_trouve=0
while [ "$i" -lt $nombre_tirage ]
do
if [ "$tableau_trie[$i]" == "$tableau_trie[$j]" ];
then
doublon_trouve=1
i=$nombre_tirage
echo "AHHHH !! y a un DOUBLON !!!!!!!!!";
fi
i=$(($i + 1))
j=$(($j + 1))
done
done
echo ${tableau[*]}
echo ${tableau_trie[*]}
Résultat suite à l'exécution du code:
./script_nb_aleatoire.sh
30 19 45 12 3 3 6 34 27 4 26 6
3 3 4 6 6 12 19 26 27 30 34 45
On voit qu'il y a plusieurs doublons dans mon tableau mais ils n'ont pas été détectés par le test !!!
Je pense qu'il existe beaucoup d'autres façons d'écrire ce code mais ce que je voudrais c'est comprendre pourquoi ce test sur ces variables if [ "$tableau_trie[$i]" == "$tableau_trie[$j]" ];
ne fonctionne pas et qu'est-ce que je dois faire pour le faire fonctionner.
Je vous remercie pour votre aide.
            
            
                
            
                
    
    
    
        Mon problème est que le test:
if [ "$tableau_trie[$i]" == "$tableau_trie[$j]" ];
then
doublon_trouve=1
i=$nombre_tirage
echo "AHHHH !! y a un DOUBLON !!!!!!!!!";
fi
ne fonctionne pas.
Voici la totalité de mon code et le résultat que j'obtiens suite à une exécution de ce code:
#! /bin/bash
# $RANDOM renvoie un entier différent à chaque appel.
# Échelle : 0 - 32767 (entier signé sur 16 bits).
min=1
max=49
nombre_aleatoire=0
nombre_tirage=12
tableau=[0]
tableau_trie=[0]
i=0
doublon_trouve=1
while [ "$doublon_trouve" -eq "1" ]
do
#****** CHARGEMENT DU TABLEAU AVEC NOMBRES ALEATOIRES *********
while [ "$i" -lt $nombre_tirage ]
do
nombre_aleatoire=$[($RANDOM % ($[$max - $min] + $min)) + $min]
tableau[$i]=$nombre_aleatoire
i=$(($i + 1))
done
#****** TRI DU TABLEAU *********
tableau_trie=$( echo ${tableau[*]} | sed -e 's/ /\n/g' | sort -n )
#****** ON CHERCHE S'IL Y A DES DOUBLONS *********
i=0
j=1
doublon_trouve=0
while [ "$i" -lt $nombre_tirage ]
do
if [ "$tableau_trie[$i]" == "$tableau_trie[$j]" ];
then
doublon_trouve=1
i=$nombre_tirage
echo "AHHHH !! y a un DOUBLON !!!!!!!!!";
fi
i=$(($i + 1))
j=$(($j + 1))
done
done
echo ${tableau[*]}
echo ${tableau_trie[*]}
Résultat suite à l'exécution du code:
./script_nb_aleatoire.sh
30 19 45 12 3 3 6 34 27 4 26 6
3 3 4 6 6 12 19 26 27 30 34 45
On voit qu'il y a plusieurs doublons dans mon tableau mais ils n'ont pas été détectés par le test !!!
Je pense qu'il existe beaucoup d'autres façons d'écrire ce code mais ce que je voudrais c'est comprendre pourquoi ce test sur ces variables if [ "$tableau_trie[$i]" == "$tableau_trie[$j]" ];
ne fonctionne pas et qu'est-ce que je dois faire pour le faire fonctionner.
Je vous remercie pour votre aide.
        A voir également:         
- Problème sur un test entre 2 nombres entiers
- Test performance pc - Guide
- Test steam deck oled - Guide
- Test disque dur - Télécharger - Informations & Diagnostic
- Supercopier 2 - Télécharger - Gestion de fichiers
- Test composant pc - Guide
