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

T

tungvip95

Mã:
uses crt;
var
a,b,c,d,e,f:array [1..100] of integer;
i,n:integer;
begin
clrscr;
writeln('nhap so hoc sinh cần quản lý');
readln(n);
for i:=1 to n do begin
writeln('nhap ten hoc sinh thu ',i);
readln(a[i]);
writeln('nhap ngay sinh cua hoc sinh thu ',i);
readln(b[i]);
writeln('nhap dia chi cua hoc sinh thu ',i);
readln(c[i]);
writeln('nhap lop cua hoc sinh thu ',i);
readln(d[i]);
writeln('nhap ten bo hoc sinh thu ',i);
readln(e[i]);
writeln('nhap ten me hoc sinh thu ',i);
readln(f[i]);
end;
for i:=1 to n do begin
writeln('thong tin hoc sinh thu ',i,':','ten:',a[i],';ngay sinh: ',b[i],';dia chi:',c[i],';lop:',d[i],';ten bo:',e[i],';ten me:',f[i]);
end;
readln;
end.
 
M

marik

Cả nàh ơi giúp mjnh bài này nha mjnh cần gấp năm chậm nhất 15' nữa phải có giả đáp huhuhu:
Đề: viếtchương trình quản lí học sinh sử dụng kiểu mảng. phần khai báo có các mục sau (họtên. ngay sinh. địa chỉ, lớp. họ tên bố, họ tên mẹ.
Mong các bạn giúp mjnh khâả cấp :((
Hic! 15'. Có sử dụng kiểu tệp ko em?
@laban95:
var i,n:integer;
k:boolean;
begin
write('Nhap so can kiem tra: ');readln(n);
k:=false;
for i:=1 to round(sqrt(n)) do if (n mod i = 0) then k:=true;
if k then writeln('Day la khong la so nguyen to') else writeln('Day la so nguyen to');
readln;
end.
 
M

marik

Mã:
uses crt;
var
a,b,c,d,e,f:array [1..100] of integer;
i,n:integer;
begin
clrscr;
writeln('nhap so hoc sinh cần quản lý');
readln(n);
for i:=1 to n do begin
writeln('nhap ten hoc sinh thu ',i);
readln(a[i]);
writeln('nhap ngay sinh cua hoc sinh thu ',i);
readln(b[i]);
writeln('nhap dia chi cua hoc sinh thu ',i);
readln(c[i]);
writeln('nhap lop cua hoc sinh thu ',i);
readln(d[i]);
writeln('nhap ten bo hoc sinh thu ',i);
readln(e[i]);
writeln('nhap ten me hoc sinh thu ',i);
readln(f[i]);
end;
for i:=1 to n do begin
writeln('thong tin hoc sinh thu ',i,':','ten:',a[i],';ngay sinh: ',b[i],';dia chi:',c[i],';lop:',d[i],';ten bo:',e[i],';ten me:',f[i]);
end;
readln;
end.
Hóa ra quản lí thông tin chỉ có vậy thôi à!!! Anh nghĩ phải có cả chức năng nhập, xóa, thay đổi và lưu trữ thông tin nữa chứ!!!
 
T

tungvip95

viết ctrinh nhận bik 1 số tự nhiên nhập từ bàn phím có phải là số ngto hay ko?
(mih chưa học kiểu dữ liệu mảng)
để tôi thử:D
Mã:
uses crt;
var
a,i:integer;
ok:boolean;
begin
clrscr;
write('nhap so');readln(a);
for i:=2 to trunc(sqrt(a)) do begin
if a mod i =0 then ok:=false else ok:=true;
end;
if ok = true then writeln(a,' la so nguyen to') else write(a,' khong phai la so nguyen to');
readln;
end.
 
Last edited by a moderator:
M

marik

để tôi thử:D
Mã:
uses crt;
var
a,i:integer;
ok:boolean;
begin
clrscr;
write('nhap so');readln(a);
for i:=1 to trunc(sqrt(a)) do begin
if a mod i =0 then [COLOR="YellowGreen"]ok:=false else ok:=true[/COLOR];
end;
if ok = true then writeln(a,' la so nguyen to') else write(a,' khong phai la so nguyen to');
readln;
end.
Bài này của em không ổn, ví dụ như 10 chẳng hạn. Với i = 2 thì ok = false nhưng sang đến i=3 thì ok= true. Như vậy giá trị cuối cùng của ok= true==> 10 là số nguyên tố????
 
S

storm5906

để tôi thử:D
Mã:
uses crt;
var
a,i:integer;
ok:boolean;
begin
clrscr;
write('nhap so');readln(a);
for i:=1 to trunc(sqrt(a)) do begin
if a mod i =0 then ok:=false else ok:=true;
end;
if ok = true then writeln(a,' la so nguyen to') else write(a,' khong phai la so nguyen to');
readln;
end.

Theo mình thì là thế này:

Mã:
PROGRAM	 So_nguyen_to;
USES	CRT;
VAR	a,i,dem:integer;
	KT:boolean;
BEGIN
	Write('Nhap mot so tu nhien a (a>0) : '); Readln(a);
	KT:=True;
	dem:=0;
	For i:=1 to round(sqrt(a)) do
		Begin
			If a mod i = 0 then dem:=dem+1;
			If dem>1 then
				Begin
					KT:=False;
					Break;
				End;
		End;
	If KT=True then Writeln('So ',a,' la mot so nguyen to!')
	Else Writeln('So ',a,' khong phai la mot so nguyen to!');
	READLN;
END.
 
L

laban95

Mã:
uses crt;
var
a,i:integer;
ok:boolean;
begin
clrscr;
write('nhap so');readln(a);
for i:=1 to trunc(sqrt(a)) do begin
if a mod i =0 then ok:=false else ok:=true;
end;
if ok = true then writeln(a,' la so nguyen to') else write(a,' khong phai la so nguyen to');
readln;
end.
bài tugvip nhap so nguyen to nhug nó nói ko phải số ngto :(
 
M

marik

bài tugvip nhap so nguyen to nhug nó nói ko phải số ngto :(
Em có thể dùng 1 trong 2 bài
Mã:
var i,n:integer;
k:boolean;
begin
write('Nhap so can kiem tra: ');readln(n);
k:=false;
for i:=1 to round(sqrt(n)) do if (n mod i = 0) then k:=true;
if k then writeln('Day la khong la so nguyen to') else writeln('Day la so nguyen to');
readln;
end.
hoặc
Mã:
PROGRAM	 So_nguyen_to;
USES	CRT;
VAR	a,i,dem:integer;
	KT:boolean;
BEGIN
	Write('Nhap mot so tu nhien a (a>0) : '); Readln(a);
	KT:=True;
	dem:=0;
	For i:=1 to round(sqrt(a)) do
		Begin
			If a mod i = 0 then dem:=dem+1;
			If dem>1 then
				Begin
					KT:=False;
					Break;
				End;
		End;
	If KT=True then Writeln('So ',a,' la mot so nguyen to!')
	Else Writeln('So ',a,' khong phai la mot so nguyen to!');
	READLN;
END.
Bài trên đơn giản hơn nhưng bài dưới lại thích hợp với những số lớn hơn. Tùy em chọn!
 
L

laban95

uh, bài của tugvip có thể sửa lại như sao
uses crt;
var
a,i:integer;
ok:boolean;
begin
clrscr;
write('nhap so');readln(a);
for i:=1 to trunc(sqrt(a)) do begin
if a mod i =0 then ok:=false else ok:=true;
end;
if ok = true then writeln(a,' la so nguyen to') else write(a,' khong phai la so nguyen to');
readln;
end.
bn sửa thành số 2, phải ghi ra 1 tru7o7u7ờng hợp cho số 2 (số đặc biệt) nếu khi nhập số 2 màn hình sẽ hiện ra o phải là số ngto
 
T

tungvip95

uh, bài của tugvip có thể sửa lại như sao

bn sửa thành số 2, phải ghi ra 1 tru7o7u7ờng hợp cho số 2 (số đặc biệt) nếu khi nhập số 2 màn hình sẽ hiện ra o phải là số ngto

Tôi làm bài này ở lớp nhiều lần nhưng lần nào cũng gõ nhầm số 2 thành số 1 (do quen tay) xin mọi người thông cảm:D
 
Last edited by a moderator:
V

vipgood9x

Thanks ban tungvip95 rất nhiều naz :p
Bạn có rảnh h0k giúp mjnk thêm 1 bài nữa :p

Sắp xếp
Để tiến hành phân tích cơ cấu dân số tại vùng X người ta đã tiến hành thu thập thông tin về độ tuổi của người dân nơi đây. Qua quá trình thu thấp số liệu, tổ công tác đã thống kê được toàn bộ tuổi của người dân ở khu vực này. Tuy nhiên do dân cư ở đây khá đông, (<=2triệu người ) nên số liệu này đã được tổng hợp từ rất nhiều bản thống kê của các cộng tác viên dẫn đến số liệu thu được rất lộn xộn, khó cho công tác phân tích đánh giá.

Yêu cầu: Sắp xếp lại số liệu tuổi của dân cư khu vực X đã thu thập theo thứ tự tăng dần. Biết tuổi của người dân ở nơi đây nằm trong khoảng từ 1 đến 90

Dữ liệu: Tuổi của dân cư ở khu vực này được cho vào từ tệp AGE.INP, chúng được viết liên tiếp nhau, cách nhau ít nhất một dấu cách hoặc một dấu xuống dòng

Kết quả: Đưa ra tệp AGE.OUT có cấu trúc như tệp vào nhưng số liệu tuổi được sắp xếp theo thứ tự tăng dần

AGE.INP
1 2 1 2 5 2 24 16 8 16 8 24 9 7 3

AGE.OUT
1 1 2 2 2 3 5 7 8 8 9 16 16 24 24

Cái này dùng thuật toán Sủi bọt vs Tệp không kiểu nhờ :p
Tungvip mới lớp 8 à, thế mà lập trình giỏi thế
 
M

marik

2 triệu dân!!! Làm kiểu gì đây? Không đơn giản chỉ là sủi bọt và tệp, vấn đề chính ở đây là cái 2 triệu kia!
 
V

vipgood9x

e nghĩ chỉ cần sắp xếp cái
AGE.INP
1 2 1 2 5 2 24 16 8 16 8 24 9 7 3

thành
AGE.OUT
1 1 2 2 2 3 5 7 8 8 9 16 16 24 24
naz được oy` :( CHứ 2tr thj` ai mà làm dc :(
 
T

tungvip95

Thanks ban tungvip95 rất nhiều naz :p
Bạn có rảnh h0k giúp mjnk thêm 1 bài nữa :p



Cái này dùng thuật toán Sủi bọt vs Tệp không kiểu nhờ :p
Tungvip mới lớp 8 à, thế mà lập trình giỏi thế
bài này mình đã tự ý thêm n là số tuổi nhập vào file input. Nếu không được thì để mình
làm lại:D
Mã:
uses crt;
var
a:array [1..1000] of integer;
f,g:text;
gan,i,j,n:integer
begin
clrscr;
assign(f,'age.inp');
reset(f);
readln(f,n);
for i:=1 to n do begin
read(f,a[i]);
end;
close(f);
assign(g,'age.out');
rewrite(g);
for i:=1 to n do begin
for j:= i+1 to n do begin
if a[i]>a[j] then begin
gan:=a[i];
a[i]:=a[j];
a[j] :=gan;
end;
end;
write(g,' ',a[i]);
end;
end.

Bài trên là giải cho file input có dạng:
15
1 2 1 2 5 2 24 16 8 16 8 24 9 7 3
Bạn test xem có lỗi không nhé:D

P/S: tôi không giỏi đâu, người giỏi là ông storm_5906 kìa:D
 
M

marik

Không cần thêm n vào đâu em ạ, ta sử dụng hàm eof và eoln. Anh lấy luôn bài của em sửa lại một chút

Mã:
uses crt;
var
a:array [1..100] of integer;
f:text;
gan,i,j,n:integer;
begin
clrscr;
assign(f,'age.inp');
reset(f);
n:=0;
while not eof(f) do
begin
while not eoln(f) do
begin
inc(n);
read(f,a[n]);
end;
readln(f);
end;
close(f);
assign(f,'age.out');
rewrite(f);
for i:=1 to n do
for j:= i+1 to n do
if a[i]>a[j] then begin
gan:=a[i];
a[i]:=a[j];
a[j] :=gan;
end;
for i:=1 to n do write(f,' ',a[i]);
close(f);
end.
p/s: Trong Turbo Pascal thì mảng integer đến 1000 không khả thi đâu em ạ.
 
T

tungvip95

Không cần thêm n vào đâu em ạ, ta sử dụng hàm eof và eoln. Anh lấy luôn bài của em sửa lại một chút

Mã:
uses crt;
var
a:array [1..100] of integer;
f:text;
gan,i,j,n:integer;
begin
clrscr;
assign(f,'age.inp');
reset(f);
n:=0;
while not eof(f) do
begin
while not eoln(f) do
begin
inc(n);
read(f,a[n]);
end;
readln(f);
end;
close(f);
assign(f,'age.out');
rewrite(f);
for i:=1 to n do
for j:= i+1 to n do
if a[i]>a[j] then begin
gan:=a[i];
a[i]:=a[j];
a[j] :=gan;
end;
for i:=1 to n do write(f,' ',a[i]);
close(f);
end.
p/s: Trong Turbo Pascal thì mảng integer đến 1000 không khả thi đâu em ạ.

Vâng. Em mới học pascal được 7 tháng nên chưa biết hàm eof và hàm eoln:D
 
M

marik

Góp 1 bài nhé:
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.
Làm bài này bằng 3 cách nhé :d
Óe, ko ai muốn làm bài này à! Dễ quá à!!!:(:(:(:(:(:(:(:(
 
S

storm5906

Góp 1 bài nhé:
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.
Làm bài này bằng 3 cách nhé :d

Bài giải:

Mã:
PROGRAM Bai_tap;
USES    CRT;
Var     A:array[1..100] of integer;
        i,j,k,n,m,max: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;
        m:=1;
        k:=1;
        max:=0;
        While n-k>max do
                Begin
                        j:=0;
                        For i:=k to (n-k) do
                                If A[i]>=A[i+1] then j:=j+1
                                Else Break;
                        If j>max then
                                Begin
                                        m:=k;
                                        max:=j;
                                End;
                        k:=k+1;
                End;
        For i:=m to (max+m) do Write(A[i],' ');
        READLN;
END.
 
Top Bottom