아래 코드는 9개의 정수를 입력받고 3*3 행렬과 그 역행렬을 출력시키는 코드입니다.
친구놈이 하도 찡찡대서 제가 한 번 해봤는데, 전 C++만 배웠고 친구는 C 수업이긴 한데
어차피 제가 객체 지향 프로그래밍 이런 거 할 수준도 아니니까 (기초 과목으로 3학점 들은 게 답니다.) 근본적으로 비슷할 거라 생각해서 C++로 짜고, cout 이런 거만 printf로 바꾸는 등 수정을 했습니다. 물론 제가 C++ 스타일로 짜고 실행해봤을 땐 문제 없었습니다.
그리고나서 C로 바꿔서 출력시킬 때, 분명 정수인데 2.00000 이런 식으로 출력시키는데, iomanip 헤더를 쓰면 안 되는지라 그냥 출력하는 함수를 float와 int 두 개로 만들어서 해결하려 했습니다.
그런데 에러가 나고.. 보아하니 함수 오버로딩이 안 되는 모양이더군요....
C에서는 안 되는 게 맞나요? 아님 제가 코딩을 잘못한 건가요??
#include <stdio.h>
void inv(int a[][3], float b[][3]);
void output(float a[][3]);
void output(int a[][3]);
int main(){
int a[3][3];
float b[3][3];
for (int i=0; i<3; i++){
for (int j=0; j<3; j++){
a[i][j] = 0;
b[i][j] = 0;
}
}
printf("Input 9 numbers, for 3x3 matrix : ");
for (int i=0; i<3; i++){
for (int j=0; j<3; j++){
scanf("%d",&a[i][j]);
}
}
printf("The matrix : \n");
output(a);
printf("\n");
inv(a, b);
return 0;
}
void inv(int a[][3], float b[][3]){
float det = 0;
det = a[0][0]*(a[1][1]*a[2][2]-a[1][2]*a[2][1]) + a[0][2]*(a[1][0]*a[2][1]-a[1][1]*a[2][0]) - a[0][1]*(a[1][0]*a[2][2]-a[1][2]*a[2][0]);
if(det==0){
printf("Inverse matrix :\n""Determinant is 0. Inverse matrix doesn't exist.\n");
return;
}
else{
b[0][0] = (a[1][1]*a[2][2]-a[1][2]*a[2][1])/det, b[0][1] = (a[0][2]*a[2][1]-a[0][1]*a[2][2])/det, b[0][2] = (a[0][1]*a[1][2]-a[0][2]*a[1][1])/det;
b[1][0] = (a[1][2]*a[2][0]-a[1][0]*a[2][2])/det, b[1][1] = (a[0][0]*a[2][2]-a[0][2]*a[2][0])/det, b[1][2] = (a[0][2]*a[1][0]-a[0][0]*a[1][2])/det;
b[2][0] = (a[1][0]*a[2][1]-a[1][1]*a[2][0])/det, b[2][1] = (a[0][1]*a[2][0]-a[0][0]*a[2][1])/det, b[2][2] = (a[0][0]*a[1][1]-a[0][1]*a[1][0])/det; printf("Inverse matrix :\n");
output(b);
return;
}
}
void output(float a[][3]){
for (int i=0; i<3; i++){
for (int j=0; j<3; j++){
printf("%lf",a[i][j]);
}
printf("\n");
}
}
void output(int a[][3]){
for (int i=0; i<3; i++){
for (int j=0; j<3; j++){
printf("%d",a[i][j]);
} printf("\n");
}
}
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.