'잡다한것들전부/C, C++, C#'에 해당되는 글 15건

  1. 2015.04.27 구글 c# 코딩 규칙
  2. 2014.08.29 컴퓨터 16진법 표시
  3. 2014.08.04 c++ 책을 샀습니다.
  4. 2014.07.24 c# 표준 코딩 규칙
  5. 2014.01.15 c언어 공부할때 참고 사이트
  6. 2014.01.13 [펌]C언어 자료구조 - 연결리스트(Linked List)
  7. 2014.01.13 [펌] 단순연결리스트(Single Linked List) 예제
  8. 2014.01.13 c++에서 bool 형 값 true false 실수할 수 있는 부분
  9. 2014.01.13 동기화 비동기화 동기식 비동기식 이란?
  10. 2014.01.10 추상 클래스 (C++)

구글 c# 코딩 규칙

|

https://code.google.com/p/google-api-dotnet-client/wiki/CodingStandards

'잡다한것들전부 > C, C++, C#' 카테고리의 다른 글

구글 c# 코딩 규칙  (0) 2015.04.27
컴퓨터 16진법 표시  (0) 2014.08.29
c++ 책을 샀습니다.  (0) 2014.08.04
c# 표준 코딩 규칙  (0) 2014.07.24
c언어 공부할때 참고 사이트  (0) 2014.01.15
[펌]C언어 자료구조 - 연결리스트(Linked List)  (0) 2014.01.13
Trackback 0 And Comment 0

컴퓨터 16진법 표시

|

1000 0000 0000 0000 (0x8000) 

'잡다한것들전부 > C, C++, C#' 카테고리의 다른 글

구글 c# 코딩 규칙  (0) 2015.04.27
컴퓨터 16진법 표시  (0) 2014.08.29
c++ 책을 샀습니다.  (0) 2014.08.04
c# 표준 코딩 규칙  (0) 2014.07.24
c언어 공부할때 참고 사이트  (0) 2014.01.15
[펌]C언어 자료구조 - 연결리스트(Linked List)  (0) 2014.01.13
Trackback 0 And Comment 0

c++ 책을 샀습니다.

|

기존에 c++ 관련 책은 윤성우 저자의 열혈강의 c++ 밖에 가지고 있지 않았는데, 이번에 

성안당의 c++ 기초 플러스를 구입했습니다. 엄청난 양의 책 두께를 자랑한다고 하네요.

어쨌든 c++ 공부를 열심히 해야겠다는 생각을 했으니.. 열심히 하겠습니다.


'잡다한것들전부 > C, C++, C#' 카테고리의 다른 글

구글 c# 코딩 규칙  (0) 2015.04.27
컴퓨터 16진법 표시  (0) 2014.08.29
c++ 책을 샀습니다.  (0) 2014.08.04
c# 표준 코딩 규칙  (0) 2014.07.24
c언어 공부할때 참고 사이트  (0) 2014.01.15
[펌]C언어 자료구조 - 연결리스트(Linked List)  (0) 2014.01.13
Trackback 0 And Comment 0

c# 표준 코딩 규칙

|

http://www.scribd.com/doc/163870946/C-%EC%BD%94%EB%94%A9-%ED%91%9C%EC%A4%80%EA%B3%BC-%EC%A2%8B%EC%9D%80-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%8A%B5%EA%B4%80

Trackback 0 And Comment 0

c언어 공부할때 참고 사이트

|

http://www.soen.kr

Trackback 0 And Comment 0

[펌]C언어 자료구조 - 연결리스트(Linked List)

|

오늘은 C언어 연결리스트에 대해서 포스팅을 해보려고 한다.

내가 자료구조라는 것을 처음 접한 대학교 2학년 때 난 이 연결리스트라는 놈을 도저히 이해할 수가 없었다.
왜 이놈들은 함수가 끝나도 계속 메모리에 남아있는 걸까? 라는게 가장 큰 의문점이었고
두번째는 그냥 적당한 라이브러리 쓰면 되는데 왜 굳이 이런걸 만들어야 하는걸까?
라는게 두번째 의문점이었다.

