본문 바로가기

2학년 2학기213

9-4장 배열과 포인터 배열의 이름이 바로 포인터이다. 즉, 배열은 따로 주소가 없이 배열 이름자체가 주소이다.   #includeint main(){ int a[] = {10, 20, 30, 40, 50}; printf("배열의 이름 = %u\n", a); // 배열의 이름 = 1868132144 printf("첫 번째 원소의 주소 = %u\n", &a[0]); // 첫 번째 원소의 주소 = 1868132144}   따라서, 포인터도 배열처럼 사용할 수 있다. #includeint main(){ int a[] = {10, 20, 30, 40, 50}; int *p; p=a; printf("a의 첫 번째 원소 = %u\n", a[0]); // 10 printf("p의 첫.. 2024. 10. 28.
9-3장 포인터와 함수 함수 호출 시 인수 전달 방법1. 값에 의한 호출: 인수의 값이 매개 변수로 복사된다. 따라서 함수가 종료되면 매개 변수의 값은 사라진다. 즉, 실제 인자들의 값은 유지됨. 2. 참조에 의한 호출: 인수의 주소가 매개 변수로 복사된다. 따라서 함수에서 인자로 받은 주소를 이용해서 값을 변경하면 실제 인자들의 변수 값도 변경된다. 포인터 사용시 주의할 점🚨 초기화가 안된 포인터를 사용하면 안된다.🚨 초기화 되지 않은 포인터 변수에 값을 넣으면 그 포인터가 어느 곳에 있는지 모르기 때문에 해당 포인터가 프로그램에서 중요한 연산에 있는 메모리를 할당하고 있는 상황에서 값을 넣으면 프로그램이 망가질 수 있기 때문에 주의해야한다. 🚨 포인터가 아무것도 가리키고 있지 않은 경우에는 NULL로 초기화해야 한다.🚨 예.. 2024. 10. 28.
9-2장 포인터의 연산 포인터연산에는 증가(++), 감소(--), 덧셈(+), 뺄셈(-) 연산이 있다. 증감 연산의 경우 포인터가 가르키는 객체의 크기가 1의 의미를 가지게 된다.   int x = 10; int *p = &x; //1000++p; //1000 + sizeof(int) = 1004    포인터의 증감 연산    간접 참조 연산자와 증감 연산자 2024. 10. 28.
9-1장 포인터란? ❓포인터란?: 주소 그 자체이다. 즉, 메모리의 주소이다. ❓포인터 변수란?: 메모리의 주소를 가지고 있는 변수를 의미한다.  메모리: 변수가 저장되는 공간을 의미한다. 메모리는 byte 단위로 접근할 수 있다.  메모리에는 데이터 영역, Heap 영역, Stack영역이 있다.   데이터 영역: 전역 변수 및 static 변수가 할당되는 영역 (프로그램의 시작 시 할당되어 종료 시 소멸된다.) Heap영역: 프로그래머가 할당하는 영역(프로그래머가 명시적으로 할당하고 소멸시킨다.)  Stack 영역: 함수 호출 시 생성되는 지역 변수 및 매개 변수가 저장되는 영역( 함수 호출이 완료되면 소멸된다.)     자료형 별 메모리에 저장되는 형식int main(void){ int i = 10; char.. 2024. 10. 28.
5.10 Design of accumulator logic 해당 부분을 확대해보면 아래와 같다.  자, 이제 이전에 설계했던 방식대로 " AC ← ? " 형태인 수식을 모두 가져와서 분류하는 작업을 해보자.   이렇게 분류된 것을 바탕으로 논리 회로를 설계해보면 아래와 같다.  위의 식은 식의 왼쪽 조건의 경우만 따져서 만든 논리 회로이기 때문에 정확한 설계가 아니다. 따라서 AND와 ADD 다양한 연산을 신제 피연산자와 만든 논리 회로는 아래의 사진과 같다. 2024. 10. 27.
5.9 Design of basic computer 1. 기본적인 컴퓨터의 구성요소     2. Register의 LD, INR, CLR 설계AR의 LD, INR, CLRAR을 변경한다는 것은 " AR ← ? " 형태의 모든 수식들이다. 따라서, 이전에 배웠던 " AR ← ? " 형태를 모두 가져와보면 아래와 같다.  이렇게 "AR ← ?" 가져왔을 때 상위 3개는 Load에 관한 내용이고, RT₀은 Clear에 관한 내용, D₅T₄ 는 Increment에 관한 내용이라는 것을 알수 있다.  그래서 분류를 해보면 위의 사진과 같고 이를 논리 게이트로 표현해보자.   이런식으로 해당 레지스터를 변경시키는 모든 수식을 가져오고 그 변경된 값을 LD, INR, CLR로 분리하여 논리 게이트를 만들 수 있다.    3. Memory의 Read 설계 Memory를.. 2024. 10. 27.
5.8 Complete computer description 전체적인 Flowchart   전체적인 Functions 이표를 보고 외우는 것은 어렵지만, 이 표를 보고 어떤 동작인지, 각각의 변수들의 의미하는 것이 무엇인지는 알아야한다. 2024. 10. 27.
5.7 Input-output and interrupt 1. 기존의 방식(비효율적인 방법)   AC, INPR, OUTR의 기본 역할 AC(누산기): 16bit 크기의 레지스터로, 컴퓨터의 계산과 명령어 수행중 발생하는 중간 결과를 일시적으로 저장하는 역할을 한다. INPR(입력 레지스터): 8bit 크기의 레지스터로, 키보드에서 입력된 데이터를 잠시 보관해두는 공간이다. OUTP(출력 레지스터): 8bit 크기의 레지스터로, 프린터로 데이터를 보내기 전에 일시적으로 데이터를 저장하는 공간이다.    FGI와 FGO 플래그의 역할 FGI(Input Flag): 키보드로부터 입력이 완료되었을 때 1로 설정한다. FGI가 1이 되면 컴퓨터는 입력된 데이터를 처리할 준비가 되었다는 신호로 인식한다. FGO(Output Flag): 프린터로 데이터를 보낼 준비가 되.. 2024. 10. 27.
5.6 Memory reference instructions Memory reference instructions란?  위 format에서 Opcode의 값이 0 0 0 ~ 1 1 0으로 명령어가 결정이 되고, I의 값이 0이면 직접 참조, 1이면 간접 참조인 Instruction이다.  AND(Opcode의 값이 0 0 0인 경우): 유효 주소가 가리키고 있는 메모리의 값과 AND 연산을 한 후 AC에 저장하는 것 Opcode의 값이 0 0 0 으로 동일하지만 I의 값에 따라서 16진수 표현 방식이 달라진다.즉, 간접 참조라면 1 0 0 0 x x x으로 8 x x x가 되고 직접 참조라면 0 0 0 0 x x x으로  0 x x x가 된다.      ADD(Opcode의 값이 0 0 1인 경우): 유효 주소가 가리키고 있는 메모리의 값과 ADD 연산을 한 후 .. 2024. 10. 27.
5.5 Instruction cycle + Register reference instruction 하나의 Instruction(명령어)는 하나의 사이클로 이루어져있다. 하나의 사이클을 지나면서 명령어가 수행된다. 사이클의 종류    Fetch & Decode(모든 명령어에 똑같이 적용)    [T₀: AR ← PC]   [T₁ : IR ← M[AR], PC ← PC + 1]   [T₂ : D₀ ,…, D₇ ← Decode IR(12 - 14), AR ← IR(0 - 11), I ← IR(15)]   명령어 사이클의 전체적인 Flow chart     Register reference instruction: I가 0이고, Opcode가 1 1 1인 경우  Bⁱ는 Register operation의 12bit에서 i 번째를 제외한 나머지는 0인 것이다. 즉, B₂는 0 0 0 0 0 0 0 0 0 1 0.. 2024. 10. 27.
5.4 Timing and control IR(Instruction Register): 현재 CPU가 실행할 명령어를 저장한다. 3x8 decoder + I: Opcode, 메모리 참조 명령어를 사용할지, 레지스터 참조 명령어를 참조할지, I / O 명령어를 사용할지를 결정 4x16 decoder: 명령어를 순차적으로 실행하기 위해 클럭과 연결된 시퀀스 카운터를 사용해서 제어 신호를 생성한다. Control Logic Gates: 디코더에서 나온 신호를 기반으로 제어 논리가 구성되어 CPU 내부 작업 흐름을 제어하는 신호를 생성한다. Timing   클럭 신호(Clock Signal)와 타이밍 신호(Timing Signal) 간의 관계  여기서 중요한 것은 실제 데이터 전송은 클럭이 상승하는 순간 발생한다. 클럭의 신호는 주기적으로 변경되는데,.. 2024. 10. 27.
5.3 Computer Instructions Instructions format의 3가지 형태 1. Memory-reference instruction (메모리 참조 명령어)Opcode명령어가 어떤 연산을 수행할지를 나타낸다. 000 ~ 110까지 작성가능하다.I명령어가 직접 주소 지정 방식(I=0)인지, 간접 주소 방식(I=1)인지를 나타낸다. Address명령어가 참조하는 메모리의 주소를 나타낸다. 사용 예시: 메모리에서 데이터를 읽어오는 연산이나 메모리에 데이터를 저장하는 연산을 하는 것  2. Register-reference instruction (레지스터 참조 명령어)Opcode111로 고정되어 있으며 I에 의해서 레지스터 참조 명령(I=0)인지, 입출력 명령(I=1)인지가 결정된다. I레지스터 참조 명령(I=0)인지, 입출력 명령(I=.. 2024. 10. 27.
5.2 Computer registers [Regiters]: 각각의 특수한 기능을 하는 레지스터를 지정을 해놓은 방식이다.    [위 레지스터들을 갖는 기본 컴퓨터에서의 데이터 이동 방식 - Bus system]   LD(Load), INR(Increment), CLR(Clear)를 갖는 레지스터해당 레지스터(AR, PC, DR, AC, TR)는 우리가 앞에서 배웠던 병렬 로드 카운터 레지스터를 12bit로 구현한 것이다.     LD(Load)를 갖는 레지스터해당 레지스터(IR, OUTR)는 우리가 앞에서 배웠던 병렬 로드 레지스터를 12bit 또는 8bit로 구성한 것이다.   레지스터를 선택하는 방식S2SSRegister000 001AR010PC011DR100AC101IR110TR111Memory  레지스터는 Select에 의해서 레지스.. 2024. 10. 27.
5.1 Instruction codes micro operation(마이크로 연산)들이 모여서 instructions이 되고, 그 instructions이 모여서 프르그램이 된다. ❓ Instruction이란?: CPU가 프로그램에서 수행해야 할 구체적인 작업을 정의하는 기본 명령어이다. 인스트럭션은 연산 코드와 피연산자로 이루어지며, 이를 통해 CPU가 데이터를 처리하고 명령을 수행하게 된다.  Instruction의 기본 포멧즉  instruction은 명령어의 종류와 피연산자의 주소로 이루어져있고, 각각 4bit, 12bit로 이루어져있다. 그리고 피연산자의 값은 16 bit로 이루어져있다.    memory의 구조 메모리의 사이즈는 16bit이고, 메모리 전체의 주소는 instruction의 Adress에 의해서 결정된다. instru.. 2024. 10. 27.
8장 함수 1. 함수의 정의    2. 지역변수와 전역변수: 함수 안에서 정의되는 변수는 지역 변수라고 부르고, 해당 함수 안에서 만 사용이 가능하다. 반면에 함수의 외부에서 선언되는 변수는 전역 변수라고 불린다. 함수의 매개변수는 지역 변수일까?맞다! 다만 초기값은 인자로 받는 다는 점에서만 다르고 나머지는 지역 변수의 특징과 같다.  지역 변수전역 변수기본 초기값쓰레기 값0동시에 존재할 경우{ } 내부에서는 지역 변수가 우선이다. { } 외부에서는 전역 변수가 우선이다.   3. 정적 지역 변수: 블록에서만 사용되지만 블록을 벗어나도 자동으로 삭제되지 않는 변수 / 앞에 static을 붙인다. : 함수가 여러번 선언되어도 새로 초기화하지 않고 호출된 이후 연산된 값을 유지한다. : 정적 지역변수는 함수내부에서만.. 2024. 10. 25.
7장 배열 1. 중간 점검 퀴즈(1)Quiz 1) n개의 요소를 가지는 배열의 경우, 첫 번째 요소의 번호는 무엇인가?: 0 Quiz 2) n개의 요소를 가지는 배열의 경우, 마지막 요소의 번호는 무엇인가?: n - 1 Quiz 3) 범위를 벗어나는 인덱스를 사용하면 어떻게 되는가? 즉, int a[10];과 같이 선언된 배열이 있는 경우, a[10]에 6을 대입하면 어떻게 되는가?: 배열 인덱스 범위 초과 오류가 생긴다.   2. 중간 점검 퀴즈(2)Quiz 1) 배열 a[6]의 요소를 1, 2, 3, 4, 5, 6으로 초기화int a[6] = {1, 2, 3, 4, 5, 6};  Quiz 2) 배열의 초기화에서 초기값이 배열 요소의 개수보다 적은 경우: 배열 요소보다 초기화 값이 적으면 나머지 요소는 0으로 초.. 2024. 10. 25.
6장 1. 종이접기#include #include #include int main(){ double height = 0.001; int count = 0; while(height   2. 디지털 시계#include #include #include int main() { int hour, min ,sec; hour = min = sec = 0; while(1){ system("cls"); printf("%02d: %02d: %02d", hour, min, sec); sec++; if(sec == 60) { min++; sec = 0; } if(min == 60) { .. 2024. 10. 25.
5장 조건문 1. 논리 연산자연산의미x && yx와 y가 모두 참이면 참, 그렇지 않으면 거짓x || yx나 y중에서 하나만 참이면 참, 모두 거짓이면 거짓!xx가 참이면 거짓, x가 거짓이면 참 중요한 것!C언어에서는 0을 제외한 나머지 값은 모두 참으로 간주한다. 따라서, -1도 참이 되고, 100도 참이 된다.  2. 단축 연산자AND 연산자의 경우, 여러 개의 피연산자 중에서 처음 피연산자의 값이 거짓이면 다른 연산자들의 값은 계산되지 않는다.if((2>3)&&(++x (++x 3)이 거짓이기 때문에!  3. if문에서 주의할 점if (score >= 90) printf("합격!"); printf("장학금!"); 이렇게 하면 아래의 장학금 출력문은 아무런 조건 없이 출력된다.  if( x > 0).. 2024. 10. 24.
4장 수식과 연산자 1. 나눗셈 연산자정수형 / 정수형 == 정수형(소수점 이하의 값은 버려진다.)#include int main() { int a = 10; int b = 3; int result = a / b; // 정수끼리 나누기, 소수점 이하 값은 버려짐 printf("정수형 나눗셈: %d\n", result); // 출력: 3 return 0;} 실수형 / 실수형 == 실수형#include int main() { float a = 10.0; float b = 3.0; float result = a / b; // 실수끼리 나누기 printf("실수형 나눗셈: %.2f\n", result); // 출력: 3.33 return 0;}   2. 증감 연산.. 2024. 10. 23.
3장 변수와 자료형 1. 변수 1. 변수의 정의: 변수란, 프로그램에서 값들이 저장되는 공간을 변수라고 한다.  2. 변수의 선언: 변수는 반드시 사용하기 전에 미리 선언을 해야한다.자료형 변수이름 = 초기값;int num = 0;char alpha = 'a';  3. 변수의 명명법 ★★★알파벳 문자와 숫자, 밑줄 문자로 이루어진다.이름의 중간에 공백이 들어가면 안된다.첫 번째 문자는 반드시 알파벳 또는 밑줄 문자이어야한다. (숫자를 첫 번째 문자로 사용은 불가능) 대문자와 소문자를 구분하여 서로 다른 것으로 취급한다. 따라서, 변수 index와 Index, INDEX는 서로 다른 변수이다.C언어에서 사용하고 있는 키워드(예약어)와 똑같은 이름은 허용되지 않는다. 4. 변수의 초기화변수를 초기화시키지 않으면?☞ 변수가 어디.. 2024. 10. 23.
2장 기초사항 보호되어 있는 글 입니다. 2024. 10. 23.
ch1 중요 문제 유형 2024. 10. 17.
데이터 프레임 필터링 방식 1. 기본적인 열 선택df[]는 기본적으로 열을 선택할 때 사용됩니다.# 하나의 열 선택df['column_name']# 여러 열 선택df[['column1', 'column2']]  2. loc[]: 명시적 인덱스 및 열 이름 사용 행 선택# 특정 인덱스(행) 선택df.loc[2012] # 2012년 데이터 선택 열 선택# 특정 열 선택df.loc[:, 'column_name'] # 모든 행에서 'column_name' 열만 선택 행과 열 동시 선택# 특정 인덱스와 열 동시 선택df.loc[2012, 'column_name'] # 2012년의 'column_name' 데이터를 선택 조건을 활용한 필터링# 조건을 활용하여 필터링df.loc[df['state/region'] == 'GA'] # 's.. 2024. 10. 17.
ch3 중요 문제 유형 10진수 -567에 대해서 (a) 부호 절대값 표현(b) 부호화된 1의 보수표현(c) 부호화된 2의 보수표현(d)2의 보수 표현을 이용하고 12비트를 사용할 떄 10진수의 최대 최소, 2진수의 최대 최소값을 찾으시오. 2024. 10. 16.
Quiz Session 2 - 15 왜 A0를 Serial input Left에 연결하고, A3를  Serial input Right에 연결을 할까? [Shift Left]| A₆ | A₅ | A₄ | A₃ | | A₂ | A₁ | A₀ | S(left) | [R2] [R1] 우선 Serial input의 개념에 대해서 알아야한다. Serial input이란 빈자리를 채우기 위함이다. 즉, 위의 레지스터에서 ShiftLeft를 통해서 기존의 A₀ 자리에 빈자리가 생겼다. 따라서, 이 빈자리를 Serial input채우는데, 보통 첫 레지스터의 가장 오른쪽 값이 연결된다. 따라서,  A₀ 를 연결해줄 수 있다.   [Shift Ri.. 2024. 10. 16.
[pandas] Combining Datasets 데이터를 사용하다보면 최신화된 데이터를 추가하거나 다른 데이터를 기존 데이터와 합치는 일이 많다. 이런 경우 pandas에서는 데이터 추가하는 여러 연산 메서드를 지원한다.  concat과 merge를 사용할 수 있는데, concat은 주로 행 추가 또는 열 추가를 결합하는데 사용된다. 또한, merge는 두 데이터 프레임을 공통 열 또는 공통 인덱스를 기준으로 결합한다.  concat: 주로 행 추가 또는 열추가를 결합하는데 사용하는 연산 메소드이다. 기본 값은 행 추가이며, axis='col'(2.2.2에서는 axis=1)을 하면 열 추가도 가능하다.  행 추가  열 추가   만약 인덱스가 중복되는 경우라면? concat은 index 중복여부를 검사하지 않는다. 이런 경우 verify_integrit.. 2024. 10. 16.
[pandas] Hierarchical Indexing(계층적 인덱싱) Hierarchical Indexing(계층적 인덱싱)은 여러개의 인덱스 또는 열을 가질 수 있는 기능이다.  이런 식으로 상위 계층에 a, b가 있고 하위 계층에 1, 2가 있는 인덱싱을 말한다. 이런 계층이 있는 인덱스를 다중 인덱스 (MultiIndex)라고 한다.     다중 인덱스 (MultiIndex) 생성1. 생성자 기반 생성  2. array를 통한 생성  3. tuple를 통한 생성 4. product를 통한 생성 이렇게 다중 인덱스 (MultiIndex)를 만들 수 있고 이 값을 데이터 프레임 생성할 때 index 값으로 넣어주면 된다.   물론, columns에 값을 넣어도 된다.    여기서 names는 행과 열 각각의 상위 계층, 하위 계층의 이름을 붙여준 것이이다.(사진 참고) .. 2024. 10. 15.
Coroutine(2) 2024. 10. 13.
Coroutine(1) import kotlinx.coroutines.*import java.lang.Thread.sleep/***fun main(){ GlobalScope.launch { println("Hello world!2") //코루틴에서 실행 } println("Hello world!1") //main thread에서 실행 sleep(1000)}* Hello world!1* Hello world!2**fun main(){ runBlocking { launch { //얌체 - 양보하지 않는다. println("Hello world!2") //코루틴에서 실행 } } println("Hello world!1") //main th.. 2024. 10. 13.
Array, Generic, Collection) Map Map은 딕셔너리와 비슷한데, 키와 값으로 이루어진 원소들의 모음이다. [불변 Map - mapOf()]map의 출력 방식fun main(){ val mapA: Map = mapOf("One" to 1, "Two" to 2, "Three" to 3) //키와 값을 동시에 출력 for ((k, v) in mapA) { println("($k, $v)") } //(One, 1) //(Two, 2) //(Three, 3) //키만 출력 println(mapA.keys) //[One, Two, Three] //값만 출력 println(mapA.values) //[1, 2, 3]}  키가 중복된 경우 ⭐️: 이전 값은 무시하고 새로.. 2024. 10. 13.