제목 서식 (## 까지만 줄이 쳐지는거 같음)


# 제목 1빠

## 제목  2빠

### 제목 3빠

####제목 4빠


굵게 , 기울이기


**굵게**

*기울이기*



숫자 목록


1. 항목  (<--  1. 을 하고 뭐라뭐라쓰고 Enter을 치면 밑에 바로 2.이 자동으로 추가)

2. 항목2

3. 항목3



 글머리 기호 목록


- + (띄어쓰기 x 바로 스페이스 바)    or    * + (띄어쓰기 x 바로 스페이스 바)



인용문 


> 뭐라뭐라 쓰면됨


ex)

코코

> 코코는 우리집 반려견 입니다.





절취선 (한줄 똬악 긋기)


--- + (Enter)  스페이스바 ㄴㄴ


ex)

--- + (enter)

뭥미

--- + (enter)




주석 달기


ex)

Computer[^1]

[1^]: 콤퓨타



취소선


ex)

~~다이어트~~



이미지 넣기



![아무거나 이름 넣고싶은거 넣기](이미지 주소)        이미지 주소는 그림에 대고 마우스 우클릭(이미지 주소 복사) 누르면 나옴 (안나오는것도 있음)


ex ![Google Icon](https://www.google.co.kr/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png)






'IT' 카테고리의 다른 글

OAuth2  (0) 2020.06.15
SD 카드 용량이 63MB? 16GB를 되찾아주는방법  (0) 2017.03.01
동글동글 ! 블루투스 4.0 동글 !  (0) 2016.12.18

#include<iostream>

#include<windows.h>

#include<time.h>

#include<stdlib.h>

#include "sort.h"

#pragma warning (disable : 4996)


const int N = 10000;

int b[N + 1] , a[N+1];

void MergeSort(int a[], int l, int r)

{

int i, j, k, m;

if (r > l)

{

m = (r + l) / 2;

MergeSort(a, l, m);

MergeSort(a, m + 1, r);

for (i = m + 1; i > l; i--) b[i - 1] = a[i - 1];

for (j = m; j < r; j++) b[r + m - j] = a[j + 1];

for (k = l; k <= r; k++)

a[k] = b[i] < b[j] ? b[i++] : b[j--];

}

}


int main()

{

int i;

double start_time;

srand(time(NULL));


for (i = 1; i <= N; i++) a[i] = rand();

start_time = clock();

MergeSort(a, 1, N);

cout << "(난수값을 갖는 랜덤 배열일때) 합병 정렬의 실행 시간 (N = " << N << ") : " << (clock() - start_time)/CLOCKS_PER_SEC << "초" << endl;

CheckSort(a, N);

cout << endl;


int reverse = N;

for (i = 1; i <= N; i++) a[i] = reverse--;

start_time = clock();

MergeSort(a, 1, N);

cout << "(역순으로 정렬된 배열일때) 합병 정렬의 실행 시간 (N = " << N << ") : " << (clock() - start_time)/CLOCKS_PER_SEC << "초" << endl;

CheckSort(a, N);

cout << endl;


for (i = 1; i <= N; i++) a[i] = i;

start_time = clock();

MergeSort(a, 1, N);

cout << "(정렬된 배열) 합병 정렬의 실행 시간 (N = " << N << ") : " << (clock() - start_time) / CLOCKS_PER_SEC << "초" << endl;

CheckSort(a, N);

cout << endl;


system("pause");

return 0;

}


C++


#include<iostream>

#include<time.h>

#include "sort.h"

using namespace std;


const int N = 100000;

void MergeSort(int arr[], int l, int r, int divide)

{

int *first_Arr = new int[N + 1];

//int first_Arr[N + 1];

int first_Cnt = 0;

int *second_Arr = new int[N + 1];

//int second_Arr[N + 1];

int second_Cnt = 0;

for (int i = l; i <= divide; i++)

first_Arr[++first_Cnt] = arr[i];


for (int i = divide + 1; i <= r; i++)

second_Arr[++second_Cnt] = arr[i];


int first_index = 1;

int second_index = 1;

int present_Position = 0;

for (int i = l; i < l + (first_Cnt + second_Cnt); i++)

{

arr[i] = first_Arr[first_index] > second_Arr[second_index] ? second_Arr[second_index++] : first_Arr[first_index++];


if (first_index == first_Cnt + 1) // 첫번째 배열이 다 들어가서 두번째 배열만 넣어주면 되는 경우

{

for (int j = i + 1; j < l + (first_Cnt + second_Cnt); j++)

arr[j] = second_Arr[second_index++];

break;

}

else if (second_index == second_Cnt + 1) // 두번째 배열이 다 들어가서 첫번째 배열만 넣어주면 되는 경우

{

for (int j = i + 1; j < l + (first_Cnt + second_Cnt); j++)

arr[j] = first_Arr[first_index++];

break;

}

}


delete[] first_Arr;

delete[] second_Arr;

first_Arr = NULL;

second_Arr = NULL;

}


void NaturalMergeSort(int arr[], int l, int r)

{

int check_Cnt = 0; // 2개 일때 합병

int first_Merge_start = 1;

int check_Point;

int sw = 0;

for (int i = l + 1; i <= r; i++)

{

if (arr[i - 1] > arr[i])

{

check_Cnt++;

sw = 1;

if (check_Cnt == 1)

check_Point = i - 1;

}


if (check_Cnt == 2)

{

MergeSort(arr, first_Merge_start, i - 1, check_Point);

check_Cnt = 0;

first_Merge_start = i;

}


if (i == r && check_Cnt == 1)

MergeSort(arr, first_Merge_start, i, check_Point);


}

if (sw == 1)

NaturalMergeSort(arr, 1, N);

}


int main()

{

srand(time(NULL));

int *arr = new int[N + 1];

double start_time;

int rever = N;

for (int i = 1; i <= N; i++)

arr[i] = rever--;

start_time = clock();

NaturalMergeSort(arr, 1, N);

cout << "총 걸린 시간 = " << (clock() - start_time)/CLOCKS_PER_SEC << "초" << endl;

//for (int i = 1; i <= N; i++)

// cout << arr[i] << " ";


CheckSort(arr, N);

delete[] arr;

arr = NULL;

return 0;

}


ADL


Natural_Merge_Sort(arr[], l, r)

     Arr_Cnt ← 1;

     run[Arr_Cnt][0] ← 1;

     for(i = l; i < r; i++) do {

         if(arr[i] > arr[i+1]) then {

             run[Arr_Cnt][1] = i;

             Arr_Cnt ← Arr_Cnt + 1;

             run[Arr_Cnt][0] = i + 1;

             }

     run[Arr_Cnt][1] = r;

     while(Arr_Cnt > 1) do {

         check ← 1;

             for (i = 1; i <= Arr_Cnt – 1; i ← i + 2) do {

                 MergeSort(Arr,run[i][0], run[i+1][1], run[i][1]);

                 run[check][0] = run[i][0];

                 run[check][1] = run[i + 1][1];

                 check++;

                 }

             run[check][0] = run[Arr_Cnt][0];

             run[check][0] = run[Arr_Cnt][1];

             Arr_Cnt ← Arr_Cnt - (check – 1 );

             }

end Natural_Merge_Sort(arr[], l, r, divide)


MergeSort(arr[], l, r, divide)

     for(i = divide + 1; i > l; i ← i – 1) do {

         merge_Arr[i-1] = arr[i-1];

         }

     for(j = divide;j < r; j ← j + 1) do {

         merge_Arr[r + divide – j] = arr[j + 1];

end MergeSort(arr[], l, r, divide)

꼰트롤 (누른상태) + k(누른상태) + f 누르면   쭈룻!









(Ctrl + f5) 를 할 시에 콘솔창이 뜨고 확인도 못하고 바로 종료될 때가 있는데..  이때  헤더 파일에 #include <windows.h> 에 있는 system("pause");를 이용하여 강제로 멈추게 할수 있지만, 

프로젝트 속성에서 옵션을 변경하여 해결할 수도 있다.





위 보기에서 프로젝트 -> "프로젝트 이름" 속성 클릭!



링커 -> 시스템 -> 하위 시스템 (콘솔/SUBSYSTEM:CONSOL) 선택한후 적용을 하면



요로코롬 콘솔창이 유지된다





'Visual studio 2017' 카테고리의 다른 글

Visual studio 소스 코드 정리 단축키  (0) 2017.11.03
Visual studio 컴파일시 바로 종료  (0) 2017.03.08

계획  → 요구분석 → 설계 → 구현 → 시험 → 유지보수


프로젝트 계획 

· 일정 계획

· 조직 계획

· 위험 분석


 ◆ 중앙 집중식 조직

특징

- 의사 결정이 빠름

- 소규모 프로젝트에 적합

- 초보 프로그래머를 훈련시키는 기회로 적합

단점

- 보조 프로그래머의 역할이 모호

- 한 사람의 능력과 경험이 프로젝트의 성패 좌우


 ◆ 분산형 조직

특징 

- 작업 만족도 높음

- 의사 교류 활성화

- 장기 프로젝트에 적합

단점

- 책임이 명확하지 않은 일이 발생

- 대규모 프로젝트에 적합하지 않음(의사 결정 지연 가능)


◆ 혼합형 팀조직

특징   

- 초보자와 경험자를 분리

- 프로젝트 관리자와 고급 프로그래머에게 지휘권한이 주어짐

- 의사교환은 초보 엔지니어나 중간 관리층으로 분산

단점

- 기술인력이 관리를 담당

- 의사 전달 경로가 김

'소프트웨어 공학' 카테고리의 다른 글

리팩토링  (0) 2017.10.21
소프트웨어 개발론  (0) 2017.10.21

※ 리팩토링

◆ 정의

소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함' 을 뜻한다. 주로 가독성을 높이고 유지보수를 편하게 한다. 버그를 없애거나 새로운 기능을 추가하는 행위는 아니다.

사용자가 보는 외부 화면은 그대로 두면서 내부 논리나 구조를 바꾸고 개선하는 유지보수 행위이다.


◆ 목적

· 버그를 찾아내기 쉽게 한다. (디버깅 자체는 리팩토링이 아니지만, 리팩토링을 하면 프로그램이 정리되어 숨어 있는 버그를 찾아내기 쉬워진다.)


· 기능을 추가하기 쉽게 한다. (기능 추가 자체는 리팩토링이 아니지만 리팩토링을 하면 프로그램에 새호운 기능을 추가하기 쉬워 진다. 리팩토링이 되지 않은 코드는 일반적으로 기능을 추가하면 소스코드가 점점 더 복잡해지고 결국 구조가 무너진 소스가 된다. 하지만 리팩토링을 한 코드는 탄탄한 구조를 갖게 되어 기능추가에 있어서 편할 것이다.)


· 리뷰하는 것이 쉬워진다. (리팩토링하여 깨끗해진 코드는 읽기 쉽고 이해하기 쉬워진다. 이는 결국 코드리뷰에 있어서 쉬워짐을 의미한다.)


◆ 리팩토링의 예제

1. 메소드 정리 

(1) Extract Method

그룹으로 묶을 수 있는 코드 조각이 있으면 별도의 메소드로 뽑아낸다. 코드의 목적이 잘 들어나는 메소드의 이름을 짓는다


(2) Inline Method

호출하는 곳에 메소드의 몸체를 넣고 메소드를 삭제한다.


(3) Inline Temp

간단한 수식의 결과값을 가지는 임시변수를 모두 원래의 수식으로 바꾼다.


(4) Replace Temp With Query

어떤 수식의 결과 값을 저장하기 위해서 임시 변수를 사용하고 있다면 이 수식을 뽑아서 새로운 메소드로 만들고 임시변수를 모두 찾아서 메소드 호출로 바꾼다.


(5) Introduce Explaining Variable

복잡한 수식이 있는 경우, 수식의 결과나 수식의 일부에 자신의 목적을 잘 설명하는 이름으로 된 임시변수를 사용한다.


(6) Split Temporary Variable 

임시변수에 값을 여러 번 대입하는 경우, 각각의 대입에 대해서 따로따로 임시변수를 만든다.


(7) Remove Assignments to Parameters

파라미터에 값을 할당하는 코드가 있으면 임시변수를 사용한다.


(8) Substitute Algorithm

알고리즘을 보다 명확한 것으로 바꾸고 싶을 때는 메소드의 몸체를 새로운 알고리즘으로 바꾼다.


2. 객체간의 기능 이동

(1) Move Method

메소드가 자신이 정의된 클래스보다 다른 클래스의 기능을 더 많이 사용하고 있다면, 이 메소드를 가장 많이 사용하고 있는 클래스에 비슷한 몸체를 가진 새로운 메소드를 만들고 이전 메소드는 간단한 위임으로 바꾸거나 완전히 제거한다.


(2) Move Field

필드가 자신이 정의된 클래스보다 다른 클래스에 의해서 더 많이 사용되고 있다면, 타켓 클래스에 새로운 필드를 만들고 기존 필드를 사용하고 있는 모든 부분을 변경한다.


(3) Extract Class

두 개의 클래스가 해야 할 일을 하나의 클래스가 하고 있는 경우, 새로운 클래스를 만들어서 관련 있는 필드와 메소드를 예전 클래스에서 새로운 클래스로 옮긴다.


(4) Inline Class

클래스가 하는 일이 많지 않은 경우에는, 그 클래스에 있는 모든 변수와 메소드를 다른 클래스로 옮기고 그 클래스를 제거하라.


3. 데이터의 구성

데이터를 좀 더 쉽게 다루기 위한 여러가지 리팩토링이다.

(1) Self Encapsulate Field

필드에 직접 접근하고 있는데 필드에 대한 결합이 이상해지면 get/set 메소드를 만들어 필드에 접근한다.


(2) Change Value to Reference

동일한 인스턴스를 여러 개 가지고 있는 클래스가 있고 여러개의 동일한 인스턴스를 하나의 객체로 바꾸고 싶으면 그 객체를 참조객체로 바꾸어라.


(3) Replace Array with Object

배열의 특정 요소가 다른 뜻을 가지고 있다면, 배열을 각각의 요소에 대한 필드를 가지는 객체로 바꾼다.


◆ 리팩토링의 한계

리팩토링은 언제라도 가능한 것은 아니다. 리팩토링을 적용할 수 없는 경우도 있다.


· 프로그램이 아직 동작하지 않는 경우

만들고 있는 중이라 아직 동작하지 않는 프로그램은 리팩토링 할 수 없다. 리팩토링하기 전에 먼저 동작하는 프로그램을 만들어야만 하며, 또한 설계와 코딩이 좋지 않아 버그투성인 사용할 수 없는 프로그램에 대해서도 리팩토링 할 수 없다.

· 시간이 얼마 남지 않았을 경우 (마감일에 가까워 졌을 때)

납기 기간이 매우 엄격한 코드를 리팩토링하는 것은 현명한 방법이 아니다. 리팩토링이라는 것은 시간이 지나면서 차차 효과가 나타나는 것이다. 또한 납기 직전에 커다란 리팩토링은 하지 않도록 하는 것이 좋다.

'소프트웨어 공학' 카테고리의 다른 글

프로젝트 조직  (0) 2017.10.22
소프트웨어 개발론  (0) 2017.10.21

소프트웨어 개발 방법론


◆ 많이 사용되고 있는 4가지 패러다임 

폭포수 모델 , 원형 패러다임 , 나선형 모델 , 4세대 기법


◆ 패러다임의 선정은 프로젝트의 성격, 소요되는 기간, 방법과 도구 등에 의해 이루어 진다.



1 . 폭포수 모델


특징 

· 고전적 라이프 사이클 패러다임

· 가장 오래되고 널리 사용되는 패러다임

· 순차적인 접근방법

· 하향식 접근방법


장점 

· 프로젝트 진행과정을 세분화하여 관리 용이


단점

· 대규모일 수록 부분 순환이 발생하기 때문에 순차적인 흐름을 따라가는 데 어려움이 있다.

· 요구사항을 초기에 구체적으로 기술하기 어렵다.

· 결과가 후반부에 가서야 얻어짐으로써, 중요한 문제점이 뒤에 발견된다.


2. 원형 (Prototyping) 패러다임

적용 환경

· 목표를 정하였으나 속성을 어떻게 만족시킬지 모르는 경우

· 사용자의 요구사항이 무엇인지, 요구를 어떻게 변경될지 구체적으로 모르는 경우

· 개발자들이 고객의 요구를 불완전하게 이해하고 있는 경우

· 고품질 시스템의 요구사항을 명세화하기 어려울 경우



◆ 프로토타입 개발

· 장점 

- 개발 초기에 미리 결과물을 확인할 수 있다는 점에서 사용자의 이해를 도운다.

- 개발의 초기 단계에서 수정 / 보완할 사항을 미리 파악할 수 있다.

- 분석 및 설계 과정에 사용자가 동참하여 즉각적인 피드백을 줄 수 있다.


· 단점

- 일회적 프로젝트나 대규모 프로젝트의 개발에는 적용하기 쉽지 않다.

- 불완전한 요구사항을 바탕으로 시제품이 만들기 때문에 결과적으로 불완전한 시스템을 산출하여 수정과 보     완  에 많은 인력과 시간이 투입된다.


완료된 프로토타입을 이용하여 시스템을 구현하였으나 원하는 시스템이 아닐 경우

 재 작업 실시



3. 나선형 패러다임

◆ 폭포수 모델과 원형 패러다임의 장점에 새로운 요소인 위험 분석을 추가하여 만든 것 (높은 위험도가 예상될 경우)


◆ 위험을 관리하고 최소화하려는 것이 이 패러다임의 주 목적


◆ 나선을 돌면서 점진적으로 완벽한 시스템 개발


◆ 각 나선은 4단계로 나뉘어져 있다.

1) 계획 및 정의 단계

2) 위험 분석 단계

3) 개발 단계