첫번째 의문점은 후에 "다시 체계적으로 배우는 C언어 포인터" 라는 책을 정독한 후에 풀렸고
두번째 의문점은.. 아직도 미스테리다.
다만 우리가 전산학과 학생으로서 이런 것들을 구현해보고 원리를 파악할 수 있다는 이유로 대충 이해하고 넘어가자.



사족이 길었는데..
연결리스트란 무엇인가?
리스트는 자료를 순차적으로 정리해놓은 것을 말한다.
이것들이 메모리상에서 연결되어 있다는 뜻이다.


배열 리스트 같은 경우 리스트의 크기를 미리 크게 정해놓고 그 범위 안에서만 자료의 관리가 가능하기 때문에 
메모리 낭비가 심하다고 볼수 있는데 
연결리스트의 경우는 자료가 입력 될 때마다 동적할당으로 새로운 메모리 주소에 값을 할당하고 
이전 자료와 연결해주기 때문에 메모리 관리가 용이하다.



자료 하나를 담고있는 녀석을 보통 "노드(node)" 라고 부른다.
연결 리스트에 아무것도 없는 상태에서 100이라는 값을 가진 노드를 추가한다고 생각해보자.

노드는 자기 자신의 값과 다음 노드를 가리키는 노드 포인터로 구성된다.
여기서 첫번째 노드는 100이라는 값을 갖고 있으며 다음 노드는 없으므로 NULL 포인터를 가리킨다.
위에 Head라는 노드포인터도 있는데 이것은 연결리스트라는 자료구조에서 일종의 시작점을 알려준다.
배열 리스트 처럼 인덱스를 이용한 간편한 접근이 불가능하므로 첫 노드를 Head 포인터로 가르켜주고
그 Head 포인터를 이용해 다음 노드, 다음 노드 이런 식으로 다른 노드에 접근할 수 있다.






101이라는 값을 갖고 있는 두번째 노드를 삽입하면 이렇게 된다. (과정은 잠시 후에 설명)
기존에 NULL 포인터를 가리키고 있던 첫번째 노드(100이라는 값을 가진 노드)는 이제 다음 노드로 새로 추가된 노드를 가리키고 두번째이자 마지막 노드가 된 101이라는 값을 가진 노드는 다음 노드로 NULL 포인터를 가리킨다.
연결 리스트는 이와 같은 구조로 자료들을 쭈욱 연결해서 저장한다.






그럼 이제 100 노드와 101 노드 사이에 200이라는 값을 가진 노드를 삽입해보자.
우선 동적할당으로 노드 하나를 만들어주고 200이라는 값을 넣어준다.
이 노드의 다음 노드는 원래 100 노드가 다음 노드로 가리키던 노드를 가리키도록 해준 다음
100노드의 다음 노드를 200 노드로 설정하면 깔끔하게 삽입된다.



나도 공대생 인지라.. 이런 복잡한 그림보다 코드를 보는게 이해가 빠를것 같아서..
설명은 여기까지.





아래는 struct 와 함수 선언부분이다. (헤더파일로 쓸 수 있음)


node 는 정수형인 value 와 node*(노드포인터) 형인 next 라는 변수를 갖고 있다.
이 코드에서 우리는 node 보다는 node pointer를 많이 쓸것이므로 typedef를 이용해 nptr을 지정해줬다.
그다음은 list라는 struct를 정해서 head를 가리키는 노드포인터와 리스트에에 몇개의 노드가 있는지 알려주는 count라는 변수를 만들었다.
그 아래쪽 함수는 생각하는 그대로다. (순서대로 초기화, 삽입, 삭제, 검색, 수정, 출력)




연결 리스트 초기화 함수이다.


메인 함수에서 list를 만들고 그 주소를 init()에 넘겨주어 count와 head를 초기화시킨다.




노드 삽입 함수. 리스트형 포인터 변수와 값, 위치를 인수로 받는다.


