임베디드 개발(before) 36

[25일차] 탐색 알고리즘(순차, 이분, 이진트리, 레드-블랙, 해쉬)

여러 탐색 알고리즘에 대해 배웠다. 순차 검색 이분 검색 이진트리 검색 해쉬 검색 순차 검색 가장 단순한 탐색방법. 주어진 자료 파일에서 처음부터 검색키에 해당하는 레코드를 순차적으로 비교. - 장점 : 조직화 및 정렬 필요 없다. 매우 단순하다. 작은 데이터를 검색할 때 효율적 - 단점 : 평균적으로 약 N/2번의 비교를 해야 하기 때문에 속도가 느리다. 더보기 C 표준함수에 포함되어있음 delete니 insert에서는 num을 증가, 감소시켜줘야 해서 포인터로 받는다. void Is_search(int key, int a[], int *num) { int i=0; while(a[i] != key && I < *num)i++;// 키값을 찾음 return (i< *num ? i : -1); //찾았으면..

[24일차] 정렬 알고리즘(선택, 삽입, 거품, 쉘, 퀵, 기수, 힙)

여러 정렬 알고리즘에 대해 배웠다. -----------구현 단순 but 느림---------------- 선택 정렬 삽입 정렬 버블 정렬 쉘 정렬 -----------구현 복잡 but 빠름---------------- 퀵 정렬 기수 정렬 힙 정렬 방법론 - 기본 동작 : 판단(decision)과 교환(exchange). 데이터의 표현 - 파일(file) : 정렬 대상. 정렬되지 않은 레코드들의 무리.(?) - 레코드 : 정보 단위. 교환의 대상. 느낌상 구조체라 생각하면 이해됨. - 필드(field) : 각 레코드의 정보를 담고 있는 멤버. 느낌상 구조체 멤버(?) - 키(key) : 정렬의 기준이 되는 필드. 비교(판단)의 기준이 되는 데이터. (데이터 필드) 선택 정렬 더보기 - 구현 코드 # in..

[23일차] 스택(Stack) & 큐(Queue) & 트리(Tree) & 재귀함수(Recursive func)

제목에서 느낄 수 있듯이 진도가 슉슉 나갔다. [연결 리스트] 단일 연결 리스트 구현, 이중 연결리스트 구현, 더미 노드를 활용한 연결 리스트 구현, [스택] 배열을 활용한 스택 구현, 연결 리스트를 활용한 스택 구현, [큐] 원형 큐 구현, 배열을 통한 큐 구현, 연결 리스트를 활용한 큐 구현, [트리] 트리 구현 [재귀 함수와 알고리즘] 재귀 함수 - 팩토리얼, 피보나치, 하노이의 탑 재귀 및 비 재귀로 구현하기. 대략 나간 내용은 다음과 같다. 각각의 구현마다 C를 활용한 코드 예제가 있었는데, 수업시간에는 모든 예제를 하지 않고 개념을 간단히 한 후, 몇 개의 예제만 한다. 그러다 보니 개념적으로는 머리에 그림이 그려져도 이를 C로 구현하기 위해 코드를 하나씩 이해해가느라 수업 진도에 따라가기가 ..

[22일차] 연결리스트(Linked List) & 스택(Stack)

오늘은 연결리스트와 스택에 대해 강의가 진행되었다. 진도가 워낙 빠르게 나가다 보니, 따라가기가 어려웠다. 다행이 이전에 책으로 읽어둔 부분이라 개념적인 이해는 어렵지 않았지만, C로 직접 구현하는 부분은 남아서 자습해가며 거의 따로 공부했다. 스택부분도 다시 봐야하는데 오늘 업로드하기에는 시간이 부족하다. 따라서 오늘 이해한 부분까지인 단일 링크드 리스트까지만 업로드를 하고, 스택에 관한 공부는 따로 해야겠다.. 진도가 워낙 빠르게 나가다 보니, 진도에 맞춰 공부내용을 모두 흡수해가며 따라가기에는 시간적인 한계가 있다.. 게다가 그 내용을 블로그에 정리하려다 보니 날 것 그대로 정리되는 것은 둘째치고, 정리하느라 공부를 하지 못하는 것 같아 시간이 아깝다. 그렇다고 기록를 포기할 수는 없지만... 결국..

[21일차] 임베디드 자료구조 및 알고리즘 (유클리드, 소수판별 알고리즘)

이번 주 부터 자료구조 및 알고리즘에 대해 배운다. 오늘 배운 내용은 크게 3가지 이다. 1) 알고리즘 유형 설명 2) 유클리드 알고리즘 보드에 올려보기 3) 소수를 구하는 알고리즘 보드에 올려보기 1. 알고리즘 : 명령을 효율적으로 처리하는 순서 2. 자료구조 : Data를 효율적으로 저장하는 방식 ○ 알고리즘 알고리즘의 성능 평가 1) 수행 시간 (속도) 2) 필요한 기억장치의 양 (메모리) - 대개는 수행 시간이 더 중요하게 평가된다. 알고리즘의 유형 : 입력되는 자료(Data)의 수 N에 대하여 수행 시간을 함수 관계로 표현 수행 시간 설명 1 입력자료의 수에 관계없이 일정한 실행 시간을 갖는 알고리즘 logN N이 증가함에 따라 실행시간이 조금씩 늘어남 (ex. 성능이 좋은 검색 알고리즘은 대부..

[19일차] 임베디드 C 프로그래밍 실습(시계 만들기)

오늘은 C언어로 배웠던 기능들을 활용하여 시계를 만드는 실습활동을 했다. 사실 인터넷에 워낙 많이 나와있는 예제가 많아서, 평가항목에 맞게 배운 기능들을 활용하는데 중점으로 코드를 작성했다. 가장 의미 있게 새로 알게 된 것은, 디버그 모드와 릴리즈 모드를 설정하여 디버그 모드에서 print를 통해 오류를 검출하는 코드를 작성한 것이다. - 모드를 1과 2로 나누어, 입력하는 모드에 따라 스톱워치 또는 현재시각을 출력하는 프로그램을 만들었다. - 각각의 모드는 함수로 만들었다. 배열과 포인터를 사용하기 위해 필요이상으로 사용했다. #include #include //디버그 모드 설정 #ifdef DEBUG #define DPRINTF(fmt,...) printf( "%s:%d: " fmt, __FUNCT..

[18일차] 임베디드 C 프로그래밍 3

C언어의 고급편인 배열과 포인터, 구조체 부분에 대해 다시 배우는 시간이었다. 이전 학습자료를 보며 복습을 동시에 진행했다. 처음부터 다시 공부하기 보다는 여러 알고리즘문제를 풀고, 코드 작성을 연습하며 모르거나 애매하게 헷갈리는 부분이 있을 때 책을 보며 복습하는 식으로 공부를 해야겠다.오늘 정리하는 내용은 이전의 학습내용과 중복되는 부분이 많아, 다음주에 배울 자료구조에 대해 인터넷 강의를 수강하고 정리한 내용을 게시해야겠다. 1. 전화번호부 V1 조건: - 프로그램을 실행하면 화면에 프롬프트($)를 출력하고 사용자의 명령을 기다린다. 1) 새로운 사람을 추가한다. add jhon 01012345678 2) 이름으로 전화번호를 검색한다. find david 3) 전화번호부에 저장된 모든 사람을 출력한..