4) 고객 평가 단계


◆ 나선형 패러다임

· 장점

- 비용이 많이 들고 시간이 오래 걸리는 대형 시스템구축(대형사업)에 가장 현실적인 접근방법 성과를 보면서 위험부담을 줄일 수 있는 방법


· 단점

- 모델자체가 복잡하여 프로젝트 관리가 어려움 , 상업용 제품에는 이방법보단 프로토타입이 적합




4. 4세대 기법

◆ 요구사항 명세서로부터 실행코드를 자동으로 생성할 수 있게 하여주는 방법


◆ 현재 4GT 도구들은 자연언어를 실행코드로 바꾸어 줄 만큼 정교하지 못하다.


◆ 형식 규격 언어로 표현하려는 노력 ( 예 : EER(Enhanced Entity-Realtionship) 모델로 만들어진 명세서에서 데이터베이스의 코드가 생성)



5. 애자일(Agile) 방법론

◆ 기존 방법론은 프로젝트의 본질적인 목표보다 계획 수립, 문서화, 품질 관리등 부수적으로 수행되는 작업이 오버헤드(overhead) 비용을 발생시킨다.


◆ 1990년대 민첩성과 실용성을 앞세운 가벼운 경량급 개발 방법론인 애자일 기법을 제안


◆ 특징