처음 if 문은 position 값이 적절한지 체크하는 부분이다. 부적절하면 메시지를 출력하고 종료한다.
다음은 new_nptr 이라는 노드포인터에 node 사이즈만큼의 메모리를 동적할당하고 value변수를 설정해준다.
position이 1인 경우 head포인터가 바뀌어야 하므로 첫부분에서 따로 처리해줬고
그게 아닌 경우는 head 포인터의 값을 tmp라는 변수에 복사해서 for 문을 이용해 의도한 위치에 도달할 때까지 계속 next로 찾아간다.
적정 위치에 도달하면 삽입한 후 리스트의 카운터를 1 증가시킨다.




삭제 함수. 리스트형 포인터변수와 위치를 인수로 받는다.



첫부분은 삽입과 마찬가지로 position의 처리 가능 범위를 체크한다. (단, 삽입의 경우 맨 뒤에도 삽입 가능하기 때문에 기존에 존재하는 노드들의 position만 받아야 하는 삭제 함수와는 범위가 1 차이 난다.)
삽입과 마찬가지로 head 포인터를 tmp로 받아준 다음 position이 1이면 head 노드를 바꿔주고 그게 아니라면 position 변수를 이용해 그 위치로 찾아가서 해당 노드의 연결을 해지시킨다.
삭제될 노드의 앞 노드를 tmp로 받고 그 다음 노드를 tmp2로 받아서 tmp2의 다음노드가 tmp의 다음 노드가 되도록 짰다.
삭제에서 주의할 점은 삭제된 노드가 메모리에서 지워질 수 있도록 free() 함수를 이용해줘야 한다는 것이다.
(이때문에 굳이 tmp2라는 노드 포인터 변수를 선언했다.)




검색 함수. 리스트형 포인터 변수와 값을 인수로 받는다.


값을 입력받아서 리스트를 순회하여 같은 값이 있는지 알아본다.
같은 값이 여러개 있다면 처음 나온 position을 리턴하고 없으면 0을 리턴한다.
테스트를 위해 적절한 printf() 함수를 사용했다.




수정 함수. 리스트형 포인터 변수와 값, 위치를 인수로 받는다.



삽입, 삭제와 비슷한데 다른 점은 head 포인터를 변경할 필요가 없다는 것이다.
해당 위치의 노드만 찾아서 값을 바꿔주면 된다.




출력 함수. 리스트형 포인터 변수를 인수로 받는다.



이건 테스트를 위해 만들어본 함수다.
리스트에 들어있는 값들과 count 값을 출력해준다.




메인 함수.



리스트형 포인터변수에 리스트 크기의 메모리를 동적할당 해주고 init(() 함수를 이용해 초기화시켜준다.
저 뒤에 여러가지 테스트 한다고 끄적거려 논거 있는데 너무 길어서 여기까지만 캡쳐.
그래서 뒤에 } 로 닫아줘야 함.



출처 : http://milvus.tistory.com/17




소스코드


/*

 * linkedlist.c

 *

 *  Created on: 2011. 4. 21.

 *      Author: Chwang

 */


#include <stdio.h>

#include <stdlib.h>


typedef struct _node{

int value;

struct _node* next;

}node;


typedef node* nptr;


typedef struct _list{

int count;

nptr head;

}list;


void init(list* lptr);

void insert(list* lptr,int value,int position);

void delete(list* lptr,int position);

int search(list* lptr,int value);

void modify(list* lptr,int value,int position);

void print_list(list* lptr);



void init(list* lptr){

//initialize the list

lptr->count=0;

lptr->head=NULL;

}


void insert(list* lptr,int value,int position){

//insert value to proper position

if(position<1 || position>(lptr->count)+1){

printf("Position Out of Bound\n");

return;

}

nptr new_nptr=(node*)malloc(sizeof(node));

new_nptr->value=value;


if(position==1){

new_nptr->next=lptr->head;

lptr->head=new_nptr;

}

else{

nptr tmp=lptr->head;

int i;

for(i=1;i<position-1;i++){

tmp=tmp->next;

}

new_nptr->next=tmp->next;

tmp->next=new_nptr;

}

lptr->count++;

}


void delete(list* lptr,int position){

//delete an item on the position

if(position<1 || position>(lptr->count)){

printf("Position Out of Bound\n");

return;

}

nptr tmp=lptr->head;


if(position==1){

lptr->head=tmp->next;

free(tmp);

}

else{

int i;

for(i=1;i<position-1;i++){

tmp=tmp->next;

}

nptr tmp2=tmp->next;

tmp->next=tmp2->next;

free(tmp2);

}

lptr->count--;

}


