(Débutant)Validation des éléments d'un tableau

alc123 Messages postés 1 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 24 octobre 2009 - 24 oct. 2009 à 21:35
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 14 déc. 2009 à 14:39
Je débute en programmation et en C#, ma question vous paraitra donc stupide...

J'ai un tableau de 6 éléments ordonnés qui est rempli avec des nombre aléatoires entre 1 et 49
je dois vérifier que ceux-ci ne se retrouvent qu'une seul fois dans le tableau. Comment devrais-je m'y prendre ?

Ce que j'ai réussi a faire jusqu'à présent c'est ceci:

const int MINBILLET = 1;
const int MAXBILLET = 49;
const int MIN = 0;
const int MAX = 6;
int NombreAleatoire;
int Sommet;
int IndicePlusPetitNombre;
int IndiceNombreATester;
int Temp; //Variable de stockage (Temporaire)
int CptGenerateur;
int CptEcriture;
int[] TBillet;
TBillet = new int[MAX];
Random GenerateurAleatoire;
GenerateurAleatoire = new Random();


for (CptGenerateur = MIN; CptGenerateur < MAX; ++CptGenerateur) // Déterminer les 6 nombres pseudo aléatoires
{
NombreAleatoire = GenerateurAleatoire.Next();
TBillet[CptGenerateur] = NombreAleatoire % (MAXBILLET - MINBILLET + 1) + MINBILLET;
} // Fin




Sommet = 0; //Mettre en ordre les 6 nombres
while (Sommet < (MAX - 1))
{
IndicePlusPetitNombre = Sommet;
IndiceNombreATester = Sommet + 1;

while (IndiceNombreATester < MAX)
{
if (TBillet[IndiceNombreATester] < TBillet[IndicePlusPetitNombre])
{
IndicePlusPetitNombre = IndiceNombreATester;
}
++IndiceNombreATester;
}
if (IndicePlusPetitNombre != Sommet)
{
Temp = TBillet[IndicePlusPetitNombre];
TBillet[IndicePlusPetitNombre] = TBillet[Sommet];
TBillet[Sommet] = Temp;
}
++Sommet; //Fin
}




for (CptEcriture = MIN; CptEcriture < MAX; ++CptEcriture) //Écrire les 6 nombres
{
Console.Write(TBillet[CptEcriture]);
Console.Write(" "); //Fin
}

}
}
}


Merci d'avance de votre aide !

14 réponses

Zaltez Messages postés 48 Date d'inscription mardi 23 novembre 2004 Statut Membre Dernière intervention 20 décembre 2009 1
25 oct. 2009 à 02:41
Salut,

Voici un exmple de methode qui permet de controler que ce que tu ajoute a la liste lstNumber n'est pas deja présent dans cette même liste

List lstNumber = new List();

        private void AddNumber(int number)
        {
            if (lstNumber.Contains(number) == false)
            {
                lstNumber.Add(number);
            }
        }
