. 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.
- 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
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
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;
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