· 기술적 부채 해결

· 리팩토링 활용

· 객체지향 기법의 적용


◆ 애자일 기법

· 장점

-  빠른 프로토타입과 짧은 릴리즈 → 소프트웨어 개발 성공률을 높일 수가 있다.

- 작은 프로젝트부터 쉽게 도입 → 비용과 위험도도 상대적으로 낮다


· 단점 

- 성공 사례가 많지 않다 → 개발자와 고객이 함께 협업

사용자 스토리를 작성

테스트케이스를 작성

자원을 추정

릴리즈 계획의 수립


- 참여와 소통, 개인의 성숙도, 상호협력이 중요

- 개발 프로세스 및 소프트웨어 공학에 관한 수준 높은 기술이 필요



6. 익스트림 프로그래밍(XP)

◆  XP는 애자일 소프트웨어 개발 방법론 중 가장 많이 알려진 방법이다.


◆  XP는 의사소통, 단순함, 피드백, 용기, 존중 등 5가지의 가치에 시초


◆  XP는 개발 속도를 높이는 가속 기술이며, 그 중심은 단순한 디자인 정신, 테스트 우선프로그래밍, 리팩토링이라 할     수 있다.


※ 사용자 스토리 (user story) 

◆ 사용자 스토리는 고객이 원하는 기능을 짧게 표현해 놓은 것

