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

M

marik

Hic! Em hiểu nhầm đề bài rồi. Đề bài yêu cầu là dãy không tăng nhiều nhất chứ ko phải là dãy tăng liên tiếp nhiều nhất
VD: Input : 7 5 3 6 3 2
Output: 7 5 3 3 2
 
S

storm5906

Hic! Em hiểu nhầm đề bài rồi. Đề bài yêu cầu là dãy không tăng nhiều nhất chứ ko phải là dãy tăng liên tiếp nhiều nhất
VD: Input : 7 5 3 6 3 2
Output: 7 5 3 3 2

À, thì ra là thế! Vậy thì bài này cũng gần giống bài kia:D :

Mã:
PROGRAM Bai_tap;
USES    CRT;
Var     A:array[1..100] of integer;
        B:array[1..2,0..100] of integer;
        i,j,k,n,max,maxi:integer;

BEGIN
        Clrscr;
        Write('Nhap so luong phan tu cua day : '); Readln(n);
        For i:=1 to n do
                Begin
                        Write('Nhap phan tu thu ',i,' : ');
                        Readln(A[i]);
                End;
        j:=1; k:=1;
        maxi:=1; max:=0;
        B[1,0]:=0; B[2,0]:=0;
        While n-j+1>max do
                Begin
                        B[k,0]:=1; B[k,1]:=A[j];
                        For i:=(j+1) to n do
                                If B[k,B[k,0]]>=A[i] then
                                        Begin
                                                B[k,0]:=B[k,0]+1;
                                                B[k,B[k,0]]:=A[i];
                                        End;
                        If B[k,0]>max then
                                Begin
                                        maxi:=j;
                                        max:=B[k,0];
                                        If k=1 then k:=2
                                        Else k:=1;
                                End;
                        j:=j+1;
                End;
        Writeln('Day khong tang nhieu nhat la : ');
        If k=1 then k:=2
        Else k:=1;
        For i:=1 to B[k,0] do Write(B[k,i],' ');
        READLN;
END.
 
T

thanhnhan_1404

thấy mấy bác làm vui quá, em cũng làm thử bài (em gà pascal lắm)
Viết chương trình nhập từ bàn phím mảng một chiều gồm n phần tử là các số nguyên dương. Đưa ra màn hình dãy các phần tủ không tăng nhiều nhất lấy từ mảng mà không thay đổi vị trí các phần tử trong mảng
Mã:
program chuongtrinh;
uses   crt;
var  A: array[1..10000000] of integer;
      max, i, n: integer;
begin
  write('nhap so phan tu cua mang:'); readln(n);
  for i:=1 to n do 
     begin
       write(' phan tu thu',i); readln(A[i]);
     end;
  max:= A[1]; write(A[1]);
  for i:=1 to n-1 do
     if A[i+1] >= A[i] then 
           begin
                write(A[i+1]);
                max:=A[i+1];
           end;
  end.
 
S

storm5906

thấy mấy bác làm vui quá, em cũng làm thử bài (em gà pascal lắm)

Mã:
program chuongtrinh;
uses   crt;
var  A: array[1..10000000] of integer;
      max, i, n: integer;
begin
  write('nhap so phan tu cua mang:'); readln(n);
  for i:=1 to n do 
     begin
       write(' phan tu thu',i); readln(A[i]);
     end;
  max:= A[1]; write(A[1]);
  for i:=1 to n-1 do
     if A[i+1] >= A[i] then 
           begin
                write(A[i+1]);
                max:=A[i+1];
           end;
  end.

Sai một cách rõ rệt! Đọc lại đề đi anh! :D .
 
D

dung_92bn

@ tungvip95: bài e làm cho chị sai rùi
@ marik: anh có thể làm bài đó hộ e đc hok tối nay e cần rùi. làm theo kiểu bản ghi
@ ku Bảo: e rảnh thử làm hộ chị nha tối chị cố gắng ra quán ol.Máy nàh chị vẫn chưa sửa đc
@all; Mong mọi người giúp mjnh
 
T

tungvip95