int search(list* lptr,int value){

//traverse the list and

//find the first position of the value (first from head)

//if not exist, return 0

nptr tmp=lptr->head;

int i=1;

while(tmp!=NULL){

if(value==tmp->value) break;

i++;

tmp=tmp->next;

}

if(i>lptr->count){

printf("The value %d is NOT exists\n",value);

return 0;

}

else{

printf("The value %d is at position %d in the list\n",value,i);

return i;

}

}


void modify(list* lptr,int value,int position){

if(position<1 || position>(lptr->count)){

printf("Position Out of Bound\n");

return;

}

nptr tmp=lptr->head;


int i;

for(i=1;i<position;i++){

tmp=tmp->next;

}

tmp->value=value;

}


void print_list(list* lptr){

nptr tmp=lptr->head;

printf("List value: ");

while(tmp!=NULL){

printf("%d ",tmp->value);

tmp=tmp->next;

}

printf("\n");

printf("Total: %d value(s)\n",lptr->count);

}


int main(){

list* mylist=(list*)malloc(sizeof(list));

init(mylist);


insert(mylist,3,1);

insert(mylist,4,2);

insert(mylist,5,3);

insert(mylist,6,4);

insert(mylist,7,5);

insert(mylist,8,6);

insert(mylist,9,7);

insert(mylist,3,3);


print_list(mylist);


delete(mylist,3);

delete(mylist,5);


print_list(mylist);


search(mylist,6);

search(mylist,9);

search(mylist,0);


modify(mylist,100,1);

modify(mylist,101,2);


print_list(mylist);


return 0;

}



Trackback 0 And Comment 0

[펌] 단순연결리스트(Single Linked List) 예제

|

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

#include <time.h>

 

typedef struct tagNode

{

       int data;

       struct tagNode *next;

} NODE;

 

NODE *head, *tail, *working;

 

// 리스트초기화

void InitList();

// 데이타하나추가

void Insert(int n);

// 주어진데이타를삭제

void Delete(int n);

// 데이타를모두삭제

void RemoveAll();

// 현재리스트의값들을모두더해서보여준다.

void AddAll();

// 주어진데이타와같은노드개수를카운트

int Count(int n);

// 현재리스트의모든내용을보여준다.

void DisplayList();

 

int main()

{

       // 리스트초기화

       InitList();

 

       Insert(10);

       Insert(20);

       Insert(30);

       Insert(40);

       Insert(50);

       Insert(10);

      

       // Display 함수를이용하여연결리스트의데이터들을출력한다.

       DisplayList();

 

       // 전체합출력

       AddAll();

 

       // 데이타값이10 인노드의개수를카운트

       Count(10);

 

       // 노드삭제

       Delete(10);

       DisplayList();

       Delete(50);

       DisplayList();

       Delete(20);

       DisplayList();

 

       RemoveAll();

 

       return 0;

}

 

void InitList()

{

       // 리스트초기화

       head = NULL;

       tail = NULL;

       working = NULL;

}

 

void Insert(int n)

{

       // 새로노드를하나만들어서값을대입

       working = (NODE *)malloc(sizeof(NODE));

       printf("Adding %d\n", n);

       working->data = n;

 

       // 이것이꼬리임

       working->next = NULL;

 

       // 만약머리가비었으면이것이머리임

       if ( head == NULL )

       {

             head = working;

             tail = working;

             return;

       }

 

       // 머리가아니라면마지막에노드를삽입하고

       tail->next = working;

       // 이것이꼬리임

       tail = working;

}

 

void Delete(int n)

{

       // 아무런데이타도없으면

       if ( head == NULL )

             // 지울일도없다.

             return;

 

       // 일단머리를가져온다.

       working = head;

       NODE* node;

 

       // 같은값을찾아서삭제

       while ( working )

       {

             if ( working->data == n )

             {

                    printf("Deleting %d...\n", working->data);

                    if ( working == head )

                    {

                           head = working->next;

                           delete working;

                    }

                    else

                    {

                           node->next = working->next;

                           delete working;

                    }

                    Delete(n);   // 다른값이있으면또지움

                    break;

             }

             node = working;

             working = working->next;

       }

}

 

