BÀI TẬP PHƯƠNG PHÁP GIẢI BÀI TẬP TIN HỌC Họ tên: Nguyễn Văn Cần

Một phần của tài liệu phương pháp giải bài tập tin học lớp 11 (Trang 89 - 96)

. Tiếp tục so sánh cho đến khi hết các phần tử trong dãỵ

BÀI TẬP PHƯƠNG PHÁP GIẢI BÀI TẬP TIN HỌC Họ tên: Nguyễn Văn Cần

Họ tên: Nguyễn Văn Cần

Lớp : Tin 4B

Bài 3.21: Viết đoạn chương trình dùng câu lệnh IF tính:

x + y nếu x > 1 và y > 1 v:= x – y nếu x > 1 và y <= 1

- x + y nếu x <= 1 và y > 0 - x - y nếu x <1 và y <=0

Bài giải:

Bước 1: Xác định Input, Output

- Input: x,y; - Output: v;

Bước 2: Ý tưởng thuật toán:

B1: Đọc giá trị x, y nhập vào B2: Xét giá trị x,y

- Tính v:

° V := x + y nếu x > 1 và y > 1. Chuyển qua bước 3; ° V := x – y nếu x > 1 và y <= 1;Chuyển qua bước 3; ° V := - x + y nếu x <= 1 và y > 0;Chuyển qua bước 3; ° V := - x - y nếu x <1 và y <=0;Chuyển qua bước 3; B3: In giá trị của v  Bước 3: Chương trình If (x > 1) and (y > 1) then v:=x + y Else If (x > 1) and (y <= 1) then v:=x - y Else If (x <= 1) and (y <=0 ) then v:=x + y Else v:= - x – y;

Writeln(‘ Gia tri cua ham la ‘,v);

Hoặc:

If (x > 1) and (y > 1) then v:=x + y ;

If (x > 1) and (y <= 1) then v:=x + y ;

If (x <= 1) and (y >0) then v:=x + y ;

If (x <= 1) and (y <=0) then v:=x + y ;

Bước 4:Thiết kế bài tập tương tự:

Tính giá trị của y x – 1 nếu x>=1;

Y= x+ 1 nếu (x>=0) và (x<1) – x – 1 nếu (x<0)

Bài 4.42:Xâu đá quý:

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

- Input: xâu s;

- Output: các vị trí có thể mở vòng;  Bước 2: Ý tưởng thuật toán:

- B1: Đọc giá trị xâu s nhập vào - B2: sovt=0;i:=1;

- B3:

° Tại mỗi vị trí i: ta tiến hành xây dựng một xâu mới s1(tạm) như sau:

+ S1:=Copy(s,I,length(s)-i+1) + copy(s,1,i-1);

+ Kiểm tra xâu s1 có phải là xâu đối xứng hay không? • Nếu s1 là xâu đối xứng thì : Tăng giá trị của sovt lên 1;

° i:=i+1; Nếu i<length(s) thì quay lại bước 3 còn không thì chuyển qua bước 4. (adsbygoogle = window.adsbygoogle || []).push({});

- B4: In ra số vị trí

Bước 3: Chương trình

Program Xaudoixung;{chương trình in ra các vị trí mở vòng}

var a:array[1..100] of real;s,s1,s2:string;i,n,j:integer;

Begin

write('Nhap mot xau '); Readln(s); n:=0;

for i:=1 to length(s) do begin

s2:='';

S1:=copy(s,I,length(s)-i+1)+ copy(s,1,i-1);

for j:= length(s1) downto 1 do

s2:=s2+s1[j];

if s1=s2 then begin

inc(n);

if length(s) mod 2 =0 then

a[n]:=i-0.5

else a[n]:=0;

end; end;

if n=0 then write('khong co vi tri mo vong ')

else begin

Writeln(' Cac vi tri mo vong ');

for i:=1 to n do write(a[i]:5:1);

end;

readln;

End.

Program Xaudoixung;{chương trình in ra số vị trí mở vòng}

var ;s,s1,s2:string;i,sovt,j:integer;

Begin

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

sovt:=0;

for i:=1 to length(s) do begin (adsbygoogle = window.adsbygoogle || []).push({});

s2:='';

S1:=copy(s,I,length(s)-i+1)+ copy(s,1,i-1);

for j:= length(s1) downto 1 do

s2:=s2+s1[j];

if s1=s2 then

inc(n);

end;

if n=0 then write('khong co vi tri mo vong ')

else

Writeln(' so vi tri vi tri mo vong ',sovt); readln;

End.

Bước 4:Thiết kế bài tập tương tự: Bộ test:

Xâu :’2222335533’ thì số vị trí mở vòng là 2 (sau 3 và sau 9) Xâu:’1122211’ thì số vị trí mở vòng là 1( đầu xâu)

Nhập một xâu, hãy xác định các vị trí của một xâu con (nhập vào từ bàn phím) trong xâu đó và in ra các xâu đó (nếu có)

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Sinh viên: Phạm Văn Rin Lớp Tin 4B

Bài Làm Bài 4.12

Bước1:

Input : Nhập vào dãu số nguyên P=( p1, p1,…,pn).

Output:Dãy số P sau khi đã hoán đổi phần tử lớn nhất có chỉ số nhỏ nhất với phần tử nhỏ nhất có chỉ số lớn nhất.

Bước 2: Sơ đồ khối

Bước 3: Viết Chương trình: Uses crt;

Var

A: array [1..100] of byte; i, j, min, max, tg : byte; Begin

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Write(‘ nhap vao n:’); Readln(n); For i:= 1 to n do

Begin

Write (‘ nhap phan tu thu ‘,i,’:’); Readln(A[i]);

End;

Min:= n; max:= 1; For i:= 2 to n do (adsbygoogle = window.adsbygoogle || []).push({});

If ( max< A[i] ) then max:= i; For j:= n-1 downto 1 to

If ( min > A[j] ) then min:= j; Tg: = A[min];

A[min]:= A[max]; A[max]:= tg; For i:= 1 to n do

Write( ‘ phan tu thu ‘,i,’ la: ‘, A[i]:8:2); Readln; End. Bước 4: - Xây dựng bộ Test: Nhập vào mảngA gồm các phần tử A =( 3, 4, 3, 5, 9, 7, 9) Tìm max: Max:= 1; A[max]=A[1]=3

i A[i] A[i] >A[max] max 2 3 4 5 6 7 4 3 5 9 7 9 T F T T F F 2 2 4 5 5 5 Min:= 7; A[min]=A[7]=9

J A[j] A[j] <min min 6 5 4 3 2 1 7 9 5 3 4 3 T F T T F F 6 6 4 3 3 3 Mảng A sau khi hoán đổi: A= ( 3, 4, 9, 5, 3, 7, 9) Mở rộng bài toán:

+ Có thể giải bài toán bằng cách thay vòng lặp For bằng vòng lặp Whilẹ + Có thể chỉ duyệt từ một phía của mảng Ạ

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Bài 6.16

Bước 1: Xác định Input và Output: Input:

- Mảng A= ( a1, a2,…, an). - Số nguyên n (1 <= n<= 100). - Tệp văn bản VTẠ INP Output:

- MinA, maxA, TB Bước 2: Ý tưởng giải thuật

- Sử dụng các vòng lặp để tìm min, max của Ạ

- Để tính trung bình của A, ta sử dụng 1 biến để lưu tổng giá trị các phấn tử của A . Trung bình của A được tính theo công thức: TB = Tổng giá trị/ Số phần tử.

Thuật toán tìm minA, max

B1: Đọc tệp văn bản lưu vào biến mảng Ạ

B2: Gán maxA: = A[1]; minA:= A[1]; i:= 1; tong:= A[1]; dem:= 1; B3: Chừng nào ( i<= n ) thì:

- Nếu maxA < A[i] thì gán maxA:= A[i]; - Nếu minA > A[i] thì gán minA:= A[i];

- Tong := tong + A[i]; - i:= i+ 1;

Quay lại bứớc 3. B4: Tính TB:= Tong/ n;

B5: Thông báo kết quả: maxA, minA, TB và kết thúc.

Bước 3: Chương trình: Program btap;

Type vector = array [1..100] of real; Var A: vector; f:text;

N, s,i ,j: byte; minA, maxA, TB : real;

Procedure MNT( var A: vector; n: byte; var minA, maxA, TB: real); Begin

minA:= A[1]; max:= A[1]; tong:= A[1]; i:=2; While ( i < = n) do

Begin

If maxA < A[i] then maxA:= A[i]; If minA > A[i] then minA := A[i]; tong:= tong + A[i];

i:=i+ 1; End; TB := tong/ n;

Writeln(‘ gia tri min:’, minA); Writeln(‘ gia tri max:’, maxA); Writeln(‘ gia tri TB:’, TB); End; (adsbygoogle = window.adsbygoogle || []).push({});

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com Assign(f, ‘VTẠINP’); Reset(f); Readln(f, n); For i:= 1 to n do Readln (f, A[i],’ ‘);

MNT( var A: vector; n: byte; var minA, maxA, TB: real); Close (f);

Readln; End.

GBước 4: Xây dựng bộ Test:

Nhập vào mảngA gồm các phần tử A =( 3, 4, 3, 5, 9, 7, 9) Tìm max:

MaxA:= A[1] = 3;minA:= A[1]=3; tong:= A[1]; i:= 1;

i A[i] A[i] > maxA A[ i] < minA maxA MinA tong 2 3 4 5 6 7 4 3 5 9 7 9 T F T T F F F F F F F F 4 4 5 9 9 9 3 3 3 3 3 3 3+4=7 7+3=10 10+5=15 15+9=24 24+7=31 31+9=40

Kết quả : maxA= 9; minA= 3; TB= 40/ 7= 5.14 Bài toán mở rộng :

- Yêu cầu nhập vào 2 vector và in ra min, max của mỗi vector và giá trị trung bình của 2 vector đó.

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Một phần của tài liệu phương pháp giải bài tập tin học lớp 11 (Trang 89 - 96)