ੈ✩‧₊˚ MIT 챌린지/💻 Computer Science

1강.Computation이란 무엇인가? | MIT 6.0001

샨샨 2022. 3. 8. 17:39
반응형

컴퓨터는 어떤 일을 하는가? What does a computer DO?

기본적으로,

  • 1초에 몇 십억의 계산을 수행한다. (덧셈, 뺄셈, 곱셈 등등...)
  • 약 100 기가바이트의 계산 결과를 기억한다.

컴퓨터 계산(Calculations) 이란?

  • 언어에 내장되어있다. (built- in to the language like python, c++...)
  • 프로그래머가 정의하는 것 (ones that you define as the programmer)

"컴퓨터는 여러분이 컴퓨터에게 말한 것만 알 수 있고 수행한 것만 할 수 있다."

"computers only know what you tell them and only do what you tell them to do"


지식의 형태 (Types of Knowledge)

  • 선언적 지식(declarative knowledge)은 사실을 서술하는 문장이다. ex) y * y 는 x이다.
  • 절차적 지식(imperative knowlege) "어떻게" 문제를 해결하는지에 관한 지식이다. 

컴퓨터 프로그램의 종류

- 정적 프로그램(fixed program) computer

ex) calculator (only know 덧셈, 뺄셈, 곱셈, 나눗셈)

- 내장 프로그램(stored program) computer

ex) 명령어를 저장한 후 실행하는 프로그램, 명령어의 순서에 따라 주변기기와 상호작용하며 프로그램을 실행


컴퓨터의 기본 구조 ( Basic Machine Architecture)

메모리(Memory) : 많은 데이터 & 순차적인 명령어를 포함하고 있음 contains bunch of datas & sequences of instruction

산술논리장치(ALU) : 연산을 하는 장소 (덧셈, 뺄셈 등..) the place all of operations are done

제어장치 (Control Unit) : 프로그램 카운터(PC)를 포함하고 있다. includes program counter (PC)

 

연산 과정 (Process of operation)

1) 명령어들이 메모리에 입력되면 명령어의 첫 번째 줄부터 시작한다. -> 첫 번째 명령어 제어장치로 보냄

2) 제어장치(Control Unit)에 첫번째 명령어가 들어오면 산술논리장치(ALU)로 보낸다.

3) 그럼 산술논리장치(ALU)는 처리할 명령어를 위한 data를 메모리로부터 받는다.

4) ALU에서 몇 가지 산술연산을 한 뒤에 결과값을 메모리로 다시 보낸다.

5) 모든 연산이 끝나면 제어장치에 신호를 줘서 pc 값을 +1한다.

6) 그 뒤로 다시 메모리로 돌아가 다음 instruction으로 갈지(next), 다시 instruction을 앞으로 돌아갈지(back) 해당 명령어를 넘어갈지(skip) 결정한다.

7) 모든 연산이 끝나면 Output으로 보낸다.


내장 프로그램 컴퓨터 (Stored program computer)

*내장 프로그램 컴퓨터란? 저장되어 있는 명령어의 집합이 있는 컴퓨터*

1) 산술논리연산 명령어 (arithmetic and logic)

2) 간단한 테스트를 위한 명령어 (simple test)

3) 데이터를 옮기기 위한 명령어 (moving data)

 

* 인터프리터(interpreter)가 명령어를 순서대로 실행한다.

- 조건문에 따라 수행 후, 명령어가 끝나면 DONE

 

기본적인 컴퓨터의 동작

- 튜링(Turing)은 6개의 primitive로 어떤 것이든 컴퓨팅할 수 있다는 것을 증명해냈다.

(move left, move right, read, write, scan, and do nothing.)

- 현대의 프로그래밍 언어는 원시 프로그래밍언어보다 훨씬 더 편리하다.

- 하나의 언어에서 컴퓨팅할 수 있는 것은 다른 프로그래밍 언어에서도 컴퓨팅할 수 있다!! (Powerful!!!)

 

프로그래밍 언어란?

- 기본적인 구조

 * 영어 : 단어들

 * 프로그래밍 언어 : 숫자, 문자열, 연산자

 

