Untitled

mail@pastecode.io avatar
unknown
plain_text
2 months ago
3.5 kB
3
Indexable
Never
#include <iostream>
using namespace std;


struct casegrille{
    int x;
    char symbole;
    casegrille* suivant;
};

typedef casegrille* ligne;

struct t_colonne{
    ligne* tab;
    int occupation;
    int taille;
};

t_colonne vide(){
    t_colonne vide; 
    vide.occupation = 0;
    vide.taille=0;
    return vide;
}



// Procédure pour afficher le contenu de la grille
void afficherGrille(const t_colonne& grille) {
    for (int i = 0; i < grille.taille; ++i) {
        cout << "Ligne " << i + 1 << ":" << endl;
        ligne courante = grille.tab[i];
        while (courante != nullptr) {
            cout << "  Colonne " << courante->x << ": " << courante->symbole << " ";
            courante = courante->suivant;
        }
        cout << endl;
    }
}

// Procédure pour libérer la mémoire allouée pour la grille
void libererGrille(t_colonne& grille) {
    for (int i = 0; i < grille.taille; ++i) {
        ligne courante = grille.tab[i];
        while (courante != nullptr) {
            ligne suivante = courante->suivant;
            delete courante;
            courante = suivante;
        }
    }
    delete[] grille.tab;
    grille.tab = nullptr;  // Définir le pointeur du tableau à nullptr après la libération
    grille.taille = 0;     // Réinitialiser la taille à zéro
}

void placer(char s, int x,int y, t_colonne& grille){
    // Créer une nouvelle ligne
    ligne nouvelleLigne = new casegrille{x, s, nullptr};
    //le tableau a la bonne taille
   if (y >= 1 && y <= grille.taille) {
        // Trouver l'emplacement approprié pour la nouvelle ligne
        ligne courante = grille.tab[y-1];
        ligne precedente = nullptr;

        while (courante != nullptr && courante->x < x) {
            precedente = courante;
            courante = courante->suivant;
        }

        // Insérer la nouvelle ligne dans le chaînage trié
        if (precedente == nullptr) {
            // La nouvelle ligne doit être placée au début du chaînage
            grille.tab[y-1] = nouvelleLigne;
        } else {
            // La nouvelle ligne doit être placée entre precedente et courante
            precedente->suivant = nouvelleLigne;
        }
        nouvelleLigne->suivant = courante;
    }
    //le tableau est trop petit
    else if(y>grille.taille){
        // Agrandir le tableau
        ligne* nouveauTab = new ligne[y];

        // Copier les éléments de l'ancien tableau vers le nouveau
        for (int ind = 0; ind < grille.taille; ++ind) {
            nouveauTab[ind] = grille.tab[ind];
        }

        // Ajouter la nouvelle valeur à la fin du tableau
        nouveauTab[y-1] = nouvelleLigne;

        // Mettre à jour la grille avec le nouveau tableau
        grille.tab = nouveauTab;
        for(int i=grille.taille;i<y-1 and i!=0;i++){
            grille.tab[i]=nullptr;
        }
        grille.taille = y;
    }
    
};

int main(){
    t_colonne maGrille=vide();

    // Placer des symboles dans la grille
    placer('O', 2, 1, maGrille);
    placer('X', 1, 1, maGrille);
    placer('X', 3, 1, maGrille);
    placer('O', 5, 3, maGrille);
    placer('X', 2, 2, maGrille);
    placer('O', 4, 10, maGrille);
    placer('X', 10, 1, maGrille);

    // Afficher la grille
    afficherGrille(maGrille);

    // Libérer la mémoire allouée pour la grille
    libererGrille(maGrille);
}
Leave a Comment