Приклади проектів, з використанням команди розгалуження

Готуємося вивчати вказівку циклу. Проект "Одне слово у тексті чи декілька" з використанням вказівки пошуку у тексті пропуску.

procedure TForm1.Button1Click(Sender: TObject);
var t:string;
  n,i,k:integer;
begin
 t:=Edit1.Text;
 n:=length(t);
 i:=0;
 if i<=n then
 begin
 if t[i]=' ' then k:=k+1;
 i:=i+1;
 end;
 if k>= 1 Then Edit2.text:='У тексті декілька слів' Else Edit2.Text:='У тексті одне слово';
end;   

1. Створити форму для ілюстрації ващого відношення до програмування. Скористатися RadioButton та відповідними малюнками. На початку у формі не буде здійснено жодного вибору та не виведено жодного зображення. Після натиснення на кнопку "Виберіть своє відношення до програмування" та здійснення такого вибору у формі появиться відповідне зображення.

Код:

procedure TForm1.Button1Click(Sender: TObject);
begin
  RadioButton2.Checked:=false;
  RadioButton1.Checked:=false;
  RadioButton3.Checked:=false;
  Image1.Visible:=false;
  Image2.Visible:=false;
  Image3.Visible:=false;
end;

procedure TForm1.RadioButton1Change(Sender: TObject);
begin
 Image1.Visible:=false;
      Image2.Visible:=true;
      Image3.Visible:=false;
end;

procedure TForm1.RadioButton2Change(Sender: TObject);
begin
   Image1.Visible:=true;
      Image2.Visible:=false;
      Image3.Visible:=false;
end;

procedure TForm1.RadioButton3Change(Sender: TObject);
begin
  Image1.Visible:=false;
      Image2.Visible:=false;
      Image3.Visible:=true;
end;                     

Проект 2. Розміщення прямих (без детального дослідження). Обчислити кутові коефіцієнти прямих та перевірити випадок взаємного розміщення цих прямих. Скористатися формулами: k=(y2-y1)/(x2-x1) та умовами: якщо k1=k2, то прямі паралельні; інакше прямі перетинаються. У даному проекті не розглядався випадок співпадання прямих.

procedure TForm1.Button1Click(Sender: TObject);
var x1,y1,x2,y2,x3,y3,x4,y4,k1,k2:real;
begin
 x1:=StrToFloat(Edit1.Text);
 y1:=StrToFloat(Edit2.Text);
 x2:=StrToFloat(Edit3.Text);
 y2:=StrToFloat(Edit4.Text);
 k1:=(y2-y1)/(x2-x1);
 x3:=StrToFloat(Edit5.Text);
 y3:=StrToFloat(Edit6.Text);
 x4:=StrToFloat(Edit7.Text);
 y4:=StrToFloat(Edit8.Text);
 k2:=(y4-y3)/(x4-x3);
 Edit9.Text:= floatToStr(k1);
 Edit10.Text:= floatToStr(k2);
 if k1=k2 then Edit11.Text:='Прямі паралельні або збігаються';
 if k1*k2=1 then Edit11.Text:='Прямі перпендикулярні';
 if k1<>k2 then Edit11.Text:='Прямі перетинаються';
end;  

Проект 3. Чи поміститься круг у квадраті?

procedure TForm1.Button1Click(Sender: TObject);
var a,r,riz:real;
begin
 a:=StrToFloat(Edit1.Text);
 r:=StrToFloat(Edit2.Text);
 if r<=a/2 then Edit3.Text:='Круг поміститься у квадраті'
 else Edit3.Text:='Круг не поміститься у квадраті'
end;         

Команда вибору і TMemo.

Проект "Розклад уроків"

