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 :

Tableau c# alignement des cellules


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2015
    Messages : 5
    Par défaut Tableau c# alignement des cellules
    Bonjour,

    Je suis débutant en C# et je voudrais savoir comment faire pour afficher mon tableau pour que tout les cellules sois aligner, merci.

    Voici le code:

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
           static void Main(string[] args)
            {
                int[,] nombre = new int[6, 6];   // créer un tableaux 6x6
     
                int j = 0;
                while (j < 6)                   // boucle pour entrer les 36 numéros.
                {
                    int chiffre = 2;
                    int i = 0;
                    while (i < 6)
                    {
                        nombre[i, j] = chiffre;
                        chiffre = chiffre + 2;
                        i++;
                    }
                    j++;
                }
     
                afficheLeTableauParLigne(nombre);
                Console.WriteLine();
                afficheLeTableauParColonne(nombre);
                Console.WriteLine();
                afficheLeTableauEnDiagonal(nombre);
                Console.ReadKey();
            }
     
            private static void afficheLeTableauParLigne(int[,] nombre)
            {
                Console.WriteLine("affiche le tableau par ligne:");
     
                int l = 0;
                while (l < 6)                       // boucle pour afficher les 36 numéros.
                {
                    for (int k = 0; k < 6; k++)
                    {
                        Console.Write("{0} ", nombre[k, l]); // affiche le tableau, ligne x ligne
                    }                                          
                    Console.WriteLine();
                    l++;
                }
            }
     
            private static void afficheLeTableauParColonne(int[,] nombre)
            {
                Console.WriteLine("affiche le tableau par colonne:");
     
                int l = 0;
                while (l < 6)
                {
                    for (int k = 0; k < 6; k++)
                    {
                        Console.Write("{0} ", nombre[l, k]);   // affiche le tableau, colonne x colonne
                    }                                          
                    Console.WriteLine();
                    l++;
                }
            }
     
            private static void afficheLeTableauEnDiagonal(int[,] nombre)
            {
                Console.WriteLine("affiche le tableau en diagonal:");
     
                int j = 0;
                for (int i = 0; i < 6; i++)
                {
                    Console.Write("{0} ", nombre[i, j]);     // affiche la 1er diagonal du tableau
                    j++;
                }
                Console.WriteLine();
     
                int k = 5;
                for (int l = 0; l < 6; l++)
                {
                    Console.Write("{0} ", nombre[l, k]);    // affiche le 2e diagonal du tableau
                    k--;
                }
                Console.WriteLine();
            }

  2. #2
    Membre émérite Avatar de SkyZoThreaD
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2013
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 585
    Par défaut
    Bonsoir. Merci d'utiliser la balise code (# au dessus de l'éditeur) sur le forum et d'identer de code avec des tabulations pour qu'on puisse lire sans crises d'épilépsie.
    Il suffit d'ajouter des éspaces au début ou à la fin si le texte fait moins que la taille que tu vas définir pour la largeur de la colonne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int largeur = 20;
    string contenu_str = nombre.ToString(); // on bosse avec un string (comme dans alerte à malibu)
    if(contenu_str.Length > largeur) contenu_str = contenu_str.Substring(0, largeur); // si trop grand on coupe le texte
    if(contenu_str.Length < largeur) contenu_str.Insert(0, string(' ', largeur - contenu_str.Length)); // si trop petit on ajoute des espaces
    Console.WriteLine(contenu_str); // finalement on écrit la colonne
    ps: je n'ai pas compilé ce qui précède c'est pour l'exemple

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 612
    Par défaut
    Bonjour,

    L'idée de SkyZoThreaD est bonne mais risqué sur le long car comme il le dit lui même, il-y-a risque de perte de data.

    Je te recommande de parcourir ton tableau afin de calculer la longueur max d'une de tes data.

    Ensuite lorsque tu écris tes data utilise PadLeft(longueurMax, ' ') pour uniformiser la longueur des chaines.

    Cf : https://msdn.microsoft.com/fr-fr/lib...(v=vs.80).aspx

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2015
    Messages : 5
    Par défaut
    La 1er solution de SkyZo ne fonctionne pas, l'erreur se produit au niveau de:
    string contenu_str = nombre.ToString();

    cela donne une erreur lors de la compilation:
    System.Int32[,]

    Je crois que ses à cause que le tableau est multidimensionnel, je ne sais pas comment le corriger ??

    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
     
    Console.WriteLine("affiche le tableau par colonne:");
     
                int l = 0;
                while (l < 6)
                {
                    for (int k = 0; k < 6; k++)
                    {
                        int largeur = 2;
                        string contenu_str = nombre.ToString();
                        char pad = ' ';
                        if (contenu_str.Length < largeur)
                        {
                            Console.WriteLine(contenu_str.PadLeft(1, pad));
                        }
                        Console.Write("{0} ", contenu_str);

  5. #5
    Membre émérite Avatar de SkyZoThreaD
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2013
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 585
    Par défaut
    Je t'ai mis ce code pour l'éxemple et il n'est valable que pour une cellule donc n'essaye pas d'insérer tout le tableau dans la string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string contenu_str = nombre.ToString(); // ne marche pas si nombre est un tableau
    string contenu_str = nombre[i,j].ToString(); // dans ce cas ça marchera mieux :)
    Je pense que tous les dev qui font du c# ou du java devraient voir les bases du c/c++ pour avoir une idée des objets qu'ils utilisent
    Ensuite tu indiques une largeur de colonne de 2 ? ça va pas contenir beaucoup de chiffres ça
    Et enfin TheBlackReverand a raison: si tu veux être certain que tous les chiffres soient visibles, il faut remplacer cette variable largeur par un calcul de la taille maximum à afficher sur toute la colonne.

  6. #6
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    Bonjour

    Le format composite est ton ami ...avec le specificateur de format Fixed ...

    La chaine de format composite figure dans l'appel à Console.Write(chaine de format,nombre)...

    Cette chaine accepte
    1/un parametre Alignement :
    - un Int Signe : controle l'Espacement alloue & l'Alignement (gauche ou droite)
    2/ un Specificateur de Format :
    - Fixed (F) est le plus souple ...F1 signifie on autorise 1 decimale à gauche+ sa virgule compte dans ce F1
    Si bien que si le nbre est un entier 12 sa longueur sera 2+2=4...



    ton programme revu legerement pour illustrer la chaine de format composite:
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace ConsoleTableau
    {
        class Program
        {
            static void Main(string[] args)
            {
                int[,] nombre = new int[6, 6]; // créer un tableaux 6x6
     
                int j = 0;
                while (j < 6) // boucle pour entrer les 36 numéros.
                {
                    int chiffre = 2;
                    int i = 0;
                    while (i < 6)
                    {
                        nombre[i, j] = chiffre;
                        chiffre = chiffre + 2;
                        i++;
                    }
                    j++;
                }
                afficheLeTableauParLigne(nombre);
                Console.WriteLine();
                afficheLeTableauParColonne(nombre);
                Console.WriteLine();
                afficheLeTableauEnDiagonal(nombre);
                Console.ReadKey();
            }
     
            private static void afficheLeTableauParLigne(int[,] nombre)
            {
                Console.WriteLine("affiche le tableau par ligne:");
     
                int l = 0;
                while (l < 6) // boucle pour afficher les 36 numéros.
                {
                    for (int k = 0; k < 6; k++)
                    {
                        Console.Write("{0,6:F1}", nombre[k, l]); // affiche le tableau, ligne x ligne
                    }
                    Console.WriteLine();
                    l++;
                }
            }
            private static void afficheLeTableauParColonne(int[,] nombre)
            {
                Console.WriteLine("affiche le tableau par colonne:");
     
                int l = 0;
                while (l < 6)
                {
                    for (int k = 0; k < 6; k++)
                    {
                        Console.Write("{0,6:F1}", nombre[l, k]); // affiche le tableau, colonne x colonne
                    }
                    Console.WriteLine();
                    l++;
                }
            }
            private static void afficheLeTableauEnDiagonal(int[,] nombre)
            {
                Console.WriteLine("affiche le tableau en diagonal:");
     
                int j = 0;
                for (int i = 0; i < 6; i++)
                {
                    Console.Write("{0,6:F1}", nombre[i, j]); // affiche la 1er diagonal du tableau
                    j++;
                }
                Console.WriteLine();
     
                int k = 5;
                for (int l = 0; l < 6; l++)
                {
                    Console.Write("{0,6:F1}", nombre[l, k]); // affiche le 2e diagonal du tableau
                    k--;
                }
                Console.WriteLine();
            }
        }
    }
    Comme dit par TheBlackReverand
    1/il faut donc retrouver le plus grand chiffre...
    On utilize un list<int> auxiliaire et on recupere le max...
    On le convertit en chaine avec ToString() dont on recupere la longueur...
    Sa longueur est augmente de 2 +espacement confortable!!!
    La longueur resultante est reconvertie en chaine (merci encore à ToString) et "injecte" dans la chaine de format composite....

    class programme qui illustre le propos:

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;
     
    namespace ConsoleTableau
    {
         class MonProgram
        {
            private static  string FormatNombre = string.Empty;
            private const int N = 10;
            static void Main(string[] args)
            {
     
                int[,] nombre = new int[N, N]; // créer un tableaux 6x6
     
                int j = 0;
                Random rnd = new Random();
     
     
                 while (j < N) // boucle pour entrer les 36 numéros.
                 {
                     int chiffre =rnd.Next(1,1000);
                     int i = 0;
                     while (i < N)
                     {
                         nombre[i, j] = chiffre;
                         chiffre = rnd.Next(1, 1000);
                         i++;
                     }
                     j++;
                 }
     
     
     
     
                 int chiffreMax = MaxChiffre(nombre); 
     
                 Console.WriteLine("affiche nombre max:");
                 Console.WriteLine("{0}", chiffreMax);
                 Console.WriteLine();
     
     
                 int espacement = 2;
                 FormatNombre = "{0," + (chiffreMax.ToString().Length + 2 + espacement) + ":F1}";
     
     
                 afficheLeTableauParLigne(nombre);
                 Console.WriteLine();
                 afficheLeTableauParColonne(nombre);
                 Console.WriteLine();
                 afficheLeTableauEnDiagonal(nombre);
                 Console.ReadKey();
            }
            private static int MaxChiffre(int[,] nombre)
            {
                List<int> l = new List<int>(); 
                for (int i = 0; i < nombre.GetUpperBound(0)+1; i++)
                {
                    for (int j = 0; j < nombre.GetUpperBound(1) + 1; j++)
                    {
                        l.Add(nombre[i, j]);
                    }
                }
                int n = l.Max();
     
                //libere la memoire
                l.Clear();
                l = null;
                return n;
     
            }
            private static void afficheLeTableauParLigne(int[,] nombre)
            {
                Console.WriteLine("affiche le tableau par ligne:");
     
                int l = 0;
                while (l < N) // boucle pour afficher les 36 numéros.
                {
                    for (int k = 0; k < N; k++)
                    {
                        Console.Write(FormatNombre, nombre[k, l]); // affiche le tableau, ligne x ligne
                    }
                    Console.WriteLine();
                    l++;
                }
            }
            private static void afficheLeTableauParColonne(int[,] nombre)
            {
                Console.WriteLine("affiche le tableau par colonne:");
     
                int l = 0;
                while (l < N)
                {
                    for (int k = 0; k < N; k++)
                    {
                        Console.Write(FormatNombre, nombre[l, k]); // affiche le tableau, colonne x colonne
                    }
                    Console.WriteLine();
                    l++;
                }
            }
            private static void afficheLeTableauEnDiagonal(int[,] nombre)
            {
                Console.WriteLine("affiche le tableau en diagonal:");
     
                int j = 0;
                for (int i = 0; i < N; i++)
                {
                    Console.Write(FormatNombre, nombre[i, j]); // affiche la 1er diagonal du tableau
                    j++;
                }
                Console.WriteLine();
     
                int k = N-1;
                for (int l = 0; l < N; l++)
                {
                    Console.Write(FormatNombre, nombre[l, k]); // affiche le 2e diagonal du tableau
                    k--;
                }
                Console.WriteLine();
            }
        }
    }
    bon code....

Discussions similaires

  1. [PHP 5.3] Alignement des cellules d'un tableau
    Par patarins dans le forum Langage
    Réponses: 2
    Dernier message: 08/07/2014, 16h54
  2. Tableau et couleur des cellules
    Par DaisyVIP dans le forum ASP.NET
    Réponses: 7
    Dernier message: 08/02/2008, 12h30
  3. Tableau et taille des cellules
    Par CanardJM dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/08/2007, 10h43
  4. [StringGrid]Alignement des Cellules
    Par touhami dans le forum Composants VCL
    Réponses: 3
    Dernier message: 06/11/2005, 19h38
  5. [HTML] Tableau sans departagement des cellules
    Par nimport nawak dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 09/05/2005, 17h58

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