- 고객과 직접 상의하고 작성한다.

- 간략한 설명이나 키워드를 포함하는 짧은 문장

- 스토리 작성은 다음을 가정한다

1. 요구사항은 변할 수 있다.

2. 요구사항을 정확히 알지 못할 수가 있다.

-  사용자와 개발자가 지속적으로 대화







◆ 좋은 사용자 스토리

1. 독립적이다.

2. 협상 가능하다.

3. 사용자와 고객에게 가치가 있다.

4. 추정 가능하다.

5. 작다.

6. 테스트 가능해야 한다.






'소프트웨어 공학' 카테고리의 다른 글

프로젝트 조직  (0) 2017.10.22
리팩토링  (0) 2017.10.21

목차 

◆ 알고리즘이란

◆ ADL

▶ 지정문

▶ 조건문

▶ 반복문

▶ 함수문

▶ 입출력문

◆ 순환

◆ 점근식 표기법

◆ 순환 알고리즘과 점화식


-------------------------------------------------------------------------------------------------------------------------


◆ 알고리즘(algorithm)

     ▶ 특정문제를 해결하기 위해 기술한 일련의 명령문

◆ 프로그램(program)

     ▶ 알고리즘을 컴퓨터가 이해하고 실행할 수 있는 특정 프로그래밍 언어로 표현한 것