void RemoveAll()

{

       // 머리를가져와서

       working = head;

 

       // 끝까지지움

       while ( working )

       {

             NODE *node = working;

             // 다음노드준비

             working = working->next;

             // 노드삭제

             printf("Deleting %d\n", node->data);

             free(node);

             node = NULL;

       }

 

       InitList();

       printf("All elements deleted.\n");

}

 

void AddAll()

{

       int sum = 0;

 

       working = head;

 

       while ( working )

       {

             sum += working->data;

             working = working->next;

       }

 

       printf("Sum of all : %d\n", sum);

}

 

int Count(int n)

{

       int count = 0;

 

       working = head;

 

       while ( working )

       {

             if ( working->data == n )

                    ++count;

             working = working->next;

       }

 

       printf("Count of %d : %d\n", n, count);

 

       return count;

}

 

void DisplayList()

{

       printf("Display all element : ");

 

       printf("head = ");

       working = head;

 

       while ( working )

       {

             printf("%d -> ", working->data);

             working = working->next;

       }

       printf("= tail\n");

}출처 : http://blog.naver.com/PostView.nhn?blogId=xtelite&logNo=50086163288&redirect=Dlog&widgetTypeCall=true

[출처] 

ㅊㅊㅊㅊㅊ출처:

(Single Linked List) 예제|작성자 xtElite


Trackback 0 And Comment 0

c++에서 bool 형 값 true false 실수할 수 있는 부분

|
class Member{
public:
bool istrue;
};
int main()
{
Member * m = new Member;

printf("--------------m->istrue 형식일때-------------\n");
if(m->istrue)
{
printf("참\n");
}
else
{
printf("거짓\n");
}
printf("--------------m->istrue == true 형식일때-------------\n");
if(m->istrue == true)
{
printf("참\n");
}
else
{
printf("거짓\n");
}
printf("true = %d\n",true);
printf("false = %d\n",false);
printf("m->istrue = %d\n",m->istrue);
return 0;
}

출력결과
거짓
true = 1
false = 0
m->istrue = 205

bool 형 값은 전역변수로 선언시 0으로 초기화 되며, 
변수로 선언할때에 만약 사용하면 오류창이 뜨지만.
클래스에 있는 멤버변수로 선언을 할 시 초기화를 안해주면 쓰레기값이 들어가게된다.
첫번째 if문처럼 if(m->istrue)로 사용할시 초기화를 안해줘도 성립하지만 ( 0이아닌 모든 수는 참이다.)
두번째 if문처럼 가독성을 위해 if(m->istrue == true)를 사용하면 성립하지 않는다.(m->istrue에는 0이 아닌 쓰레기값이 들어가게된다.)
if(205 == 1) 이 아니므로 성립하지 않으므로, 루틴을 무시하기 때문에 주의해야된다.


Trackback 0 And Comment 0

동기화 비동기화 동기식 비동기식 이란?

|

동기화란 말이 다방면에서 사용하고 있어서 개념을 잡기가 좀 어렵습니다.

비동기식이니 동기식이라는 말도 있고요.

 

동기화를 이해할려면 클라이언트와 서버라는 개념을 먼저 이해해야 합니다.

클라이언트에서 작업을 요청하면 서버에서 응답하는 형식이죠.

그런데 이 응답하는 방식에 따라 동기식이니 비동기식이라고 합니다.

 

여기서 동기식은 클라이언트의 요청이 있어야만 서버가 응답을 보내고

서버의 응답을  기다리다가 응답이 와야만 그에 따라 클라이언트가 반응하는 방식으로 서버와 클라이언트의 작업을 하나로 일치시키는 방식입니다.

요청과 응답,응답과 작업, 다시 요청과 반응 이라는 식이죠.

 

폴더의 자료를 최신으로 유지하는 것도 클라이언트에서 자료갱신을 요청하면 서버에서 응답해서 최신자료를 보내주고 클라이언트 받아서 갱신하는 것입니다.(하나의 작업으로 일치시켜서 작동하는 동기식입니다.)

 