procedure TForm1.Button1Click(Sender: TObject);
var n:integer;
begin
  n:=StrToInt(Edit1.Text);
  case n of
  1:
    begin
    Memo1.Lines.Add('1. Інформатика');
    Memo1.Lines.Add('2. Українська мова');
    Memo1.Lines.Add('3. Алгебра');
    Memo1.Lines.Add('4. Зарубіжна література');
    end;
  2:
  begin
    Memo1.Lines.Add('1. Фізика');
    Memo1.Lines.Add('2. Хімія');
    Memo1.Lines.Add('3. Географія');
    Memo1.Lines.Add('4. Геометрія');
    end;
  3:
  begin
    Memo1.Lines.Add('1. Англійська мова');
    Memo1.Lines.Add('2. Фізкультура');
    Memo1.Lines.Add('3. Інформатика');
    Memo1.Lines.Add('4. Біологія');
    end;
  6,7:Memo1.Lines.Add('Вихідний день');
  end;
end;

Процедура очистки поля Memo:

procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo1.Lines.Clear;
end;  

Використання випадкових чисел для перевірки навичок множення в межах 10.

         

Код:

var
  Form1: TForm1;
  x,y,d:integer;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;   x:=random(8)+1;   y:=random(8)+1;   d:=x*y;
  label1.Caption:=IntToStr(x);   label3.Caption:=IntToStr(y);   label5.Caption:='?';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  x:=random(8)+1;   y:=random(8)+1;   d:=x*y;
  label1.Caption:=IntToStr(x);   label3.Caption:=IntToStr(y);   label5.Caption:='?';
end;

procedure TForm1.Button2Click(Sender: TObject);
var t:integer;
begin
  t:=StrToInt(Edit1.Text);
  label5.Caption:=IntToStr(d);
  if d=t   then label7.Caption:='Правильно!'  else label7.Caption:='Помилка';
end;       

end.

Прості та вкладені розгалуження

Задача 96. Дано значення цілих величин  x та y.  Знайти: max(x, y)+min(x, y).

procedure TForm1.Button1Click(Sender: TObject);
var x,y,z,max,min:integer;
begin
 x:=StrToInt(Edit1.Text);
 y:=StrToInt(Edit2.Text);
 if x>=y then max:=x else max:=y;
 if x<=y then min:=x else min:=y;
 z:=max+min;
 Edit3.Text:= IntToStr(z);  end;

Серйозні розважалки

Задача № 86 підручника Караванової. Т.П. "Основи алгоритмізації та програмування"

Чебурашка вирішив купити килим, щоб застелити кімнату, у якій він мешкав разом з Геною. Розміри їх прямокутної кімнати виявилися цілі числа а і b. Коли Чебурашка запитав у магазині, яких розмірів є квадратні килими в продажу, то продавець назвав йому ціле число с. яку кількість килимів треба придбати Чебурашці, щоб накрити максимальну площу кімнати? Килими не можна накладати і підгинати. Визначити, яка площа кімнати буде ненакритою килимами. Передбачити ситуацію, коли розміри килима перевищують розміри кімнати.     

procedure TForm1.Button1Click(Sender: TObject);
var a,b,min,s,max:real;
  k,c,n,m,k1,s1:integer;
begin
 a:=StrToFloat(Edit1.Text);  b:=StrToFloat(Edit2.Text);  c:=StrToInt(Edit3.Text);
 if a<=b then
  begin
  min:=a;   max:=b
  end;
 if b<a then
  begin
  min:=b;   max:=a
  end;
 s:=a*b;  s1:=c*c; 
 Edit7.Text:=floatToStr(s);  Edit8.Text:=IntToStr(s1);
 if c>min
 then
    Edit6.Text:= 'Такий розмір килима не підходить'
  else
  Edit6.Text:= 'Такий розмір килима підходить';
 if min>=c then
  begin
  n:=Round(max);   k:=n div c;   m:=Round(max);   k1:=m div c;
  Edit4.Text:=IntToStr(k+k1);
  Edit5.Text:=FloatToStr(s-s1*k-s1*k1)
  end
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  close
end;                  

Остання процедура передбачена на випадок виходу із програми, якщо розміри килимів, що є в магазині перевищують довжину меншої сторони кімнати, тобто килим не підходить.                       

Задача № 87.

  procedure TForm1.Button1Click(Sender: TObject);
