IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Une circulation dans un tableau


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Une circulation dans un tableau
    Bonjour, Je suis tout nouveau sur le forum, et je passe d'un niveau python prépa à c# et la transition est rude, j'aimerai un peu d'aide pour :

    Demander un tableau à 1 dimension à l'utilisateur : (Ex : {1,2,3,4,5}) et faire une circulation par la gauche pour afficher ({2,3,4,5,1})

    J'ai beaucoup de mal avec les classes et l'organisation d'une manière générale. Si vous pouviez m'aider là dessus ça serait super

    J'ai donc fait quelques lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    using System;
     
    namespace Exercice_bis
    {
        class Program
        {
            static void Main()
            {
    /// Je ne sais pas quoi appeler pour l'instant, sûrement formation
            }
            static int[,] transformation(int [,] tab , int n)/// il faut demander à l'utilisateur mais là encore pas trop d'idée de comment, à part en créant une boucle while avec une valeur qui fait cesser la requête ?)
            {
                for (int i = 0; i <= n; i++)/// L'entier n correspond au nombre de fois qu'on veut faire la circulation vers la gauche
                {
                    for (int j = 0; j <= tab.Length; j++)
                    {
                        int finalvalue = tab[0];/// je récupère la dernière valeur qui il me semble disparaitrait sinon
     
                        if (j< tab.Length)
                        {
                            tab [j] = tab[j - 1]; /// je fais le traitement normal sur la taille du tableau -1 vue que la dernière valeur reprend la première
                        }
                        else
                        {
                            tab[j] = finalvalue; /// fin de traitement sur la dernière valeur ajoutée
                        }
                    }
                }
            }
        }
    }

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    int[,] c'est un tableau à 2 dimensions, c'est int[] pour une seule dimension

    le programme démarre sur le void main, si tu veux interragir avec la console il y a console.write/writeline et console.readkey/readline
    readkey et readline sont des fonctions qui retourne le string inputé (à stocker dans une variable, et à convertir en int si nécessaire)

    ensuite si on veut demander plusieurs choses il faut en effet faire une boucle avec du console.readline à chaque tour

    après pour les classes et l'organisation il faut déjà voir la POO, enfin surtout les types de membres, la portée, le constructeur, static et deux ou trois bricoles
    l'héritage, le polymorphisme, les interfaces et autres viendront dans des exercices plus complexes ^^

    ensuite idéalement le fichier program il n'y a que la logique des appels et éventuellement les interactions avec l'utilisateur
    le reste doit être ailleurs, un fichier par classe, chaque classe a un rôle bien défini (genre une classe de manipulation de tableau)
    après ca c'est l'idéal, pour 3 lignes de code ce n'est pas obligatoire
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 667
    Points : 5 235
    Points
    5 235
    Par défaut
    Pour le faire en python, tu doit conserver le premier à gauche, tout décaler vers la gauche et enfin placer la partie conservée à la fin.
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def Rotate(array, numberOfRotation):
        for i in range(0, numberOfRotation):
            first = array[0];    
     
            for j in range(0, len(array)-1):        
                array[j] = array[j+1];    
     
            array[len(array)-1] = first;
     
        return array;
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    array = [1, 2, 3, 4, 5];        
    for i in range(0, len(array)):    
        print(array[i], end='')
     
    print('');
    Rotate(array,1);
    for i in range(0, len(array)):    
        print(array[i], end='');

    C'est le même principe en C#.
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    static void Rotate(int[] array, int numberOfRotation)
    {
        for (int i = 0; i < numberOfRotation; i++)
        {
            int first = array[0];
     
            for (int j = 0; j < array.Length - 1; j++)
                array[j] = array[j + 1];
     
            array[array.Length - 1] = first;
        }
    }
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int[] array = new int[] { 1, 2, 3, 4, 5 };
    for (int n = 0; n < array.Length; n++)
        Console.Write(array[n]);
     
    Rotate(array, 1);
    Console.WriteLine();
     
    for (int n = 0; n < array.Length; n++)
        Console.Write(array[n]);

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour
    Comme dit par popo, le premier écueuil à éviter c'est de vouloir faire plusieurs choses à la fois & c'est la meilleure façon de se noyer dans un verre d'eau:
    - le saisie interactive est un problème à part
    - la "rotation" c'est un autre problème.
    C'est le "diviser pour régner".
    le code exemple suivant illustre la démarche à suivre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace RotateArray
    {
        class Program
        {
     
            static void Main(string[] args)
            {
                char[] arr = new char[] { 'A', 'B', 'C', 
                                    'D', 'E', 'F' };
                int index = 0; 
     
                Console.WriteLine("valeur de l'array initial :");
                impression(arr, arr.Length, index);
                Console.WriteLine();
     
                Console.WriteLine("Entrer un nombre entre 0 et " + (arr.Length - 1).ToString() +" : ");
                saisie(arr);
     
     
     
                // exit 
                Console.WriteLine ("appyer sur touche pour quitter");
                Console.ReadKey();
            }
            public static void saisie(char[] myarr)
            {
                bool b = true;
                int index = 0;
                while (b)
                {
     
                    if (int.TryParse(Console.ReadLine(), out index))
                    {
                        if (index >= 0 && index < myarr.Length)
                        {
                            impression(myarr, myarr.Length, index);
                            Console.WriteLine();
                        }
                        else
                        {
                            Console.WriteLine("nombre saisi n'est pas dans la plage");
                            b = false;
                        }
                    }
                }
     
     
     
     
            }
     
            // function to print circular array 
            public static void impression(char[] a, int length,int position)
            {
                // print from ind-th index to 
                // (n+i)th index. 
                for (int i = position; i < length + position; i++)
                    Console.Write(a[(i % length)] + " ");
            } 
     
        }
    }
    De plus cet exemple illustre que la "maudite rotation" doit être attaque sous un angle diabolique.
    bon code...

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour toutes vos réponses, effectivement je n'ai pas encore tous les tenants du c# clairement, ça fait moins d'une semaine que j'ai démarré, c'est très clair, et ça m'a permis de comprendre mes erreurs, merci à tous !

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 667
    Points : 5 235
    Points
    5 235
    Par défaut
    Fais surtout bien attention à ne pas présumer que les comportements auxquels tu es habitué en python seront les mêmes en C#.
    Le passage de Python à C# (et vice-versa) peut parfois être déroutant surtout si tu es resté aux vieilles version de python.

Discussions similaires

  1. [Tableaux] Recherche d'une chaine dans un tableau
    Par tom06440 dans le forum Langage
    Réponses: 5
    Dernier message: 20/10/2005, 23h27
  2. [HTML] Charger une page dans un tableau? Possible?
    Par mec.nimois dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 17/10/2005, 11h32
  3. ligne blanche sous une image dans un tableau
    Par spikelille dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 10/09/2005, 18h24
  4. [JTable] Afficher une date dans un tableau / Renderer
    Par isak dans le forum Composants
    Réponses: 3
    Dernier message: 11/07/2005, 17h09
  5. probleme bizarre de hauteur auto d'une ligne dans un tableau
    Par zax-tfh dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 17/01/2005, 23h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo