본문 바로가기

분류 전체보기337

[이산수학]한정자(Quantifier)란? 기호∀와 ∃의 의미 이산수학_명제와논리_한정자(Quantifier)란? 기호∀와 ∃의 의미 명제는 참과 거짓을 판별할 수 있는 문장이나 수식입니다. 그럼 변수를 포함하는 명제도 있지 않을까요? 변수에 들어있는 값에 따라서 참과 거짓을 판별할 수 있다면 역시 명제라고 할 수 있습니다. 하지만 변수를 포함한 명제의 참, 거짓을 판별하려면 변수의 논의영역을 지정해줘야합니다. 이를 정의하기 위해서 한정자를 사용합니다. 즉 한정자는 변수의 범위를 지정해줍니다. ■ 한정자(Quantifier) 명제함수의 참, 거짓을 판별하려면 논의영역의 범위를 확실히 정의해야 합니다. 이때 사용하는 것인 한정자입니다. 크게 두 가지 종류로 나눌 수 있습니다. ※명제함수: 논의영역 D에 속하는 변수 x를 포함하여 진릿값을 판별할 수 있는 문장 ※논의영.. 2020. 7. 29.

[이산수학]논리적 동치(Logical Equivalence)/동치법칙이란? 이산수학_명제와논리_논리적 동치(Logical Equivalence)/동치법칙이란? ■ 논리적 동치란? 합성명제 p와 q의 진릿값이 서로 같은 경우를 말합니다. 기호로는 p ≡ q 로 표시하며, "p와 q는 같다" 또는 "p와 q의 진릿값은 같다"라고 읽습니다. ■ 논리적 동치법칙이란? 기본적인 논리적 동치법칙은 아래 표와 같습니다. 이 논리적 동치법칙에 의해 정의된 합성명제들은 진릿값이 서로 같기 때문에, 두 개의 명제가 논리적 동치임을 증명하거나 복잡한 합성명제를 간단히 하는 데 활용할 수 있습니다. ※ 결합법칙과 분배법칙의 차이는? 결합 법칙은 괄호 안에 위치한 기호와 괄호 밖에 위치한 기호가 같아야 적용할 수 있고, 분배 법칙은 괄호 안의 기호와 괄호 밖에 위치한 기호가 달라야 적용할 수 있습니다.. 2020. 7. 29.

[이산수학]역(Converse), 이(Inverse), 대우(Contraposition)이란?_진리표첨부 이산수학_명제와논리_역(Converse), 이(Inverse), 대우(Contraposition)이란? 때로는 주어진 명제만으로 논리를 전개하거나 증명하기가 어려울 때가 있습니다. 이때 역, 이, 대우 중 하나를 이용하면 쉽게 해결할 수 있습니다. 간접증명할 때 사용하기도 합니다. ■ 역, 이, 대우 진리표 빨간네모: 대우명제는 본 명제와 같은 진릿값을 갖습니다. 파란네모: 역명제는 이명제와 같은 진릿값을 갖습니다. ■ 연습문제 명제 "오늘 눈이 오면 나는 치킨을 먹는다."의 역, 이, 대우를 구해봅시다. p: 오늘 눈이 온다. q: 나는 치킨을 먹는다. 역: 내가 치킨을 먹으면 눈이 온다. 이: 오늘 눈이 오지 않으면, 나는 치킨을 먹지 않는다. 대우: 내가 치킨을 먹지 않으면, 오늘 눈이 오지 않는다.. 2020. 7. 29.

[이산수학]논리게이트(Logit Gate)란? 게이트의 종류(AND,OR, NOT,NAND,NOR,XOR) [이산수학]논리게이트(Logit Gate)란? 게이트의 종류(AND,OR, NOT,NAND,NOR,XOR) 디지털 회로를 만들려면 정확한 연산 과정을 표현하는 논리회로(logit circuit)가 필요합니다. 연산 과정을 회로로 표현할 때 논리게이트(Logic Gate)를 이용합니다. 논리 게이트는 하나 이상의 2진 입렵 정보를 받아 하나의 2진 출력 정보를 갖습니다. ■ 논리 회로(logit circuit) -논리 연산을 통해 전기 장치를 제어하는 통로 -컴퓨터 및 기타 전기 장치를 작동하게 만드는 기초 부품 -불 대수를 이용하여 설계 -여러 입력을 해도 출력 1개만 나온다. ■ 게이트(gate) -논리 회로의 기초 구성요소 -각 게이트는 불 연산 하나를 구현 -데이터 저장 기능은 없음 ■ 기본게이트 .. 2020. 7. 29.

