EPI00 개발일지
2022-1 0414 기초컴퓨터프로그래밍 문제풀이 본문
## 문제 1-1.
for i in range(1,16,2):
print(i,end=', ')
# 1부터 15까지 돌면서 i의 가장 오른쪽 비트가 1인지 확인하는 것보다 효율적인 알고리즘임.
# 가장 오른쪽 비트가 1인 정수는 곧 범위 내의 모든 홀수이기 때문임.
print('\n\n')
## 문제 1-2
# 최대 비트 자리수 m과 해당 비트의 수가 1인지 확인할 때 그 비트의 번호 n
def bit1nums(n,m):
r = []
for i in range(2**m):
if i&(2**n):
r.append(i)
return r
## 문제 1-2-1
print('비트 0이 1인 수 :',bit1nums(0,4))
bit0is1 = bool(int(input('당신이 생각한 수가 위에 포함됩니까?')))
## 문제 1-2-2
print('비트 1이 1인 수 :',bit1nums(1,4))
bit1is1 = bool(int(input('당신이 생각한 수가 위에 포함됩니까?')))
## 문제 1-2-3
print('비트 2이 1인 수 :',bit1nums(2,4))
bit2is1 = bool(int(input('당신이 생각한 수가 위에 포함됩니까?')))
print('비트 3이 1인 수 :',bit1nums(3,4))
bit3is1 = bool(int(input('당신이 생각한 수가 위에 포함됩니까?')))
r = 0
r+=1 if bit0is1 else 0
r+=2 if bit1is1 else 0
r+=4 if bit2is1 else 0
r+=8 if bit3is1 else 0
print('당신이 생각한 정수는 :',r)
import turtle
from random import randint as rand
from math import sqrt
from tqdm import tqdm
t = turtle.Turtle()
t.speed(0)
t.hideturtle()
rad = 200
dots = 100
##문제 2-1
def main():
global t
start = (0-(rad/2),0-(rad/2))
drawSqr(t,start,rad,'#000000')
drawQtrc(t,start,rad,'#FF0000')
randpi(t,start,dots,rad,'#A0DF00')
# 정사각형 그리기
def drawSqr(t,start,leng=100,color='#000000'):
t.pencolor(color)
t.penup()
t.goto(start)
t.setheading(0)
t.pendown()
for i in range(4):
t.forward(leng)
t.left(90)
# 붉은 사분원 그리기
def drawQtrc(t,start,rad=100,color='#000000'):
t.penup()
t.goto(start)
t.setheading(0)
t.forward(rad)
t.left(90)
t.pendown()
t.pencolor(color)
t.circle(rad,90)
## 문제 2-2
def print10randints():
for i in range(10):
print(rand(0,200),end=' ')
print()
## 문제 2-3
def int2sqrt(a):
print(sqrt(int(input('제곱근을 계산할 정수 입력 : '))))
## 문제 2-4
def randxy(mv=100):
return rand(0,mv),rand(0,mv)
def reversecolor(color):
r = '0x'+color[1:3]
g = '0x'+color[3:5]
b = '0x'+color[5:7]
rr = 255-int(r,16)
gr = 255-int(g,16)
br = 255-int(b,16)
return '#%02x%02x%02x'%(rr,gr,br)
def randpi(t,start,dots,mv=100,color='#000000',dotscale=2):
r=0
t.penup()
r = 0
for i in tqdm(range(dots)):
x,y = randxy(mv=mv)
t.goto(start[0]+x,start[1]+y)
if sqrt((x*x)+(y*y)) >= mv:
t.dot(dotscale,reversecolor(color))
r+=1
else:
t.dot(dotscale,color)
print('사분원 내에 표시되는 좌표의 개수 : %d개'%(dots-r))
print('이 결과로 얻어낸 π의 값 : %f'%(((dots-r)/dots)*4))
if __name__=='__main__':
main()
turtle.mainloop()
(문제에서 원 안과 밖의 점의 색을 다르게 하라고는 하지 않았지만 가시성을 위해 반대 색상으로 출력되게 함)
위 코드에서 전역변수 rad의 값을 700, dots의 값을 5000으로, main함수에서 randpi의 인수 중 dotscale을 10으로 추가로 설정하고 실행한 결과 :
'프로그램 개발?' 카테고리의 다른 글
RICK (0) | 2022.03.15 |
---|---|
숫자야구 (0) | 2021.09.22 |
파이썬 순열, 조합, 중복순열, 중복조합 +파스칼의 삼각형 계산하는 코드 (2) | 2021.08.09 |
삼각함수+다항함수 정적분 (파이썬, 코드 only) (1) | 2021.07.25 |
다항함수 정적분 프로그램 (C++, 코드 only) (0) | 2021.07.14 |