// ========================================================================
//
// Copyright (C) 2016-2017 MARC CHEVALDONNE
//                         marc.chevaldonne.free.fr
//
// Module        : Program.cs
// Author        : Marc Chevaldonné
// Creation date : 2016-09-22
//
// ========================================================================

using static System.Console;

namespace ex_005_002_copie_de_tableaux
{
    class Program
    {
        static void Main(string[] args)
        {
            OutputEncoding = System.Text.Encoding.UTF8;

            WindowHeight = LargestWindowHeight;


            //COPIE DE TABLEAUX
            WriteLine("\nCopie de tableaux");

            //1. copie de références
            WriteLine("\nCopie de références\n");
            //préparation des tableaux
            int[] tab6 = { 1, 2, 3 };
            int[] tab7 = { 5, 6, 7, 8, 9, 10 };
            WriteLine("contenu de tab6");
            foreach (int i in tab6) Write($"{i} ");
            WriteLine();
            WriteLine("contenu de tab7");
            foreach (int i in tab7) Write($"{i} ");
            WriteLine();
            //recopie des références
            WriteLine("tab7 = tab6;");
            tab7 = tab6; //attention, on ne copie que les références ! le contenu est donc partagé ! La preuve :
            //affichage des tableaux après copie des références
            WriteLine("contenu de tab6");
            foreach (int i in tab6) Write($"{i} ");
            WriteLine();
            WriteLine("contenu de tab7");
            foreach (int i in tab7) Write($"{i} ");
            WriteLine();
            //modification d'une case d'un des tableaux
            WriteLine("tab7[1] = 4;");
            tab7[1] = 4;
            //affichage des contenus après copie modification d'un des deux tableaux
            WriteLine("contenu de tab7");
            foreach (int i in tab7) Write($"{i} ");
            WriteLine();
            WriteLine("contenu de tab6");
            foreach (int i in tab6) Write($"{i} ");
            WriteLine();

            //2. copie de contenus, méthode 1 : new + CopyTo
            WriteLine("\nCopie de contenus, méthode 1\n");
            //préparation des tableaux
            int[] tab8 = { 5, 6, 7, 8, 9, 10 };
            WriteLine("contenu de tab6");
            foreach (int i in tab6) Write($"{i} ");
            WriteLine();
            WriteLine("contenu de tab8");
            foreach (int i in tab8) Write($"{i} ");
            WriteLine();
            //recopie des contenus
            WriteLine("tab8 = new int[tab6.Length];\ntab6.CopyTo(tab8, 0);");
            tab8 = new int[tab6.Length]; // on alloue la place de tab6 pour tab8
            tab6.CopyTo(tab8, 0); // on recopie le contenu de tab6 dans tab8 (ils ont la même taille à cause de la ligne d'avant, donc tout va bien)
            //affichage des résultats
            WriteLine("contenu de tab6");
            foreach (int i in tab6) Write($"{i} ");
            WriteLine();
            WriteLine("contenu de tab8");
            foreach (int i in tab8) Write($"{i} ");
            WriteLine();
            //modification d'un des deux tableaux
            WriteLine("tab8[1] = 2;");
            tab8[1] = 2;
            //affichage des contenus après modification d'un des deux tableaux
            WriteLine("contenu de tab6");
            foreach (int i in tab6) Write($"{i} ");
            WriteLine();
            WriteLine("contenu de tab8");
            foreach (int i in tab8) Write($"{i} ");
            WriteLine();

            //3. copie de contenus, méthode 2 : Clone
            WriteLine("\nCopie de contenus, méthode 2\n");
            //préparation des tableaux
            int[] tab9 = { 5, 6, 7, 8, 9, 10 };
            WriteLine("contenu de tab6");
            foreach (int i in tab6) Write($"{i} ");
            WriteLine();
            WriteLine("contenu de tab9");
            foreach (int i in tab9) Write($"{i} ");
            WriteLine();
            //clonage des tableaux
            WriteLine("tab9 = (int[])tab6.Clone();");
            tab9 = (int[])tab6.Clone();
            //affichage après clonage
            WriteLine("contenu de tab6");
            foreach (int i in tab6) Write($"{i} ");
            WriteLine();
            WriteLine("contenu de tab9");
            foreach (int i in tab9) Write($"{i} ");
            WriteLine();
            //modification d'un des deux tableaux
            WriteLine("tab9[1] = 2;");
            tab9[1] = 2;
            //affichage après modification
            WriteLine("contenu de tab6");
            foreach (int i in tab6) Write($"{i} ");
            WriteLine();
            WriteLine("contenu de tab9");
            foreach (int i in tab9) Write($"{i} ");
            WriteLine();
        }
    }
}