일반화하면 어떤 작업을 하기 위해 두 개의 별개의 장치간에 시간적으로 동시에 하나의 연결을 만드는 것입니다.

그렇게하면 두 개의 장치 안의 자료가 시간적으로 일치하게 됩니다.

이런 방식은 시간적으로 데이타가 서로 일치해야 하는 경우에 꼭 필요한 방식입니다.

예를 들어 은행계좌 입출금시 동기화식으로 데이타가 처리됩니다.

만약 비동기식으로 처리된다면 CD기에서 출금을 했는데 은행의 중앙컴퓨터에서는 처리가 안 되어 있게 되는 자료의 불일치성이 나타나게 됩니다.

 



출처: http://www.open21.kr/bbs/board.php?bo_table=terminology&wr_id=51&page=1


이 개념은 네트워크나 컴퓨터 구조에서 아주아주아주아주~ 많이 쓰이는 개념이거든요..

동기화는 시간에 딱딱 맞춰서 무슨 일을 진행시키는 것을 말합니다.

대한민국 군인들은 모두 아침 6시에 일어나서 8시에 일을 하고 11시쯤에 밥을 먹고 5시 30분부터 휴식을 취한 후 밤 10시에 취침에 들죠. 이런게 바로 동기화의 예입니다. 기준(보통은 시간입니다.)에 맞춰서 동작이 딱딱 이루어지죠.

네트워크에서 송신측과 수신측이 동기화되어있다고 말하는데, 한마디로 어떤 시간에 누가 데이터를 보내는지 모두 알고 있다는 뜻입니다. 맨처음 1분은 A가 데이터를 보내고 그다음 1분은 B가 데이터를 보내고 그다음 1분은 C가 데이터를 보낸다는 걸 송신측과 수신측 모두 알고 있기때문에 누가 데이터를 보내고 있는지에 대한 혼란이 없죠. 

전산쪽에서는 TDM 이라는 방식이 있거든요. 각각의 source(데이터를 보내는 쪽)는 자신에게 주어신 시간동안만 데이터를 전송할 수 있도록 디자인되어있는데 대표적인 동기화 방식이라고 할 수 있습니당.



그리고 비동기식은 어떤 기준에 맞춰서 데이터가 전송되는게 아니라, 필요할때마다 그때그때 데이터를 전송하는 거죠... 그때그때 데이터를 보내야 하기때문에 가장 큰 문제는 지금 전송되는 데이터가 누구에게 도착하는 것이고 또 누가 보내고 있는지, 그 길이는 어느정도인지(어디까지만 받아야 하는지) 를 결정해야 해요. 따라서 보내기 전에 "내가 이제부터 A에게 보내려고 한다"라고 알려주고, 다 보내고 나면 "이제 다 보냈다" 라는 것 등을 알려줘야 해요. 

게다가 동시에 여러명이 보내려고 할 수도 있겠죠. 동기식에서는 기준에 맞춰서 보내는 순서가 있으니까 질서가 잡혀있지만 비동기식에서는 이런 순서가 없으니까 한마디로 개판이라고 할 수 있져..^^;;(서로 보내겠다고 난리치는 경우도 있을수 있을거에요..) 따라서 비동기화가 질서를 잡는데 더 어렵죠..


그렇다고 동기화가 더 좋은건 아니에요. 동기화는 매 단위시간마다 데이터를 전송할 수 있는 송신자가 정해져 있는데, 만일 B는 더이상 보낼 데이터가 없어도 자신에게 주어진 시간은 여전히 B만 데이터를 보낼 수 있어서 많은 데이터를 보내야 하는 다른 송신자들은 데이터 전송에 더 오랜 시간이 걸릴 수 밖에 없어요.(효율성이 많이 떨어진다는 얘기이기도 하죠..)

양쪽 모두 일장일단이 있으니까 주어진 환경에 맞게 어느 방식을 써야할지 결정해야 하겠죠..
 
 
 
 
*동기식 synchronous (transmission) 

