//
//  main.c
//  Devoir3-Q4
//
//  Created by SERGES on 15-11-09.
//  Copyright © 2015 SERGES. All rights reserved.
//Date: 11 Novembre 2015
//Programme: main.c
//Descripton: Ce programme invite l'utilisateur à entrer un entier positif N et affiche l'ensemble de chaînes binaires {0, 1}.
//-----------------------------------------------------


#include <stdio.h>
#include <math.h>

int main() {
    
    
    int N;
    
    int nombre_total_de_lignes,d,colonne;
    
    int i,j,k,l;
    
    
    //Repeter la sequence tant que la valeur saisie est inferieure a 1
    do{
        printf("Saisir un entier positif: ");
        scanf("%d", &N);//Stocke la valeur saisie dans la variable N
        
        //Imprimer un message d'erreur si le nombre est inferieur a 1
        if(N<1)
            printf("Nombre incorrect. Veuillez ressaisir svp!\n ");
        
        else{//Sinon
            
            nombre_total_de_lignes=pow(2,N);
            d=nombre_total_de_lignes;
            
            int tab[nombre_total_de_lignes][N];//On declare ensuite le tableau bidimensionnel connaissant ses dimensions
            
            
            for(colonne=0; colonne<N; colonne++){//On parcourt toutes les colonnes du tableau
                
                //On complete tout d'abord un partie du tableau avec les chiffres 0 et 1 en repetant la sequence qui se trouve dans les deux boucles qui suivent
                for(j=0; j<(d/2); j++){
                    tab[j][colonne]=0;//Tous les elements de la premiere moitié de la premiere colonne sont initialisés a 0
                    
                }
                for(k=d/2; k<d; k++){
                    tab[k][colonne]=1;//Tous les elements de la deuxieme moitié de la premiere colonne sont initialisés a 1
                }
                
                
                
                if(colonne>0){//A partir de la deuxieme colonne ,tous les elements de la premiere moitié de la 1re colonne sont egaux a ceux de la deuxieme moitié
                    
                    
                    j=0;
                    
                    
                    
                    for (l=d; l<nombre_total_de_lignes; l++){
                        
                        tab[l][colonne]=tab[j][colonne];//On affecte a tous les elements qui se trouvent dans la deuxieme moitié de chaque colonne les memes valeurs que ceux de la premiere moitié
                        
                        j++;
                    }
                    
                }
                d=d/2;
            }
            
            //Cette sequence affiche alors tous les elements du tableau
            for (i=0; i<nombre_total_de_lignes; i++) {
                
                for(j=0; j<N; j++)
                    printf("%d ",tab[i][j]);//On parcourt toutes les lignes et colonnes du tableau pour afficher tous les elements
                
                
                printf("\n");//Retour a la ligne apres avoir affiché tous les elements d'une ligne
            }
        }
    }while(N<1);
    
    
    return 0;
}
