Algorithme de base : parcourir un tableau d'entiers

Fermé
dave jnr Messages postés 36 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 5 février 2014 - 4 févr. 2014 à 15:56
dave jnr Messages postés 36 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 5 février 2014 - 5 févr. 2014 à 15:38
Bonjour tout le monde!

J'ai besoin d'aide pour écrire un petit programme en Visual c# qui doit parcourir un tableau A d'entiers ( ex. 2, 1, 4, 8, 9, 5, 4, 5, 6, 3) en sélectionnant les entiers 3 par 3 en commençant par le premier entier (on aura les groupes d'entiers 214, 148, 489, 895, 954, 545, 456, 563).

Ensuite dans ce tableau B, pour chaque groupe d'entiers, faire la différence du plus grand chiffre avec le plus petit (ex. 4 - 1 pour le premier groupe d'entiers 214).

On se retrouve avec un tableau C d'entiers résultant du calcul effectué sur chaque groupe d'entiers du tableau B.

C'est à ce stade que le programme affiche le plus grand entier du tableau C.

Voilà, je suis encore débutant en algorithme et en C#. Merci par avance pour votre aide!

P.S : Voici ce que j'ai essayé d'écrire au fait:

static void Main(string[] args)
        {
            int[] tab1 = { 2, 1, 4, 8, 9, 5, 4, 5, 6, 3 };
            int d = 3;
            for (int i = 0; i < tab1.Length - (d + 1); i++) 
           {
                for(int j=i; j < i+d; j++)
                {
                    //int a = tab1.Max();
                    //int b = tab1.Min();
                    //int c = a - b;
                }
            }
        }

2 réponses

honey22 Messages postés 119 Date d'inscription mardi 21 août 2012 Statut Membre Dernière intervention 3 juillet 2014 29
5 févr. 2014 à 01:56
Bonsoir,

à quoi sert ton d ?
essaie de faire étape par étape, construit le tableau B dans un premier temps.

static void Main(string[] args)
        {
            int[] tab1 = { 2, 1, 4, 8, 9, 5, 4, 5, 6, 3 };
            if(tab1.Length>3){ //On s'assure qu'on aura au moins 1 trio
                int nbTrios;
                nbTrios= tab1.Length-2;
                int[] tab2 = new int[nbTrios];
                int indiceTab2 = 0;
                for (int i = 1; i < tab1.Length-2; i++) 
                {
                        tab2[indiceTab2]=tab1[i-1]*100+tab1[i]*10+tab1[i+1];
                        indiceTab2++;
                }
            }
        }



on initialise le i dans la boucle à 1 pour être au milieu de 2 1 4 et on prend ainsi les élements i-1, i et i+1.
On va jusqu'à la taille du tab1 - 2 car tab1.Length = 10 et nous on va jusqu'au 8ème (=6). qui est aussi égale au nombre de trios.

Je te laisse un peu réfléchir pour l'étape suivante, hésite pas à poser des questions si tu n'as pas compris.
0
dave jnr Messages postés 36 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 5 février 2014
5 févr. 2014 à 10:38
Bonjour honey22,

Merci pour ta réponse (désolé je viens tout juste de la voir!)! Pour info le d est juste une variable pour sélectionner les entiers d par d et aussi, le tableau peut avoir des milliers d'entiers! Cependant, je vais tester ta démarche et je te dirai comment çà m'aide!

Merci encore!

Bonne journée!
0
dave jnr Messages postés 36 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 5 février 2014
5 févr. 2014 à 15:10
Au fait, je n'ai pas bien compris cette ligne :
tab2[indiceTab2]=tab1[i-1]*100+tab1[i]*10+tab1[i+1];
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié par Reivax962 le 5/02/2014 à 13:49
Bonjour,

Est-il nécessaire de construire le second tableau ?
Pour moi tu peux directement et simplement récupérer le résultat que tu souhaites avec un truc du genre :
static void Main(string[] args)
{
    int[] tab = { 2, 1, 4, 8, 9, 5, 4, 5, 6, 3 };
    int d = 3;
    int resultat = 0;
    for (int i = 0; i < tab.Length - d + 1; i += 3)
    {
        int enCours = 0;
        for (j = 0; j < d; j++)
        {
            enCours += tab[i + j] * (int)Math.Pow(10, d - j - 1);
        }
        if (enCours > resultat)
            resultat = enCours;
    }
    Console.WriteLine(resultat);
}



Xavier
0
dave jnr Messages postés 36 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 5 février 2014
5 févr. 2014 à 15:38
Bonjour Xavier,

Merci pour ta réponse! Pour info, le résultat final doit être la valeur Max d'un tableau d'entiers!

Je me réexplique :
- d'abord j'ai un tableau A d'entiers : { 2, 1, 4, 8, 9, 5, 4, 5, 6, 3 }
- ensuite je déclare une variable d qui permet de sélectionner les entiers du tableau A d par d en le parcourant jusqu'à d + 1 (donc si par exemple d = 4, on sélectionnera 2148, 1489, 4895, 8954, 9545, 5456, 4563 dans le tableau A)
- puis je "parcours" ces "mini-tableaux" d'entiers pour faire la différence du plus grand chiffre et du plus petit chiffre (par exemple, on fera 2148 => 8 - 1; 1489 => 9 - 1; 4895 => 9 - 4; 8954 => 9 - 4; 9545 => 9 - 4; 5456 => 6 - 4; 4653 => 6 - 3)
- enfin j'affiche le résultat final qui est la valeur Max des entiers obtenus en faisant le calcul précédant (donc la valeur max de {7, 8, 5, 5, 5, 2, 3} est 8)

Merci!
0