PDA

View Full Version : Bài tập Pascal nội dung về mảng?



duongnd1991
22-12-2009, 01:58
1: Viết chương trình nhập vào một dãy n số nguyên (n: hằng số). In ra màn hình các giá trị khác nhau của dãy số này.
VD: nhập vào: 5 20 15 5 20 17 ==> In ra: 5 20 15 17
2: Cho 1 dãy gồm n số nguyên dương có 3 chữ số, hãy sắp xếp dãy theo thứ tự tăng dần của chữ số hàng đơn vị; hàng đơn vị bằng nhau thì sắp xếp theo thứ tự tăng dần của hàng chục; hàng chục bằng nhau thì sắp xếp theo thứ tự tăng dần của hàng trăm.
3: Cho 2 mảng A và B đã được sắp xếp theo thứ tự tăng dần. Hãy trộn 2 mảng đó lại với nhau để có mảng thứ 3 là mảng C với điều kiện mảng C cũng được sắp xếp theo thứ tự tăng dần ngay sau khi trộn.
Thanks các bạn trước!

hcvtpt
22-12-2009, 03:16
B1:
Var i,j,k,n: integer;
{Coi n la bien}
BEGIN
Write('N=');Readln(n);
For i:=1 to n do
Begin
Write('A[',i,']=');Readln(a[i]);
End;
{Duyet qua cac phan tu, neu phan tu khong trung thi in ra}
For i:=1 to n do
For j:=1 to n do
If (i<>j) and (a[i]<>a[j]) then
Write(A[i]:6);

Readln;
END.

<hic, buồn ngủ quá.

duongnd1991
22-12-2009, 16:32
B1:
Var i,j,k,n: integer;
{Coi n la bien}
BEGIN
Write('N=');Readln(n);
For i:=1 to n do
Begin
Write('A[',i,']=');Readln(a[i]);
End;
{Duyet qua cac phan tu, neu phan tu khong trung thi in ra}
For i:=1 to n do
For j:=1 to n do
If (i<>j) and (a[i]<>a[j]) then
Write(A[i]:6);

Readln;
END.

<hic, buồn ngủ quá.

Bài của bạn khi chạy không được! Nếu lấy phần vd mình đưa ra thì Nó in ra hàng số: 5 20 5 20

nhokdragon94
22-12-2009, 18:12
Cái bài 1 có lẽ nên đưa vào mảng B xét

thinh94
22-12-2009, 22:54
B1 của bạn thưc ra rất dễ và có tới 2 cách để làm
C1 là gán 1 mảng boolean để đánh dấu các phần tử giống nhau đã đươc in ra
Var i, j, n: Integer;
a: array[100] of Integer;
b: array[100] of Boolean;
Begin
Readln(n);
for i := 1 to n do Readln(a[i]);
for i := 1 to n do b[i] := True;
for i := 1 to n do
if b[i] then
Begin
Write(a[i]:6);
for j := i + 1 to n do
if a[i] = a[j] then b[j] := False;
End;
Readln;
End.
C2 là duyệt ngươc về sau xem phần tử đó đã xuất hiện chưa
Var i, j, n: Integer;
a: array[100] of Integer;
Begin
Readln(n);
for i := 1 to n do Readln(a[i]);
Write(a[1]:6);
for i := 2 to n do
Begin
for j := 1 to i - 1 do
if a[i] = a[j] then continue;
Write(a[i]:6);
End;
Readln;
End.

duongnd1991
24-12-2009, 02:42
Cảm ơn các bạn nhé!
Hai câu còn lại mong các bạn giúp đỡ, mình đang cần gấp vì sắp tới mình phải thi Pascal rồi!

QuyNam
24-12-2009, 16:30
bài 1


uses crt;
var a:array[1..100] of integer;
i,n:integer;
t:set of byte;
begin
clrscr;
write('nhap so pt cua day : ');readln(n);
writeln('nhap day : ');
for i:=1 to n do readln(a[i]);
write('cac so khac nhau trong day : ');
for i:=1 to n do
if not (a[i] in t) then
begin
write(a[i],' ');
t:=t+[a[i]];
end;
readln;
end.


bài 3



uses crt;
var a:array[1..100] of integer;
i,j,n,t:integer;
begin
clrscr;
{--- nhap mang a ---}
write('nhap so pt cua a : ');readln(n);
write('nhap day a : ');
for i:=1 to n do readln(a[i]);
{--- nhap mang b noi vao mang a ---}
write('nhap so pt cua b : ');readln(n);
write('nhap day b : ');
for j:=i+1 to i+n do readln(a[j]);
{--- sap xep lai mang ---}
n:=j;
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then
begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
end;
clrscr;
{--- in ket qua ---}
for i:=1 to n do write(a[i],' ');
readln;
end.

kengumuoiTH
25-12-2009, 10:59
Mình xin đề nghị cách sau:
Program mang;
uses crt;
var A:array[1..100] of integer;
i,n,Tg:integer;
Begin
clrscr;
Write('Nhap so luong phan tu cua mang, n= ');
readln(n);
for i:=1 to n do
begin
write('nhap phan tu thu ',i,' vao: ');
readln(A[i]);
end;
{Sap xep mang thanh day khong giam}
for i:=1 to n-1 do
if A[i+1] < A[i]then
begin
Tg:=A[i+1];
A[i+1]:=A[i];
A[i]:=Tg;
end;
writeln(' Cac gia tri khac nhau trong mang la: ');
for i:=1 to do
if A[i] < A[i+1] then write(A[i]:5);
readln
end.

