드래그 앤 드롭으로 즐겨찾기 아이콘 위치 수정이 가능합니다.
게시물ID : programmer_3904 짧은주소 복사하기
작성자 : Luce ★
추천 : 0
조회수 : 516회
댓글수 : 6개
등록시간 : 2014/06/10 21:20:22
아래 코드는 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"); } }
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.
새로운 댓글이 없습니다.