CÁC BÀI TOÁN SỬ DỤNG CHƯƠNG TRÌNH CON (P1).

CÁC BÀI TOÁN SỬ DỤNG CHƯƠNG TRÌNH CON (P1).

Bài 1: Giải phương trình bậc 2: ax2+bx+c=0; với a,b,c được nhập vào từ bàn phím.

Cách 1: Chúng ta sẽ sử dụng thủ tục để thực hiện công việc tính Delta và nghiệm nếu có.

Trong thủ tục này chúng ta lưu ý: Các biến chúng ta sử dụng là biến toàn cục, nên công việc tính Delta và tính nghiệm sẽ được thực hiện trong chương trình con và kết quả sẽ được mang ra ngoài thủ tục để phục vụ cho công việc xét nghiệm.

{This code Created by hoana2007}

{Giai phuong trinh bac 2}

Program GiaiPTB2;

uses wincrt;

var a,b,c,x1,x2,Delta:real;

 

{Thu tuc tinh Delta va nghiem}

Procedure PTB2;

var r:real;

begin

     Delta := sqr(b)-4*a*c;

     if Delta >= 0 then

     Begin

          r := Sqrt(Delta);

          x1 := (-b-r)/(2*a);

          x2 := (-b+r)/(2*a);

     end;

end;

{Than chuong trinh chinh}

Begin

     Writeln(‘Nhap 3 he so: a,b,c(Moi so cach nhau mot dau cach)’); readln(a,b,c);

     PTB2;

     if Delta < 0 then write(‘Phuong trinh vo nghiem’)

     else

         If Delta = 0 then Write(‘Phuong trinh co 1 nghiem: ‘, x1:10:2)

         else writeln(‘Phuong trinh co 2 nghiem: x1 = ‘, x1:10:2 ,’***** x2 = ‘, x2:10:2);

     readln;

end.

 

Cách 2: Chúng ta có thể sử dụng hàm để tính giá trị của Delta sau đó sẽ dùng hàm này để thực hiện việc xét nghiệm cho phương trình, các biến a,b,c,x1,x2 vẫn là các biến toàn cục.

{This code Created by hoana2007}

{Giai phuong trinh bac 2}

Program GiaiPTB2;

uses wincrt;

var a,b,c,x1,x2,r:real;

 

{Thu tuc tinh Delta va nghiem}

Function Delta:real;

begin

     Delta := sqr(b)-4*a*c;

end;

 

{Than chuong trinh chinh}

Begin

     Writeln(‘Nhap 3 he so: a,b,c(Moi so cach nhau mot dau cach)’); readln(a,b,c);

     if Delta < 0 then write(‘Phuong trinh vo nghiem’)

     else

         If Delta = 0 then

            Begin

              x1:=-b/(2*a);

              Write(‘Phuong trinh co 1 nghiem: ‘, x1:10:2)

            end

         else

            Begin

                 r:=sqrt(Delta);

                 x1 := (-b-r)/(2*a);

                 x2 := (-b+r)/(2*a);

                 writeln(‘Phuong trinh co 2 nghiem: x1 = ‘, x1:10:2 ,’***** x2 = ‘, x2:10:2);

            end;

     readln;

end.

 

Cách 3: Hoặc chúng ta có thể sử dụng một thủ tục để thực hiện tất cả các công việc. Sau đó chúng ta có thể chỉ cần gọi thủ tục khi ta thực thi với các bộ dữ liệu:

{This code Created by hoana2007}

{Giai phuong trinh bac 2}

Program GiaiPTB2;

uses wincrt;

var a,b,c:real;

 

Procedure PTB2(a,b,c:real); {Tham so hinh thuc}

Var r,x1,x2,Delta:real;     {Bien cuc bo}

begin

     Delta := sqr(b)-4*a*c;

 

     if Delta < 0 then write(‘Phuong trinh vo nghiem’)

     else

         If Delta = 0 then

            Begin

              x1:=-b/(2*a);

              Write(‘Phuong trinh co 1 nghiem: ‘, x1:10:2)

            end

         else

            Begin

                 r:=sqrt(Delta);

                 x1 := (-b-r)/(2*a);

                 x2 := (-b+r)/(2*a);

                 writeln(‘Phuong trinh co 2 nghiem: x1 = ‘, x1:10:2 ,’***** x2 = ‘, x2:10:2);

            end;

     readln;

end;

begin

     Writeln(‘Nhap 3 he so: a,b,c(Moi so cach nhau mot dau cach)’); readln(a,b,c);

     PTB2(a,b,c);{Goi thu tuc voi tham bien}

     PTB2(2,8,3);{Goi thu tuc voi tham tri}