[이산수학]조건명제(함축)이란?예시로 쉽게 이해하기/함축진리표 [이산수학]조건명제(함축)이란?예시로 쉽게 이해하기 일반적으로 생각할 때 ' 안전 검증을 받은 놀이터에서 놀면 다치지 않는다. ' 는 말이 됩니다. 대부분 동의할 수 있죠. 그런데 여기서 전제를 반대로 바꿔볼께요. '안전 검증을 받지 않은 놀이터에서 놀면 다친다.' '안전 검증을 받지 않은 놀이터에서 놀면 다치지 않는다. ' 검증을 받지 않은 놀이터니까 결과가 어떻든 그럴 수 있다는 생각이 들죠. 그럼 이거는요? '안전 검증을 받은 놀이터에서 놀면 다친다.' 검증을 받았는데 다친다니 큰일날 일입니다. 이런 경우는 문제로 삼아야죠. 사실 위의 문장은 정확히 명제 두 개로 딱 나눌 수 없는 예시이지만 이해를 돕기 위해 넣었습니다. 조건명제도 마찬가지입니다.함축 p→q는 조건이 되는 명제 p가 참(T)이고 결.. 2020. 7. 29.

[이산수학]교환법칙, 결합법칙, 분배법칙, 흡수법칙이란?_진리표첨부 [이산수학]교환법칙, 결합법칙, 분배법칙, 흡수법칙이란?_진리표첨부 ■교환법칙 ■결합법칙 1 2 ■분배법칙 1 X(Y+Z) = XY + XZ 2 ■흡수법칙 2020. 7. 28.

[이산수학]드 모르간(De-Morgan) 법칙이란? [이산수학]드 모르간(De-Morgan) 법칙이란? 드 모르간의 법칙은 AND와 OR연산을 서로 바꾸고, 각 변수의 보수(부정)을 취합니다. 집합론에도 적용됩니다. ■ 드 모르간의 제 1법칙 A x B의 보수를 취한 것이 A의 보수와 B의 보수를 합한 것과 같습니다. ■ 드 모르간의 제 2법칙 A + B의 보수를 취한 것이 A의 보수와 B의 보수를 곱한 것과 같습니다. 불 대수를 적용해 진리표를 그려보면 쉽게 확인할 수 있습니다. 참(1), 거짓(0)으로 작성한 표입니다. 파란색 네모가 드 모르간의 제 1법칙이고, 빨간색 네모가 드 모르간의 제 2법칙입니다. 드 모드간 법칙이 프로그래밍시 자주 적용되는 부분은 아래와 같습니다. if문 조건을 작성할 때 20세 이상이고 140 이상은 경우의 부정이어야만 놀.. 2020. 7. 28.

[ C ] 전처리기 이해하기5_매크로 연산자 #, ## 정의/예제 C언어 문법 매크로 연산자 #, ## 정의/예제 아래의 매크로 문장은 어떤 결과를 만들까요? 매크로 함수: #define STRING_NAME(A, B) "A의 이름은 B이다" 매크로 문장: STRING_NAME(하헤호후, 아무개) 예상 결과: 하헤호후의 이름은 아무개이다. 진짜 결과: X (문자열 안에서는 매크로의 매개변수의 치환이 발생하지 않기 때문) 이런 상황에서 매개변수 치환이 이루어지게 하는 연산자, #이 있습니다. ■ # 연산자: 치환 #는 치환의 결과를 문자열로 구성하는 연산자입니다. #define STRING_NAME(ABC) #ABC STRING_NAME(랄랄라)라는 문장은 선행처리기에 의해 문자열 "랄랄라"로 치환됩니다. 또한 나란히 선언하면 하나의 문자열로 간주됩니다. 그래서 아래 문.. 2020. 7. 28.