Em thử thêm lần nữa:D (sau khi hỏi ông Bảo)
Mã:
uses crt;
var
a:array[1..100,1..6] of integer;
i,n:integer;
begin
clrscr;
write('so hoc sinh can quan ly thong tin la: '); readln(n);
for i:=1 to n do 
begin
write('ten hoc sinh thu ',i,':');readln(a[i,1]);
write('ngay sinh hoc sinh thu ',i,':');readln(a[i,2]);
write('dia chi hoc sinh thu ',i,':');readln(a[i,3]);
write('lop hoc sinh thu ',i,':');readln(a[i,4]);
write('ten bo hoc sinh thu ',i,':');readln(a[i,5]);
write('ten me hoc sinh thu ',i,':');readln(a[i,6]);
end;
writeln('Thong tin hoc sinh thu ',i,': ten: ',a[i,1],'; ngay sinh: ',a[i,2],'; dia chi: ',a[i,3],'; lop: ',a[i,4],'; ten bo: ',a[i,5],'; ten me: ',a[i,6])
readln;
end.

Nếu sai nữa thì em chịu thôi:(
 
M

marik

Làm kiểu đơn giản thôi nhé, anh ngại viết code lắm!
Mã:
uses crt;
type hocsinh= record
ten:string[30];
ns:string[10];
diachi:string[30];
lop:string;
bo:string[30];
me:string[30];
end;
var hs:array[1..100] of hocsinh;
ch,n:integer;
procedure nhap;
var i:integer;
j:byte;
begin
write('so hoc sinh can them vao la: '); readln(j);
n:=n+j;
for i:=n-j+1 to n do  
with hs[i] do
begin
write('ten hoc sinh thu ',i,':');readln(ten);
write('ngay sinh hoc sinh thu ',i,':');readln(ns);
write('dia chi hoc sinh thu ',i,':');readln(diachi);
write('lop hoc sinh thu ',i,':');readln(lop);
write('ten bo hoc sinh thu ',i,':');readln(bo);
write('ten me hoc sinh thu ',i,':');readln(me);
end;
end;
procedure xem;
var k:integer;
begin
write('Xem du lieu cua hoc sinh thu may: ');
repeat readln(k); until (0<k) and (k<=n);
with hs[k] do
begin
writeln('ten hoc sinh thu : ',ten);
writeln('ngay sinh hoc sinh thu : ',ns);
writeln('dia chi hoc sinh thu : ',diachi);
writeln('lop hoc sinh thu : ',lop);
writeln('ten bo hoc sinh thu : ',bo);
writeln('ten me hoc sinh thu : ',me);
readln;
end;
end;
begin
n:=0;
ch:=0;
repeat
clrscr;
writeln('Chon viec muon lam: ');
writeln('1.        Nhap them hoc sinh');
writeln('2.        Xem thong tin hoc sinh');
writeln('3.        Thoat');
repeat readln(ch); until (1<=ch) and (ch<=3);
case ch of
1:nhap;
2:xem;
3:exit;
end;
until ch=3;
readln;
end.

Đúng ra là phải xử lí tệp nhưng mà anh ko biết em học tệp chưa nên cứ tạm làm vậy! Anh test rồi đấy
 
S

storm5906

@ tungvip95: bài e làm cho chị sai rùi
@ marik: anh có thể làm bài đó hộ e đc hok tối nay e cần rùi. làm theo kiểu bản ghi
@ ku Bảo: e rảnh thử làm hộ chị nha tối chị cố gắng ra quán ol.Máy nàh chị vẫn chưa sửa đc
@all; Mong mọi người giúp mjnh

Chị chưa nói rõ yêu cầu đề, chỉ nói là nhập dữ liệu thôi, vậy thì em chỉ làm phần nhập liệu, còn phần sau thì chị tự làm :D

Mã:
PROGRAM Bai_tap;
USES    CRT;
TYPE    Hoc_sinh=Record
        HoTen:string[100];
        NgaySinh:string[10];
        DiaChi:string;
        Lop:string[10];
        HoTenBo:string[100];
        HoTenMe:string[100];
        End;
VAR     A:array[1..1000] of Hoc_sinh;
        i,n:integer;
BEGIN
        Clrscr;
        Write('Nhap so luong hoc sinh : '); Readln(n);
        For i:=1 to n do
                Begin
                        Write('Nhap ho ten cua hoc sinh : '); Readln(A[i].HoTen);
                        Write('Nhap ngay sinh cua hoc sinh : '); Readln(A[i].NgaySinh);
                        Write('Nhap dia chi cua hoc sinh : '); Readln(A[i].DiaChi);
                        Write('Nhap lop cua hoc sinh : '); Readln(A[i].Lop);
                        Write('Nhap ho ten bo cua hoc sinh : '); Readln(A[i].HoTenBo);
                        Write('Nhap ho ten me cua sinh : '); Readln(A[i].HoTenMe);
                End;
        READLN;
END.
 
T

thanhthuytu

Thuật toán :
1) Lập trình thuật toán về toán học rời rạc :
a) Tìm cây khung nhỏ nhất .
b) Tìm kiếm trên đồ thị :
- Dùng Dijksta tìm đường đi ngắn nhất
- Cài đặt thuật toán tìm kiếm theo chiều rộng , chiều sâu
c) Tìm liệt kê tổ hợp , chỉnh hợp , lặp và không lặp bằng phương pháp sinh tuần tự .
d) Liệt kê bằng phương pháp đệ quy quay lui (8 hậu người đi tuần , sáu sĩ quan Ơle)
2) Tính hậu số vẽ đồ thị
3) Tính đa thức nội suy laysuy và UD Newton tính xấp xỉ gần đúng .
4) Tính tích phân gần đúng hàm số .
5) Phương pháp lặp giải gần đúng hệ tuyến tính .
 
