Problème sur un test entre 2 nombres entiers

Résolu/Fermé
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 - 6 oct. 2016 à 13:40
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 - 6 oct. 2016 à 17:11
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.







A voir également:

2 réponses

dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
Modifié par dubcek le 6/10/2016 à 14:47
hello
pour commencer
il manque () sinon tout va dans tableau_trie[0]
tableau_trie=($( echo ${tableau[*]} | sed -e 's/ /\n/g' | sort -n ) )

il manque des {}
if [ "${tableau_trie[$i]}" == "${tableau_trie[$j]}" ]; 

pour générer 12 nombres aléatoires entre 1 et 49
$ shuf -i 1-49 -n 12
1
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 66
6 oct. 2016 à 17:11
Ah ! oui merci beaucoup dubcek pour ta réponse, maintenant ça marche nickel chrome, je mets le sujet en résolu.
0