1
BRICE1182 Messages postés 9 Date d'inscription mercredi 9 décembre 2009 Statut Membre Dernière intervention 23 avril 2010
9 déc. 2009 à 14:09
Salut! les amis je suis un débutant en c#, j'ais un petit souci avec un première application que voici:
public class Nombre
{
//Structure de la class
private int valeur;
private int taille;
private int min;
private int max;
private int i;
private int somdiv;
private int nbr;
private int Est_premier;
private int[] tableau;
private float moyenne;
public Nombre()
{
}
public Nombre(int _taille, int _tableu)
{

taille = _taille;
}
//Remplissage et affichage du tableau
public void RemplisageTableau()
{
Console.WriteLine("Remplissage et affichage de tableau");
//taille u tableau
Console.WriteLine("Combien de valeurs voulez vous saisir?");
string taille = Console.ReadLine();
int taille = int.TryParse(taille);
int[] tableau = new int[taille];
//Remplissage du tableau
for (int i = 0; i < taille; i++)
{
Console.Out.WriteLine("Saisissez la valeur n°{0}:", i + 1);
string valeur = Console.ReadLine();
int valeur = int.TryParse(valeur);
tableau[i] = valeur;

}

}



//Recherche du minimum et du maximum
public int RechercheMinimum()
{
Console.WriteLine("Recherche du minimum et du maximum");

if (tableau != null)
{
int min = tableau[0];
for (int i = 1; i < tableau.Length; i++)
{
if (tableau[i] < min) min = tableau[i];
}
return min;
}
else
{
return 0;
}

}
public int RechercheMaximum()
{
if (tableau != null)
{
int max = tableau[0];
for (int i = 1; i < tableau.Length; i++)
{
if (tableau[i] > max) max = tableau[i];
}
return max;
}
else
{
return 0;
}

}

//Recherche des nombres premiers

public void RechercheNombr1er()
{
Console.WriteLine("Recherche des nombres 1er");

nbr = 2;
while (tableau[i] != nbr)
{
somdiv = 2;
Est_premier = true;
do
{
if (nbr % somdiv== 0) Est_premier= false;
else somdiv=somdiv+1;
}
while((somdiv == nbr/2)&&(Est_premier==true));
if(Est_premier)
{
tableau[i]++;
Console.Out.WriteLine("La valeur {0}est un nombre premier", nbr);
}
nbr++;
//else
{
Console.Out.WriteLine("La valeur {0} n'est pas un nombre premier", nbr);

}
}
}
}

//Calcul de la moyenne arithmetique
public float MoyenneObtenu()
{
Console.WriteLine("Calcul de la moyenne arithmetique");
if (tableau != null)
{
int somme = 0;
for (int i = 0; i < tableau.Length; i++)
{
somme = (somme + tableau[i]);
}
return (float)somme / (float)(taille);


else
{
return 0;
}
}
}
}
}

voici ma class program:

namespace ConsoleMax
{
class Program
{

static void Main(string[] args)
{
Nombre AffichageValeur = new Nombre();

//Lecture et affichage du contenu du tableau
AffichageValeur.RemplisageTableau();

//Comparaison des vales

AffichageValeur.RechercheMinimum();

AffichageValeur.RechercheMaximum();

//Recherche de nombres 1er
AffichageValeur.RechercheNombr1er();

//Calcul de moyenne arithmetique du tableau
AffichageValeur.MoyenneObtenu();

Console.ReadKey();
}
}
}
C'est un tableau, d'ont la taille et les valeurs serons saisi par l'utilisateur en suite cette application se chargera d'afficher :
-la taille du tableau;
-les valeurs du tableau;
-la valeur minimal et maximal;
-les nombres 1ers présent dans le tableau;
-et enfin calculera la moyenne arithmetique du tableau;
0
anibro Messages postés 7 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 14 décembre 2009 2
9 déc. 2009 à 15:14
j'ai quelques questions à poser, je sais qu'elles sont bêtes,mais j'ai la soif de comprendre car j'ai lu mais je ne pige rien du tout si quelqu'un peut m'aider;
voila:
je voudrai savoir la différence qu'il y a entre un type de référence et un type de variable
j'aimerai aussi savoir quelles sont les différents classe en c# et comment les déclarent-ont ?
merci d'avance de votre compréhension
0
BRICE1182 Messages postés 9 Date d'inscription mercredi 9 décembre 2009 Statut Membre Dernière intervention 23 avril 2010
9 déc. 2009 à 15:26
Bojour!anibro je pense qu'il faut que tu télécharge quelques cours de c# et commence par les lire mintenant. Allez à googel ou dévélopper.com bon courage
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
9 déc. 2009 à 16:13
Bonjour à tous

@BRICE1182 :
- Merci de faire ton propre post s'il n'est pas en lien DIRECT avec celui-ci.
- Merci d'utiliser les tags de code du forum autour de ton code, car là c'est illisible.
- Merci de sélectionner seulement la partie qui pose problème dans ton code et de préciser exactement quel est le problème.

@anibro
- Merci de faire ton propre post s'il n'est pas en lien DIRECT avec celui-ci.
- N'oublie pas le "BONJOUR" fortement apprécié en début de message
- Fais des recherches avant de poster (Google et Developpez.com sont effectivement très riches).