M

marik

Thuật toán :
1) Lập trình thuật toán về toán học rời rạc :
a) Tìm cây khung nhỏ nhất .
b) Tìm kiếm trên đồ thị :
- Dùng Dijksta tìm đường đi ngắn nhất
- Cài đặt thuật toán tìm kiếm theo chiều rộng , chiều sâu
c) Tìm liệt kê tổ hợp , chỉnh hợp , lặp và không lặp bằng phương pháp sinh tuần tự .
d) Liệt kê bằng phương pháp đệ quy quay lui (8 hậu người đi tuần , sáu sĩ quan Ơle)
2) Tính hậu số vẽ đồ thị
3) Tính đa thức nội suy laysuy và UD Newton tính xấp xỉ gần đúng .
4) Tính tích phân gần đúng hàm số .
5) Phương pháp lặp giải gần đúng hệ tuyến tính .
Cái gì đây em??? Hay em định viết về những thuật toán này?
 
L

longtt40

Mình khâm phục các bạn quá
các bạn làm thế nào mà có thể pro như thế, dạy mình đi
tiện thể mình có 1 số bài mong các bạn chỉ bảo :"> giúp mình vs nhé :X Mình đang học kiểu mảng 1 và 2 chiều nên các bạn làm cơ bản cho mình hiểu nhé :">

1.Nhập 2 mảng 1 chiều, tạo mảng thứ 3 bằng tổng 2 mảng trên. VD: c = a + b. In cả 3 mảng ra màn hình.

2. Nhập 1 dãy số nguyên n phần tử, in ra màn hình các số ở vị trí chẵn.

3. Nhập dãy số nguyên n phần tử, tìm phần tử âm đầu tiên và số chỉ của nó.

4. Nhập dãy số nguyên n phần tử, tìm số lớn thứ nhì của dãy.

5.Nhập mảng 2 chiều, tìm số lớn nhất của mảng.

6.Nhập dãy số nguyên n phần tử, in ra màn hình số lượng số hạng dương và trung bình cộng của chúng.

7.Nhập mảng 2 chiều, biểu thị trên màn hình giá trị 2 đường chéo.

Bạn nào giúp mình với nhé, tiện thể chỉ mình cách học giỏi Pascal nha :">
 
M

marik

Mình khâm phục các bạn quá
các bạn làm thế nào mà có thể pro như thế, dạy mình đi
tiện thể mình có 1 số bài mong các bạn chỉ bảo :"> giúp mình vs nhé :X Mình đang học kiểu mảng 1 và 2 chiều nên các bạn làm cơ bản cho mình hiểu nhé :">

1.Nhập 2 mảng 1 chiều, tạo mảng thứ 3 bằng tổng 2 mảng trên. VD: c = a + b. In cả 3 mảng ra màn hình.

2. Nhập 1 dãy số nguyên n phần tử, in ra màn hình các số ở vị trí chẵn.

