s = 0
s += (2*0 - 1)**2
s += (2*1 - 1)**2
s += (2*2 - 1)**2
s += (2*3 - 1)**2
s += (2*4 - 1)**2
print(s)
s = 0; k = 0
s += (2*k - 1)**2; k += 1
s += (2*k - 1)**2; k += 1
s += (2*k - 1)**2; k += 1
s += (2*k - 1)**2; k += 1
s += (2*k - 1)**2;
print(s)
s = 0; k = 0
while k < 5 :
s += (2*k - 1)**2
k += 1
print(s)
❶
❷
❸
หมุนทำซ้ำ 5 รอบ k เริ่มที่ 0 แต่ละรอบเพิ่ม 1
เมื่อ k เป็น 5 เงื่อนไขเป็นเท็จ ออกจากวงวน
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
6
รูปแบบ: วงวนเพื่อทำชุดคำสั่งซ้ำ ๆ
A
A
A
...
A
ทำซ้ำ
n
ครั้ง
k = 0
while k < n:
A
k += 1
k = 1
while k <= n:
A
k += 1
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
7
ตัวอย่าง: หาค่าน้อยสุดจากข้อมูล 5 ตัว
min_v = float(input())
v = float(input())
if v < min_v:
min_v = v
v = float(input())
if v < min_v:
min_v = v
v = float(input())
if v < min_v:
min_v = v
v = float(input())
if v < min_v:
min_v = v
print("min =", min_v)
min_v = float(input())
k = 0
while k < 4:
v = float(input())
if v < min_v:
min_v = v
k += 1
print("min =", min_v)
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
8
ตัวอย่าง: หาค่าน้อยสุดจากข้อมูลหลายตัว
4
10.0
11.2
15.5
12.4
10.0
11.2
15.5
12.4
q
บอกก่อนว่า
จะต้องรับกี่ตัว
รับจนจบที่ q
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
9
แบบฝึกหัด: หาค่าเฉลี่ยจากข้อมูลหลายตัว
Input Output
10.0
10.0
11.0
12.0
q
10.75
10.5
q
10.5
q
No Data
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
10
ตัวอย่าง: หารากที่สองด้วยวิธี bisection
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
11
ตัวอย่าง: หารากที่สองด้วยวิธี bisection
•
ต้องการหารากที่สองของ a
•
ให้ L = 0, U = a
•
คำตอบอยู้ใน [L, U]
•
x = จุดกึ่งกลางของช่วง
•
ทำข้างล่างนี้ซ้ำ ถ้า x
2
≠
a
–
ถ้า x
2
> a:
เปลี่ยนช่วงเป็น [L, x]
–
ถ้า x
2
< a:
เปลี่ยนช่วงเป็น [x, U]
–
x = จุดกึ่งกลางของช่วง
a
= 25
L
U
x
0
25
12.5
0
12.5
6.25
0
6.25
3.125
3.125
6.25
4.6875
4.6875
6.25
5.46875
4.6875
5.46875
5.078125
4.6875
5.078125
4.882813
4.882813
5.078125
4.980469
4.980469
5.078125
5.029297
4.980469
5.029297
5.004883
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
12
ตัวอย่าง: หารากที่สองด้วยวิธี bisection
•
ต้องการหารากที่สองของ a
•
ให้ L = 0, U = a
•
คำตอบอยู้ใน [L, U]
•
x = จุดกึ่งกลางของช่วง
•
ทำข้างล่างนี้ซ้ำ ถ้า x
2
≠
a
–
ถ้า x
2
> a:
เปลี่ยนช่วงเป็น [L, x]
–
ถ้า x
2
< a:
เปลี่ยนช่วงเป็น [x, U]
–
x = จุดกึ่งกลางของช่วง
a = float(input())
L = 0; U = a
x = (L + U)/2
while x**2 != a:
if x**2 > a:
U = x
else:
L = x
x = (L + U)/2
print(x)
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
13
ตัวอย่าง: หารากที่สองด้วยวิธี bisection
a = float(input())
L = 0; U = a
x = (L + U)/2
while x**2 != a:
if x**2 > a:
U = x
else:
L = x
x = (L + U)/2
print(x)
a = float(input())
L = 0; U = a
x = (L + U)/2
while
if x**2 > a:
U = x
else:
L = x
x = (L + U)/2
print(x)
ยังไม่ใกล้กัน
(x**2,a):
มีปัญหา
a
กับ
b
ยังไม่ใกล้กันเมื่อ
ให้
a
กับ
b
เป็นบวก
,
ε
และ
10
-9
abs(a-b) > 1e-9*max(a,b)
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
14
แบบฝึกหัด: หา log10a ด้วย bisection
เขียนโปรแกรมรับ
a
เพื่อหา log
10
a
ด้วย bisection
โดยที่ 1
≤
a
≤
600
ถ้าต้องการให้ท้าทายขึ้น ก็ให้
a
เกิน 600 มาก ๆ ได้
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
15
วงวน for
for k in range(start, stop, step) :
...
for c in a_string :
...
for e in a_list :
...
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
16
แบบที่ 1: for k in range(start, stop, step)
for k in range(4,100,2) :
...
k =
4, 6, 8, ..., 98
for k in range(100, 0,-1) :
...
k =
100, 99, 98, ..., 1
for k in range(5,100) :
...
k =
5, 6, 7, ..., 99
for k in range(100) :
...
k =
0, 1, 2, ..., 99
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
17
แบบที่ 1: for k in range(start, stop, step)
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
18
ตัวอย่าง: μ และ σ
input
5
10
11
13
10
12
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
20
ตัวอย่าง: Dot Product u·v
1 2 0 2 1
2 2 1 2 2
12.0
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
21
แบบฝึกหัด: ตรวจคำตอบปรนัย
เติมคำสั่งให้นับว่า sol กับ ans มีตัวตรงกันกี่ตัว
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
22
แบบที่ 2: for each_character in a_string
2110101 วิศวกรรมคอมพิวเตอร์ จุฬาฯ (14/09/67)
23
ตัวอย่าง: นับจำนวนตัวเลขในสตริง
s = input()
digit_counts = 0
for ch in s:
if "0" <= ch <= "9":
digit_counts += 1
print(digit_counts)