프로그래머를 위한 이산수학 총정리_수학으로 이해하는 디지털 논리: 이산수학(한빛미디어, 박주미지음) 논리적인 프로그래머를 위한 이산수학 총정리 수학으로 이해하는 디지털 논리: 이산수학(한빛미디어, 박주미지음)으로 공부하면서 정리한 내용입니다. 소제목별로 글을 작성하였으니 해당 링크로 들어가서 확인하면 됩니다. ※ 링크 연결이 되지 않은 글은 예약발행으로 아직 활성화가 되지 않은 상태입니다. 이 페이지를 즐겨찾기 해놓으면 편하게 활용할 수 있습니다. ------- 각 주제마다 개념을 이해했는지 확인할 수 있도록 빈 칸 채우기 식의 문제(PDF)를 준비했습니다. ------- 완성되는대로 하나씩 업로드하겠습니다. #명제와 논리 1 논리란? 프로그래머가 논리적이어야 하는 이유 2 명제와 진릿값이란? 3 논리연산자란?(부정, 논리곱, 논리합, 배타적 논리합)_진리표로 나타내기 4 불 대수와 연산우선순위란? 5.. 2020. 7. 27.

[이산수학]합성명제(Compound), 항진명제(Tautology), 모순명제(Contradicition)란? [이산수학]합성명제(Compound), 항진명제(Tautology), 모순명제(Contradicition)란? ■ 합성명제(Compound) 합성명제의 진릿값은 그 함성명제를 구성하고 있는 명제 각각의 진릿값과 그 명제를 결합하는 논리 연산자에 의해 결정됩니다. 따라서 연산의 우선순위를 정하는 것이 중요합니다. 아래 표를 따르면 됩니다. 합성명제는 진릿값에 따라 다음과 같이 세 종류로 나눌 수 있습니다. ■ 항진명제(Tautology) - 논리 연산을 통해 언제나 참인 명제 - 집합론에서 전체 집합과 같은 개념 ■ 모순명제(Contradicition) - 논리 연산을 통해 언제나 거짓인 명제 - 집합론에서 공집합과 같은 개념 ■ 사건명제(Contingency) 항진명제도 모순명제도 아닌 명제 ------.. 2020. 7. 27.

[이산수학]논리연산자란?(부정, 논리곱, 논리합, 배타적 논리합)_진리표로 나타내기 [이산수학]논리연산자란?(부정, 논리곱, 논리합, 배타적 논리합)_진리표로 나타내기 명제는 두 개 이상 결합하여 사용됩니다. 이 때 논리 연산자를 이용하는데 부정, 논리곱, 논리합, 배타적 논리합이 있습니다. 여러 명제를 합친 결과를 비교할 때 유용한 '진리표(Truth Table)'가 있습니다. 명제에서 나올 수 있는 참/거짓 판단의 모든 가능성을 표로 나열하였습니다. 예로 단순 명제 p의 진리표는 다음과 같습니다. ※ 단순 명제: 더 이상 나눌 수 없는 명제 p T(True, 참) F(False, 거짓) 이제 명제의 결합 중에 어떤 것이 있는지 보고, 이해를 위해 진리표와 밴다이어그램도 다루겠습니다. ■ 부정 (Negation) NOT 명제 p를 부정 예) 오늘 새로운 메뉴가 나온다. ->오늘 새로운.. 2020. 7. 27.

[이산수학]불 대수와 연산우선순위란? [이산수학]불 대수와 연산우선순위란? ■ 불 대수(Boolean Algebra)란? Boolean Algebra의 Boolean은 C#의 Bool형, JAVA의 Boolean형 어원입니다. 이름이 불(Boolean)인 이유는 영국의 수학자 조지 불이 창안한 개념이기 때문입니다. - 대수학의 일부입니다. - 변수의 값으로 진릿값을 사용합니다. : 참(1) 또는 거짓(0) - 논리학을 형식화하기에 적합니다. ※ 대수학: 개개의 숫자 대신에 숫자를 대표하는 일반적인 문자를 사용하여 수의 관계, 성질, 계산 법칙 따위를 연구하는 학문(표준국어대사전) ■ 불 대수의 기초 연산 - 명제의 결합 글에서 다룬 내용에서 T가 1, F가 0이 됐을 뿐입니다. - 다른 기호를 쓰기도 합니다. ■ 연산 우선 순위 - 프로그래.. 2020. 7. 27.