3. Nhập dãy số nguyên n phần tử, tìm phần tử âm đầu tiên và số chỉ của nó.

4. Nhập dãy số nguyên n phần tử, tìm số lớn thứ nhì của dãy.

5.Nhập mảng 2 chiều, tìm số lớn nhất của mảng.

6.Nhập dãy số nguyên n phần tử, in ra màn hình số lượng số hạng dương và trung bình cộng của chúng.

7.Nhập mảng 2 chiều, biểu thị trên màn hình giá trị 2 đường chéo.

Bạn nào giúp mình với nhé, tiện thể chỉ mình cách học giỏi Pascal nha :">

Muốn học giỏi pascal thì em phải là được những bài này đi đã, đây là những bài rất cơ bản!!!
 
T

tungvip95

Giúp em làm bài này:-SS
Tìm đường:
Cho 1 file input có dạng 1 ma trận có diện tích n x m
VD
5 5
0 0 1 1 1
1 0 1 0 0
1 0 1 0 1
1 0 0 0 0
1 1 1 1 0

Hãy kiểm tra xem có đường đi từ phần tử [1,1] đến phần tử [n,m] của ma trận không?(đường đi gồm các số 0 và chỉ đi theo chiều ngang, dọc). Nếu có in ra màn hình "Yes" và in ra đường đi.
VD với file input như trên thì in ra màn hình:
Yes
a[1,1];a[1,2];a[2,2];a[3,2];a[4,2];a[4,3];a[4,4];a[4,5];a[5,5]

Mong mọi người làm giúp:D
 
Last edited by a moderator:
S

storm5906

Giúp em làm bài này:-SS
Tìm đường:
Cho 1 file input có dạng 1 ma trận có diện tích n x m
VD
5 5
0 0 1 1 1
1 0 1 0 0
1 0 1 0 1
1 0 0 0 0
1 1 1 1 0

Hãy kiểm tra xem có đường đi từ phần tử [1,1] đến phần tử [m,n] của ma trận không?(đường đi gồm các số 0 và chỉ đi theo chiều ngang, dọc). Nếu có in ra màn hình "Yes" và in ra đường đi.
VD với file input như trên thì in ra màn hình:
Yes
a[1,1];a[1,2];a[2,2];a[3,2];a[4,2];a[4,3];a[4,4];a[4,5];a[5,5]

Mong mọi người làm giúp:D

Bài này dùng đệ quy là tạm ổn. Mai post bài giải, khuya quá rồi! :D
 
S

storm5906

Giúp em làm bài này:-SS
Tìm đường:
Cho 1 file input có dạng 1 ma trận có diện tích n x m
VD
5 5
0 0 1 1 1
1 0 1 0 0
1 0 1 0 1
1 0 0 0 0
1 1 1 1 0

Hãy kiểm tra xem có đường đi từ phần tử [1,1] đến phần tử [n,m] của ma trận không?(đường đi gồm các số 0 và chỉ đi theo chiều ngang, dọc). Nếu có in ra màn hình "Yes" và in ra đường đi.
VD với file input như trên thì in ra màn hình:
Yes
a[1,1];a[1,2];a[2,2];a[3,2];a[4,2];a[4,3];a[4,4];a[4,5];a[5,5]

Mong mọi người làm giúp:D


Bài làm:

Mã:
PROGRAM Bai_tap;
USES    CRT;
CONST   fi='D:\Pascal\Bai_tap\BT.inp';
        fo='D:\Pascal\Bai_tap\BT.out';
VAR     A:array[0..1000,0..1000] of byte;
        B:array[0..10000,1..2] of byte;
        n,m,x,y:integer;
        f:text;
Procedure       Read_file;
                Var i,j:integer;
                Begin
                        Assign(f,fi); Reset(f);
                        Readln(f,n,m);
                        For i:=0 to n do A[i,0]:=1;
                        For j:=0 to m do A[0,j]:=1;
                        For i:=1 to n do
                                For j:=1 to m do
                                        Read(f,A[i,j]);
                        Close(f);
                        B[0,1]:=0;
                        For i:=1 to n do
                                Begin
                                        For j:=1 to m do Write(A[i,j],' ');
                                        Writeln;
                                End;
                        Writeln;
                End;
