c언어로 선형방정식의 해를 구하는 프로그램인데
조회수 763회
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
int main(void) {
char* arr = (char*)malloc(sizeof(char) * 40);//equation pointer
char* st[3] = { NULL, };//store manipulated pointer
int len[3] = { 0, };//length of st[i]
int i = 0, j = 0;
float num[3] = { 0.0, }, ore[3] = { 0.0, }, ans;
printf("Put your linear equation\n");
scanf("%s", arr);
int l = strlen(arr);
arr = (char*)realloc(arr, sizeof(char)*l);
for (i = 0;i<3;i++)
st[i] = (char*)malloc(sizeof(char)*l);
//sprintf를 이용하기 위해서는, 크기가 할당된 포인터 혹은
//배열을 이용해야만 한다.
for (i = 0;i<l;i++) {
while (arr[i]<48 || arr[i]>57)
i++;
num[j] = atof(arr + i);
sprintf(st[j], "%.0f", num[j]);
len[j] = strlen(st[j]);
if (arr[i + len[j] - 1] >= 48 && arr[i + len[j] - 1] <= 57) {
assert(arr[i + len[j] - 1]<48 || arr[i + len[j] - 1]>57);
num[j] = atof(arr + i);
sprintf(st[j + 1], "%.0f", num[j]);
len[j + 1] = strlen(st[j]);
}
if (arr[i - 1] == '-') {
num[j] = -1 * num[j];
len[j]++;
}
printf("num[%d]=%.0f,st[%d]= %s,len[%d]=%d,i=%d\n", j, num[j], j, st[j], j, len[j], i);
j++;
if (j>2 && arr[l - 1] == 'x') break; // <---- Q1)
}
printf("arr[len[0]]= '%c', arr[len[0]+len[1]+1]='%c'\n", arr[len[0]], arr[len[0] + len[1] + 1]);
if (arr[len[0]] == 'x') {
ore[0] = num[0];
ore[1] = num[1];
ore[2] = num[2];
}
else if (arr[len[0]] == '=') {
if (arr[len[0] + len[1] + 1] == 'x') {
ore[0] = num[1];
ore[1] = num[2];
ore[2] = num[0];
}
else {
ore[0] = num[2];
ore[1] = num[1];
ore[2] = num[0];
}
}
else {
ore[0] = num[1];
ore[1] = num[0];
ore[2] = num[2];
}
for (j = 0;j<3;j++)
printf("ore[%d]=%.0f\n", j, ore[j]);
ans = (ore[2] - ore[1]) / ore[0];
printf("x=%.2f", ans);
free(arr);
for (i = 0;i<3;i++)
free(st[i]);
return 0;
}
여기에서,
Q1) 이라고 적어놓은 부분의 코드는 c=b+ax
의 형태에서 해당 부분의 코드로 진입하지 않아 어거지로 설정해놓은 코드입니다.
왜 c=b+ax
는 이 코드를 통과하지 못하는 건가요? 이를 해결하려면 어떻게 해야 하나요?
그리고,
각 계수 혹은 상수가 두 자리 이상의 정수가 될 경우, 제가 짠 코드에서는 이상이 발생합니다.
이를 해결하기 위해서 len[i]
를 이용하는 방법도 써 봤습니다만, 소용이 없더군요.
이를 해결하려면 어떻게 해야 하나요?
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
댓글 입력