Cependant, voici quelques éléments de réponse :
Type par référence : un type qui contient une Référence à une zone mémoire (un peu comme un pointeur). Toutes les classes sont des types par référence. Les classes nécessitent obligatoirement un new pour faire une nouvelle instance et peuvent avoir la valeur null.

Type par valeur : un type qui contient directement la valeur de la variable. Toutes les structures et les types simples (int, double, DateTime, decimal, float, char, bool...) sont des types par valeur. Toute variable d'un type par valeur a son instance propre.

La modification d'un objet de type référence est donc répercutée sur toutes les références à cet objet. La modification d'un objet de type valeur n'est effective que pour l'objet en question.

// Par valeur
int i = 10;
int j = i;
i = i + 1;
// ici, i 11 et j 10. i et j sont 2 objets différents

// Par référence
ArrayList liste1 = new ArrayList ();
ArrayList  liste2 = liste1;
liste1.Add(unObjet);
// ici, liste1 ET liste2 possèdent 1 élément.
// liste1 et liste2 sont des références vers le même objet


Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé ! -
0
anibro Messages postés 7 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 14 décembre 2009 2
9 déc. 2009 à 16:30
Merci beaucoup krimog je suis maintenant édifié sur ces points dont je faisais toujours confusion, et je m'excuse pour mon manque de bonnes manières
j'espère te retrouver bientôt avec d'autres questions
0
BRICE1182 Messages postés 9 Date d'inscription mercredi 9 décembre 2009 Statut Membre Dernière intervention 23 avril 2010
9 déc. 2009 à 16:35
Bonjour à tous je ne trouve toujours pas de reponse, mon programme ne fonctionne pas. Il me renvois plein d'erreurs surtout concernant la conversion string en int,das cette partie:
public void RemplisageTableau()
{
Console.WriteLine("Remplissage et affichage de tableau");
//taille u tableau
Console.WriteLine("Combien de valeurs voulez vous saisir?");
string taille = Console.ReadLine();
int taille = int.Parse(taille);
int[] tableau = new int[taille];
//Remplissage du tableau
for (int i = 0; i < taille; i++)
{
Console.Out.WriteLine("Saisissez la valeur n°{0}:", i + 1);
string valeur = Console.ReadLine();
int valeur = int.Parse(valeur);
tableau[i] = valeur;

}
je ne peut pas aussi retourner la moyenne arithmetique du tableau dans cette partie:
public void MoyenneObtenu()
{
Console.WriteLine("Calcul de la moyenne arithmetique");
if (tableau != null)
{
int somme = 0;
for (int i = 0; i < tableau.Length; i++)
{
somme = (somme + tableau[i]);
}
return (float)somme / (float)(taille);
}
je compte sur votre aide merci d'avance
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
9 déc. 2009 à 17:05
Brice1182, merci d'utiliser la balise pour encadrer du code. C'est ignoble à lire sans.

Bon, déjà la portée d'une variable commence à sa déclaration et se termine au } fermant le bloc dans lequel elle a été déclarée.
Tu ne peux pas déclarer une variable qui a le même nom qu'un autre si tu es dans sa portée.

// Si je ne m'abuse, ça ça marche :
{
    {
        string variable;
    }
    {
        int variable;
    }
}

// En revanche, ça c'est sûr que ça ne marche pas
{
    string variable;
    {
        int variable;
    }
}

// Idem pour ça
{
    string variable;
    int variable;
}


Tu as probablement remarqué où je voulais en venir :
string taille = Console.ReadLine();
int taille = int.Parse(taille);

et
string valeur = Console.ReadLine();
int valeur = int.Parse(valeur); 

ne risquent pas de marcher.

Donne des noms différents à tes int et tes string

Quant au retour de ta méthode, tu préviens qu'elle va renvoyer un void (rien) et tu lui fais renvoyer un float. Evidemment que ça va générer une erreur.

Change le type de retour de ta méthode.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé ! -
0
BRICE1182 Messages postés 9 Date d'inscription mercredi 9 décembre 2009 Statut Membre Dernière intervention 23 avril 2010
11 déc. 2009 à 11:32
Bonjour à tous,j'ais encore un petit souci je n'arrive pas à afficher les valeurs de mon tableau,le programme m'affiche la dernière valeur saisi par l'utilisateur , voici un bout de code:
//Remplissage du tableau
for (int i = 0; i <= taille-1; i++)
{
Console.Out.WriteLine("Saisissez la valeur n°{0}:", i +1);
valeur =int.Parse(Console.In.ReadLine());


}
Console.WriteLine("Les valeurs du tableau sont{0}:",valeur);

}
merci d'avance...
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
11 déc. 2009 à 11:54
"//Remplissage du tableau"... ou pas !
Tu n'as aucun tableau / liste dans ton code

Tu as juste une variable dans laquelle tu mets la valeur entrée par l'utilisateur (mais qui écrase bien sûr la précédente).

Donc évidemment, quand tu affiches cette valeur, seule la dernière valeur entrée est affichée...

int[] tableau = new int[taille];
for (int i = 0; i <= taille - 1; i++)
{
    Console.Out.WriteLine("Saisissez la valeur n°{0}:", i +1);
    valeur = int.Parse(Console.In.ReadLine());

    // Là je remplis un tableau
    tableau[i] = valeur;
}
Console.WriteLine("Les valeurs du tableau sont :");
for(int i = 0; i <= taille - 1; i++)
{
    Console.WriteLine("{0} - ", tableau[i]);
}


Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé ! -
0
BRICE1182 Messages postés 9 Date d'inscription mercredi 9 décembre 2009 Statut Membre Dernière intervention 23 avril 2010
14 déc. 2009 à 10:27
Bonjour à tous!
j'ais réussi mon application merci pour votre aide,je vais me lancer pour un autre tout de suite.
A très bientôt..
0
anibro Messages postés 7 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 14 décembre 2009 2
14 déc. 2009 à 11:16
bonjour tout le monde cela fait plus de 6 jours que je cherche à résoudre ce problème quelqu'un peut-il m'aider pour ça ?
voici le programme principal :
  public int i;
        private int n;
        private int Min;
        private int Max;
        private int somme;
        private float moyenne;
        private bool Premier;
        private int[] tabNombres;
        public Nombres()
        {
        }

        public Nombres(int _n)
        {
        n = _n;
            tabNombres = new int[n];
        }
                        
        // structure de la classe

        public void CreeTableau()
        {
           
            // Création du tableau
            //tabNombres = new int[tailleTableau];

            // Remplissage du tableau
            for (int i = 0; i < n; i++)
            {
                // controle des erreurs
                int element = 0;
                bool elementOK = false;
                while (!elementOK)
                {
                    Console.Out.Write("Veuillez entrer le {0}ème élément", i + 1);
                    {
                        try
                        {
                            element = int.Parse(Console.In.ReadLine());
                            elementOK = false;
                            elementOK = element >= 0;
                        }
                        catch
                        {
                        }
                        if (!elementOK)
                        {
                            Console.WriteLine("veuillez saisir un nombre entier s'il vous plait");
                        }
                    }
                }
                Console.WriteLine();
                tabNombres[i] = element;
            }
            
            //Affichage du tableau
            Console.WriteLine("les valeurs du tableau sont: ");
            for (int j = 0; j > n; j++)
                Console.Write("{0}", tabNombres[j]);
                Console.WriteLine("");

        }
        // Recherche minimum
        public int GetMin() // Le tableau est un champ de la classe, inutile de le refournir
        {
             Console.WriteLine(" le minimum est : ");
            //Vérification du tableau
            if (tabNombres != null) // On vérifie qu'on a bien initialisé le tableau
            {
                int Min = tabNombres[0]; // On dit que le 1er est le minimum, puis on comparera avec chaque autre
                for (int i = 1; i < tabNombres.Length; i++)
                {
                    if (tabNombres[i] < Min)
                    {
                        Min = tabNombres[i];
                    }
                }
                return Min;
            }
            else
            {
                return -9999;
            }
            
        }
        public int GetMax()
        {
            Console.WriteLine(" le maximum est :");
            //Vérification d'initialisation du tableau
            if (tabNombres != null)
            {
                int Max = tabNombres[0];
                for (int i = 1; i < tabNombres.Length; i++)
                {
                    if (tabNombres[i] > Max)
                    {
                        Max = tabNombres[i];
                    }
                }
                return Max;
            }
            else
            {
                return -99999;
            }
            
        }

        public void EstPremier()
        {
            int divis;
            Console.WriteLine(" le(s) Nombre(s) premiers est(sont) :");
            if (tabNombres != null)
            {
                //-- primalité uniquement des nombres impairs
                while (tabNombres[i] < n - 1)
                {
                    divis = 2;
                    Premier = true;
                    do
                    {
                        if (tabNombres[i] % divis == 0) Premier = false;
                        else divis = divis + 1;
                    }
                    while ((divis <tabNombres[i] / 2) && (Premier true));
                    if (Premier)
                    {
                        tabNombres[i]++;
                        System.Console.WriteLine(tabNombres[i]);
                    }
                    tabNombres[i]++;
                }
            }
        }
        public float GetMoyenne()
        {
            Console.WriteLine(" la moyenne arithméétique est :");
            if (tabNombres != null)
            {
                int somme = 0;
                for (int i = 0; i < tabNombres.Count(); i++)
                {
                    somme = somme + tabNombres[i];

                    moyenne = somme / n;
                }
                return moyenne;
            }

            else
            {
                return 0;
            }
            }

    }
}