[ C ] 전처리기 이해하기4_매크로 함수란? 장단점/활용 매크로 함수는 일반 함수를 정의하는 것보다 복잡합니다. 함수의 크기가 크면 매크로로 정의하는 것 자체가 불가능할 수 있습니다. 디버깅도 매우 어렵습니다. 그럼에도 불구하고 함수를 매크로로 정의하는 이유는 무엇일까요? 1 상대적으로 실행 속도가 빠르다 매크로 함수는 일반 함수에 비해 실행속도가 빠릅니다. 호출과 동시에 호출된 함수를 위한 "스택 메모리가 할당됨 + 실행 위치 이동 + 매개변수로 인자 전달 + retrun 문을 통한 값의 반환"이 실행되기 때문입니다. 또한 선행처리기가 매크로 함수 호출을 하기 때문에 빈번하게 호출되더라도 실행 속도에 영향을 주지 않습니다. 2 자료형에 따라서 별도로 함수를 정의하지 않아도 된다. 전달인자의 자료형에 상관없이 제대로 치환됩니다. 메크로 함수의 호출 문장이 매크.. 2020. 7. 27.

[ C ] 전처리기 이해하기1_전처리기(Preprocessor)란? 정의/용도, 지시문 종류 전처리기(Preprocessor)란? 정의/용도 소스 파일에서 실행 파일로 만들어지려면 다음과 같은 과정을 거쳐야 합니다. 선행처리 거친 소스 파일이란 무엇일까요? 사실 소스 파일의 형태가 그대로 유지되기 때문에 그냥 소스 파일입니다. 선행처리기가 하는 일은 선행처리 명령문대로 소스 코드의 일부를 수정합니다. 선행 처리 명령문은 #으로 시작하며, 세미콜론(;)을 붙이지 않습니다. #define PI 3.14 이런 명령문이 삽입되어 있다면 선행처리된 소스 파일에서는 PI를 3.14로 인식합니다. #include 이제껄 자주 작성했던 #include 도 # 문자로 시작하는 선행처리 명령문입니다. stdio.h 파일의 내용을 그 파일에 옮겨놓다는 의미입니다. ■ 전처리기 지시문 종류 #include #defi.. 2020. 7. 27.

[이산수학]명제와 진릿값이란? [이산수학]명제와 진릿값이란? ■ 명제(Proposition) 참이나 거짓으로 구분할 수 있는 문장이나 수식 영어 소문자로 p, q, r 등으로 표현 예) 명제 1 + 1 =2 정해인은 27세이다. 명제 아님 지금 몇 시죠? 제 말 좀 들어보세요. ■ 진릿값(Truth Value) 참이나 거짓을 가리키는 값 참 True T 0 거짓 False F 1 확인문제 Q 다음 명제의 진릿값을 구하시오. 1. 캐나나의 수도는 몬트리올이다. 2. 1+4= 5 A 답 확인 시 드래그하세요. False, True ----------------------------------- 이산수학 총정리 목록 보러가기 ----------------------------------- 2020. 7. 27.

[이산수학]논리란? 프로그래머가 논리적이어야 하는 이유 [이산수학]논리란? 프로그래머가 논리적이어야 하는 이유 컴퓨터는 감정이 없습니다. 그래서 전류의 높고, 낮음을 더 확장해서 논리적으로 표현해야 문제를 해결할 수 있습니다. 또한 다른 사람을 공감하고 협업할 때, 설득의 기반이 될 수 있는게 논리입니다. 따라서 프로그래머라면 논리적인 사고 방식을 키우기 위해서 노력해야합니다. 그 방법 중 하나가 수학을 배우는 것입니다. ■ 논리적인 사고방식이란? (정의) 논리적인 사고방식은 다양하게 해석할 수 있는데 다음과 같은 정의로 요약할 수 있습니다. - 어떤 관찰 결과의 진리값(참/거짓)을 판단할 수 있는 능력 - 연결된 여러 참/거짓 변수들로부터 최종 진릿값을 판단할 수 있는 능력 - 양립할 수 없는 모순된 주장을 찾아낼 수 있는 능력 - 사실(fact) 또는 확.. 2020. 7. 27.

