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

void viết 20:06 ngày 30/09/2018

Cái đề và giải thuật không liên quan đến nhau.

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ỉ ?

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.

Ngo Dinh Quyen viết 20:16 ngày 30/09/2018

Đ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ó 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.

Ngo Dinh Quyen viết 20:18 ngày 30/09/2018

Trong C/C++, vòng lặp bắt đầu từ 0 -> n-1.

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;

Chi Ngo viết 20:21 ngày 30/09/2018

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

Thành sky viết 20:06 ngày 30/09/2018

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ành sky viết 20:10 ngày 30/09/2018

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 ạ ?

  • Và gán giá trị này thường là mình chỉ gán trong trường hợp bài toán có vòng lặp for thôi đúng k ạ ?
    Hay còn dạng nào nữa ạ ?
    Em cảm ơn !
Thành sky viết 20:12 ngày 30/09/2018

@programmerit k vào đc blog a ơi

Liêu Đức Mạnh viết 20:12 ngày 30/09/2018

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.

Chi Ngo viết 20:09 ngày 30/09/2018

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.

Bài liên quan
0