Lập Trình Pascal Bài tập thực hành về Kiểu mảng 2

Đăng: AdamWilling
1135 Lượt Xem
Thời Gian: 20/01/2019 lúc 21:21:01

Bài tập thực hành về Kiểu mảng 2

Bài 1:

a) Hãy tìm hiểu và chạy thử chương trình thuật toán sắp xếp dãy số nguyên bằng thuật toán tráo đổi với các giá trị khác nhau của n dưới đây .

Qua đó nhận xét về thời gian chạy chương trình.

Trả lời:

program sapxep;
uses crt;
const Nmax=250;
var
	N,i,j,t:integer;
	A:array[1..Nmax] of integer;
begin
	clrscr;
	randomize;
	write('nhap so luong phan tu cua day N=');
	readln(N);
	for i:=1 to N do
	begin
	A[i]:=random(300)-random(300);
	end;
	for i:=1 to N do
	write(A[i]:5);
	writeln;
	for j:=N downto 2 do
		for i:=1 to j-1 do
			if A[i]>A[i+1] then
			begin
			t:=A[i];
			A[i]:=A[i+1];
			A[i+1]:=t;
			end;
	writeln('day da duoc sap xep la ');
	for i:=1 to N do write(A[i]:4);
	readln;
end.

Kết quả:

Bài Tập Thực Hành Về Kiểu Mảng 2 | ChiaSe24h

b) Khai báo thêm biến nguyên Dem và bổ sung vào chương trình những câu lệnh cần thiết để biến Dem tính số lần thực hiện tráo đổi trong thuật toán. Đưa kết quả ra màn hình.

Trả lời:

program sapxep;
uses crt;
const Nmax=250;
var
	N,i,j,t,dem:integer;
	A:array[1..Nmax] of integer;
begin
	clrscr;
	randomize;
	write('nhap so luong phan tu cua day N=');
	readln(N);
	for i:=1 to N do
	begin
	A[i]:=random(300)-random(300);
	end;
	dem:=0;
	for i:=1 to N do
	write(A[i]:5);
	writeln;
	for j:=N downto 2 do
		for i:=1 to j-1 do
			if A[i] > A[i+1] then
			begin
			t:=A[i];
			A[i]:=A[i+1];
			A[i+1]:=t;
			dem:=dem+1;
			end;
	writeln('day da duoc sap xep la ');
	for i:=1 to N do write(A[i]:4);
	writeln;
	writeln('so lan thuc hien trao doi la ',dem);
	readln;
end.

Kết quả:

Bài Tập Thực Hành Về Kiểu Mảng 2 | ChiaSe24h

Bài 2: Hãy đọc và tìm hiểu những phân tích để viết chương tình giải bài toán :

Cho mảng A gồm n phần tử. Hãy biết chương trình tạo mảng B[1..n] trong đó B[i] là tổng của I phần tử đầu tiên trong A.

Trả lời:

Có 2 cách:

Cách 1 là duyệt lần lượt các phần từ của mảng B. Đến vị trí I ta sẽ duyệt từ 1 đến I của mảng A rồi cộng dồn vào B[i]

Cách 2 là ta nhận thấy B[j]=B[j-1]+A[j] nếu j khác 1và B[j]=A[1] nếu j=1.

Cách 1:

program sapxep;
uses crt;
const Nmax=250;
var
	N,i,j,t,dem:integer;
	A:array[1..Nmax] of integer;
	B:array[1..Nmax] of integer;
begin
	clrscr;
	randomize;
	dem:=0;
	write('nhap so luong phan tu cua day N=');
	readln(N);
	for i:=1 to N do
	begin
	A[i]:=random(300)-random(300);
	B[i]:=0;
	end;
	for i:=1 to N do
		for j:=1 to i do
		begin
			B[i]:=B[i]+A[j];
			dem:=dem+1;
		end;
	writeln('dem=',dem);
	readln;
end.

Kết quả:

Số lần thực thi phép cộng là:

Bài Tập Thực Hành Về Kiểu Mảng 2 | ChiaSe24h

Cách 2:

program sapxep;
uses crt;
const Nmax=250;
var
	N,i,j,t,dem:integer;
	A:array[1..Nmax] of integer;
	B:array[1..Nmax] of integer;
begin
	clrscr;
	randomize;
	dem:=0;
	write('nhap so luong phan tu cua day N=');
	readln(N);
	for i:=1 to N do
	begin
	A[i]:=random(300)-random(300);
	B[i]:=0;
	end;
	B[1]:=A[1];
	for i:=2 to N do
		begin
		B[i]:=B[i-1]+A[i];
		dem:=dem+1;
		end;
	writeln('dem=',dem);
	readln;
end.

Kết quả:

Số lần thực thi phép cộng là

Bài Tập Thực Hành Về Kiểu Mảng 2 | ChiaSe24h

Nhận thấy sử dụng cách 2 có thể làm giảm đáng kể số lượng phép toán cần thực hiện. Tuy tốc độ máy tính rất nhanh nhưng cũng có giới hạn. Vì thế ta nên tìm cách viết sao cho chương trình thực hiện càng ít phép toán càng tốt.

Giới Thiệu

AdamWilling

Cuộc sống này! Để đứng được ở những nơi mà không ai đứng được, phải làm được những điều mà không ai làm được!
Bình Luận Bài Viết
Chia Sẻ Bài Viết
Link:
BBCode:
HTML:
Cùng Chuyên Mục
Đề Xuất
Tiện Ích Online
Fanpage Facebook