$\color{red}{\fbox{Tin Học 8}\text{Topic Ôn Thi Học Kỳ}}$

Thảo luận trong 'Tin học cấp II' bắt đầu bởi lamdetien36, 7 Tháng mười hai 2013.

Lượt xem: 4,279

Trạng thái chủ đề:
Không mở trả lời sau này.

  1. lamdetien36

    lamdetien36 Guest

    Sở hữu bí kíp ĐỖ ĐẠI HỌC ít nhất 24đ - Đặt chỗ ngay!

    Đọc sách & cùng chia sẻ cảm nhận về sách số 2


    Chào bạn mới. Bạn hãy đăng nhập và hỗ trợ thành viên môn học bạn học tốt. Cộng đồng sẽ hỗ trợ bạn CHÂN THÀNH khi bạn cần trợ giúp. Đừng chỉ nghĩ cho riêng mình. Hãy cho đi để cuộc sống này ý nghĩa hơn bạn nhé. Yêu thương!

    Last edited by a moderator: 10 Tháng mười hai 2013
  2. lamdetien36

    lamdetien36 Guest

    Đối với học sinh thì môn Tin, hay chính xác hơn là Pascal, là một trong những môn khó xơi nhất. Vì vậy mình lập topic nhằm ôn tập lại các kiến thức cơ bản và luyện tập với một số đề thi học kỳ.
    Dự kiến topic sẽ gồm các phần sau:

    1. Lý thuyết: định nghĩa ngôn ngữ lập trình, thuật toán,...
    2. Thiết lập thuật toán: cách xác định bài toán, cách xây dựng thuật toán và một số ví dụ
    3. Chuyển đổi các biểu thức từ Pascal -> biểu thức toán học và ngược lại.
    4. Viết các chương trình đơn giản: sử dụng biến, hằng, sử dụng câu lệnh điều kiện IF-THEN-ELSE.
    Và nếu các bạn có bài nào muốn hỏi thì cứ việc post vào đây :D Lưu ý là các bài Bồi dưỡng thì đừng vào đây :D
     
  3. abluediamond

    abluediamond Guest

    Ta mở hàng nhé :)).

    Viết chương trình giải hệ phương trình bậc nhất hai ẩn.
     
  4. lamdetien36

    lamdetien36 Guest

    Thi học kỳ tin 11 à :)) Ta thề ta hứa ta đảm bảo là lớp 8 không bao giờ ra bài này :))
    Mã:
    var
        a, b, c, d, e, f, dd, dx, dy: integer;
    begin
        writeln('Nhap He So Phuong Trinh Thu Nhat: '); readln(a, b, c);
        writeln('Nhap He So Phuong Trinh Thu Hai : '); readln(d, e, f);
        dd := a * e - b * d;
        dx := c * e - b * f;
        dy := a * f - c * d;
        if dd <> 0 then
        begin
            writeln('X = ', dx / dd : 0 : 6);
            writeln('Y = ', dy / dd : 0 : 6);
        end
        else
        begin
            if (dx <> 0) or (dy <> 0) then
                writeln('He Vo Nghiem')
            else
                writeln('He Vo So Nghiem');
        end;
        readln
    end.
     
  5. lamdetien36

    lamdetien36 Guest

    Phần 1:
    LÝ THUYẾT

    Sau đây là một số câu hỏi lý thuyết mà đề có thể ra:

    1) Con người ra lệnh cho máy tính như thế nào ?
    - Con người chỉ dẫn cho máy tính thực hiện công việc thông qua các lệnh.

    2) Chương trình là gì ?
    - Chương trình là một dãy các lệnh mà máy tính có thể hiểu và thực hiện được.

    3) Tại sao cần phải viết chương trình ?
    - Các công việc máy tính cần thực hiện rất phức tạp, đa dạng. Một lệnh không đủ để chỉ dẫn cho máy tính thực hiện. Vì vậy ta cần phải gộp nhiều lệnh lại thành một chương trình. Đồng thời nó giúp con người điều khiển máy tính một cách đơn giản, hiệu quả hơn.

    4) Ngôn ngữ lập trình là gì ? Nêu vài ngôn ngữ lập trình mà em biết ?
    - Ngôn ngữ lập trình là ngôn ngữ dùng để viết các chương trình máy tính.
    - Một vài ngôn ngữ lập trình: C, C++, Java, Basic, Pascal, ...

    5) Tại sao cần tạo ra NNLT trong khi có thể điều khiển máy tính bằng ngôn ngữ máy ?
    - Ngôn ngữ máy là những dãy bit khô khan, khác xa ngôn ngữ tự nhiên nên khó nhớ, khó sử dụng.
    - Vì vậy người ta tạo ra NNLT có thể sử dụng những từ có nghĩa, dễ nhớ, dễ hiểu.

    6) NNLT gồm những phần nào ?
    - Gồm Bảng chữ cái và Các quy tắc viết viết chương trình.

    7) Phân biệt từ khóa và tên ?

    [​IMG]

    8) Nếu cấu trúc chung của chương trình ?

    Gồm
    - Phần khai báo: phần này không bắt buộc phải có, nếu có thì gồm các lệnh để:

    • Khai báo tên chương trình
    • Khai báo các thư viện (chứa các lệnh viết sẵn có thể sử dụng trong chương trình)
    • Một số khai báo khác (khai báo biến, hằng, ..)
    - Phần thân: bắt buộc phải có. Phần khai báo (nếu có) phải đặt trước phần này. Phần này gồm các câu lệnh máy tính cần thực hiện.


    9) Biến là gì ? Hằng là gì ? Cách khai báo biến và hằng trong Pascal ?
    - Biến và hằng là các đại lượng được đặt tên dùng để lưu trữ dữ liệu. Tuy nhiên giá trị của biến có thể thay đổi, còn giá trị của hằng được giữ nguyên trong suốt quá trình thực hiện chương trình.
    - Cách khai báo biến: var <tên biến> : <kiểu dữ liệu>;
    - Cách khai báo hằng: const <tên hằng> = <giá trị>;


    10) So sánh biến và hằng ?
    - Giá trị của biến có thể thay đổi, còn giá trị của hằng được giữ nguyên trong suốt quá trình thực hiện chương trình.


    11) Thuật toán là gì ? Nêu các bước giải bài toán trên máy tính ?
    - Thuật toán là dãy hữu hạn các thao tác cần thực hiện để giải một bài toán.
    - Các bước giải bài toán trên máy tính:

    1. Xác định bài toán: xác định thông tin đã cho (INPUT) và thông tin cần tìm (OUTPUT)
    2. Mô tả thuật toán: tìm cách giải bài toán, mô tả bằng các lệnh cần thực hiện.
    3. Viết chương trình: dựa vào thuật toán ở trên, viết chương trình bằng một NNLT mà ta biết.


    12) Cấu trúc rẽ nhánh dùng để làm gì, gồm những dạng nào ? Trong NNLT Pascal, cấu trúc rẽ nhánh được thể hiện như thế nào ?
    - Cấu trúc rẽ nhánh dùng để chỉ thị cho máy tính thực hiện các hoạt động khác nhau theo một điều kiện cụ thể có được thỏa mãn hay không.
    - Cấu trúc rẽ nhánh có 2 dạng: dạng thiếu và dạng đầy đủ.
    - Trong Pascal, CTRN được thể hiện bằng câu lệnh điều kiện:

    • Dạng thiếu: IF <điều kiện> THEN <câu lệnh>
    • Dạng đầy đủ: IF <điều kiện> THEN <câu lệnh 1> ELSE <câu lệnh 2>
     
  6. lamdetien36

    lamdetien36 Guest

    Phần 2:
    MỘT SỐ BÀI TẬP VỀ TÌM LỖI SAI VÀ CHUYỂN ĐỔI BIỂU THỨC.

    I. TÌM LỖI SAI:
    1) Trong các tên sau, tên nào sai, tên nào đúng (trong NNLT Pascal):
    - a : đúng
    - Tamgiac : đúng.
    - 8a : sai vì tên không được bắt đầu bằng chữ số.
    - Tam Giac : sai vì tên không được chứa dấu cách.
    - beginprogram : đúng.
    - end : sai vì trùng với từ khóa end.
    - b1 : đúng.
    - abc : đúng.
    - Begin : sai vì trùng với từ khóa begin (trong NNLT Pascal không phân biệt chữ thường và chữ hoa, nên begin và Begin là một)
    - ConstVar : đúng.
    2) Chương trình sau có hợp lệ không ?
    a)
    Mã:
    begin
    end.
    ==> Hoàn toàn đúng, vì phần thân có đủ begin end, còn lệnh mà chưởng trình thực hiện là lệnh rỗng (không làm gì cả).
    b)
    Mã:
    begin
        program a;
        write('Chao');
    end.
    ==> Sai vì phần khai báo nằm trong phần thân ==> Sai cấu trúc chương trình.
    c)
    Mã:
    program b;
        write('Chao');
    end.
    ==> Sai vì không có begin để bắt đầu phần thân chương trình.
    3) Các câu lệnh khai báo sau đúng hay sai:
    a) var a: integer;
    ==> Đúng
    b) var a = real;
    ==> Sai vì khai biến thì phải theo cú pháp var <tên biến> : <kiểu dữ liệu>;
    c) const a = 3.14;
    ==> Đúng
    d) const a: integer;
    ==> Sai vì phải khai báo giá trị cho hằng.
    e) const a : 3.14;
    ==> Sai, phải thay dấu : thành dấu =

    II. CHUYỂN ĐỔI BIỂU THỨC:
    Đây chỉ là phần phụ để hỗ trợ cho việc viết chương trình sau này, nên mình chỉ cho vài ví dụ, các bài tập còn lại các bạn có thể tự làm :D Nếu muốn thì post lên đây mình kiểm tra cho :D
    1) Chuyển từ toán sang Pascal:
    $\dfrac{(10 + 2)^2}{(3 + 1)}$ ==> (10 + 2) * (10 + 2) / (3 + 1)
    $a^2 + b - \sqrt{c^3} + 1,5$ ==> a*a + b - sqrt(c*c*c) + 1.5
    $\dfrac{x}{y} + \dfrac{\dfrac{x^3}{y^2}}{\dfrac{3}{2}}$ ==> x/y + ((x*x*x)/(y*y))/(3/2)
    2) Chuyển từ Pascal sang toán:
    (1/x)/(x/y) + ((x*x*x)/(y*y))/(3/2*x) ==> $\dfrac{\dfrac{1}{x}}{\dfrac{x}{y}} + \dfrac{\dfrac{x^3}{y^2}}{\dfrac{3}{2}.x}$
    (a - 1)/(a*a+a+1) - (3*(a+1)*(a+1))/(1 - a*a*a)-3/(a-1) ==> $\dfrac{a-1}{a^2+a+1}-\dfrac{3(a+1)^2}{1-a^3}-\dfrac{3}{a-1}$
    Bài tập luyện tập: Chuyển các bất đẳng thức trong topic này sang Pascal :D
    http://diendan.hocmai.vn/showthread.php?p=2428170#post2428170
    Nếu có nhu cầu kiểm tra thì cứ inbox mình, mình check cho :D

    Mai mình sẽ post tiếp phần 3 là một vài thuật toán cơ bản + cách lập thuật toán và phần 4 bài tập viết chương trình + dự đoán kết quả + tìm lỗi sai trong chương trình :D
     
  7. abluediamond

    abluediamond Guest

    [​IMG]

    Mã:
    a/(b*c+1) + b/(a*c+1) + c/(a*b+1)<=2
    Mã:
    a/b + b/c + /a >= (a+b+c)/(3sqrt(a*b*c)) 
     
    Last edited by a moderator: 7 Tháng mười hai 2013
  8. lamdetien36

    lamdetien36 Guest

    Cái thứ 3 ngươi chuyển sai rồi :D Trong pascal không có căn bậc ba :D
    Phải chuyển thành lũy thừa 1/3, tức là $(abc)^{\dfrac{1}{3}}$ :D
    Tuy nhiên trong Pascal cũng không có hàm lũy thừa với số mũ thực, nên phải chuyển thành: $e^{ln(abc).\dfrac{1}{3}}$ :D
    Cái này viết trong Pascal là
    Mã:
    exp(ln(a*b*c)*1/3)
    Tóm lại biểu thức đó viết lại là:
    Mã:
    a/b + b/c + c/a >= (a+b+c)/(exp(ln(a*b*c)*1/3))
    Đau não vl @-)
     
  9. lamdetien36

    lamdetien36 Guest

    Tiếp khoảng cỡ 2 bài bình thường và 2 bài hại não nữa rồi mình sẽ chuyển sang phần thuật toán :D
    Mọi người thử chuyển cái này đi :))
    $$(a+b+c)\left(\dfrac{1}{a}+\dfrac{1}{b}+\dfrac{1}{c}\right)\ge 9+3\sqrt[3]{\left(\dfrac{(b-a)(c-b)(a-c)}{abc}\right)^2}$$
     
  10. abluediamond

    abluediamond Guest

    Bài tập buổi sáng [​IMG].

    Mã:
    (a + b + c)*(1/a + 1/b + 1/c) >=  9 + 3*(exp(ln(((b - a)(c - b)(a - c)/(a*b*c))^2)*1/3))
    Thuật toán nhanh và ngay [​IMG].
     
    Last edited by a moderator: 8 Tháng mười hai 2013
  11. lamdetien36

    lamdetien36 Guest

    Lại nhầm rồi :D
    Làm gì có phép ^2 trong Pascal :))
    Phải là:
    Mã:
    (a + b + c)*(1/a + 1/b + 1/c) >=  9 + 3*(exp(ln(sqr((b - a)(c - b)(a - c)/(a*b*c)))*1/3)) 
     
  12. abluediamond

    abluediamond Guest

    What the con hợi [​IMG]. Bài khác đê tên Dâm Tặc kia [​IMG].

    Sao lâu thế, mi đi tán gái rồi à [​IMG].
     
    Last edited by a moderator: 8 Tháng mười hai 2013
  13. lamdetien36

    lamdetien36 Guest

    Gái là gì :p
    Chuyển nốt bài này đi rồi qua thuật toán [​IMG]

    $\dfrac{(6x+4y+3z)^3}{12^3} - \dfrac{(6x+4y)^3+(4y+3z)^3+(6x+3z)^3}{24^3} +xyz$
     
  14. abluediamond

    abluediamond Guest

    Ngươi vào Voz làm cái gì đấy [​IMG].

     
  15. lamdetien36

    lamdetien36 Guest

    Sai mãi thế [​IMG] 6*x chứ không phải là 6x, tương tự với 4y, 3z [​IMG]
    Sai mỗi chỗ đó thôi [​IMG]
    Mà thôi, để ta soạn phần thuật toán [​IMG]
    Mà ta có vào Voz đâu
    [​IMG]
     
  16. lamdetien36

    lamdetien36 Guest

    Phần 3:
    THUẬT TOÁN


    I. NHẮC LẠI LÝ THUYẾT

    - Định nghĩa: Thuật toán là dãy hữu hạn các thao tác cần thực hiện theo một trình tự xác định để nhận được kết quả cần tìm từ những điều kiện cho trước.
    - Các bước giải bài toán trên máy tính:

    1. Xác định bài toán: xác định thông tin đã cho (INPUT) và thông tin cần tìm (OUTPUT)
    2. Mô tả thuật toán: tìm cách giải bài toán, mô tả bằng các lệnh cần thực hiện.
    3. Viết chương trình: dựa vào thuật toán ở trên, viết chương trình bằng một NNLT mà ta biết.
    II. CÁCH THIẾT LẬP MỘT THUẬT TOÁN:
    Gồm xác định bài toán và mô tả thuật toán.

    - Xác định bài toán: chỉ ra INPUT và OUTPUT, phần này thì các bạn cứ đọc đề kỹ, thấy cái nào đề đã cho thì nhét vào phần INPUT, còn phần đề yêu cầu tìm thì nhét vào OUTPUT, ví dụ:
    - Mô tả thuật toán: phần này các bạn cứ thử làm bằng tay với một vài ví dụ, sau đó nhận xét cách mà mình làm, từ đó mô tả khái quát thành thuật toán. Ví dụ với bài toán nêu trên:
    III. MỘT SỐ VÍ DỤ KHÁC.
    1) Đổi giá trị 2 biến x, y.
    INPUT: 2 biến x, y có giá trị tương ứng là a, b.
    OUTPUT: 2 biến x, y có giá trị tương ứng là b, a.

    Ta có thể làm như sau:
    Mã:
    B1. z <-- x. (z sẽ mang giá trị a)
    B2. x <-- y. (x sẽ mang giá trị của b)
    B3. y <-- z. (y sẽ mang giá trị của z, cũng tức là giá trị a)
    Hoặc có thể làm như sau:
    Mã:
    B1. x <-- x + y (x sẽ mang giá trị a + b).
    B2. y <-- x - y. (y sẽ mang giá trị a + b - b = a)
    B3. x <-- x - y. (x sẽ mang giá trị a + b - y(hiện tại) = a + b - a = b)
    Sau khi thực hiện 1 trong 2 thuật toán trên thì x, y sẽ đổi giá trị cho nhau.

    2) Tìm GTLN của một dãy số.
    INPUT: Dãy A gồm các số $A_1, A_2, ..., A_N (N > 0)$
    OUTPUT: Giá trị lớn nhất trong các số $A_1, A_2, ... A_N$.

    Thuật toán: tương tự như ví dụ tìm GTLN của 3 số, nhưng mở rộng ra cho N số.
    Mã:
    B1. max <-- A_1. i <-- 1.
    B2. i <-- i + 1.
    B3. Nếu i > N thì thông báo max rồi kết thúc thuật toán.
    B4. Nếu A_i > max thì max <-- A_i. (so sánh giá trị max vừa tìm được với A_i)
    B5. Quay lại bước 2.
    Đó là 2 ví dụ cơ bản nhất về thuật toán.

    Bài tập: Viết thuật toán
    1) Tìm GTLN của dãy số, đồng thời chỉ ra vị trí của nó trong dãy số.
    2) Tính tổng các số trong dãy số.
    3) Tính tổng các số nguyên dương chẵn trong dãy số.
    4) Kiểm tra một số có phải số nguyên tố hay không.
    5) Tìm UCLN của 2 số a, b.
    Chắc cũng đủ rồi, nếu muốn thì để mình post thêm vài bài nữa :D
     
  17. abluediamond

    abluediamond Guest

    Thế này đã được gọi là một thuật toán chưa [​IMG]

    Mã:
    B1. Xét thương a/b nếu 
    B2. Nếu a/b là A/B tối giản thì UCLN (a,b) a/A = b/B.
    B3. Nếu a/b là số thập phân thì tìm dư R (R nguyên dương và < a), UCLN (b,a) = UCLN (a,R) (ULCN (b,a) = UCLN (a,b)
     
    Last edited by a moderator: 8 Tháng mười hai 2013
  18. lamdetien36

    lamdetien36 Guest

    Thiếu phần xác định INPUT, OUTPUT rồi :))
    Về phần thuật toán thì cũng chưa đúng, vì để xác định A/B tối giản hay không thì phải tính được UCLN, trong khi UCLN là thứ cần phải tính :D
    Thuật toán nó như thế này:
    Mã:
    INPUT: 2 số nguyên a, b.
    OUTPUT: UCLN(a, b).
    B1. Nếu b = 0 thì thông báo a rồi kết thúc. (Vì hiển nhiên UCLN(a, 0) = a)
    B2. 
    r <-- a mod b. 
    a <-- b
    b <-- r.
    (Chuyển UCLN(a, b) thành UCLN(b, a mod b))
    B3. Quay lại bước 1.
    
    Nếu muốn thì dùng phép trừ cũng được :D hoặc rảnh rỗi nữa thì dùng UCLN nhị phân =))
     
  19. abluediamond

    abluediamond Guest

    Thế này chắc đúng chứ [​IMG].

    Đi ngủ cái đã, tối về làm tiếp =)).
     
    Last edited by a moderator: 8 Tháng mười hai 2013
  20. lamdetien36

    lamdetien36 Guest

    Ko hiểu :D
    Mà thuật toán chỉ là nêu ra cách thực hiện, còn phần chứng minh là không cần thiết, trừ khi được yêu cầu.
    Thuật toán bài này:
    Mã:
    B1. i <-- 1. S <-- 0.
    B2. Nếu i > N thì thông báo S rồi kết thúc.
    B3. S <-- S + A_i. i <-- i + 1
    B4. Quay lại bước 2.
    
    Giải thích một chút:
    Thuật toán trên thực hiện việc cộng dồn các số $A_i$ vào S. Tức là
    $S = A_1 + A_2 + ... + A_N$
    Hay S chính là tổng cần tính.
    Ví dụ:
    Kiểm tra: 2 + 4 + 3 = 9 (đúng)
     
Chú ý: Trả lời bài viết tuân thủ NỘI QUY. Xin cảm ơn!

Draft saved Draft deleted
Trạng thái chủ đề:
Không mở trả lời sau này.

CHIA SẺ TRANG NÀY

-->