C : Chiffres distincts dans un tableau d'int

Résolu/Fermé
oliobs Messages postés 16 Date d'inscription lundi 21 décembre 2009 Statut Membre Dernière intervention 17 mai 2010 - 21 déc. 2009 à 16:03
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 22 déc. 2009 à 08:32
Bonjour à tous , merci de vous intéresser à mon problème ^^

En cette période de préparation d'examens, j'ai décidé de refaire les exercices que j'avais eu en cours ...
un de ces exercices consistait à remplir un tableau à deux dimensions de nombres aléatoires et distincts. pour résoudre l'exercice j'avais parcouru le tableau comme un vecteur et cela fonctionnait très bien ... seulement le professeur m'a gentiment retiré quelques points pour ça . . . J'ai donc essayé de le refaire en utilisant le même principe mais ça ne fonctionne pas une fois que le tableau devient trop grand..
Pouvez vous m'aider, me dire ce qui cloche dans mon algorithme et/ou comment l'améliorer .
Merci d'avance :) .
Petite remarque: avant le début de cette année je n'avais aucune notion de programmation, aussi à l'heure actuel mon niveau de connaissance se maintient à ce que j'ai vu en cours (Actuellement: les tableaux de char)

NB:S'il existe une fonction qui effectue la même chose, je veux bien la savoir mais l'intérêt ici est de réussir à le faire par moi même, pour apprendre. Merci

Voici l'énoncé et l'algorithme :

/*Ecrire un logiciel qui alimentera un tableau de 5X4 d'entier aléatoire compris entre 8 et 53. Le logiciel affichera ensuite ce tableau et l'addition pour chaque ligne et chaque colonne.*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

main()
{
    srand(time(NULL));
    int tab[5][4]={0};
    int o,tmp=0,p,l,c;
/*ici on initialise une variable temporaire, on va vérifier si elle existe déjà dans le tableau si non, on l'y insérera*/
    for(l=0;l<5;l++)
    {
        for(c=0;c<4;c++)
        {
            tmp=(rand()%(30)+1);
/*ici on va parcourir le tableau en entier pour vérifier la présence de la variable tmp*/
            for(o=0;o<5;o++)
            {
                for(p=0;p<4;p++)
                {
/*si tmp existe déjà on lui redonne une nouvelle valeur et on refais un parcours*/
                     if(tab[o][p]==tmp)
                     {
                         tmp=(rand()%(30)+1);
                         o=0;
                         p=0;
                     }
                }
            }
            tab[l][c]=tmp;
        }
    }

   /*affichage du tableau*/
    for(l=0;l<5;l++)
    {
        for(c=0;c<4;c++)
        {
            printf("%d\t",tab[l][c]);
        }
        printf("\n");
    }
    system("pause");
}


/*celui ci a l'air de fonctionner comme je vous l'ai dis mais si je l'effectue avec un tableau de [10][10] le programme ne plante pas mais n'affiche rien , comme s'il cherchait toujours un résultat*/

4 réponses

loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
21 déc. 2009 à 16:30
Si j'ai bien compris tu cherches à initialiser un tableau à deux dimensions avec des valeurs aléatoires différentes ?
Alors si j'ai bien compris, le comportement de ton programme est normal et tu dois voir l'os dans les deux lignes suivantes:
int tab[10][10];
tmp=(rand()%(30)+1);


Bonne réflexion.
0