end.

Bài 2: Viết chương trình thực hiện các công việc sau:

  1. Nhập dữ liệu cho một mảng một mảng một chiều.
  2. Tìm xem trong mảng có bao nhiêu phần tử có giá trị nguyên tố.
  3. In ra các phẩn tử của mảng có giá trị nguyên tố.
  4. In lại toàn bộ mảng.

Phân tích:

Bài này chúng ta có thể sử dụng các chương trình con để thực hiện từng công việc.

  1. Phần nhập dữ liệu cho mảng ta có thể dùng thủ tục để thực hiện việc nhập.
  2. Chúng ta cần có một hàm để kiểm tra số nguyên tố, hàm này chúng ta nên sử dụng hàm có kiểu trả về là kiểu logic.

– Ý tưởng:

            Hàm nguyento(x:nguyen):logic;

Nguyento:=sai;

nếu x<1 then nguyento :=sai

khác

lặp công việc xét nếu một trong các số từ 2 đến phần nguyên của căn x

            Nếu x chia hết một trong các số đó thì nguyento:=sai

            Khác nguyento:=đúng.

  1. Chúng ta cũng cần thêm có một hàm để đếm các số trong mảng là nguyên tố, hàm này sẽ sử dụng lại kết quả ở hàm nguyên tố ở trên.
  2. Việc in các số là số nguyên tố ra màn hình chúng ta cũng dùng một thủ tục và thủ tục này sẽ gọi đến hàm nguyên tố để kiểm tra.
  3. Việc in lại toàn bộ mảng cũng sẽ dử dụng một thủ tục in thông thường.

Chương trình:

{This code Created by hoana2007}

Program Mang;

uses wincrt;

const n=100;

type mg = array[1..n] of longint;

var A:mg; m,i:byte;

 

procedure Nhap_mg(Var X:mg);

begin

     for i:=1 to m do readln(X[i]);

end;

 

Function NguyenTo(X:longint):boolean;

var j:integer;

begin

   NguyenTo := false;

   for j:=2 to Trunc(sqrt(X)) do

       If X mod j = 0 then exit; {thoat khoi chuong trinh con}

   NguyenTo := X > 1; {Thuc chat: NguyenTo := true;}

end;

 

Function Dem(X:mg):longint;

var d:longint;

begin

     d:=0;

     for i:=1 to m do

             If NguyenTo(X[i]) then d:=d+1;{inc(d)}

     Dem := d;

end;

 

Procedure InN_To(X:mg);

begin

     write(‘Cac phan tu trong day co gia tri nguyen to la: ‘);

     for i:=1 to m do

         If NguyenTo(X[i]) then Write(X[i],’_’);     

end;

 

Procedure In_Mg(X:mg);

begin

     Writeln(‘TOAN BO CAC PHAN TU TRONG DAY’);

     for i:=1 to m do write(X[i],’ ‘);

end;

 

{Chuong trinh chinh}

Begin

     writeln(‘Nhap so luong phan tu cho mang’); readln(m);

     Nhap_mg(A);

     Writeln(‘So luong phan tu co gia tri nguyen to trong day la: ‘, dem(A));

     InN_To(A);

     In_Mg(A);

end.

Bài tập:

  1. Em hãy viết thủ tục nhập vào bộ 3 số nguyên dương, một hàm logic kiểm tra xem 3 số đó có tạo thành một tam giác hay không. Nếu có tạo thành một tam giá thì hãy viết hàm tính chu vi và diện tích của tam giác đó. Sau đó in các kết quả ra màn hình.
  2. Em hãy viết chương trình kiểm tra một số nguyên dương a có phải là một số nguyên tố hay không.

 

(còn nữa…)

 

 

 

Created by hoana2007

Email: nguyenhoa2003@hotmail.com

http://hoana2007.spaces.live.com

http://violet.vn/hoana2007

 