동기식 전송은 한 문자 단위가 아니라 미리 정해진 수 만큼의 문자열을 한 묶음으로 만들어서 일시에 전송하는 방법이다. 이 방법에서는 데이터와는 별도로 송신측과 수신측이 하나의 기준 클록으로 동기신호를 맞추어 동작한다. 수신측에서는 클록에 의해 비트를 구별하게 되므로, 동기식 전송을 위해서는 데이터와 클록을 위한 2회선이 필요하다. 송신측에서 2진 데이터들을 정상적인 속도로 내 보내면, 수신측에서는 클록의 한 사이클 간격으로 데이터를 인식하는 것이다. 

동기식 전송은 비동기식에 비해 전송효율이 높다는 것이 장점이지만 수신측에서 비트 계산을 해야하며, 문자를 조립하는 별도의 기억장치가 필요하므로 가격이 다소 높은 것이 단점이다

*비동기식 asynchronous (transmission) 

에디터 내에 동기신호를 포함시켜 데이터를 전송한다. 송신측의 송신 클록에 관계없이 수신신호 클록으로 타임 슬롯의 간격을 식별하여 한번에 한 문자씩 송수신한다. 

이때 문자는 7~8 비트로 구성되며, 문자의 앞에 시작비트 (start bit)를, 끝에는 정지비트 (stop bit)를 첨가해서 보내는 방법이다. 

비동기식 전송은 시작비트와 정지비트 사이의 간격이 가변적이므로 불규칙적인 전송에 적합하다. 또한 필요한 접속장치와 기기들이 간단하므로 동기식전송 장비보다 값이 싸다는 장점이 있다.
 
 
 
 
 
동기식은
이력 A 가 들어가면 출력 B가 바로 나오게끔 만들어져 있게 설계 되고요

비동기식은 그렇지 않죠

비동기식은 딜레이같은 문제를 해결해야 되기땜에 더 복잡하고
기술적으로 어렵습니다.


Trackback 0 And Comment 0

추상 클래스 (C++)

|

 c# 자바 등을 하다보니까 c++ 이랑 헷갈리는개념.. abstract 란 키워드가 없음


추상 클래스 (C++)

Visual Studio 2013
1명 중 1명이 도움이 되는 것으로 평가 이 항목 평가

추상 클래스는 보다 구체적인 클래스가 파생될 수 있는 일반 개념의 식으로 작동합니다. 추상 클래스 형식의 개체를 만들 수 없습니다. 그러나 추상 클래스 형식에 대해 포인터와 참조를 사용할 수 있습니다.

최소한 하나의 순수 가상 함수가 포함된 클래스는 추상 클래스로 간주됩니다. 추상 클래스에서 파생된 클래스는 순수 가상 함수를 구현해야 합니다. 그렇지 않은 경우 이 클래스도 역시 추상 클래스가 됩니다.

가상 함수는 pure-specifier 구문을 사용하여 "pure"로 선언됩니다(클래스 프로토콜 구현에서 설명). 가상 함수에 소개된 예를 살펴보십시오. Account 클래스의 목적은 유용하게 사용되는 일반적 기능을 가진 Account 형식의 개체를 제공 하는 것입니다. 따라서 Account는 좋은 추상 클래스 후보입니다.

// deriv_AbstractClasses.cpp
// compile with: /LD
class Account {
public:
   Account( double d );   // Constructor.
   virtual double GetBalance();   // Obtain balance.
   virtual void PrintBalance() = 0;   // Pure virtual function.
private:
    double _balance;
};

이 선언과 이전 선언은 순수 지정자 = 0 선언없이 PrintBalance가 선언된 점이 다릅니다.


'잡다한것들전부 > C, C++, C#' 카테고리의 다른 글

c++에서 bool 형 값 true false 실수할 수 있는 부분  (0) 2014.01.13
동기화 비동기화 동기식 비동기식 이란?  (0) 2014.01.13
추상 클래스 (C++)  (0) 2014.01.10
Duff's Device  (0) 2014.01.10
c++ 11 이란??  (0) 2014.01.09
strncpy 로 메모리 복사  (0) 2014.01.07
Trackback 0 And Comment 0
prev | 1 | 2 | next