2019년 6월 30일 일요일

[컴퓨터공학]프로그래밍#13(포인터와 참조자)

*포인터
주소를 저장하는 변수
*p : 해당 주소에 있는 값
p : 포인터에 저장되어 있는 주소 값

다음과 같은 데이터 저장 상황에서의 변수 값

i = 10
&i = 0x100
p : 0x100
&p : 0x200
*p : 10
p++ : 104
sizeof(p) : 4
sizeof(*p) : 1

*포인터 관련 연산자
간접 참조 연산자 (*)
포인터에 저장된 주소에 저장된 값을 참조
주소 연산자 (&)
해당 변수의 주소 (Address)
포인터 증감 연산자 (++, --, +, -)
선언된 타입의 크기 만큼 주소가 증가함


*const 포인터
const 객체에 대한 포인터


객체를 가리키는 const 포인터


*void 포인터
데이터형을 명시하기 어려운 경우 사용함
모든 데이터 타입을 다 담을 수 있음
C++ 에서는 묵시적인 포인터 변환 허용되지 않음

*참조자
변수에 별명을 붙이는 것

int &ref = var;
참조자 ref는 변수 var의 별명(alias)임

참조자는 반드시 선언과 동시에 초기화
int &ref; // 오류!
포인터는 변경될 수 있지만 참조자는 변경이 불가능하다.
int &ref = var1; ref = var2; // 오류! 
참조자를 상수로 초기화하면 컴파일 오류
int &ref = 10; // 오류!

*포인터 vs 참조자
가능하면 참조자를 사용하고, 반드시 필요한 경우만 포인터 사용
포인터는 강력한 도구이나, 다양한 문제를 야기할 수 있음
만약 참조하는 대상이 변경되는 경우에는 포인터를 사용
참조자는 대상을 변경할 수 없음
NULL이 될 가능성이 있는 경우에도 포인터를 사용

[컴퓨터공학]프로그래밍#12(문자열 배열)

*문자열 배열
char 형 배열에 문자열을 저장한 것
문자는 ASCII 코드 값이 저장되고, 문자열의 끝은 NULL (0)
5글자를 저장하기 위해 6개 원소를 갖는 char 형 배열 필요함

*문자열 함수
C언어에서 제공하는 문자열 관련 함수
입/출력 함수는 #include <stdio.h>
기타 문자열 함수는 #include <string.h>

*문자열 입력 받을 때 팁
scanf("%s",str); 사용 시 공백을 받지 못하지만
scanf("%[^\n]",str); 사용 시 공백도 받아들임

[컴퓨터공학]프로그래밍#11(디버깅-Visual studio)

*디버깅
컴퓨터 프로그램이나 하드웨어 장치의 잘못된 부분, 즉 버그를 찾아서 수정 하는 과정

필요성
프로그래밍시 한번에 완벽한 프로그램을 작성하는 것은 매우 어려움
초기 개발한 버전에서 테스트 및 디버깅을 통해 완전한 SW로 개선

디버거
디버깅을 할 수 있도록 지원하는 프로그램 또는 장치
Visual studio는 IDE (Integrated Development Environment)로 에디터, 컴파일러, 디버거가 통합되어 지원함

*사용방법1
1.중단점 (break point) 설정
원하는 라인에서 F9 누르거나 우클릭 후 아래와 같이 중단점 삽입

2.디버깅 실행 : 설정된 중단점에서 멈춰서 대기
F5 누르거나 아래와 같이 디버그 -> 디버깅 시작 클릭

3.디버깅 화면 체크
위 레드박스 : 실행중인 소스코드
아래 레드박스 : 실행 시점의 변수 값

*디버깅 방법
한 단계씩 코드 실행 (F11)
함수 내부를 포함하여 C언어 한줄 씩 수행하며 디버깅하고 싶은 경우
함수 내부로 이동하여 디버깅 가능

프로시저 단위 코드 실행 (F10)
함수 내부를 보지 않고 한줄 씩 수행하며 디버깅하고 싶은 경우
함수 내부로 이동하지 않고 함수가 실행
 
*사용방법2
한줄씩 수행하며 아래 사항 확인
각 변수의 값이 의도한 바와 같은지 확인
프로그램의 실행 순서가 의도한 바와 같은지 확인

*디버깅 종료

[컴퓨터공학]프로그래밍#10(제어문)

*continue 문(루프 건너뛰기)
반복문 내에서 특정 조건일때 명령문 수행을 제외하는 용도로 사용

while문과do-while문에서
continue 이후 명령문은 수행되지 않고 즉시 조건문 검사 로직으로 이동

for문에서
continue 이후 명령문은 수행되지 않고 증감연산은 수행하고 조건문 검사 로직으로 이동

*break(루프 자체를 탈출)
현재 반복문을 빠져나올 때 사용
중첩 반복문의 경우 가장 안쪽 반복문을 빠져나옴
for 문에서 break 는 증감 수행 없이 반복문 빠져나옴
특정 조건인 경우 반복문을 종료하기 위해 주로 if 문과 함께 사용