et ça c'est mon programme
class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(" Nous allons remplir et afficher notre tableau");
            //Contrôlons les erreurs
            int n = 0;
            bool nOK = false;
            while (nOK)
            {
                //taille du tableau
                Console.WriteLine("Quelle est la taille de votre tableau ?");
                try
                {
                    n = int.Parse(System.Console.ReadLine());
                    nOK = n >= 0;
                }
                catch
                {
                }
                if (!nOK)
                {
                    Console.WriteLine("le tableau n'a pas de valeur");
                }
                if (n == 1)
                {
                    Console.WriteLine("Le tableau n'a qu'une seul valeur:{0}", n);
                }
                if (n < 0)
                {
                    Console.WriteLine("Veuillez saisir les valeurs positives");
                }
                else
                {

                    Nombres nombres = new Nombres();
                    //Lecture et affiichage du contenu du tableau

                    nombres.CreeTableau();
                    //Comparaison des valeurs
                    Console.WriteLine("{0}", nombres.GetMin());

                    Console.WriteLine("{0}", nombres.GetMax());
                    //Calcul de la moyenne arithmétique du tableau
                    Console.WriteLine("{0}", nombres.GetMoyenne());
                    //Recherche du Nombre premier
                    nombres.EstPremier();
                }
                    Console.ReadKey();

                }

            }
        }
    }