◆ 알고리즘의 요건

     ▶ 완전성과 명확성

 * 수행결과와 순서가 완전하고 명확하게 명세되어야 함

 * 순수하게 알고리즘이 지시하는대로 실행하기만 하면 의도한 결과가 얻어져야 함

     ▶ 입력과 출력

 * 입력 : 알고리즘이 처리대야 할 대상으로 제공되는 데이타

 * 출력 : 입력 데이터를 처리하여 얻은 결과

     ▶ 유한성

 * 유한한  단계 뒤에는 반드시 종료


◆ ADL (Algorithm Description Language)

    ▶ 알고리즘 기술을 위해 정의한 언어

    ▶ 사람이 이해하기 쉽고, 프로그래밍 언어로의 변환이 용이 ( 여러가지 방식으로 기술할 수 있는거 있다 )

    ▶ 의사 코드 (pseudo-code) : ADL과 약간의 자연어로 기술한 것



    ▶ ADL 알고리즘에서 프로그램으로의 변환




   ▶ ADL 데이터 : 숫자, 부울(Boolean) 값 , 문자

   ▶ ADL의 명령문 :

* 종류 : 지정문 , 조건문 , 반복문 , 함수문 , 입력문 , 출력문

* 명령문 끝에는 세미콜론(;)을 사용


