2.12-rasm.
Dastlab case buyrug’i yordamida joriy kun oyning ohirgi kuni yoki ohirgi kuni emasligi tekshirib chiqiladi. Agar joriy oy - fevral va joriy kunning sansi - 28 bo’lsa qushimcha ravishda yil kabisa yil yoki yil emasligi tekshiriladi. Buning uchun yilni 4
ga bo’lgandagi qoldiq hisoblanadi. Agar qoldiq nolga teng bo’lsa, u holda kabisa yili bo’ladi va oyning ohirgi kuni 29 bo’ladi.
Agar joriy kun ohirgi kun bo’lsa, u holda keyingi kuni birinchi bo’ladi. So’ngra joriy oy dekabrligi tekshiriladi. Agar yo’q bo’lsa, u holda oyning raqami bittaga oshiriladi, agarda ha bo’lsa, u holda yilning raqami bittaga oshiriladi va oyning raqami 1 bo’ladi.
-listing
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm) Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Label4: TLabel;
Label5: TLabel;
procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1; Day,Month,Year:word; implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var sana:TDateTime;
begin
sana:=Date;
//DecodeDate sanani yil,oy va kunga bo'ladi DecodeDate(sana,Year,Month,Day);
Edit1.Text:=inttostr(Day); Edit2.Text:=inttostr(Month); Edit3.Text:=inttostr(Year); end;
// Keyingi kunni hisoblash
procedure TForm1.Button1Click(Sender: TObject);
var
last:boolean; // oyning ohirgi kuni bo'lsa,
// u holda last = True
r:integer; // agar yil kabisa bo`lsa,
//year 4 ga boolganda r nolga teng bo`ladi.
begin Day:=StrToInt(Edit1.Text); Month:=StrToInt(Edit2.Text); Year:=StrToInt(Edit3.Text);
last := False; // kun oyning ohirgi kuni emas.
case month of
4,6,9,11: if day =31 then last:= True; 2:if day = 28 then
begin
r:= year mod 4;
if r <> 0 then last:= True;
end
else if day=29 then last:= True;
else
if day=31 then last:= True;
end;//Case tugashi
if last then // ohirgi kun bo'lsa
begin
day:=1;
if month =12 then // ohirgi oy bo'lsa
begin
month:= 1; year:= year + 1; end
else month:= month + 1;
end
else day:= day + 1; Edit1.Text:=inttostr(Day); Edit2.Text:=inttostr(Month); Edit3.Text:=inttostr(Year); end;
end.
Takrorlanish
Juda ko’p masalalarning yechilish algoritmi takrorlanuvchan bo’ladi. Ya’ni natijaga erishish uchun bir xildagi buyruqlar ketma -ketligi bir necha marta bajarilishi kerak.
Masalan, bilimni nazorat qiluvchi dastur savolni beradi, javobni qabul qiladi, javobga qarab ballar yig’indisiga bal qo’shadi, so’ngra shu ishlarni qayta va qayta barcha savollar tugamagunicha bajaradi.
Boshqa misol. Ro’yhatdan kerakli odamning familiyasini topish uchun, ro’yhatdagi birinchi familiyani, so’ngra ikkinchisini, uchinchisini va hokozo toki kerakli familiya topilmaguncha yoki ro’yhat tugamaguncha tekshirish kerak.
Bir nacha marta bajarilishi kerak bo’lgan buyruqlar ketma-ketligi bor algoritm takrorlanuvchi deb ataladi, buyruqlar ketma-ketligi esa takrorlanish deb ataladi.
Takrorlanish dasturda For, While, va Repeat buyruqlaridan foydalanib amalga oshirish mumkin.
For buyrug’i
Quyidagi masalani ko’rib chiqamiz. -1,-0.5, 0, 0.5, va 1 nuqtalarda у=5х2-7 funksiyaning qiymatini hisoblovchi dastur tuzish kerak bo’lsin.
Quyilgan masalaning yechilishini ta’minlovchi protsedura quyidagicha bo’lishi mumkin:
procedure TForm1.Button1Click(Sender: TObject);
var
y: real; // funksiyaning qiymati x: real; // funksiyaning argumenti dx: real; // ortish qiymati
st: string; // Javob jadval ko’rinishida
begin
st:='';
x := -1; dx := 0.5;
y := 5*x*x -7;
st := st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13); x :=x + dx;
y := 5*x*x -7;
st := st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13); x :=x + dx;
y := 5*x*x -7;
st := st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13); x :=x + dx;
y := 5*x*x -7;
st := st+ FloatToStr(x)+' ' + FloatToStr(y)+chr(13); x :=x + dx;
y := 5*x*x -7;
st := st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13); x :=x + dx;
Label1.Caption := st;
end;
Dastur matnidan ko’rinib turibdiki, quyidagi buyruqlar ketma-ketligi 5 marta
bajarilyapti.
y := 5*x*x -7;
st := st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13); x :=x + dx;
For buyrug’idan foydalanib, yuqoridagi protsedurani quyidagicha yozish mumkin:
procedure TForm1.Button1Click(Sender: TObject);
var
y: real; // funksiyaning qiymati x: real; // funksiyaning argumenti dx: real; // ortish qiymati
st: string; // Javob jadval ko’rinishida
i : integer; // takrorlanishni hisoblagich
begin
st:=''; x := -1; dx := 0.5;
for i:=1 to 5 do begin
у := 5*x*x -7;
st := st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13); x :=x + dx;
end;
Label1.Caption := st;
end;
Protseduraning ikkinchi variantida buyruqlar ketma-ketligi kam yozib, protsedura juda ixcham ko’rinishga keladi.
For operatoridan agar takrorlanishlar soni oldindan ma’lum bo’lsagina foydalaniladi.
For operatorining umumiy ko’rinishi quyidagicha bo’ladi: for hisoblagich := boshl_qiymat to ohirgi_qiymat do begin
// bu yerda bir necha marta bajarilishi
// kerak bo’lgan buyruqlar joylashadi
end
bu yerda:
hisoblagich —takrorlanishlar sonini hisoblovchi o’zgaruvchi;
boshl_qiymat - hisoblagichning boshlang’ich qiymatini aniqlovchi ifoda;
ohirgi_qiymat — hisoblagichning ohirgi qiymatini aniqlovchi ifoda.
Boshl_qiymat va ohirgi_qiymat hisoblagich qiymatlari butun sonlardan iborat bo’lishi kerak.
Takrorlash operatorining takrorlashlar sonini quyidagi formula bilan aniqlanadi:
ohirgi_qiymat - boshl_qiymat + 1.
misollar:
xa
for i:=l to 10 do begin label1.caption:=label1.caption + '*'; end; for i: =1 to n do s := s+i;
eslatma
Agar begin va end operatorpari orasida faqat bitta buyruq bo’lsa, u holda begin va end larni yozmaslik mumkin.
Do'stlaringiz bilan baham: |