본문 바로가기

Study_C, C++/홍정모의 따라하며 배우는 C언어

[홍정모의 따라하며 배우는 C언어] 6.10 다양한 대입 연산자들 (그리고 어셈블리 코드 확인법) ~ 6.12 제논의 역설 시뮬레이션 예제

728x90

6.10 다양한 대입 연산자들 (그리고 어셈블리 코드 확인법)

  • 어셈블리 코드 확인법 : 디버거 실행 후 우클릭 -> go to disassembly 혹은 Debug -> windows -> disassembly (Ctrl+Alt+D)

 

6.11 콤마 연산자

 

#include <stdio.h>

int main()
{
	int x, y, z;
	z = x = 1, y = 2;
	printf("x = %d, y = %d, z = %d \n", x, y, z);
	z = (x = 1), (y = 2);
	printf("x = %d, y = %d, z = %d \n", x, y, z);
	z = ((x = 1), (y = 2));		
	// z = (1, 2). comma operator는 가장 오른쪽에 있는 값이 전체 expression의 값임
	printf("x = %d, y = %d, z = %d \n", x, y, z);

	return 0;
}

 

Output : 
x = 1, y = 2, z = 1
x = 1, y = 2, z = 1
x = 1, y = 2, z = 2

 

 

#include <stdio.h>

int main()
{
	int i, j;
	i = 1;
	i++, j = i;		// comma is a sequence point (; 처럼) -> 즉 후위연산 계산 후 j = i 대입
	printf("%d %d\n", i, j);

	return 0;
}

 

Output :
2 2

 

 

6.12 제논의 역설 시뮬레이션 예제

 

#include <stdio.h>

int main()
{
	/* simulation of a moving object

	- speed = 1.0m/s
	- dt = 1.0s
	- distance traveled during dt = speed * dt

	-Step 1 : 1.0m/s * 1.0m/s = 1.0m/s, dis = 1.0m
	-Step 2 : 1.0m/s * 1.0m/s = 1.0m/s, dis = 1.0m + 1.0m = 2.0m
	-Step 3 : 1.0m/s * 1.0m/s = 1.0m/s, dis = 2.0m + 1.0m = 3.0m
	*/

	/* 
	Zeno`s Paradox -> 매초 시간 간격을 반으로 줄임

	- Step 1: 1.0 * 1.0 = 1.0, 1.0
	- Step 2: 1.0 * 0.5 = 0.5, 1.0 + 0.5 = 1.5
	- Step 2: 1.0 * 0.25 = 0.25, 1.5 + 0.25 = 1.75
		... ...
	*/

	const double speed = 1.0;
	const unsigned repeat_max = 50;		// 최대 반복 횟수 설정

	double dt = 0.01, time = 0.0;
	double dist_arch = 0.0;				// Achilleus의 시작점
	double dist_turtle = 1.0;			// Turtle의 시작점
	double speed_arch = 10.0, speed_turtle = 0.001;

	printf("Time = %fs, dt = %fs, Archilleus = %fm, turtle = %fm\n",
		time, dt, dist_arch, dist_turtle);

	for (unsigned i = 0; i < repeat_max; ++i) {
		
		dist_arch += speed_arch * dt;
		dist_turtle += speed_turtle * dt;
		time += dt;

		printf("Time = %fs, dt = %fs, Archilleus = %fm, turtle = %fm\n",
			time, dt, dist_arch, dist_turtle);
	
		dt *= 0.5;		// 곱하기가 나누기보다 빠르므로 보통 곱하기를 씀
	}
	return 0;
}

컴퓨터는 특성상 무한한 수를 다룰 수 없음 ex) 무한등비급수

Output : Time = 0.000000s, dt = 0.010000s, Archilleus = 0.000000m, turtle = 1.000000m
Time = 0.010000s, dt = 0.010000s, Archilleus = 0.100000m, turtle = 1.000010m
Time = 0.015000s, dt = 0.005000s, Archilleus = 0.150000m, turtle = 1.000015m
Time = 0.017500s, dt = 0.002500s, Archilleus = 0.175000m, turtle = 1.000018m
Time = 0.018750s, dt = 0.001250s, Archilleus = 0.187500m, turtle = 1.000019m
Time = 0.019375s, dt = 0.000625s, Archilleus = 0.193750m, turtle = 1.000019m
Time = 0.019688s, dt = 0.000313s, Archilleus = 0.196875m, turtle = 1.000020m
.
.
.
.
Time = 0.020000s, dt = 0.000000s, Archilleus = 0.200000m, turtle = 1.000020m

 

 

 

 


강의 출처 : https://www.inflearn.com/course/following-c/dashboard

 

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com