Kỹ thuật cộng dồn, nhân dồn trong pascal và C- Bước đầu làm quen với Pascal, C
Khi mới bước đầu làm quen với Pascal, mảng cộng dồn c++ hay bất kì một ngôn ngữ lập trình nào khác, sau khi đã nắm được phần lý thuyết cơ bản, bước vào phần thuật toán thì theo mình bạn phải học ngay kỹ thuật cộng dồn, nhân dồn, đây là một kỹ thuật hết sức đơn giản, tuy nhiên lại có mặt trong hầu hết những bài toán lập trình, gần như trong bài tập nào các bạn cũng phải sử dụng đến thuật toán cộng gom, nhân gom này. Hãy tham khảo với onthihsg nhé.
Video phương pháp cộng dồn
Để cho dễ hiểu ta hãy cùng tìm hiểu bài toán sau:
Tính tổng từ 1 đến n (với n là số tự nhiên được người dùng nhập vào)
Giải quyết bài toán bằng công thức toán học
Nếu giải quyết bài toán bằng kiến thức toán học thì kết quả sẽ như sau:
S = 1 + 2 + ... + n = n(n+1)/2
Vậy trong pascal ta chỉ cần viết lệnh xuất ra màn hình kết quả trên là được nhỉ
writeln('S = 1 + 2 + ... + n = ', n*(n+1)/2);
Tất nhiên là cũng đúng, chẳng sao cả tuy nhiên chẳng “tin học” một tí nào cả, ta hãy cùng xem đoạn câu lệnh trong Pascal để giải quyết bài toán trên:
Giải quyết bài toán bằng Pascal hay C
Đoạn mã trong Pascal
S:=0; for i:=1 to n do S:=S+i;
Đoạn mã trong C
int i=0, s=0,n; printf("Nhap n:"); scanf("%d", &n); while(i++<n) s=s+i; printf("Tong la: %d\n", s);
Ý nghĩa của đoạn chương trình trên như sau:
- Khởi động biến S (lưu tổng từ 1 đến n) bằng 0
- Lần lượt cộng dồn các số từ 1 đến n vào S
Các bạn hình dung cách làm này giống như cách làm của các em học sinh lớp 1 nếu ta yêu cầu các em cộng các số từ 1 đến 100 thì các em sẽ tiến hành lấy 1 + 2 rồi cộng thêm 3, cộng thêm 4, …. Oh máy tính hiện đại thế mà làm giống học sinh lớp 1 vậy sao, đúng vậy các bạn, máy tính chỉ đơn giản làm những phép tính cộng trừ mà thôi, tuy nhiên nó xử lý rất nhanh việc tính tổng từ 1 đến 1000 như thuật toán trên chỉ mấy chưa tới một giây.
Hoàn toàn tương tự ta cũng có thuật toán nhân dồn chỉ có điều là biến S bây giờ phải khởi động bằng 1 thay vì bằng 0 như trong thuật toán cộng dồn, cái này có lẽ bạn nào cũng hiểu.
Code nhân dồn bằng pascal tính tích các số từ 1 đến n (n giai thừa)
S:=1; for i:=1 to n do S:=S*i;
Đoạn mã trong C
while(i++<n) s=s*i;
Vậy là bạn đã hiểu Kỹ thuật cộng dồn, nhân dồn trong pascal và C rồi nhé hãy cùng tham khảo những bài tập có sử dụng kĩ thuật này để hiểu kĩ hơn nào