30/09/2018, 18:06
Giải thích dùm ? về vòng lặp For
Đề bài : Tính gần đúng E mũ với độ xác định e^(-4) theo công thức tính :
E^x = 1 + x + x^2/2! + x^3/3! + ... + x^n/n!
…
=>> Thì đây là đoạn giả mã mà thầy e viết cho e :
2.S:=1.
3.For i:=1 to n do
If i chẵn then S:=S+1(2*i+1)
Else S:=S-1/(2*i+1);
4. Write (4*S)
End.
=> Điều e muốn hỏi ở đây là tại sao trong vòng lặp FOR của bài này hay bài khác đều phải gán cho giá trị của S=1. Có bài thì lại gán cho S=0 là thế nào ???
Còn cái vòng lặp i chạy từ 1 thì có phải là theo đề bài nó cho chạy từ 1 đúng k nhỉ ?
Hãy giải thích hộ em ? Em cảm ơn nhiều
Bài liên quan
Cái đề và giải thuật không liên quan đến nhau.
Cái đoạn mã của bạn người ta gọi là
pseudocode
. Vòng lặp bắt đầu từ1 -> n
.Trong C/C++, vòng lặp bắt đầu từ
0 -> n-1
.Có phải ý bạn là: các bài khác thì S = 0, còn bài này thì S = 1, nếu thế thì bạn viết nhầm rồi kìa…
Việc gán S = 0 hay S = 1 tuỳ thuộc vào cách giải bài toán của bạn…
Với đề bài này của bạn: E^x = 1 + x + x^2/2! + x^3/3! + … + x^n/n!
Nói đơn giản là: Tính tổng các phần tử trong dãy, biết các phần tử có dạng tổng quát:
X^i / i! với 0 <= i <= n. Bạn để ý 1 = X^0 / 0!
Do đó ý tưởng chính để giải bài này là:
Tạo một biến để lưu giá trị của tổng cần tìm: S, do ban đầu tổng này chưa có gì nên ta gán S = 0
Chạy vòng lặp: For i := 0 to n do, với mỗi giá trị của i, ta thay vào công thức tổng quát của các phần tử trong dãy, rồi cộng phần tử đó vào S
Sau khi cộng đến phần tử n thì ta thu được tổng S cần tìm
Còn trường hợp này thầy bạn gán S = 1 là vì thầy chạy vòng lặp từ 1 - > n chứ không phải từ 0 - > n( Tiết kiệm 1 vòng lặp) nghĩa là bắt đầu cộng từ phần tử thứ 2, bỏ qua phân tử thứ nhất bằng 1 nên tổng ban đầu phải gán = 1 để kết quả vẫn đúng.
Cái này tuỳ thuộc vào bài toán mà bạn… đâu phải lúc nào cũng bắt đầu từ 0 - > n;
Trong bài viết này mình có giải thích tại sao lại chọn S bằng 1 hay bằng 0. Hướng dẫn có cả code C và Python. http://chingovan.blogspot.com/2015/06/python-tim-gia-tri-cua-bieu-thuc-taylor.html
Theo e đc biết thì cái vòng lặp for này bắt đầu từ bao nhiêu là tùy thuộc vào đề bài mà a ?
Chứ cứ có phải trong C/C++ là đều bắt đầu từ 0->n đâu !
thế cái gán giá trị này là phụ thuộc vào yêu cầu cầu của bài toán phải k ạ? Có nghĩa là Vòng lặp bắt đầu từ bao nhiêu thì mình gán giá trị S cho nó bằng bấy nhiêu phải k ạ ?
Hay còn dạng nào nữa ạ ?
Em cảm ơn !
@programmerit k vào đc blog a ơi
Bạn có thể chú ý: E^x = 1 + x + x^2/2! + x^3/3! + … + x^n/n!
với giá trị đầu là 1 nên S=1 không phải là S=0. 1 số trường hợp bắt đầu với S=0 như tính tổng các số nào đó. với S=1 tính tích các số nào đó. nói chung tùy trường hợp mà dùng S=0 hoặc S=1.
Blogspot ở Việt Nam bị chặn (chắc là do bọn nó dùng để viết các bài về chính trị nhiều) nên bạn sử dụng Free DNS hoặc Google DNS mới vào được.