[17일차] 임베디드 C 프로그래밍 2

T32marm 시뮬레이터 기본 사용법 연산자, LED 점등 실습 C언어 고급편 (배열, 포인터) 1. 연산자의 우선순위 2. 비트연산자 : |, &, ^, ~ | : OR연산. 둘 다 0일 때만 0 & : AND연산. 둘다 1일 때만 1 ~ : NOT연산. 단항 연산자. 1개의 데이터의 각 비트를 반전 0->1 // 1->0 ^ : XOR연산. 같으면 0, 다르면 1 > : 쉬프트 연산. 왼쪽, 오른쪽으로 비트를 shift 시킨다. 2의 n승 계산을 할 수 있다. 밀려난 빈자리는 0으로 채워지나, signed 타입에서는 부호 비트가 유지된다. 그 외 : 간접 참조 연산자(*), 레퍼런스 연산자(&), 배열 참조 연산자([]) 등이 있다. - 구조체 직접 참조 연산자 : "." 구조체의 멤버를 직접 참조...

[16일차] 임베디드 C 프로그래밍 1

이번 주부터 임베디드 C 프로그래밍을 배우기 시작하면서 임베디드 시스템 개요, C언어 기본, C언어 심화 이렇게 진도를 나가게 된다. 오늘은 임베디드 시스템 개요부터 C언어 기본까지 배우게 되었다. 앞에서 많이 다루었던 내용이고 특히 C언어교육은 중복되는 내용이 많았기에 그렇게 어렵지 않았고, 때문에 진도 또한 빠르게 나갔다. 1. MCU : CPU(Processor)와 각종 Peripheral Controller(주변장치 컨트롤러)들의 결합 2. CPU core : ALU(산술/논리 연산장치) + CU + Register 만으로 구성된 CPU의 핵심 - CU : 기계어를 분석하고 실행하기 위해 제어 신호를 순차적으로 발생시킴. - Register : 연산이나 기타 목적으로 사용될 저장공간. 코어에 집적..