(알고리즘이란 끝)

-------------------------------------------------------------------------------------------------------------------------


◆ 지정문

▶ 형식 : 변수 ← 식;


▶ 식 ( expression )

*산술식

*부울식

- 결과 : 참 ( true ) 또는 거짓 ( false )

- 표현

》 논리 연산자 (and , or , not)

》 관계 연산자 (< , ≤ , = , ≠ , ≥ , >)

* 문자식


▶ 제어 구조 : 순차적

◆ 조건문

▶ 제어 구조 : 선택적

▶ 종류 : if문과 case문


◆ if문

▶ if (cond) then S1

   else S2 


◆ case문

▶ case {

cond1 : S1

cond2: S2

· · ·

condn : Sn

else : Sn+1

}



◆ 반복문

▶ 제어 구조 : 일정한 명령문 그룹을 반복해서 수행하는 루프(loop) 형태

▶ 종류 : while문 , for문 , do-while문


◆ while문

 ▶형식

* while (cond) do {

S1

}


 ▶무한 루프

* while (true) do {

S1

}


◆  for문

▶ 형식

* for (initialization; cond; increment) do

S

▶ 동등한 while문

* initialization

    while (cond) do {

S

increment;

}

▶ 무한 루프

* for ( ; ; ) do

S

( cond의 기정값이 true이므로)