"프로그래밍 할 때 문법과 정적의미를 고려해야한다"

문법 (syntax)

 * 영어 : "cat dog boy" -> 문법적 오류(syntatically invalid) "cat hugs boy" -> 문법적으로 맞음 (syntatically valid)

* 프로그래밍 언어 : "hi"5 -> 문법적 오류(syntatically invalid) "3.2*5" -> 문법적으로 맞음 (syntatically valid)

 

정적의미 (static sementic) : 문법적으로는 맞지만, 말이 되는지 안되는지 판단

* 영어 : "I are hungry" -> 문법적으로는 맞지만, 의미적으로 틀리다. (syntactically valid, but static semantic error)

* 프로그래밍 언어 : 3+"hi" -> 문법적으로는 맞지만, 의미적으로 틀리다. (syntactically valid, but static semantic error)

-> 말이 안되기 때문

 

프로그래밍의 여러가지 에러 

- 문법적 에러 (syntatic errors) : 흔하고 찾기 쉽다.

- 정적 의미 에러 (static semantic errors) : 몇몇 언어는 프로그램을 실행하기 전에 이 에러를 찾아낸다. 예측할 수 없는 결과를 만들어 낸다.

- 의미에 오류가 있는 것은 아니지만 명령어가 프로그래머가 의도한 바와 다른 의미로 해석될 때 : 1) 프로그램 중단, 2) 프로그램이 끝없이 돌아감, 3) 결과를 내지만 예상했던 결과가 아님

 

파이썬 명령어의 종류 (Type of Object)

- 명령어의 종류는 아주 다양하다. (scalar vs non-scalar)

- int : 정수 ex) 5

- float : 실수 ex) 3.27

- bool : 논리자료형 ex) 참과 거짓 (True and False)

- NoneType : 특별하고, 하나의 값을 가짐 NONE

- type() 이라는 statement를 사용하면 해당 수의 object를 알 수 있음

예시

5의 type찾고싶으면 type(5)치면 됨

결과 : int

 

Type 을 바꾸고 싶을 때는 어떻게 해야할까?

- 파이썬에서는 쉽게 자료형의 타입을 바꿀 수 있다.

- float(3) -> 3.0

- int (3.9) -> 3

 

파이썬으로 콘솔에 값 프린팅하는 법

프린팅이란? 유저와 소통하는 방법 how you interact with user 

예시 1)

In [11] : 3+2

Out [11] : 5 

-> 유저와 소통한 것이 아니라 shell에서만 값을 출력한 것임 (프린팅이 아님)

예시 2)

In [12] : print(3+2)

5

-> Out이라는 쉘이 나오지 않은 것은 확실하게 유저에게 값을 프린트했다는 뜻임

 

"파이썬에서 값을 프린트 하고 싶다면 print() 를 이용하면 된다."

 

Expression & Operator

<object> <operator> <object> 형태로 만들 수 있다.

- Sum : i+j

- Difference : i-j

- Product : i*j

- Division : i/j (결과는 항상 float)

- Remainder : i%j

- Power : i**j

"우선순위는 수학과 같고 우선순위를 바꾸기 위해서는 괄호를 이용할 것" (** ☞ *   /   +,-)

"precedence is same as math, if you want to change precedence, use parenthesis"

 

* 예시 : 이 때, 마지막 radius 값은 어떻게 될까?

pi = 3.14159

radius = 2.2

area = pi*(radius**2)

radius = radius+1

1) 위의 그림처럼 radius 값은 re-bind된다.

2) radius의 이전 값인 2.2는 메모리에는 저장되어 있지만, 2.2를 변수를 이용해 다룰 수는 없다.

3) area 값은 다시 연산하지 않는 이상 radius의 값이 re-bind되었다고 값이 변하지는 않는다.


이번 강의 lecture quiz 풀어보기

 

Lecture 1 | In-Class Questions and Video Solutions | Introduction to Computer Science and Programming in Python | Electrical Eng

This page contains in-class questions for Lecture 1.

ocw.mit.edu

1강 과제

- pset 0  (finish!!!)

- 교재 Chapters 1 and 2.1 Reading

 

@Copyright MIT License

 

반응형