반응형
1. 공부한답시고 2주정도 개발을 멈췄었다.
2. 그때문에 뭘 썼는지 다 까먹었으나,,, 주석이 날 살렸다...
3. 입력 행렬의 크기 제한과 행렬 출력함수를 작성했다.
4. 행렬 수정 함수를 작성했다.
5. 이제 각종 행렬 연산함수를 작성해야한다.
6. 차라리 헤더함수와 여러 .c 파일로 만들어서 컴파일하고 싶은데... 어떻게 하는 지 잘 모르겠다. makefile로 할 수도 있겠지만 문제는 플랫폼이 구름IDE이라... 어떻게 하는 지 좀 검색을 해봐야할 듯 하다.
/*
행렬 계산식 인식은 당장은 무리이므로 두개 연산 먼저 하는 걸로 하도록 하자..
getMatrix에서 행,열 크기 제한 걸기*****
showMatrix 함수 만들기*****
editMatrix를 기존 식을 보여주고, 그 식 안에서 수정하게 하기는... 텍스트에디터를 사용해야해서 어렵지 않나...
initializematrix를 getMatrix 안에 넣기
연산 및 수정 함수 추가하기
*/
#include<stdio.h>
//은 행렬의 주소
//*matData은 행렬의 하나의 행을 지정
//**matData은 행렬의 하나의 원소(열)를 지정한다.
typedef struct Matrix{
int n, m; //행렬의 행과 열의 크기
char ** matData; //행렬의 data
char * textMat;
} Matrix;
void initializeMatrix(Matrix matStruct);
void getMatrix(Matrix matStruct);
void showMatrix(Matrix matStruct);
void editMatrix(Matrix matStruct);
void transposeMatrix(Matrix matStruct);
void reduceMatrix(Matrix matStruct);
void inverseMatrix(Matrix matStruct);
void determinantMatrix(Matrix matStruct);
void addMatrix(Matrix matStruct);
void multMatrix(Matrix matStruct);
void eigenvalueMatrix(Matrix matStruct);
void eigenvectorMatrix(Matrix matStruct);
void main(){
//생성된 행렬 개수를 세는 변수.
i = 0;
//행렬구조체의 주소가 저장되는 곳. 배열로 쉽게 접근할 목적이다.
Matrix *matBox;
//초기 행렬 초기화. 초기 모든 행렬 원소가 0이 되도록 한다.
Matrix initMat;
matBox[i] = initMat;
//안내문
printf("최대 5x5 행렬을 지원합니다.\n\n");
printf("행렬의 값을 텍스트로 입력해주세요. ','는 열 방향에서 왼쪽으로 오른쪽으로 하나씩 개행시킵니다.\n");
printf("숫자와 , . 외의 값을 입력하시면 에러납니다...\n");
printf("0이라고 생략하지 말아주세요!\n");
//초기행렬 입력
getMatrix(matBox[i]);
showMatrix(matBox[i]);
//작동 중에 해야할것
while(1){
//행렬수정
//행렬추가
//전치
//리듀스
//역행렬
//determinant
//합
//곱
//Eigenvalue
//Eigenvector
//연산식 입력 및 결과 show : 나중에... 기능 알고리즘을 먼저 확립하고 나서
}
}
//5x5행렬을 전부 0으로 초기화한다.
void initializeMatrix(Matrix matStruct, int n, int m){
matStruct.n = n;
matStruct.m = m;
//이제 행과 열을 모두 0으로 초기화한다.
matStruct.matData = (char**)Malloc(sizeof(char*) * n);
for(i = 0; i < n; i++){
matStruct.matData[i] = (int*)calloc(m, sizeof(int) * m);
}
}
//text형태로 행렬을 받는다. ','로 숫자를 구분한다.
void getMatrix(Matrix matStruct){
int n, m = 0;
printf("행의 크기 n, 열의 크기 m을 차례로 입력하세요.");
scanf("%d", &n);
scanf("%d", &m);
if(n > 5 || m > 5){ printf("본 계산기는 5x5까지만 지원합니다.\n"); return;}
initializeMatrix(matStruct, n, m);
matStruct.textMat = (char)Malloc(512);
scanf("%s", matStruct.textMat);
char len = strlen(matStruct.textMat);
char num = 0; //숫자를 임시로 저장할 공간이다.
char numtemp[10] = {}; //숫자를 임시로 저장할 공간이다.
char z = 0, k = 1;
char x, y = 0; // 행과 열을 표현하는 숫자다.
//문자를 행과 열로 나눠준다.
for(int i = 0; i <= len; i++){
if(matStruct.textMat[i]!=","||matStruct.textMat[i]!="."){//숫자 입력. 10진수 단위로 또 만들어줘야한다.
numtemp[z] = atoi(matStruct.textMat[i]);
z++;
}
elseif(matStruct.textMat[i]==","||matStruct.textMat[i]==NULL){//쉼표나 마지막표시(널값) 들어온 경우
for(j=1;j<=z;j++){//z-j번씩 10을 곱해준다음 더해준다. 된다.
for(k=1;k<=(z-j);k++){
num = num + numtemp[j]*10;
}
}
matStruct.matData[x][y] = num; //정확한 위치에 num을 대입
num = 0;
y++; if(y > m){y=0; x++;} //열 혹은 행 증가
}
else{
printf("Error 001");
printf("숫자와 쉼표 외에는 입력하지 마십시오.")
return -1;
}
//한 원소의 입력 후 주요 변수 초기화 작업
num = 0;
while(z!=0){
numtemp[z] = 0;
z--;
}
}
}
void showMatrix(Matrix matStruct){
int i = 0, j = 0; // 각각 행과 열 상징
printf('\n');
for(i = 0; i < matStruct.n; i++){
for(j = 0; j < matStruct.m; j++){
printf("%d ", matStruct.matData[i][j]);
}
printf('\n');
}
}
void editMatrix(Matrix matStruct){
printf("%s\n", matStruct.textMat);
printf("복붙해서 수정하면 쉽지않을까...?")
getMatrix(matStruct);
}
반응형
'개발 기록 > 행렬 계산기' 카테고리의 다른 글
행렬 계산기 개발 일지 - 6 (0) | 2021.05.23 |
---|---|
행렬 계산기 5일차 (0) | 2021.05.12 |
행렬계산기 개발 4일차... (0) | 2021.05.03 |
행렬 계산기 개발 2일차... (0) | 2021.04.05 |
행렬 계산기 개발 1일차... (0) | 2021.04.04 |