Algorithme de base : parcourir un tableau d'entiers

dave jnr Messages postés 36 Date d'inscription   Statut Membre Dernière intervention   -  
dave jnr Messages postés 36 Date d'inscription   Statut Membre Dernière intervention   -
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;
                }
            }
        }

A voir également:

2 réponses

honey22 Messages postés 119 Date d'inscription   Statut Membre Dernière intervention   32
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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   Statut Membre Dernière intervention  
 
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