개발 기록/행렬 계산기

행렬 계산기 개발 2일차...

LiDARian 2021. 4. 5. 21:15
반응형

1. 문자 인식 방법 중 온점을 제거했다. 프로그램을 복잡하게 만드는 것 같아서.

2. 대신 행렬의 크기를 먼저 받는 방법을 택했다.

3. 예외처리가 초기에 생각한 것보다 해야할 것이 많았다. 내일은 text로 받은 행렬의 마지막 부분에 ,이 없을 경우를 알고리즘으로 만들 예정이다. 아무래도 다음 문자가 NULL인지로 확인하는 게 쉽지 않을까 싶다.

4. 이 속도로는 이번주 내로는 main 함수도 못채울거 같다. 

// 5x5까지 지원하는 행렬 계산기를 만든다.
// 처음 생성시 몇 행렬인지 먼저 받는다.
// 그 후 그에 맞게 text를 수령하고 유효성검사 규칙에 맞는지 확인한다.
// 행렬을 생성한다.

//마지막 부분에 , 안찍어 줬을 때 처리하는 방법 작성해야한다.
#include<stdio.h>

//행렬구조체 global initialize
typedef struct Matrix{
int n, m;	//행렬의 행과 열의 크기
char** Mat;	//행렬 그자체
//Mat은 행렬의 주소
//*Mat은 행렬의 하나의 행을 지정
//**Mat은 행렬의 하나의 원소(열)를 지정한다.
} Matrix;

//행렬을 텍스트로 받는다.
//****** 이용자가 행렬 크기에 따르지 않는 경우에 대한 예외처리를 해줘야한다.
void getMatrix(Matrix Matpar){
	//행렬의 크기를 먼저  받는다
	printf("행의 크기 n, 열의 크기 m을 차례로 입력하세요.");
	scanf("%d", &n);
	scanf("%d", &m);
	//text형태로 행렬을 받는다. ','로 숫자를 구분한다.
	char * textMat = (char)Malloc(512);
	scanf("%s", textMat);
	//text의 길이를 측정.
	char len = strlen(textMat);
	//숫자를 임시로 저장할 공간이다.
	char num = 0;
	char numtemp[10] = {};
	char z = 0, k = 1;
	char x,y = 0;
	//문자를 행과 열로 나눠준다.
	for(i = 0; i <= len; i++){//<-------------------마지막 부분에 , 안찍어 줬을 때 처리하는 방법
		if(textMat[i]!=","||textMat[i]!="."){//숫자 입력. 10진수 단위로 또 만들어줘야한다.
			numtemp[z] = atoi(textMat[i]);
			z++;
		}
		elseif(textMat[i]==","){//쉼표가 들어온 경우 
			for(j=1;j<=z;j++){//z-j번씩 10을 곱해준다음 더해준다. 된다.
				for(k=1;k<=(z-j);k++){
					num = num + numtemp[j]*10;
				}
			}
			Matpar[x][y] = num;	//정확한 위치에 num을 대입
			num = NULL;
			y++; if(y > m){y=0; x++;} //열 혹은 행 증가
		}
		else{
			printf("Error 001");
			printf("숫자와 쉼표 외에는 입력하지 마십시오.")
			return -1;
		}
		//한 원소의 입력 후 주요 변수 초기화 작업
		num = 0;
		while(z!=0){
			numtemp[z] = 0;
			z--;
		}
	}
}

//5x5행렬을 전부 0으로 초기화한다.
void initiateMatrix(Matrix MatStruct){
	printf("행렬의 행 크기는?");
	scanf("%d", &(Mat.n));
	printf("행렬의 행 크기는?");
	scanf("%d", &(Mat.m));
	//이제 행과 열을 모두 0으로 초기화한다.
	MatStruct.Mat = (char**)Malloc(sizeof(char*) * n);
	for(i = 0; i < n; i++){
		MatStruct.Mat[i] = (int*)calloc(m, sizeof(int) * m);
	}
}

void main(){
	//생성된 행렬 개수를 세는 변수.
	i = 0;
	//행렬구조체의 주소가 저장되는 곳. 배열로 쉽게 접근할 예정이다.
	Matrix *MatBox;
	//초기 행렬 초기화. 초기 모든 행렬 원소가 0이 되도록 한다.
	Matrix initMat;
	MatBox[0] = initMat;
	//안내문
	printf("최대 5x5 행렬을 지원합니다.\n\n");
	printf("행렬의 값을 텍스트로 입력해주세요. ','는 열 방향에서 왼쪽으로 오른쪽으로 하나씩 개행시킵니다.\n");
	printf("숫자와 , . 외의 값을 입력하시면 에러납니다...\n");
	printf("0이라고 생략하지 말아주세요!\n");
	//초기행렬 입력
	getMatrix(initMat);

	//작동 중에 해야할것
	while(1){
		//행렬추가

		//전치

		//리듀스

		//역행렬

		//합

		//곱

		//Eigenvalue

		//Eigenvector
	}
}
반응형

'개발 기록 > 행렬 계산기' 카테고리의 다른 글

행렬 계산기 개발 일지 - 6  (0) 2021.05.23
행렬 계산기 5일차  (0) 2021.05.12
행렬계산기 개발 4일차...  (0) 2021.05.03
행렬 계산기 개발 3일차...  (0) 2021.05.02
행렬 계산기 개발 1일차...  (0) 2021.04.04