[컴퓨터공학]프로그래밍#9(반복문)

*while문
주어진 조건이 만족되는 동안 문장들을 반복 실행


*do while문
반복 조건을 루프의 끝에서 검사
while(조건)뒤에 꼭 ;(세미콜론)을 붙여줘야함!!

*for문
변수를 증감시키면서 조건식 만족할때까지 반복
가장 많이쓰이는 반복문
초기화:반복문 첫 진입시 실행
조건문:한 사이클 돌때마다 검사
증감:한 사이클이 끝나면 실행

[컴퓨터공학]프로그래밍#8(조건문)

*if-else문
조건식이 참/거짓에 따라 다른 명령을 수행

중첩 if-else문
if 문에 다시 if 문이 포함

*switch문
여러가지 경우 중에서 하나를 선택하는데 사용


다중 선택
복잡한 if 문의 조건식이 정수형인 경우 사용

[컴퓨터공학]프로그래밍#7(관계연산자 및 논리 연산자)

*관계연산자
두 수의 값을 비교하기 위한 연산자
두 수식 간 혹은 두 변수 간의 관계를 참(true) 혹은 거짓(false)으로 나타냄
참 : 1, 거짓 : 0
선택문이나 반복문의 조건식에 주로 사용
관계 연산자(>=) 연산 기호의 순서가 명확해야 함
>=(O), =>(X)
대입 연산자(=)
오른편의 변수 혹은 수식의 값을 왼편 변수에 대입(assignment)

*논리 연산자
여러 개의 조건을 조합하여 참과 거짓을 따지는 연산자
결과값은 참(1) 아니면 거짓(0)

*연산자의 우선순위
수식에서 어떤 연산자를 먼저 계산할 것인지의 문제

*우선순위의 일반적 지침
콤마 < 대입 < 논리 < 관계 < 산술 < 단항
괄호 연산자는 가장 우선순위가 높다.
모든 단항 연산자들은 이항 연산자들보다 우선순위가 높다.
콤마 연산자를 제외하고는 대입 연산자가 가장 우선순위가 낮다.
연산자들의 우선 순위가 생각나지 않으면 괄호를 이용
( x <= 10 ) && ( y >= 20 )
관계 연산자나 논리 연산자는 산술 연산자보다 우선순위가 낮다.
x + 2 == y + 3 
우선 순위가 모호하지 않도록 코딩하는 것이 바람직함 !!

2019년 6월 27일 목요일

[컴퓨터공학]프로그래밍#6(배열)

*배열
여러 개의 데이터를 효율적으로 사용하기 위한 데이터 타입
반복문을 사용해 다수의 변수를 처리함
같은 종류의 데이터들이 순차적으로 저장되어 있는 자료 구조

*배열 선언 : 자료형 변수명[배열크기]
예) int grade[10];
자료형: 배열 원소들이 int형라는 것을 의미
배열 이름: 배열을 사용할 때 사용하는 이름 (grade)
배열 크기: 배열 원소의 개수가 10개

배열 사용 : 변수명[인덱스]
인덱스(배열 번호)는 항상 0부터 시작

예) grade[5] = 80;

*배열의 초기화
배열 크기와 초기값이 동일한 경우


배열 크기보다 초기 값이 적은 경우(나머지 0)


배열의 크기 없이 초기화하는 경우(초기값 개수만큼 배열의 크기 할당)


*2차원 배열


2차원 배열의 초기화


3차원 배열도 아래처럼 선언하고 사용하면 된다.
int s[6][3][5];


[컴퓨터공학]프로그래밍#5(변수)

*변수
프로그램에서 일시적으로 데이터를 저장하는 공간

변수의 필요성
데이터를 저장해야 이후에 사용할 수 있음

변수는 물건을 저장하는 상자와 유사함
변수 타입 : 메모리 크기 및 해당 메모리 데이터 해석 방법 결정
변수 이름 : 컴파일러에 의해 주소로 치환
데이터 : 정수, 실수, 문자열 모두 저장은 바이너리임
           변수 타입에 따라 값의 해석 방법이 다름

변수 타입  변수 이름          데이터

*자료형
데이터의 타입(종류)


*자료형 별 데이터 인식 방법
정수형
Unsigned short : 16bit 모두 양의 정수 표현
Short : 최상위 bit 는 음의 수로 1이면 -32768, 0이면 0
예) 0x8001 수 해석
Unsigned : 32769 (32768 + 1)
Signed : -32767 (-32768 + 1)

부동소수점 (IEEE 754)
예) -118.625 를 32bit IEEE 754 형식 부동 소수점으로 저장
1110110.101  -> 1.110110101 x 26 ( 정규화된 부동소수점)
가수부는 소수점 부분만으로 부족한 bit 0으로 채움 (11011010100000000000000)
지수부는 6에 bias 더함 (6+127 = 133)

