반응형

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회 카운트 되는것을


결과로 얻을 수 있었다.



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




반응형
반응형




 

2차원 배열을 생성하고 배열 전체의 20%에만 임의의 수가 저장되게 만들어 보았다.

int** InputValue(int *valueCount) {
	int** arr;
	int i,j,rannum;
	int count = 0;

	arr = (int**)malloc(sizeof(int)*MAXSIZE);
	for(i=0;i<MAXSIZE;i++)
	{
		arr[i] = (int*)malloc(sizeof(int)*MAXSIZE);
	} // 2차원 배열 동적할당 선언

	srand(time(NULL));

	// <- 값 입력
	for(i=0;i<MAXSIZE;i++)
	{
		for(j=0;j<MAXSIZE;j++) 
		{
			// 전체 배열중 20%에만 원소를 저장시킨다.
			rannum = rand()%100;
			if(rannum<20) {
				arr[i][j] = (rand()%100)+1; // 값을 저장할 때는 1~100 범위의 숫자를 저장한다. 
				count++; // 값이 입력될때 마다 카운트를 1씩 증가시켜
						 // Sparse Matrix에 값이 몇개 저장되었는지 카운트 한다.
			}
			else
			{
				arr[i][j] = 0; // 나머지 배열의 원소에는 0을 저장한다.
			}

		}

	}
	// ->

	*valueCount = count; // 생성된 Value의 수를 참조를 통하여 저장한다.
	
	return arr;

}

 

main함수에서 

 

int **arr;

 

이라는 변수를 더블포인터 변수를 선언하고

 

arr = InputValue(&valueCount);

 

식으로 연결시켜 주었다. valueCount는 몇개의 값이 생성되었는지 알기 위한 변수로 메인에서 선언해주고 InputValue함수에

 

주소만 넘겨주었다.

 

배열 전체의 20%에만 값을 할당하기 위해 0~99 범위의 랜덤한 숫자를 생성하고 20보다 작을때만 값이 입력되게 만들었는데

 

이에 대한 검증은 따로 하도록 하겠다.

 

 

결론적으로 InputValue함수를 통해 생성된 2차원배열을 파일에 찍어보면 다음과 같이 제대로 생성됨을 볼 수 있었다.

 

 

 

이는 MAXSIZE를 15000으로 해서 15000 x 15000 사이즈의 2차원 배열이 생성되었을 때이다.

 

파일사이즈가 커서 메모장으로는 열리지도 않는다 ㅋㅋ

 

 

 

이제 생성된 2차원 배열을 희소행렬 표현방식으로 저장해 보았다.

 

 

 
메인에서 가지고 있는 2차원 배열의 포인터변수와 생성된 값의 수인 valueSize를 인자로 받는 makeSpsMatrix라는 함수를 만들었다.
 
이는 역시 메인에서 희소행렬을 위한 구조체로 지정해준 spsmt라는 type의 포인터 변수로 연결된다.
 
[0]번 인덱스에는 row, colum값이 MAXSIZE가 되고 value값이 메인에서 부터 인자로 받아온 valueSize가 저장된다.
 
그리고 2중 for문을 이용해 값을 모두 비교해 보며 0이 아닐때에는 희소행렬로 저장하고 0일 경우에는 반복문을 계속 진행시켰다.
 
 
이 역시 결과를 파일로 저장해서 열어보면 다음과 같았다.
 

 

15000 x 15000 사이즈에 value가 45049011개인 희소행렬이 제대로 저장된 것을 확인 할 수 있었다.

 

 

 

2차원 배열과 희소행렬의 결과값을 비교해서 검증해 보면

 

 

 

 [0][4] 위치에 value값 76이 생성되어 있다는걸 확인할 수 있다.

 

 

반응형

+ Recent posts