Untitled
unknown
plain_text
2 years ago
3.5 kB
9
Indexable
#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);
}Editor is loading...
Leave a Comment