mirror of
https://gitlab.com/klmp200/LO27.git
synced 2024-11-29 15:04:14 +00:00
Avancé et presque fini la gestion des gaudMatrices
This commit is contained in:
parent
f09d8fed95
commit
6d3043902c
@ -87,7 +87,7 @@ void removeNextRow(cellElement* tree);
|
|||||||
|
|
||||||
|
|
||||||
/*---FreeCellElem---
|
/*---FreeCellElem---
|
||||||
*Allocates a cellElement and returns it
|
*Frees a cellElement and returns it
|
||||||
*
|
*
|
||||||
*@element : pointer on the allocated cellElement
|
*@element : pointer on the allocated cellElement
|
||||||
*
|
*
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <CellElement.h>
|
|
||||||
#include <matrix.h>
|
#include <matrix.h>
|
||||||
|
|
||||||
Matrix applyRules (Matrix matrix,int Rules, int N){
|
Matrix applyRules (Matrix matrix,int Rules, int N){
|
||||||
@ -30,3 +29,165 @@ Matrix CreateMatrix(){
|
|||||||
matrix.rows = CreateList();
|
matrix.rows = CreateList();
|
||||||
return matrix;
|
return matrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CreateMatrixElem(Matrix matrix, int ColPos, int RowPos){
|
||||||
|
ListElement * Row = NULL;
|
||||||
|
ListElement * Col = NULL;
|
||||||
|
int error = 0;
|
||||||
|
cellElement * elem = NULL;
|
||||||
|
cellElement * tmp = NULL;
|
||||||
|
|
||||||
|
elem = CreateCellElem();
|
||||||
|
SetPositionIndex(elem,ColPos,RowPos);
|
||||||
|
|
||||||
|
Row = GetElementPos(matrix.rows,RowPos);
|
||||||
|
if (Row != NULL && Row->data != NULL){
|
||||||
|
|
||||||
|
if (Row->data->colIndex == ColPos){
|
||||||
|
error ++;
|
||||||
|
} else if (Row->data->colIndex > ColPos){
|
||||||
|
elem->nextCol = Row->data;
|
||||||
|
Row->data = elem;
|
||||||
|
} else {
|
||||||
|
tmp = Row->data;
|
||||||
|
while (tmp->nextCol != NULL && tmp->nextCol->colIndex < ColPos){
|
||||||
|
tmp=tmp->nextCol;
|
||||||
|
}
|
||||||
|
if (tmp->nextCol->colIndex > ColPos){
|
||||||
|
elem->nextCol = tmp->nextCol;
|
||||||
|
tmp->nextCol = elem;
|
||||||
|
}else if (tmp->colIndex == ColPos){
|
||||||
|
error ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}else {
|
||||||
|
push(matrix.rows,elem);
|
||||||
|
matrix.rows->tail->pos = RowPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
Col = GetElementPos(matrix.cols,ColPos);
|
||||||
|
if (Col != NULL && Col->data != NULL){
|
||||||
|
|
||||||
|
if (Col->data->rowIndex == RowPos){
|
||||||
|
error ++;
|
||||||
|
} else if (Col->data->rowIndex > RowPos){
|
||||||
|
elem->nextRow = Col->data;
|
||||||
|
Col->data = elem;
|
||||||
|
} else {
|
||||||
|
tmp = Col->data;
|
||||||
|
while (tmp->nextRow != NULL && tmp->nextRow->rowIndex < RowPos){
|
||||||
|
tmp=tmp->nextRow;
|
||||||
|
}
|
||||||
|
if (tmp->nextRow->rowIndex > RowPos){
|
||||||
|
elem->nextRow = tmp->nextRow;
|
||||||
|
tmp->nextRow = elem;
|
||||||
|
}else if (tmp->rowIndex == RowPos){
|
||||||
|
error ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}else {
|
||||||
|
push(matrix.cols,elem);
|
||||||
|
matrix.cols->tail->pos = ColPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (error != 0){
|
||||||
|
free(elem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cellElement * FindMatrixElem(Matrix matrix, int ColPos, int RowPos){
|
||||||
|
ListElement * Row = NULL;
|
||||||
|
cellElement * elem = NULL;
|
||||||
|
|
||||||
|
Row = GetElementPos(matrix.rows,RowPos);
|
||||||
|
if (Row == NULL){
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
elem = Row->data;
|
||||||
|
|
||||||
|
while (elem->colIndex != ColPos && elem != NULL){
|
||||||
|
elem = elem->nextCol;
|
||||||
|
}
|
||||||
|
|
||||||
|
return elem;
|
||||||
|
}
|
||||||
|
|
||||||
|
int SupprMatrixElem(Matrix matrix, int ColPos, int RowPos){
|
||||||
|
cellElement * elem = NULL;
|
||||||
|
cellElement * tmp = NULL;
|
||||||
|
|
||||||
|
ListElement * Row = NULL;
|
||||||
|
ListElement * Col = NULL;
|
||||||
|
|
||||||
|
elem = FindMatrixElem(matrix,ColPos,RowPos);
|
||||||
|
if (elem == NULL){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Row = GetElementPos(matrix.rows,RowPos);
|
||||||
|
if (Row == NULL || Row->data == NULL){
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Row->data->colIndex == ColPos){
|
||||||
|
Row->data = elem->nextCol;
|
||||||
|
} else {
|
||||||
|
tmp = Row->data;
|
||||||
|
while (tmp->nextCol != NULL && tmp->nextCol != elem){
|
||||||
|
tmp = tmp->nextCol;
|
||||||
|
}
|
||||||
|
if (tmp->nextCol == NULL){
|
||||||
|
return -3; /* WTF ?? */
|
||||||
|
} else {
|
||||||
|
tmp->nextCol = elem->nextCol;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Col = GetElementPos(matrix.cols,ColPos);
|
||||||
|
if (Col == NULL|| Col->data == NULL){
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
if (Col->data->rowIndex == RowPos){
|
||||||
|
Col->data = elem->nextRow;
|
||||||
|
} else {
|
||||||
|
tmp = Col->data;
|
||||||
|
while (tmp->nextRow != NULL && tmp->nextRow != elem){
|
||||||
|
tmp = tmp->nextRow;
|
||||||
|
}
|
||||||
|
if (tmp->nextRow == NULL){
|
||||||
|
return -4; /* WTF ?? */
|
||||||
|
} else {
|
||||||
|
tmp->nextRow = elem->nextRow;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
FreeCellElement(elem);
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GetCellValue(Matrix matrix, int ColPos, int RowPos){
|
||||||
|
if (FindMatrixElem(matrix,ColPos,RowPos) == NULL){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetCellValue(Matrix matrix, int ColPos, int RowPos,bool value){
|
||||||
|
if (value == true){
|
||||||
|
CreateMatrixElem(matrix,ColPos,RowPos);
|
||||||
|
}else{
|
||||||
|
SupprMatrixElem(matrix,ColPos,RowPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
/* todos:
|
||||||
|
*gerer bornes matrice
|
||||||
|
*print matrice
|
||||||
|
*/
|
@ -37,7 +37,42 @@ typedef struct Matrix {
|
|||||||
*/
|
*/
|
||||||
Matrix applyRules(Matrix matrix,int Rules, int N);
|
Matrix applyRules(Matrix matrix,int Rules, int N);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*Create a void Matrix
|
||||||
|
*
|
||||||
|
*@return a matrix
|
||||||
|
*
|
||||||
|
*/
|
||||||
Matrix CreateMatrix();
|
Matrix CreateMatrix();
|
||||||
|
|
||||||
|
/**
|
||||||
|
*Find and return the cell in the given matrix
|
||||||
|
*
|
||||||
|
*@param matrix the Matrix where we search
|
||||||
|
*@param ColPos an int indicating the column of the cell
|
||||||
|
*@param RowPos an int indicating the row of the cell
|
||||||
|
*
|
||||||
|
*@return a cellElement
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
cellElement * FindMatrixElem(Matrix matrix, int ColPos, int RowPos);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*Create the cell in the given matrix
|
||||||
|
*
|
||||||
|
*@param matrix the Matrix
|
||||||
|
*@param ColPos an int indicating the column of the cell
|
||||||
|
*@param RowPos an int indicating the row of the cell
|
||||||
|
*
|
||||||
|
*@return void
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void CreateMatrixElem(Matrix matrix, int ColPos, int RowPos);
|
||||||
|
|
||||||
|
int SupprMatrixElem(Matrix matrix, int ColPos, int RowPos);
|
||||||
|
|
||||||
|
void SetCellValue(Matrix matrix, int ColPos, int RowPos,bool value);
|
||||||
|
|
||||||
|
bool GetCellValue(Matrix matrix, int ColPos, int RowPos);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user