Problème sur un test entre 2 nombres entiers
Résolu
zatox
Messages postés
640
Date d'inscription
Statut
Membre
Dernière intervention
-
zatox Messages postés 640 Date d'inscription Statut Membre Dernière intervention -
zatox Messages postés 640 Date d'inscription Statut Membre Dernière intervention -
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 disque dur - Télécharger - Informations & Diagnostic
- Supercopier 2 - Télécharger - Gestion de fichiers
- Test steam deck oled - Guide
- Test composant pc - Guide