var a,k,s,s1:real;
  k1,k2:integer;
begin
 a:=StrToFloat(Edit1.Text);
 k:=StrToFloat(Edit2.Text);
 s:=StrToFloat(Edit3.Text);
 s1:=a*a;
 if s1/k<s then Edit4.Text:='Права порушені'
 else Edit4.Text:='Права не порушено';
 k1:=round(s1/s);
 k2:=round(k-k1);
 Edit5.Text:=IntToStr(k1);
 if k>k1 then
 Edit6.Text:=IntToStr(k2)
 else Edit6.Text:='Є відьне місце'
end;

Задача № 88

procedure TForm1.Button1Click(Sender: TObject);
var a,s:real;
begin
 a:=StrToFloat(Edit1.Text);
 s:=StrToFloat(Edit2.Text);
 if a*a<=s
 then Edit3.Text:='Так, Іван Петрович врятує штани'
 else Edit3.Text:='Ні, штани не вдасться врятувати'
end;

Задача № 90

procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,s,sd,sb: real;
begin
 a:=StrToFloat(Edit1.Text);
 b:=StrToFloat(Edit2.Text);
 c:=StrToFloat(Edit3.Text);
 s:=a*b;
 sd:=c*c;
 sb:=s-c*c;
 Edit4.Text:= floatToStr(sb);
 if sb>=sd then Edit5.Text:='Не ошукана';
 if sb<sd then Edit5.Text:='Oшукана';
 If a<b then
 begin
   if (c=a) or (c<>b/2) then Edit6.Text:='Прямокутна форма';
   if c=b/2 then Edit6.Text:='Квадратна форма'
 end;
 If b<a then
  begin
    if (c=b) or (c<>a/2) then Edit6.Text:='Прямокутна форма';
    if c=a/2 then Edit6.Text:='Квадратна форма'
  end;
end; 

Проект "Мішень". Умова: якщо точка належить заштрихованій області, виводимо "Влучив" інакше "Не влучив"

procedure TForm1.Button1Click(Sender: TObject);
var x,y:real;
begin
 x:=StrToFloat(Edit1.Text);
 y:=StrToFloat(Edit2.Text);
 if (x<=2) and (x>=-2) and (y<=2) and (y>=-2) Then Edit3.Text:='Вітаю, Ви влучили!' Else Edit3.Text:='Шкода, Ви не влучили';
end; 

Створити проект для випадку (2)

Проект "Оцінки". Використовуючи вказівку If дослідіть рівень знань за обраною оцінкою у списку.

procedure TForm1.Button1Click(Sender: TObject);
var o:integer;
begin
 If (RadioGroup1.ItemIndex=0) or (RadioGroup1.ItemIndex=1) or (RadioGroup1.ItemIndex=2) Then Edit1.Text:='Це початковий рівень';
 If (RadioGroup1.ItemIndex=3) or (RadioGroup1.ItemIndex=4) or (RadioGroup1.ItemIndex=5) Then Edit1.Text:='Це середній рівень';
 If (RadioGroup1.ItemIndex=6) or (RadioGroup1.ItemIndex=7) or (RadioGroup1.ItemIndex=8) Then Edit1.Text:='Це достатній рівень';
 If (RadioGroup1.ItemIndex=9) or (RadioGroup1.ItemIndex=10) or (RadioGroup1.ItemIndex=11) Then Edit1.Text:='Це високий рівень';
end; 

Задача 93. Щоб бути завжди чистою, людині необхідно х (24 < х < 50) шматків мила на рік. Якщо мити лише п'яти, то мила знадобиться у 12 разів менше, а якщо мити лише вуха - ще на один шматок менше. Скласти програму, яка за вибором користувача давала б відповідь, яку кількість шматків мила необхідно закупити на n років уперед, щоб: 1) митися повністю; 2) мити лише п'яти; 3) мити лише вуха; 4) мити п'яти і вуха.

Подумайте і створіть проект.

До наступної зустрічі!