nhokdragon94
25-12-2009, 12:15
Hi cách của pác cũng hay đó(chép dô cái ^^ ). àh theo em pác nên đổi chỗ If A[i]<A[i+1] then.... Thành A[i]<>A[i+1].. sẽ dễ nhớ hơn đó.

QuyNam
25-12-2009, 15:59
Mình xin đề nghị cách sau:
writeln(' Cac gia tri khac nhau trong mang la: ');
for i:=1 to do
if A[i] < A[i+1] then write(A[i]:5);
readln
end.

thì cách của bạn cũng giống cách của mình thôi. chỉ khác nhau chỗ sắp xếp. còn đoạn cuối đề yêu cầu in ra mảng c đã sắp xếp chứ có bảo in ra những phần tử khác nhau đâu

bara_dh
20-02-2010, 10:01
uses crt;
var A,B:array[1..100] of integer;
C:array[1..200] of integer;
i,n,m,temp,k,j:integer;
begin
clrscr;
repeat
write('Nhap so phan tu cua mang A: ');readln(n);
write('Nhap so phan tu cua mang B: ');readln(m);
until (N>0) and (N<101) and (M>0) and (M<101);
for i:=1 to n do
begin
write('A[',i,']= ');readln(A[i]);
end;
for i:=1 to m do
begin
write('B[',i,']= ');readln(B[i]);
end;
{sap xep mang A,B}
for i:=1 to n-1 do
for j:=i+1 to n do
if A[i]>A[j] then
begin
temp:=A[i];
A[i]:=A[j];
A[j]:=temp;
end;
for i:=1 to m-1 do
for j:=i+1 to m do
if A[i]>A[j] then
begin
temp:=B[i];
B[i]:=B[j];
B[j]:=temp;
end;
{noi mang A va B vao mang C}
i:=1;j:=1;k:=1;
while (i<=n) and (j<=m) do
if A[i]>B[j] then
begin
C[k]:=B[j];
inc(j);inc(k);
end
else
begin
C[k]:=A[i];
inc(i);inc(k);
end;
while i<=n do
begin
C[k]:=A[i];
inc(i);inc(k);
end;
while j<=m do
begin
C[k]:=B[j];
inc(j);inc(k);
end;
write('Mang C= ');
for k:=1 to m+n do
write(C[k],' ');
readln
end.

[=========> Bổ sung bài viết <=========]

bai 3 kho day minh chi can 15 phut la giai duoc roi

[=========> Bổ sung bài viết <=========]

co bai nao thi dua len minh giai cho minh la hoc sinh thi giai nhat ki thi hsg tin hoc quoc gia day

SecretStar9x
12-03-2012, 22:06
Bai 2:


program sap_xep_3_chu_so;
uses crt;
type mang1=array[1..900] of integer;
var a:mang1;
i,n,k,dva,dvb,t,hca,hcb,hta,htb:integer;
begin
clrscr;
write('Nhap n: '); readln(n);
for i:=1 to n do
begin
writeln('So thu ',i,' la: '); readln(a[i]);
end;
for k:=n downto 2 do
for i:=1 to k-1 do
begin
dva:=a[i] mod 10;
dvb:=a[i+1] mod 10;
if dva > dvb then
begin
t:=a[i+1];
a[i+1]:=a[i];
a[i]:=t;
end
else
begin
if dva = dvb then
begin
hca:=(a[i] div 10) mod 10;
hcb:=(a[i+1] div 10) mod 10;
if hca > hcb then
begin
t:=a[i+1];
a[i+1]:=a[i];
a[i]:=t;
end;
end
else if hca = hcb then
begin
hta:=a[i] div 100;
htb:=a[i+1] div 100;
if hta > htb then
begin
t:=a[i+1];
a[i+1]:=a[i];
a[i]:=t;
end;
end;
end;
end;
for i:=1 to n do write(a[i], ' ');
readln
end.

tinhyeubeau
21-03-2012, 08:06
Bài 1 thì các bác đã giải rất thỏa đáng rồi, còn bài mình nghĩ nên lộn ngược đi mà so sánh rồi lúc hiện ra thì lộn lại cũng được mà, hoặc nhét vào String mà so sánh.
Còn bài 3 có trong SBT tin 11 đó, tìm đi, mấy ông đầu to bằng nồi nghĩ ra cách giải thì chắc cũng dùng tạm được.

auauau97
21-03-2012, 20:44
các bạn lần sau cho code vào thẻ code cho dễ nhìn nhé, cứ cho đại lên thì trong khó hiểu lắm

Bean.it90
22-03-2012, 09:19
bác này học ở trong trường nào vậy :)

kuchuots
24-03-2012, 17:08
bài 2 nè
mình nghĩ nên đưa về string rồi làm cái thủ tục sx thì hay hơn

levantukg
20-09-2017, 20:56
Chưa đúng! xem lại dùm nhé