[ C ] 파일 입출력 이해하기5_파일 위치 서식자란? fseek, ftell 함수 파일 위치 서식자란? fseek, ftell 함수 FILE 구조체의 멤버 중에는 파일의 위치 정보를 저장하고 있는 멤버가 있습니다. '파일 위치 지시자'라고 부르는 이 멤버는 파일이 처음 개방되면 파일의 맨 앞부분을 가리킵니다. 그래서 파일의 중간이나 마지막에서 데이터를 읽거나 쓰고 싶다면 이 '파일 위치 지시자'를 이동시켜야 합니다. fgets 함수 호출을 통해서 파일에서 20바이트의 문자열을 읽어 들었다면 '파일 위치 지시자'는 20바이트 뒤를 가리키게 됩니다. ■ 파일 위치 지시자의 이동 fseek #include int fseek(FILE * stream, long offset, int wherefrom); stream으로 전달된 파일 위치 지시사를 wherefrom부터 offset만큼 이동시킨다.. 2020. 7. 25.

[ C ] 파일 입출력 이해하기3_파일복사 feof/바이너리 데이터 입출력 fread, fwrite C언어 문법 파일복사 feof/바이너리 데이터 입출력 fread, fwrite ■ 파일 복사하는 함수 feof 전체 파일을 복사해야 한다면 파일의 끝을 확인하는 작업이 필요합니다. 그 때 feof함수을 사용하면 됩니다. 파일의 끝까지 읽어들인 상태이면 0이 아닌 값을 반환합니다. #include int feof(FILE * stream); 매개변수로 FILE 형 포인터를 넣으면 됩니다. ■ 바이너리(Binary) 데이터 입출력하는 함수 fread, fwrite 이번에는 바이너리 데이터를 입력, 출력할 수 있는 함수를 알아보겠습니다. ( 참고할만한 글:텍스트 데이터와 바이너리 데이터의 차이점은?) - 입력 #include size_t fread(void * buffer, size_t size, size_t.. 2020. 7. 25.

[ C ] 파일 입출력 이해하기2_파일의 개방모드(Mode) C언어 문법 파일의 개방모드(Mode) fopen 함수의 두 번째 인자로 "wt"와 "rt"를 전달하여 스트림을 형성했습니다. 사실 스트림의 종류는 더 다양합니다. 기본적으로 두 가지 기준이 있는데 하나씩 보겠습니다. 기준 1: 읽기 위한 스트림? vs 쓰기 위한 스트림? 모드(Mode) 스트림의 성격 파일이 없으면? r 읽기 에러 w 쓰기 생성 a 덧붙여 쓰기 생성 r+ 읽기/쓰기 가능 에러 w+ 읽기/쓰기 가능 생성 a+ 읽기/덧붙여 쓰기 가능 생성 위 표를 참조하여 만들고자 하는 스트림의 특성에 맞춰 '파일의 개방 모드'를 선택하면 됩니다. 그 조합이 fopen 함수의 두 번재 인자가 됩니다. 모드의 +는 읽기, 쓰기가 모두 가능한 스트림의 형성을 의미합니다. 더 좋은 모드라고 생각할 수 있지만 수.. 2020. 7. 25.

[ C ] 파일 입출력 이해하기1_스트림 생성, 소멸, 파일 읽는 함수_fopen, fclose, fagets 스트림 생성, 소멸, 파일 읽는 함수_fopen, fclose, fagets 데이터의 이동 경로가 되는 다리를 스트림이라고 했습니다. 기본적인 스트림 개념은 아래 글에서 이미 다루었습니다. 스트림과 데이터의 이동 ■ 스트림 생성 함수 FILE * fopen(const char * filename, const char * mode); 위 함수의 첫 번째 인자로는 스트림을 형성할 파일의 이름, 두번째 인자로는 형성할 스트림 종류에 대한 정보를 문자열로 전달합니다. 그러면 이 함수는 해당 파일과의 스트림을 형성하고 스트림 정보를 FILE 구조체 변수에 담아서 그 변수의 주소 값을 반환합니다. 여기서 FILE 구조체의 포인터는 파일을 가리키기 위한 용도로만 사용되었습니다. 그래서 FILE 구조체 변수의 멤버에 .. 2020. 7. 25.