Procedure       Print_result;
                Var i,j:integer;
                Begin
                        Writeln('Yes!');
                        For i:=1 to B[0,1] do
                                Write('[',B[i,1],',',B[i,2],'] ');
                End;
Procedure       Attempt(x,y:integer);
                Var     kt:boolean;
                Begin
                        B[0,1]:=B[0,1]+1;
                        B[B[0,1],1]:=x;
                        B[B[0,1],2]:=y;
                        If (x=n) and (y=m) then
                                Print_result
                        Else
                                Begin
                                        kt:=False;
                                        If y<m then
                                                Begin
                                                        If A[x,y+1]=0 then Attempt(x,y+1);
                                                        kt:=True;
                                                End;
                                        If x<n then
                                                Begin
                                                        If A[x+1,y]=0 then Attempt(x+1,y);
                                                        kt:=True;
                                                End;
                                        If kt=False then
                                                Begin
                                                        If y>1 then
                                                                If A[x,y-1]=0 then Attempt(x,y-1);
                                                        If x>1 then
                                                                If A[x-1,y]=0 then Attempt(x-1,y);
                                                End;
                                        B[0,1]:=B[0,1]-1;
                                End;
                End;
BEGIN
        Clrscr;
        Read_file;
        Attempt(1,1);
        READLN;
END.

Bài làm này vẫn còn vài chỗ sai sót! :D
 
Last edited by a moderator:
M

marik

Cứ làm kiểu quay lui vét cạn cũng được mà em, nếu được thì dùng BFS thì sẽ tốt hơn.
 
Q

quynhdihoc

Các anh chị giúp em lập trình bài này với ạ :)
Tính tổng :

[TEX]n! + m! + a^{p} + b^{q} {[/TEX]

Có sử dụng hàm ạ . Thank you!
 
M

marik

Các anh chị giúp em lập trình bài này với ạ :)
Tính tổng :

[TEX]n! + m! + a^{p} + b^{q} {[/TEX]

Có sử dụng hàm ạ . Thank you!



Mã:
var a,b,m,n,p,q:integer;
function mu(k,h:integer):longint;
var s,i:integer;
begin
s:=1;
for i:=1 to h do s:=s*k;
mu:=s;
end;
function gt(j:integer):longint;
var i,s:integer;
begin
s:=1;
for i:=1 to j do s:=s*i;
gt:=s;
end;
begin
write('Nhap m: ');readln(m);
write('Nhap n: ');readln(n);
write('Nhap a: ');readln(a);
write('Nhap p: ');readln(p);
write('Nhap b: ');readln(b);
write('Nhap q: ');readln(q);
writeln('Tong bang: ', mu(a,p)+mu(b,q)+gt(m)+gt(n));
readln;
end.
Bài sẽ chạy đúng với điều kiện các biểu thức thực sự tồn tại :d
 
S

storm5906

Các anh chị giúp em lập trình bài này với ạ :)
Tính tổng :

[TEX]n! + m! + a^{p} + b^{q} {[/TEX]

Có sử dụng hàm ạ . Thank you!

Bài làm:

Mã:
PROGRAM Bai_tap;
USES    CRT;
VAR     n,m,a,b,p,q:integer;
Procedure       NhapDL;
                Begin
                        Write('Nhap so n : '); Readln(n);
                        Write('Nhap so m : '); Readln(m);
                        Write('Nhap so a : '); Readln(a);
                        Write('Nhap so p : '); Readln(p);
                        Write('Nhap so b : '); Readln(b);
                        Write('Nhap so q : '); Readln(q);
                End;
Function        Giai_thua(x:byte):longint;
                Var     i:integer;
                        gt:longint;
                Begin
                        gt:=1;
                        For i:=2 to x do gt:=gt*i;
                        Giai_thua:=gt;
                End;
Function        Luy_thua(x:integer; y:byte):longint;
                Var     i:integer;
                        lt:longint;
                Begin
                        lt:=1;
                        For i:=1 to y do lt:=lt*x;
                        Luy_thua:=lt;
                End;

BEGIN
        Clrscr;
        NhapDL;
        Writeln(n,'! + ',m,'! + ',a,'^',p,' + ',b,'^',q,' = ',Giai_thua(n)+Giai_thua(m)+Luy_thua(a,p)+Luy_thua(b,q));
        READLN;
END.
 
Top Bottom