◆ do - while문

▶ 형식

* do {

S

 }while( cond );

▶ while문 과의 차이점은 최소한 한 번은 실행 된다는 것이다.


◆ 루프 명령문

▶ goto 명령문 : 루프에서 바로 빠져나갈 때 사용 (의도치 않는 오류가 발생할 확률이 높아 거의 안쓴다고 알고있음)

▶ exit문 : 자신을 둘러싸고 있는 가장 가까운 루프 밖의 명령문으로 제어를 이동시킴 (c언어의 break; 역할)


◆ 함수문

▶ 형식

* function-name(parameter_list) 

S

end funcion_name()

▶ 호출 함수로의 복귀

* return expr;

* 여기서 expr은 함수의 실행 결과

▶ 함수 호출

* function-name(argument_list)

* 인자 리스트(argument_list)는 타입과 수에 있어서 함수의 형식 매개 변수와 대응되어야 함


▶ 인자와 매개변수와의 연관

* 값 호출 (call by value) 규칙

* 각 인자의 실제 값이 호출된 함수로 전달

* 인자의 값이 주소(참조)가 되면 매개 변수에 주소 값이 전달되어 값은 데이터 지시


◆  입력 함수

▶  read (argument_list);


◆ 출력 함수

▶ print (argument_list);


◆ 인자

▶ 변수나 인용 부호가 있는 문자열


◆ 기타 명령문

▶ stop : 현재 진행 중인 함수의 실행을 정지

▶ 코멘트 : //는 그 행 끝까지 , /* 과 */은 코멘트의 시작과 끝 표시

▶ 다차원 배열 : a[n1,n2, ˙˙˙, nn]


◆ ADL 기술 규칙

▶ 함수의 입·출력 변수를 명확히 명세

▶ 변수의 의미를 알 수 있게 정의

▶ 알고리즘의 제어 흐름은 되도록 순차적

▶ 시각적 구분을 위해 들여쓰기 이용

▶ 코멘트는 짧으면서 의미는 명확히

▶ 함수를 적절히 사용


(ADL 끝)

-------------------------------------------------------------------------------------------------------------------------



◆ 알고리즘의 평가 기준

▶ 원하는 결과의 생성 여부

▶ 시스템 명세에 따른 올바른 실행 여부

