반응형








괄호가 없는 식일 때 Infix (중위표기식)에서 Postfix (후위표기식) 로 바꾸는 방법을 구현해 보았다.


이 과정에서는 연산자의 위치를 결정하기 위해 STACK을 이용하였다.



보고서 및 전체 소스 다운받으러 가기



예를들어 a+b*c 라는 식을 후위표기식으로 변환한다고 해보자.



연산자를 위한 STACK을 만들고 연산자를 만났을 때 STACK에 저장한다.


이 과정에서 연산자의 우선순위를 생각해 주어야 하는데, 우선순위는 우리가 일반적으로 알고 있는것과 같이 *,/ 가 +,- 보다


더 높은 경우들을 생각하면 된다.


이러한 우선순위를 적용하기 위해 프로그램 내에서 따로 우선순위를 결정해주는 함수를 만들어 주었다.






다음과 같은 함수를 만들어 주고, parameter로 연산자 문자를 받으면 그 문자가 어떤 문자인지에 따라서


우선순위를 return 해 주는 형식이다.


제곱인 ^를 우선순위가 제일 높은 3으로, *, /, % 연산을 2로, +, -를 1로 return 될수 있게 해주었으며 그 외에는 -1이 return되게


하여 예외처리를 해 주었다.



연산과정에서 연산자 STACK의 Top에 있는 연산자 우선순위를 검사한다.


그 뒤에 STACK에 새롭게 들어올 연산자의 우선순위를 검사한뒤 두개를 비교하고, 


Top에 있는 연산자 우선순위가 새롭게 들어올 연산자의 우선순위보다 더 작을 때


새로운 연산자는 STACK에 들어오게 된다.



반대로 새롭게 들어올 연산자의 우선순위가 Top에 있는 연산자 우선순위보다 더 낮거나 같으면 


먼저 Output에 현재 연산자 STACK top위치에 있는 연산자를 pop해서 출력해주고, 


새로들어온 연산자를 다시 연산자 STACK에 push해준다.



식을 모두 검사한 뒤에는 연산자 STACK에 있는 연산자들을 차례대로 Pop해주어 Ouput에 연결해 준다.


이제 Output을 출력하면 Postfix 된 식이 출력될 것이다.






결과를 출력해 보면

먼저 input data가 다음과 같을 때


Output으로 출력되는 결과 역시 제대로 출력되는 것을 확인할 수 있었다.






보고서 및 전체 소스 다운받으러 가기




반응형
반응형

Dropbox에 대한 두번째 포스팅! 이번에는 유용한 기능중에 하나인 Sharing 기능에 대해 알아보겠다.


이 기능은 주로 조별과제나 팀프로젝트를 진행할때 유용하게 사용할 수 있을 것 같다.



