느낀점


문제에 입력에 대한 정확한 설명이 없어서, 대강 소스에 넣었다.
그냥 파일로 출력할까 하다가, 어떻게든 반복을 피해보고자 버퍼를 넣었더니 더 복잡해졌다.
음... @.@ 파일은 접근이 어렵다는 단점이..;;ㅁ;;

소스


~cpp 

#include <iostream>
#include <fstream>

using namespace std;

int input[11] = {3,3,3,3,3,3,3,3,3,3,3} ;
const int INPUT_MAX=11;
int x;
int number_of_sum=0;
int number_of_multiply=0;

int Horner(int);

void main()
{
	const int SIZE_OF_LINE=5;
	const int NUMBER_TO_CHAR=48;
	const int SIZE_OF_BLOCK=4;
	cout << "x의 값을 입력해주세요.>>";
	cin >> x;
	ofstream outputFile("aswer.txt");
	char write_temp[SIZE_OF_LINE][8+INPUT_MAX*SIZE_OF_BLOCK];
	for (register int i=0; i<8+INPUT_MAX*4; i++)
		write_temp[0][i]=write_temp[2][i]=write_temp[4][i]='=';
	strcpy(write_temp[1]," |index|");
	strcpy(write_temp[3]," | data|");
	for (register int i=0; i<INPUT_MAX; i++){
		write_temp[1][i*SIZE_OF_BLOCK+8]=write_temp[1][i*SIZE_OF_BLOCK+10]=write_temp[3][i*SIZE_OF_BLOCK+8]=write_temp[3][i*4+10]=' ';
		if (10<=i)
			write_temp[1][i*SIZE_OF_BLOCK+8]=i/10+NUMBER_TO_CHAR;
		write_temp[1][i*SIZE_OF_BLOCK+9]=i%10+NUMBER_TO_CHAR;
		if (10<=input[i])
			write_temp[3][i*SIZE_OF_BLOCK+8]=input[i]/10+NUMBER_TO_CHAR;
		write_temp[3][i*SIZE_OF_BLOCK+9]=input[i]%10+NUMBER_TO_CHAR;
		write_temp[1][i*SIZE_OF_BLOCK+11]=write_temp[3][i*SIZE_OF_BLOCK+11]='|';
	}
	for (register int i=0; i<SIZE_OF_LINE; ++i){
		for (register int j=0; j<8+INPUT_MAX*4; ++j)
			outputFile << write_temp[i][j];
		outputFile << '\n';
	}
	outputFile << "# Horner Function Value ----> "<< Horner(0) << "\n";
	outputFile << "# Horner ADD      Count ----> "<< number_of_sum << "\n";
	outputFile << "# Horner Multiply Count ----> "<< number_of_multiply << "\n";
	outputFile.close();
}

int Horner(int number)
{
	if (INPUT_MAX-1==number)
		return input[number];
	else{
		++number_of_multiply;
		++number_of_sum;
		return Horner(number+1)*x+input[number];
	}
}

저에게 할말~'ㅇ')/


프로그램 돌리면 에러가 뜹니다.
1. 먼저 헤더 파일에 .h를 붙여 주시고요.
2. strcpy를 썼으면 #include <string.h> 헤더파일도 써주셔야 할듯.
3. 또한 register int i 이건 맨처음 한번만 선언해주시고 나머지 i에서는 그냥 i만 써주셔야 할듯 해요. 반복 선언은 좀 무리일듯 .제 짧은 소견이었습니다.-남도연
└ 헤더파일 에러나는건 표준이전에 나온 컴파일러(97년 이전)를 써서 그러는데 C++표준 헤더는 확장자가 붙지 않습니다. 97년 이후에 나온 컴파일러를 써보세요. - 이재혁
└ 그렇군요!! 근데 그걸 어디서 구한담;; 난감하네요 ^^;; 조언 감사합니다 ^^ -남도연

register int i를 여러번 쓴 것은 메모리 낭비를 적게하려는 생각이었습니다. 그냥 메모리도 아니고 레지스터 메모리를 프로그램 시작부터 끝까지 잡고있을 필요는 없을것 같았답니다.^^
그리고 제가 사용한 컴파일러(비주얼 .NET) 은 저에게 말하면 미소녀는 무료, 일반인은 밥 한끼, 미소년은 무한끼에 FTP나 HTTP로 제공해드리고 있습니다.^^
참고로 올려진 소스들은 모두 정상적인 작동 테스트를 거친 뒤였습니다.^^ - 조현태


Retrieved from http://wiki.zeropage.org/wiki.php/호너의법칙/조현태
last modified 2021-02-07 05:31:33