Tin học Lập trình Pascal !

T

tungvip95

giúp với pà kon ơi !
lập trình bài toán con tính BCNN của 2 số nguyên dương !

Mã:
var
x,y,tich,UCLN:integer;
BCNN:real;
begin
write('x='); readln(x);
write('y=');readln(y);
tich:=x*y;
while x<>y do
if x>y then x:=x-y else y:=y-x;
UCLN:=x;
BCNN:=tich/UCLN;
writeln('BCNN(',x,', ',y') =', BCNN);
readln;
end.
 
Last edited by a moderator:
M

marik

Bài của em nhìn ko ổn tí nào cả, anh chưa bao giờ thấy thuật toán tìm BCLN như thế! Test lại đi nhé

Mã:
var
i,x,y,b,t:integer;
begin
write('x= '); readln(x);
write('y= ');readln(y);
t:=x*y;
for i:=t downto x do if (i mod x = 0) and (i mod y =0) then b:=i;
writeln('Boi chung nho nhat la: ',b);
readln;
end.
 
T

tungvip95

Bài của em nhìn ko ổn tí nào cả, anh chưa bao giờ thấy thuật toán tìm BCLN như thế! Test lại đi nhé

Mã:
var
i,x,y,b,t:integer;
begin
write('x= '); readln(x);
write('y= ');readln(y);
t:=x*y;
for i:=t downto x do if (i mod x = 0) and (i mod y =0) then b:=i;
writeln('Boi chung nho nhat la: ',b);
readln;
end.

em test rùi đúng mà anh
thuật toán của em là lấy tích của 2 số chia cho UCLN của chúng:D
 
M

maixo

Em chả biết các bác đã post cách sửa lỗi 200 chưa nếu chưa thì em có cách này các bác sử dụng 100% hiệu quả mà không hỏng cái gì các bác chỉ việc tải file có file " turbo.tpl " sau đó copy, paste vào tâp bin trong tập program .OK

-------------------------------------------------------
TEENPTPRO.VNBB.COM " niềm tự hào của chúng tôi !
 
Last edited by a moderator:
V

vipgood9x

mấy bạn giúp mình bài này với ;;)

Nông dân John đang ở trên một con thuyền nhỏ và đang tìm kiếm kho báu ở 1 trong số N (1 <= N <= 100) hòn đảo (đánh số từ 1..N) ở vùng biển Ca-ri-bò.

Bản đồ kho báu cho John biết John cần phải thực hiện 1 hành trình đi qua đảo A_1, A_2, … A_M (2 <= M <= 10,000), bắt đầu từ đảo 1 và kết thúc ở đảo N trước khi kho báu biến mất. Anh ta có thể đến thăm các đảo khác và thăm bao nhiêu lần tùy thích, miễn là hành trình của ông ta phải chứa dãy A_1,..A_M là 1 dãy con (không nhất thiết phải liên tiếp nhau).

John muốn tránh đụng độ cướp biển và biết được mức-độ-bị-cướp (0 <= mức-độ-bị-cướp <= 100,000) khi đi lại giữa 2 hòn đảo với nhau. Độ nguy hiểm của hành trình của John sẽ là tổng các mức-độ-bị-cướp trên các tuyến đường mà John đi qua.

Hãy giúp John tìm được 1 hành trình ít nguy hiểm nhất để có thể lấy được kho báu.
Dữ liệu
Dòng 1: 2 số nguyên cách nhau bởi dấu cách: N và M
Dòng 2..M+1: Dòng i+1 mô tả chứa 1 số nguyên là đảo thứ i mà John cần phải tới: A_i
Dòng M+2..N+M+1: Dòng i+M+1 chứa N số nguyên cách nhau bởi dấu cách tương ứng là mức-độ-bị-cướp trên tuyến đường đi giữa đảo i và đảo 1, 2,…N; đảm bảo số nguyên thứ i luôn là số 0.
Kết quả
Dòng 1: Độ nguy hiểm nhỏ nhất của hành trình của John.
Ví dụ
Dữ liệu
3 4
1
2
1
3
0 5 1
5 0 2
1 2 0

Giải thích:
Có 3 hòn đảo và bản đồ kho báu yêu cầu John phải thực hiện 1 hành
trình tới các đảo như sau: từ đảo 1 tới đảo 2, quay lại đảo 1 và cuối
cùng là tới đảo 3. Mức-độ-bị-cướp trên các tuyến đường đã được
cho: (1, 2); (2, 3); (3, 1) có độ lớn tương ứng là 5, 2 và 1.

Kết quả
7

Giải thích:
Hành trình có độ nguy hiểm nhỏ nhất là 7. John sẽ đi như sau:
1, 3, 2, 3, 1, and 3. Yêu cầu của bản đồ là phải chứa dãy
(1, 2, 1, và 3) và hành trình này thỏa mãn yêu cầu. Chúng ta sẽ tránh đi
trên đường nối giữa 2 đảo 1 và 2 vì nó có mức-độ-bị-cướp lớn.
 
