mirror of
				https://gitlab.com/klmp200/LO27.git
				synced 2025-10-31 21:03:04 +00:00 
			
		
		
		
	Avancé et presque fini la gestion des gaudMatrices
This commit is contained in:
		| @@ -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 | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user