[ C ]커스텀 자료형 이해하기6_열거형(Enumerated Type)란? 개념/선언방법 C언어 열거형(Enumerated Type)란? ■ 열거형 개념, 선언방법 열겨형은 변수에 저장가능한 값을 열거하여 정의합니다. 그래서 열거형 변수명을 IndianBoy로 하고 다음과 같이 값을 넣을 수 있습니다. enum indianBoy { One=1, Two=2, Three=3, Four=4, Five=5 }; IndianBoy형 변수가 저장할 수 있는 값으로는 One, Two, Three.. 라는 상수가 있으며, 각각 1, 2, 3...으로 정의하였습니다. 이 열거형 변수를 선언하려면 구조체에 struct 키워드 붙이듯이 enum 키워드를 사용하면 됩니다. enum indianBoy song1; // indianBoy형 변수 song1선언 이제 위의 열거형을 typedef 선언을 추가해서 정의한 .. 2020. 7. 24.

[ C ]커스텀 자료형 이해하기5_공용체(Union Type)이란? 정의/사용하는 이유 C언어 공용체(Union Type)이란? 정의/사용하는 이유 ■ 공용체 정의공용체(Union Type)을 뜻하는 Union은 조합, 통합을 의미합니다. 무엇에 관한 '통합'일까요? 구조체와 공용체의 차이를 보면 쉽게 이해할 수 있습니다. 아래 코드를 확인해보겠습니다. #include typedef struct structBox { int member1; int member2; double member3; } SBox; typedef union unionBox { int member1; int member2; double member3; } UBox; int main(void) { SBox sbox; UBox ubox; printf("%d \n", sizeof(SBox); // 결과 16 printf("%.. 2020. 7. 24.

[ C ]커스텀 자료형 이해하기4_함수 반환값으서의 구조체 C언어 문법 함수 반환값으서의 구조체 기본 자료형이랑 똑같습니다. int형 변수를 인자로 전달할 수 있고, 반환값으로도 설정할 수 있듯이 구조체 변수도 마찬가지입니다. 간단한 예제를 보겠습니다. date_t get_dday(void) // 반환값이 구조체 date_t형 { date_t date; date.year = 2043; date.month = 10; date.day = 1; return date; } //main 함수에서 date_t date; date = get_dday(); // 대입 가능 C언어에서 함수는 반환값 한 개입니다. 그래서 여러 값을 반환하고 싶으면 구조체를 반환하면 됩니다. 구조체를 반환하면 실질적으로 여러 개의 값을 반환하는 격이 되니까요. date = get_dday(); 이.. 2020. 7. 24.

[ C ]커스텀 자료형 이해하기3_구조체 배열, 포인터 C언어 문법 구조체 배열, 포인터 ■ 구조체 배열 정의 및 선언 구조체 변수를 여러개 사용해야 할 때는 구조체 배열을 선언하면 됩니다. 선언방법은 일반 배열과 동일합니다. struct point pointArr[3]; // 크기 3인 point형 구조체 배열 선언 그럼 다음과 구조로 배열이 할당됩니다. ■ 구조체 배열 초기화 구조체 배열을 선언과 동시에 초기화할 때는 배열의 길이만큼 중괄호를 통해서 초기화할 값을 명시합니다. struct point pointArr[3] // 크기 3인 point형 구조체 배열 선언 { {3, 4} // 첫 번째 요소의 초기화 {2, 1} // 두 번째 요소의 초기화 {5, 9) // 세 번째 요소의 초기화 }; ■ 구조체 변수와 포인터 포인터도 구조체의 멤버가 될 수 있.. 2020. 7. 24.

[ C ]커스텀 자료형 이해하기2_typedef이란? typedef사용법 C언어 문법 typedef이란? struct과 typedef의 차이점, 사용법 구조체 변수를 선언할 때는 struct 키워드를 일일히 붙여야합니다. 구조체 Person으로 변수를 선언한다고 하면 struct Person own; struct Person two; struct Person three; 이런 식으로 'struct [구조체명] [변수명]'을 반복해야 합니다. 이런 번거로움을 덜 수 있는 typedef 구조체를 정의할 수 있습니다. typedef Person PERSON; 이렇게 선언을 하면 struct Person에 PERSON이라는 별칭(alias)을 붙여진 것입니다. 그래서 간단히 [별칭][변수명]만 작성하면 됩니다. PERSON own; PERSON two; PERSON three; 이처.. 2020. 7. 24.