먼저 Dropbox 홈페이지 (http://www.dropbox.com) 에 들어가 로그인을 한 뒤 Sharing 메뉴를 클릭해 보면 


Sharing 화면이 뜬다. 현재 나는 두개의 Sharing 폴더를 사용하고 있기 때문에 다음과 같이 폴더가 떠있지만


처음 사용한다면 아무런 폴더가 나타나 있지 않을 것이다.



화면에서 New shared folder 버튼을 클릭하면




다음과 같은 창이 뜬다.


여기에서 이미 존재하고 있는 폴더 (Public, Photos, Camera Uploads 가 될 것이다)를 공유하고 싶다면 


I'd like to share an existing folder를 선택하고


새롭게 만들고 싶다면


I'd like to create and share a new folder를 선택한뒤 폴더 이름을 정하고 Next를 누른다.





만약 내가 aaa 라는 폴더를 만들고 이 폴더를 다른 Dropbox 사용자와 공유하고 싶다면


Invite collaborators to this folder 란에 해당하는 친구의 이메일 계정을 써준뒤 메시지를 보낸다.


(해당 친구가 가입한 Dropbox 계정 이메일 주소)


메시지를 작성한 뒤 Share folder 버튼을 누르면 메일로 해당친구에게 초대메시지가 전송될 것이다.




친구가 메일을 통해 동의를 하면 이제 내 Dropbox 계정으로 친구와 함께 쓸 수 있는 폴더가 생긴 것이다.




컴퓨터에서 Dropbox 폴더를 확인하면 폴더에 사람모양이 그려진 Sharing 폴더가 생긴것을 확인 할 수 있다.


이곳에 파일을 저장해 두면 공유하기를 함께하는 친구들도 파일을 동기화 해서 사용할 수 있는 것이다.



위에서 말한대로 팀프로젝트나 조별과제같은거 할때 사용하면 유용하다 ㅋㅋ









반응형
반응형

Dropbox에 대해서 알아보자!

먼저 Dropbox라는 프로그램은 일종의 Cloud 프로그램으로 보면 되는데


다음클라우드나 네이버N드라이브보다 훨씬 더 간편하게 쓸수 있고 핸드폰과도 연동해서 쓰는게 편하기 때문에


큰 용량을 제공해주는 다음이나 네이버 서비스에 비해 간단히 작업할때 쓰는 저용량 파일같은건 Dropbox가


훨씬 편하다고 생각된다!



예를들어서 컴퓨터로 강의자료를 받아서 Dropbox에 넣어둔뒤 핸드폰으로 본다던지 할때나


노트북과 집컴퓨터를 가지고 작업을 하면서 노트북으로 작업한 파일을 데스크탑으로 옮겨서 출력해야 할때


굳이 USB메모리 등을 사용하지 않아도 된다! 와! 좋다!! 그럼 어떻게 쓰는지 한번 알아볼까?


컴퓨터용 프로그램은 https://www.dropbox.com/에 들어가서 다운받으면 되고


스마트폰용 앱은 앱스토어나 구글플레이, 각 스마트폰에 맞는 마켓에 들어가서 받으면 된다.


회원가입도 간단하기에 쉽게 가입하고 다운받을 수 있을 것이다.


Dropbox의 경우 무료로 제공되는 용량은 2GB인데 더 쓰기위해서는 돈을 내야 한다. 하지만 2GB로도 충분하다.


나같은 경우에는 노트북+데스크탑+핸드폰 이렇게 3개를 연동해서 쓴다.


계정 접속도 동시에 여러군데서 접속되면 한쪽이 끊어진다거나 하는 일 없이 항상 동시접속이 되어있기 때문에 상관없다.



노트북에 보면 상태바에 아이콘이 떠있는 모습을 볼 수 있고


화면을 열어보면 이렇다.



데스크탑역시



상태바에 아이콘이 떠있고




아이콘을 더블클릭해서 열면 이렇게 떠있다.


그리고 마지막으로 핸드폰에서 실행시켜보면


잘 뜬다 ㅋㅋ



이제 어떻게 쓰는지 보자!



노트북에서 K리그.jpg 라는 파일을 public 폴더로 옮겨보았다.


아이콘 밑에 파란색으로 동그랗게 화살표가 그려지는데 이 아이콘은 변경사항이 있을 경우 반영되고 있는 중임을 나타낸다.




초록색 체크표시로 바뀌면 연동이 완료된 것이다.


이제 바로 데스크탑 상태바에 있는 Dropbox아이콘을 더블클릭해보면




짜잔~ 바로 열어볼수 있다.


그리고 핸드폰에서도




바로 열어볼수 있다.




그리고 핸드폰에서 설정을 통해서 핸드폰으로 찍는 사진을 바로 Dropbox에 업로드 될수 있도록 하는 기능도 있는데 이렇게


하면 핸드폰 사진을 별다른 작업없이 컴퓨터로 바로 열어볼수도 있다.



하지만 데이터 요금이 나갈수 있으니 주의할것! 나는 그래서 이 기능은 꺼둠 ㅋㅋ


잘만 활용하면 진짜 편하게 쓸수 있다!



몇가지 Tip이 있다면...


Public 폴더 안에 넣어주어야 바로바로 반영이 된다.


Public 폴더 밖에 파일을 넣어두면 아무런 변화도 없었다... 왜그럴까? 아무튼 Public폴더랑 Photos 폴더 있는데


그 안에다 파일을 꼭 저장해 줄것.


그리고 용량이 큰 파일은 그렇게 빨리 연동되지 않는다. 저장해두고 조금 기다리다보면 상태바 아이콘에


파일 업로드가 완료되었다는 메시지가 뜰 것이다!


아무튼 잘만 활용하면 정말 유용하게 쓸수 있을것 같다.

반응형
반응형

 

 

 

 

Postfix로 작성된 수식을 STACK을 이용하여 연산하는 프로그램을 작성해 보았다.

 


보고서 및 전체 소스 다운로드

 

 

 

 

연산과정은 다음과 같다.

 

예를들어 8/2-3 이라는 Infix방식의 수를 82/3- 의 Postfix방식으로 바꾼뒤 STACK을 이용하여 연산을 하게 되면

 

연산될 두 숫자를 STACK에 저장하고 연산자를 만났을 때 연산, 결과를 다시 STACK에 넣는다.

 

같은 방식으로 식이 종료될 때 까지 반복하면 STACK에는 전체의 연산 결과가 저장될 것이고, 이를 결과로 출력해 준다.

int calculate(char *oper) {
	
	int i=0;
	int j;
	int temp = 0; // 연산된 값을 저장하기 위한 temp 변수
	int temp_mul = 1; // 제곱 연산을 하기 위한 변수


	while(oper[i] != 0) // oper[i] 가 null값, 즉 배열의 마지막 값을 만나면 반복문 종료
	{					// 배열의 마지막 값이 0으로 입력되어 0으로 해주었다.
		
		if(isdigit(oper[i])) // isdigit() -> 배열 값이 정수일때 return 1
		{
			push(oper[i] - '0'); // character 문자형을 정수형으로 바꾸어 주기 위해
								 // ASCII 코드값에서 '0'을 빼주어 push 시킨다.
		}
		else // 배열값이 정수가 아닌 문자일 때
		{
			switch(oper[i])
			{
			case '+': // 더하기 연산
				temp = stack[top-1] + stack[top]; // stack에 들어있는 두 숫자를 더해서 temp에 저장
				// 현재 top index 이전 값과 현재 top index값 두개를 더한다.
				pop(); 
				pop(); // 두 숫자를 더했기 때문에 두번 pop 시킨다.
				push(temp); // temp 값을 다시 push 시킨다.
				break;
			
			case '-': // 빼기 연산
				temp = stack[top-1] - stack[top];
				pop();
				pop();
				push(temp);
				break;

			case '*': // 곱하기 연산
				temp = stack[top-1] * stack[top];
				pop();
				pop();
				push(temp);
				break;

			case '/': // 나누기 연산
				if(stack[top] == 0)
				{
					printf("0으로 나눌 수 없습니다.\n");
					exit(1);
				} // 나눌 숫자가 0일 경우 나눌 수 없기 때문에 에러메시지 출력후 프로그램 종료
				else
				{
					temp = stack[top-1] / stack[top];
					pop();
					pop();
					push(temp);
				}
				break;

			case '%': // 나머지 연산
				if(stack[top] == 0)
				{
					printf("0으로 나눌 수 없습니다.\n");
					exit(1);
				} // 나눌 숫자가 0일 경우 나눌 수 없기 때문에 에러메시지 출력후 프로그램 종료
				else
				{
					temp = stack[top-1] % stack[top];
					pop();
					pop();
					push(temp);
				}
				break;


			case '^': // 제곱연산
				for(j=0;j<stack[top];j++)
				{
					temp_mul = temp_mul * stack[top-1];
				} // 제곱을 만나면 제곱 수 만큼 반복해서 곱해준뒤 변수에 저장한다.
				pop();
				pop();
				push(temp_mul);
				break;


			default:
				printf("알수없는 연산자가 있습니다.\n"); 
				// 알수없는 연산자가 있을 경우 에러메시지 출력후 프로그램 종료
				exit(1);
				break;

			}
		}

		i++;
	}


	return stack[0];
	
}

Calculate라는 Integer형 함수를 만들어 연산 식이 저장되어있는 파일로 부터 식을 읽어와 함수로 넘겨주었다.

 

함수내에서는 STACK을 이용하여 식을 연산하고 최종적으로 STACK의 [0]번째 index, 즉 최종값을 return 시켜 주었다.

 

 

위와 같은 input data를 txt파일로 작성한 뒤 프로그램을 실행시켰을 때

 

 

 

위와 같은 연산 결과를 얻어 낼 수 있었다.

 


보고서 및 전체 소스 다운로드

 

 

반응형
반응형







수식의 표기방법에는 Prefix (전위표기법), Infix (중위표기법), Postfix (후위표기법) 이 있다.




예를들어 보자면 위의 표에 나와있는것 처럼 표현할 수 있다.



컴퓨터에서는 수식을 계산할 때 중위표기식으로 표현된 것을 후위표기식으로 바꾼뒤 계산한다.


그리고 이 과정에서 STACK이 사용된다.



예를들어 사용자가 2+3*4 의 연산을 입력하면 컴퓨터는 후위표기법인 234*+ 로 바꾼 뒤 계산하여 14라는 결과를 얻어내는 것이다. 




반응형
반응형








희소행렬을 만드는 과정에서 쓰였던 2차원 배열 전체에서 20%만 값을 할당하는 부분을 검증해 보았다.


이를위해 다음과 같은 코드를 작성해 보았다.





매번 20%의 확률에 들어올 때 카운트 될 수 있게 하는 프로그램을 10000번 반복시켰을 때 평균적으로 20회 카운트 되는것을


결과로 얻을 수 있었다.



따라서 위의 코드는 신뢰할 만하다는 결론을 얻었다.




반응형

+ Recent posts