24 responses to “CÁC BÀI TOÁN SỬ DỤNG CHƯƠNG TRÌNH CON (P1).

  1. thanks ban nhe, toi cung dang tim hieu ve phan nay

  2. Pingback: Bài tập về nhà_ Bài 17-Chương trình con và phân loại « Blog hỗ trợ học tập !

  3. trong phần này of bạn tôi thấy chưa nhắc nhiều lắm đến việc giải các bài toán of phần mảng.nếu được bạn có thể giúp tôi viết chương trình con sắp xếp 1 dãy số nguyên(use chương trình con ),được chứ?

    • Chào bạn, cảm ơn bạn đã quan tâm bài của Tôi:
      Chương trình sắp xếp sử dụng CTC có thể được viết như sau:
      program SX_Tren_Mang;
      uses wincrt;
      const NMax = 100;
      Type DayA = array[1..NMax] of Integer;
      Var A:DayA;
      N,i:integer;

      procedure nhap(var x:dayA; n:byte);
      begin
      {Nhap cac phan tu cua Mang}

      for i := 1 to N do readln(A[i]);
      end;
      procedure sx(var X:dayA); {Cho nay su dung tham bien vi mang bi thay doi}
      var tg,i,j:integer;
      begin
      {Sap Xep}
      for i:=1 to N-1 do
      for j:=i+1 to N do
      if (A[i] > A[j]) then
      begin
      tg :=A[i];
      A[i] := A[j];
      A[j] := tg;
      end;
      end;

      begin
      clrscr;
      {Nhap so luong phan tu}
      write(‘Nhap so luong phan tu:’);
      readln(N);
      nhap(A,N);
      sx(A);
      Writeln(‘Day A sau khi SX’);
      for i:=1 to N do Write(A[i]:4);
      readln;
      end.
      Chúc bạn vui vẻ!
      Cảm ơn bạn!

  4. viet chuong trinh con thuc hien cong viec sau
    -lap thu tuc nhap 3 so thuc duong a, b, c tu ban phim
    -lap thu tuc kiem tra xem 3 so tren co lap thanh 3 canh cua tam giac khong

  5. may anh chi em bai nay voi: sử dụng CTC hãy tính Tổng S:= 1+2+3…+n và giải phương trình bậc nhất ax+b=0 trên cùng một bài toán sử dụng chương trình con… giải đáp dùm em với em cám ơn nhiều

  6. viết chương trình nhập số nguyên dương R từ bàn phím kiểm tính nguyên tố ,hoàn thiện của R trong đó có sử dụng 2 chương trình con.
    nhờ bạn giúp

  7. Viết chương trình để giải phương trình sau : ax + b =0.( Sử dụng chương trình con)
    Giúp mình vs nha

    • Bạn có thể tử qua cách này nhé, mình viết có đủ hàm và thủ tục.
      program PTB1;
      uses crt;
      var
      a,b:integer;
      x:real;
      {Thu tuc nhap 2 so a,b}
      procedure nhap(var a,b:integer);
      begin
      Writeln(‘Nhap gia tri a,b: ‘);
      read(a,b);
      end;
      {Ham tim nghiem}
      function timnghiem(a,b:integer):real;
      begin
      timnghiem := -b/a;
      end;
      {Chuong trinh chinh}
      begin
      clrscr;
      nhap(a,b);
      if (a0)AND(b0) then writeln(‘Nghiem cua phuong trinh:’,timnghiem(a,b):4:2)
      else if(a=0)AND(b=0) then writeln(‘Phuong trinh vo so nghiem’)
      else writeln(‘phuong trinh vo nhiem’);
      readln
      end.

  8. cho mình hỏi muốn viết chương trình tìm số hoàn hảo bằng chương trình con thì làm như thế nào.
    thanks trước nha

  9. ad có thể chỉ e làm bài đố vui trong chương trình con đc không?

  10. viết trương trình có sử dụng chương trình con kiểm tra abc có là tam giác đều hay không .Tính chu vi và diện tích của tam giác đó

    • Gửi bạn:
      program Tamgiacdeu;
      uses crt;
      var a,b,c:integer;
      function kt(x,y,z:integer):boolean;
      begin
      if (a=b) AND (b=c) then kt := true
      else kt := false;
      end;
      begin
      clrscr;
      writeln(‘Nhap 2 so nguyen: ‘); readln(a,b,c);
      if kt(a,b,c) = true then
      begin
      writeln(‘Dien tich la: ‘,a*a*sqrt(3)/4);
      writeln(‘Chu vi la: ‘, 3*a);
      end
      else writeln(‘3 canh khong lam thanh tam giac deu’);
      readln;
      end.

  11. ad cứu mình vs nào. sắp chết rồi

  12. giúp em câu 2 bài tập ở trên với

    • Gửi bạn:
      program songuyento;
      uses crt;
      var a:integer;
      function kt(x:integer):boolean;
      var i:byte;
      begin
      kt := false;
      for i:= 2 to trunc(sqrt(x)) do
      if x mod i = 0 then exit;
      kt:=x>1;
      end;
      begin
      clrscr;
      repeat
      readln(a);
      until a>0;
      if kt(a) = true then writeln( a, ‘ la so nguyen to’)
      else writeln(a, ‘ khong la so nguyen to’);
      readln;
      end.

  13. bạn cho mình hỏi về bài 2: số nguyên tố, mình ko hiểu chỗ “function nguyento(X:longint) : boolean đến chỗ nguyento:=true”, mong bạn giải thích giúp mình :))

  14. Giúp mình giải bài này với ạ
    Viết chương trình hoàn chỉnh cho phép sắp xếp một dãy số tăng dần với yêu câud sử dụn các chương trình con: nhập mảng, in mảng đổi giá trị của hai số
    Mình cảm ơn ạ

    • Chương trình của bạn đây:
      program SX_TraoDoi;

      uses crt;

      const nmax = 100;
      type
      Arr = Array[1..nmax] of Integer;
      var
      A:Arr;
      Dau, M, j,i,N,tg:Integer;

      procedure nhapday(Var A:Arr; N:integer);
      var i: integer;
      begin
      for i := 1 to N do
      begin
      write(‘Nhap gia tri thu ‘,i,’ = ‘); readln(A[i]);
      end;
      end;

      procedure hienthi(B: Arr; N:Integer);
      var i:Integer;
      begin
      for i:= 1 to N do Write(B[i],’ ‘);
      end;

      begin
      clrscr;
      write(‘NHAP SO LUONG PHAN TU CHO DAY: ‘);readln(N);
      Writeln(‘NHAP GIA TRI CHO CAC PHAN TU CUA DAY:’);
      nhapday(A,N);

      writeln(‘HIEN THI DAY VUA NHAP:’);
      hienthi(A,N);writeln;
      writeln(‘————————–‘);
      M := N;
      j:=0;
      While M >= 2 do
      begin
      if M >= 2 then writeln(‘ M = ‘,M)
      else Writeln(‘M = ‘,M ,’ Thuat toan da hoan thanh’);
      M := M-1;
      {Sap xep trao doi}
      for i:= 1 to M do
      if (A[i] > A[i+1]) then
      begin
      tg := A[i];
      A[i] := A[i+1];
      A[i+1] := tg;
      hienthi(A,N);
      writeln;
      end;
      Writeln(‘————————–‘);
      end;

      writeln(‘HIEN THI SAU SAP XEP:’);
      hienthi(A,N);
      end.

  15. Bạn thấy, j sẽ chạy từ 2 đến phân nguyên của căn X, nếu x chi hết cho j thì x không phải là nguyên tốt nên EXIT; nếu x không chia hết cho j thì x là nguyên tốt.
    NguyenTo := X > 1; {Thuc chat: NguyenTo := true;} đoạn này chỉ là trả về kết quả cho tên hàm thôi bạn.

  16. giúp mình bài này với ạ
    Lập trình nhập từ bàn phím vào 2 mảng số nguyên A và B có N
    (N<=100) phần tử.Tính và hiển thị lên màn hình trung bình cộng các phần tử của mỗi mảng A,B đã nhập( Yêu cầu: trong chương trình viết hàm tính trung bình cộng mảng số nguyên gồm N phần tử)

  17. làm hộ mình bài này với ạ.Cảm ơn!

    Viết hàm tính n!

    • Đây bạn nhé:
      program giai_thua;
      uses crt;
      var t,n:integer;
      {Ham giai thua}
      function tinh_gt(n:integer):word;
      var i: integer;
      tg:word;
      begin
      tg := 1;
      for i := 1 to n do
      begin
      tg := tg * i;
      writeln(‘gia tri thu’,i, ‘ = ‘,tg);
      end;
      tinh_gt := tg;
      end;
      {Chuogn trinh chinh}
      Begin
      clrscr;
      writeln(‘Nhap n = ‘); readln(n);
      t := tinh_gt(n);
      writeln(‘Giai thua tinh duoc la: ‘,t:5);
      {Tinh nhieu giai thua}
      t := tinh_gt(1) + tinh_gt(3) + tinh_gt(5) + tinh_gt(7);
      writeln(‘Tong cac giai thua la: ‘,t:5);
      readln
      end.

    • Không biết bạn cần bằng NNLT nào, mình viết bằng C++ gửi bạn tham khảo nhé:
      // giaiThua.cpp : This file contains the ‘main’ function. Program execution begins and ends there.
      //
      #include
      using namespace std;
      int giaiThua(int n);

      int gt(int n)
      {
      int t = 1;
      for (int i = 1; i<=n; i++)
      {
      t = t*i;
      }
      return t;
      }
      //Su dung de quy
      //int giaiThua(int n)
      //{
      // if (n <= 1)
      // return 1;
      // int gt = n * giaiThua(n – 1);
      // return gt;
      //}
      int main()
      {
      int n;
      cout <> n;
      cout << "Giai thua cua " << n << "! = " << gt(n);
      return 0;
      }

Bình luận về bài viết này