0
BRICE1182 Messages postés 9 Date d'inscription mercredi 9 décembre 2009 Statut Membre Dernière intervention 23 avril 2010
14 déc. 2009 à 13:55
Bonjour à toi anibro!
Je pense qu'il faudrait dabord présiser exactement ton problème,ensuite joindre le bout de code bref.
Je crois que tu veus afficher des valeurs minimum , maximum, la moyenne et les chiffres premiers à partir des valeur d'un tableau, sauf si je me tompe.
Tout dabord:
-Verifiez que le tableau est initialisé le tableau dans chaque fonction de votre class;
-Verifier que les boucles conditionnelle du programmesont bien ecrites;
-Donnez des noms précis pour chaque varibles afin de permettre aux autres intervenants de le comprendre;
Ne vous découragz pas reprenez pas à pas depuis le debut et vérifiez les erreurs,si le programme ne fonctionne toujour pas revenez avec des precision sur votre problème.
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
14 déc. 2009 à 14:39
Salut

Comme dit Brice1182, il faudrait être plus précis sur la / les erreurs que tu rencontres.

Déjà, j'en ai repéré une :
Nombres nombres = new Nombres()


Le seul constructeur de ta classe Nombres prend la taille du tableau en argument =>
Nombres nombres = new Nombres(n);


Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé ! -
0
Rejoignez-nous