Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ผลรวมของซีรีส์ 1 + (1+3) + (1+3+5) + (1+3+5+7) + ...... + (1+3+5+7+...+ (2n-1)) ใน C++


ในปัญหานี้ เราได้รับตัวเลข n งานของเราคือสร้างโปรแกรมหาผลรวมของอนุกรม 1 + (1+3) + (1+3+5) + (1+3+5+7) + …… + (1+3+ 5+7+…+(2n-1)).

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

ป้อนข้อมูล: n =5

ผลลัพธ์: 55

ตามคำถาม สมมติว่าผู้ใช้ให้ตัวเลข 'n' แก่เรา และเราต้องเพิ่มชุดข้อมูล 1 + (1+3) + (1+3+5) + (1+3+5+7) + …… + (1+3+5+7+…+(2n-1)).

มาทำความเข้าใจความหมายของซีรีส์นี้กันก่อนดีกว่า

เราหา n=1 แล้วอนุกรมกลายเป็น 1

เราใช้ n=2 แล้วอนุกรมจะกลายเป็น 1+ (1+3) เพราะค่าของเทอมสุดท้าย 2n-1 สามารถคำนวณได้เป็น 2 คูณ 2 เกิน 1 ซึ่งก็คือ 3

ค่าของ n
2n-1
ซีรีส์กลายเป็น
1
1
1
2
3
1+ (1+3)
3
5
1+ (1+3) + (1+3+5)
4
7
1+ (1+3) + (1+3+5) + (1+3+5+7)

มาถึงการแก้ปัญหาก็สามารถแก้ไขได้สองวิธี หนึ่งจะเป็นทางคณิตศาสตร์ที่สามารถได้รับนิพจน์ของผลรวมทั้งหมดและด้วยเหตุนี้จึงไม่จำเป็นต้องวนซ้ำ อีกอันจะใช้สองลูปในโค้ด

เข้าใกล้โดยตรงโดยใช้ลูป

ดังจะเห็นได้ว่าระยะของซีรีส์ 1 + (1+3) + (1+3+5) + (1+3+5+7) + …… + (1+3+5+7+… +(2n-1)) เป็นอนุกรมนั่นเอง ดังนั้นเราจะใช้การวนซ้ำซ้อน วงนอกจะคำนวณเทอมที่สอง ในขณะที่วงในจะใช้ในการคำนวณคำนั้นเอง

ตัวอย่าง

#include<stdio.h>

int calcSum(int n){
   int sum = 0;
   for (int i = 1; i <= n; i++) {
      // the first value of the term is always 1
      int value = 1;
      for (int j = 1; j <= i; j++) {
         sum += value;
         // next term
         value += 2;
      }
   }
   return sum;
}

int main(){
   int n = 35;
   printf("The sum of the series upto %d is %d ", n , calcSum(n));

}

ผลลัพธ์

The sum of the series upto 35 is 14910

การทำงานของโปรแกรม:

  • ผู้ใช้ป้อนค่าของ n. สมมุติว่า 2.
  • ตัวแปรชื่อ “sum” ถูกประกาศด้วยค่าเริ่มต้นเป็น 0
  • เมื่อ i=1 สำหรับเงื่อนไข i<=n เป็นจริงและด้วยเหตุนี้การวนซ้ำจะทำงาน
    • ค่าของตัวแปร “ft” คือ 1.
    • ค่าแรกของ j คือ 1 เงื่อนไขเป็นจริงเนื่องจากค่าของ j เท่ากับค่าของ i ซึ่งก็คือ 1 ดังนั้น j loop จะทำงาน
    • ค่าของ ft จะถูกบวกเข้ากับผลรวม ดังนั้นผลรวมจึงกลายเป็น 0+1 เท่ากับ 1
    • ค่าของ ft ถูกแก้ไขและเพิ่มขึ้น 2 ดังนั้นค่าใหม่ของมันคือ 1+2 =3
    • ค่าของ j เพิ่มขึ้น 1 และกลายเป็น 2
    • แต่ตอนนี้เงื่อนไขของ inner for loop นั้นเป็นเท็จ ดังที่ j>i ตอนนี้ ดังนั้นจึงออกจากลูป j
  • ตอนนี้ค่าของ i เพิ่มขึ้น 1 และกลายเป็น 2 ดังนั้น i=2 และเงื่อนไขเป็นจริง i<=n จึงเข้าสู่ลูป
    • ค่าของตัวแปร “ft” ถูกกำหนดเป็น 1 อีกครั้ง
    • เมื่อค่า j เป็น 1 การวนซ้ำจะทำงานเป็น j
    • ค่าของ ft จะถูกบวกเข้ากับผลรวม มูลค่าของผลรวมเป็น 1 แล้ว ดังนั้นค่าใหม่ของผลรวมคือ 1+1 =2
    • ค่าของ ft ถูกแก้ไขและเพิ่มขึ้น 2 ดังนั้นค่าใหม่ของ ft จะกลายเป็น 1+2 =3
    • ค่าของ j เพิ่มขึ้น 1 และกลายเป็น 2 เงื่อนไข for loop เป็นจริงเมื่อ j เท่ากับ i
    • ค่าของ ft จะถูกบวกเข้ากับผลรวม มูลค่าของผลรวมเป็น 2 แล้ว ดังนั้นค่าใหม่ของผลรวมคือ 2+3 =5
    • ค่าของ ft ถูกแก้ไขและเพิ่มขึ้น 2 ดังนั้นค่าใหม่ของ ft จะกลายเป็น 3+2 =5
    • วนซ้ำอยู่
  • ตอนนี้ค่าของ i เพิ่มขึ้น 1 และกลายเป็น 3 ดังนั้น i=3 และเงื่อนไขเป็นเท็จ i<=n จึงออกจากลูป
  • พิมพ์ข้อความและมูลค่ารวมบนหน้าจอ

วิธีแก้ปัญหาทางคณิตศาสตร์:

การค้นหาวิธีแก้ปัญหาทางคณิตศาสตร์สำหรับคำถามแล้วเขียนโค้ดจะทำให้โค้ดของเรามีความเรียบง่ายขึ้นมาก

ให้เทอมทั่วไป Tn ของซีรีส์

ก่อนจะคืบหน้าเราควรรู้ว่าชุดที่ 1+3+5+7+9…..(2n-1) จะมีผลรวมเป็น n 2, และซีรีส์

1 2 +2 2 +3 2 +4 2 ….n 2 จะมีผลรวมของ i 2 =

โปรแกรมแสดงการทำงานของโค้ดของเรา

ตัวอย่าง

#include<stdio.h>

int calcSum(int n){
   // required sum
   return (( (n) * (n + 1) * (2*n + 1 ) )/6 ) ;
}

int main(){
int n = 35;
   printf("The sum of the series upto %d is %d ", n , calcSum(n));

}

ผลลัพธ์

The sum of the series upto 35 is 14910

การทำงานของโค้ดด้านบน:

ตัวอย่างเช่น สมมติว่าผู้ใช้ป้อนค่าของ n เป็น 2 จากนั้นค่าของ 2n-1 คือ 3 และชุดข้อมูลจะกลายเป็น 1+ (1+3)

แต่ขอให้เราเข้าใจและรับผลรวมผ่านรหัส

  • เรียกฟังก์ชัน sum() ด้วยค่า 2
  • ฟังก์ชันจะคำนวณค่าเป็น 5 และคืนค่ากลับไปเป็นฟังก์ชันหลัก
  • ข้อความพร้อมคำตอบจะพิมพ์บนหน้าจอ