H

haonguyen282

Lập trình game thì dùng cái ngôn ngữ Khác Pascal chơi đc gì đâu em. chỉ lập đc mấy cái game cỏn con nho nhỏ chơi chán lắm
 
T

th1104

cho mình hỏi cái nè vs
năm nay mình mới bắt đầu học về turbo pascal
nhưng mà làm trên mấy án F9 nó viết "."
cái dấu chấm đó nghĩa là gì vậy
 
M

marik

cho mình hỏi cái nè vs
năm nay mình mới bắt đầu học về turbo pascal
nhưng mà làm trên mấy án F9 nó viết "."
cái dấu chấm đó nghĩa là gì vậy
....làm trên máy ấn....?
Khiui nhấn F9 là nó sẽ soát lỗi cho em, nó viết như vậy có nghĩa là em thiếu dấu "."
Em có thể copy toàn bộ bài pascal của em lên đây ko?
 
T

th1104

em ko copy đc
tại vì em bật pascal lên nó to che hết cả màn hình ròi
mà tại sao học sinh học toán cứ phải đi học tin chứ
em học pascal chả hiểu gì
cái đó em vừa mới thêm dấu chấm làm lại nhưn mà nó lại hiện ra cái bảng gì đó có chữ ok em bấm mà lại về như màn hình ban đầu
tại sao vậy anh
 
M

marik

Em chuột phải vào cái file .pas rồi openwith notepad thì sẽ copy được :D
Đâu phải học sinh học toán mới phải học pascal hả em? Mà anh thấy các lớp toán học môn này khá nhàn :D
 
T

th1104

em ko copy đc anh ợ
em nói thế này anh hiểu đc thì hiểu nha
sau khi em ấn F9 để kiểm tra lỗi ko có lỗi gì thì em ấn ctrl F9 để chạy chương trình nhưng mấy hiện lên một cái bảng ở cuối có dòng chữ cứ nhấp nháy
em ấn chuột thì nó mất lại quay về bài viết của em
em thử lần tiếp theo thì lại thấy hiện một bẳng khác
có chữ ok thì em bấm vào nhưng lại như vậy
ko làm đc gì hết
 
T

th1104

uk để em gõ lại
program hoan_doi_gia_tri_a_b;
ues crt;
var a,b,tam:integer;
begin
write('nhap so a='); readln(a);
write('nhap so b='); readln(b);
tam:=a;
a:=b;
b:=tam;
writeln('so a, b hoan doi gia tri la');
writeln('so a=',a);
writeln('so b=',b);
readln;
end.


bài em ở trên đó y như thầy giáo dậy anh xem sai ở đâu nha
 
Last edited by a moderator:
M

marik

ok, bài không sai ở đâu cả. Có lẽ là lỗi division by zero. Em thử bỏ khai báo uses crt đi rồi chạy nhé ^^
Cách sử lỗi anh sẽ hướng dẫn sau :d
 
H

hanoi208

(help) giải một số bài tập bằng lập trình