▶ 프로그램의 성능

▶ 사용법과 작동법에 대한 설명 여부

▶ 유지 보수의 용이성

▶ 프로그램의 판독 용이


◆ 알고리즘의 성능 평가

▶ 성능 분석 (performance analysis)

*  프로그램을 실행하는데 필요한 시간과 공간의 추정

▶ 성능 측정 (performance measurement)

* 컴퓨터가 실제로 프로그램을 실행하는데 걸리는 시간 측정



◆ 공간 복잡도 (space complexity)

▶ 알고리즘을 실행시켜 완료하는데 필요한 총 저장 공간

▶ Sa =Sc + Se

* S: 고정 공간

- 명령어 공간, 단순 변수 , 복합 데이타 구조와 변수 , 상수

* S: 가변 공간

- 크기가 변하는 데이터 구조와 변수들이 필요로 하는 저장 공간

- 런타임 스택 (runtime stack)을 위한 저장 공간


◆ 시간 복잡도 (time complexity)

▶ 알고리즘을 실행시켜 완료하는데 걸리는 시간

▶ T=Tc + Te

* Tc  : 컴파일 시간

 Te  : 실행 시간

- 단위 명령문 하나를 실행하는데 걸리는 시간

- 실행 빈도수 (frequency count)     (c , c++ 기준 for문 1억번 실행시 1초 , Java는 for문 5천만번 실행시 1초)


◆ 점근식 표기법 (Asymptotic notation)

▶ Big-Oh (O)

▶ Big-Omega (Ω)

▶ Big-Theta (Θ)







volume.inf


패러렐즈를 이용해서 부트캠프에 설치되어있는 windows를 불러오고 싶은데 이렇게 비활성화가 되있을 때 해결하는 방법!



Windows 10을 Boot Camp에 설치 후 사용할 경우, Parallels Desktop 10 for Mac의 "Windows를 Boot Camp에서 사용하기" 아이콘이 비활성화되는 문제가 있습니다


다음은 이러한 문제의 해결 방법입니다


우선 아래의 링크를 확인하시고 다음의 단계를 진행해주세요

(이 글은 링크에 게시된 글을 간략히 해석하여 제공함을 알리는 바입니다)


http://kb.parallels.com/en/122808



1. Windows가 설치된 Boot Camp로 시동합니다


2."Windows/inf/volume.inf" 파일을 찾아 복사하고 적절한 다른 이름으로 수정하여 붙여넣습니다

 - 예를 들어 "volume.inf.bak"

 - 즉, 다음의 경로 "Windows/inf" 안에 "volume.inf" 파일 1개, "volume.inf.bak" 파일 1개가 모두 존재해야 합니다


3. 기존 "volume.inf" 를 첨부된 새로운 "volume.inf" 파일로 대체합니다

(이 단계에서 접근이 거부되어 파일 대체가 불가능한 문제가 발생할 수 있습니다 -> 이 경우, 먼저 *다음의 단계를 진행해주시기 바랍니다)


*(1) 이번에는 OS X으로 시동합니다


 (2) http://www.paragon-software.com/home/ntfs-mac/ -> 이 링크를 통해 "Paragon NTFS for Mac"  다운로드(10 Days Trial 선택)하고 설치합니다


 (3) 시스템 환경 설정 > NTFS for Mac OS X 아이콘을 클릭,  일반 탭을 선택한 후 접근 허용에 체크합니다


 (4) Finder를 실행하고 BOOTCAMP를 클릭하여 "Windows/inf/volume.inf" 의 경로를 확인합니다


 (5) 다시 위의 단계로 돌아가 2-3단계와 같은 방법으로 진행합니다


4. Parallels Desktop 10 for Mac 실행하면, 이제 "Windows를 Boot Camp에서 사용하기" 아이콘이 활성화되어 있는 것을 확인할 수 있습니다



+ Recent posts