EPI00 개발일지

2022-1 0414 기초컴퓨터프로그래밍 문제풀이 본문

프로그램 개발?

2022-1 0414 기초컴퓨터프로그래밍 문제풀이

EPI00 2022. 4. 14. 11:20

## 문제 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으로 추가로 설정하고 실행한 결과 :