mình có một số bài tập pải giải bằng lập trình (thể hiện bằng chương trình (Pascal )mình ko giỏi pần lập trình lắm nên post lên đây nhờ mọi người giúp đỡ mình đang cần gấp
thanks!


1. Lập trình tìm cây khung nhỏ nhất trong đồ thị đơn, vô hướng, có trọng số bằng thuật toán Kruskal
Thông tin đầu vào: dữ liệu đặt trong file TEXT có tên là "DOTHI5.INP"
-Dòng đâu ghi số n, (n là số đỉnh, n<50, các đỉnh được đánh số từ 1,2,..., n)
-Các dòng tiếp theo, mỗi ma trận trọng số của đồ thị
Thông tin đầu ra: Kết quả đặt trong file TEXT có tên là "DOTHI5.OUT" ghi dãy các cạnh, mỗi cạnh ghi ở dạng (p,q) nếu cạnh (p,q) nằm trong cây khung nhỏ nhất tìm được
///////////

2. Lập trình tìm cây khung nhỏ nhất trong đồ thị đơn, vô hướng, có trọng số bằng thuật toán Prim
Thông tin đầu vào: dữ liệu đặt trong file TEXT có tên là "DOTHI6.INP"
-Dòng đâu ghi số n, (n là số đỉnh, n<50, các đỉnh được đánh số từ 1,2,..., n)
-Các dòng tiếp theo, mỗi ma trận trọng số của đồ thị
Thông tin đầu ra: Kết quả đặt trong file TEXT có tên là "DOTHI6.OUT" ghi dãy các cạnh, mỗi cạnh ghi ở dạng (p,q) nếu cạnh (p,q) nằm trong cây khung nhỏ nhất tìm được

/////////////////
3. Lập trình tìm đường đi ngắn nhất trong đồ thị đơn, vô hướng, có trọng số bằng thuật toán Floyd
Thông tin đầu vào: dữ liệu đặt trong file TEXT có tên là "DOTHI8.INP"
-Dòng đâu ghi số n, p,q (n là số đỉnh, n<50, các đỉnh được đánh số từ 1,2,..., n; p và q là chỉ số các đỉnh cần tìm đường đi ngắn nhất)
-Các dòng tiếp theo, mỗi ma trận trọng số của đồ thị
Thông tin đầu ra: Kết quả đặt trong file TEXT có tên là "DOTHI8.OUT" ghi độ dài đường đi ngắn nhất từ đỉnh p đến đỉnh q và dãy các đỉnh của đường đi tìm được hoặc ghi số duy nhất số 0 nếu không có đường đi từ p đến q.
 
Last edited by a moderator:
M

marik

Anh chỉ giúp em được thuật toán Prim thôi :d

Mã:
Program Thuat_toan_Prim;
 Uses crt;
 Var
 kt             : array[1..50] of boolean; 
 trongso        : array[1..50,1..50] of integer; 
 dinh           : array[1..50] of integer; 
 dinhke         : array[1..50] of integer; 
 n,m,t: integer; 
 i,j: integer; 
 ch: char; 
 f:text; 
 Procedure Inmatran; 
 Begin 
    (*In ma tran ra *) 
       Writeln('-------------------------------------------------------'); 
              For i:=1 to n do 
         Begin 
            For j:=1 to n do 
               If TrongSo[i,j]=Maxint then write('   0',' ') 
                    Else write(TrongSo[i,j]:4,' '); 
            Writeln; 
         End; 
       Writeln('-------------------------------------------------------'); 
 End; 
 Procedure Nhap; 
 Var 
 z: integer; 
 Begin 
  assign(f,'dothi6.inp'); 
    reset(f); 
     readln(f,n,m); 
   For z:=1 to m do 
 begin 
         readln(f,i,j,trongSo[i,j]); 
          trongso[j,i]:=trongso[i,j]; 
end;
            for i:=1 to n do
          for j:=1 to n do
         if trongso[i,j]=0 then trongso[i,j]:=maxint;
        
 close(f); 
 end; 
Procedure Prim; 
 Var 
 v,k,z,q,h: integer; 
 min: integer; 
    Begin 
   Write('Chon dinh bat dau thuat toan: ');readln(z); 
          dinh[1]:=z; kt[z]:=true; 
  q:=1; 
     repeat 
         min:=maxint; 
           for z:=1 to q do 
             begin 
                for i:=1 to n do 
          begin 
 if (dinh[z]<>0) and (trongso[dinh[z],i]<=min) and not kt[i] then 
        begin 
           min:=trongso[dinh[z],i]; 
          h:=dinh[z]; 
         k:=i; 
        end; 
  if (dinhke[z]<>0) and (trongso[dinhke[z],i]<=min) and not kt[i] then 
   begin 
            min:=trongso[dinhke[z],i]; 
          h:=dinhke[z]; 
         k:=i; 
        end; 
 end;
             end; 
  t:=t+min; 
   kt[k]:=true; 
     dinh[q]:=h; 
      dinhke[q]:=k; 
      inc(q); 
    until q=n; 
  end; 
 Procedure Intep; 
  Begin 
 Assign(f,'dothi6.out'); 
 Rewrite(f); 
 Writeln(f,'-------------------------------------------------------'); 
         For i:=1 to n do 
         Begin 
            For j:=1 to n do 
               If TrongSo[i,j]=maxint then write(f,'   0',' ') 
                    Else write(f,TrongSo[i,j]:4,' '); 
            Writeln(f); 
         End; 
      Writeln(f,'-------------------------------------------------------'); 
writeln(f,'Cay khung nho nhat gom cac canh:'); 
 For i:=1 to n-1 do 
   begin 
     write(f,'(',dinh[i],',',DinhKe[i],') '); 
   end; 
 writeln(f); 
 writeln(f,'Length: ',T); 
 close(f); 
  end; 
  Begin 
  clrscr; 
  writeln('THUAT TOAN PRIM TIM CAY KHUNG NHO NHAT'); 
  writeln('           DUNG MA TRAN KE'); 
  writeln('---------------------------------------'); 
    Nhap; 
    Inmatran; 
    Prim; 
    Intep; 
    write('Cac canh cua cay khung be nhat:'); 
    for i:=1 to n-1 do write('(',dinh[i],',',DinhKe[i],')'); 
    writeln; 
    writeln('Do dai cua cay khung : ',t); 
    writeln('***************************************'); 
    writeln('Nhan phim Enter de tiep tuc.'); 
    readln; 
   end.

Cái Kruskal anh không có ý tưởng gì khác sách còn cái Floyd anh không được học, em có thể tham khảo 2 thuật toán này trong quyển Giải Thuật Lập Trình

DOWNLOAD
Mã:
http://www.mediafire.com/?e0ztyy5mddz
Pass unlock: hung.vjnh
 
Top Bottom