문자형
정수형 : 기존 정수형과 동일하며, 1 byte
문자열 : ASCII 코드표를 이용하여 문자로 인식

*변수의 이름짓기
식별자자(identifier): 식별할 수 있게 해주는 이름
변수 이름
함수 이름

가독성을 위해 이해하기 쉽게 변수명 생성이 중요함
예) x, y 등의 이름 대신 sumLength, avgLength 등

*변수 선언
컴파일러에게 어떤 변수를 사용한다고 미리 알림
자료형 변수이름;

변수에 값 저장
char c; // 문자형 변수 c 선언
int i; // 정수형 변수 i 선언
double interest_rate; // 실수형 변수 interest_rate 선언

c = 'a'; // 문자형 변수 c에 문자 'a'를 대입
i = 60; // 정수형 변수 i에 60을 대입
interest_rate = 4.9; // 실수형 변수 interest_rate에 82.9를 대입

[컴퓨터공학]프로그래밍#4(구조)

*순차 구조
컴퓨터가 프로그램을 실행할 때 순서대로 실행
프로그램은 사용자가 작성한 의도대로 순서적(순차적)으로 실행
순서가 위에서 아래로 일직선의 형태로 이루어지는 가장 기본적 인 처리 구조


1번 유형
변수(a, b)에 직접 값을 할당 (❶, ❷)
처리 부분(❸)
변수에 들어 있는 값을 출력 (❹, ❺)



2번 유형
값을 입력 받아 변수(a, b)에 할당(❶, ❷)
처리 부분(❸)
변수에 들어 있는 값을 출력 (❹, ❺)


*선택 구조
❶ 데이터 입력
❷ 조건에 따른 선택
❸ 참일 때 수행
❹ 거짓일 때 수행


*선택 구조 분기 조건문
선택논리에 사용되는 기호(연산자)
참(True) / 거짓 (False)에 따라 분기가 달라짐
아래 연산자의 조합으로 참 / 거짓 판별 조건 생성

*다중 선택 구조
❶의 조건이 참일 때    ❶의 조건이 거짓일 경우
❸의 조건에 따라 처리 ❷의 내용을 처리

❸의 조건이 참이면     ❸의 조건이 거짓이면
❹의 내용 처리           ❺의 내용 처리



*반복 구조
조건이 거짓일 때 반복,수행 조건이 참일 때 다음 부분 수행

<-> C 언어는 조건이 참일 때 반복, 수행 조건이 거짓일 때 다음 부분 수행














[컴퓨터공학]프로그래밍#3(랩터와 순서도작성)

*랩터
특정 문제를 해결하기 위한, 순서도에 기반한 비주얼 프로그래밍 개발 환경
프로그램의 논리 학습에 매우 적합 미 공군사관학교(http://raptor.martincarlisle.com/)에서 무료 배포

*랩터의 특징
최소한의 구문 구조로 프로그램 개발 환경 제공
그래픽 도형이 직접 실행되는 시각적(visual) 환경을 제공
프로그램의 절차에 따라 단계별로 실행되는 과정과 결과 표시
사용 환경이 매우 단순하고 쉬워 처음 프로그램을 배우는 사용자에게 적합
쉽게 이해할 수 있는 오류 메시지 출력

*랩터의 설치
랩터 홈페이지 : http://raptor.martincarlisle.com/
C:\Program Files\RAPTOR 폴더에 설치


*랩터의 초기 화면
왼쪽 창 : 절차를 기술하기 위한 창
오른쪽 창 : 결과를 출력시켜 주는 창
Start 기호 : 프로그램의 시작
End 기호 : 프로그램의 끝
화살표 : 진행 방향


*랩터의 순서도 작성 후 실행 결과


*랩터의 메뉴

❶ 랩터 순서도를 실행시킨다.
❷ 순서도의 실행을 일시 정지시킨다.
❸ 실행을 정지시킨다.
❹ 순서도를 단계별로 실행 시킨다.
❺ 실행 속도를 지정한다.
❻ 화면 배율을 설정한다.

*랩터의 도형


*랩터의 연산자


*랩터 변수 값 설정
대입할 변수 : Set
대입할 값 : to


*랩터 데이터 입력
출력할 내용 "~"
입력 변수 : 아래


*랩터 데이터 출력
출력할 내용 "~"
출력변수 +


*랩터 조건문
조건입력


*랩터 반복문
조건이 거짓일 경우 반복수행

조건이 참일 때 반복수행 지정 하려면 레지스트리 파일 수정 : regedit 실행
->HKEY_LOCAL_MACHINE\Software\Raptor에 새로만들기
-> 문자열값(S) : reverse-Loop-logic(true)


*랩터 주석
블록 우클릭 후 Comment 선택


*랩터를 이용한 순서도 작성
❶ 시작, 도형 선택, 내용 입력

❷ 데이터 입력

❸ 왼쪽 화면 중간결과

❹ 최종 결과 실행창 표시