Сборник проектов в среде визуального проектирования Delphi: Проект №1 Установить на форме кнопку (компонент button) с названием «Жми сюда», щелкнув по которой (событие onClick) получить сообщение «Привет!»: Жми сюда Подсказка: для вывода сообщения, использовать процедуру showmessage('Привет!'); выводящую текст в отдельное окно. Проект №2 Написать на форме текст «Как тебя зовут?» (компонент label), установить поле (компонент Edit) для ввода имени и кнопку с названием «Ok», щелкнув по которой получить сообщение «Привет, «имя», как дела?» (процедура showmessage): Как тебя зовут? Ok Дополнительно: введенное имя добавьте кнопку Очистить (Edit1.text:=’’) и кнопку Выход , которая сотрет , которая закроет форму (закончит работу Form1.Close). Проект №3 Ввести два неравных целых числа. Сравнить эти числа, найти наибольшее. Выдать сообщение типа «33 - больше». Форма может выглядеть примерно так: Первое число Второе число 77 446 Сравнить Дополнительно: можно предусмотреть случай, когда числа равны. Подсказка: стандартная функция y:=StrToInt(x); переводит х типа String в y типа Integer, поэтому: if strtoint(edit1.text) < strtoint(edit2.text) then showmessage(edit1.text+’ – больше‘) else showmessage(edit2.text+’ – больше‘); Проект №4* Ввести три числа. Сравнить эти числа, найти наибольшее. Проект №5 Игра «Угадайка». Компьютер загадывает целое число (кнопка Загадать ) на определенном интервале (например от 0 до 1000). Человек, пытаясь отгадать это число (зная интервал) вводит свои варианты (в поле Edit), получая на каждый ввод одно из сообщений («Больше», «Меньше» и последний раз - «Угадал»). Визуально, форма может выглядеть так: Подсказка: фрагмент текста модуля (программы), причем этим цветом выделено то, что надо написать (напечатать) самим; этим цветом выделены комментарии, которые печатать не надо; черным цветом отмечено то, что вводится автоматически Delphi (это тоже вводить не надо); var {объявление глобальных переменных} Form1: TForm1; z:integer; {загадываемое число} implementation procedure TForm1.Button1Click(Sender: TObject); begin z:=random(1000); end; {случайное число от 0 до 1000} procedure TForm1.Button2Click(Sender: TObject); begin {сравнение чисел и реакция компьютера} if edit1.Text='' then begin showmessage('Введи число!'); {если забыли ввести вариант} edit1.SetFocus; {курсор в поле для ввода} exit; {выход из процедуры} end; if strtoint(edit1.Text)=z then showmessage('Угадал!') else if strtoint(edit1.Text)>z then showmessage('Меньше!') else showmessage('Больше!'); edit1.Text:=''; {очиска поля для ввода нового числа} edit1.SetFocus; {курсор в поле для ввода} end; procedure TForm1.FormActivate(Sender: TObject); begin {эта процедура выполняется, когда форма становится активной} randomize; {установка генератора случайных чисел} z:=random(1000); {случайное число от 0 до 1000} edit1.SetFocus; {курсор в поле для ввода} end; end. Подсказка: чтобы попасть в процедуру FormActivate, необходимо найти соответствующее событие onActivate (для формы Form1) в Инспекторе Объектов (Objects Inspector) Delphi и кликнуть два раза на поле справа от записи этого события. Вы попадете в редактор кода (в заготовку для процедуры FormActivate. Проект №6 Ввести натуральное число N. Вывести массив N случайных целых чисел в диапазоне значений от -50 до 50. Форма может иметь такой вид (см. рисунок ниже): Подсказка: фрагмент текста модуля (программы), причем этим цветом выделено то, что надо написать (напечатать) самим; этим цветом выделены комментарии, которые печатать не надо; черным цветом отмечено то, что вводится автоматически Delphi (это тоже вводить не надо); const m=500; {виртуальный предел числа элементов массива} var {объявление глобальных переменных} Form1: TForm1; a:array[1..m]of integer; {объявим массив с запасом} n:integer; {количество чисел} s:string; {строка для вывода элементов массива} implementation procedure TForm1.FormActivate(Sender: TObject); begin randomize; edit1.SetFocus; end; procedure TForm1.Button1Click(Sender: TObject); var k:integer; {параметр цикла for} begin if edit1.Text='' then begin showmessage('Введи натуральное число!'); edit1.SetFocus; exit; end; n:=strtoint(edit1.Text); s:=''; {"обнуляем" строку} for k:=1 to n do begin a[k]:=random(100)-50; s:=s+' '+inttostr(a[k]); end; showmessage(s); end; {очередной элемент} {складываем в s} end. Дополнительно: изобразить полученный массив в виде диаграммы, например, столбчатой: Для этого добавить компонент Chart (находится на вкладке Additonal), установить его на форму, щелкнуть по нему два раза, войти в диалог, добавить серию (кнопка Add), выйти (кнопка Close). Добавленная серия будет называться Series1. Далее, добавим кнопки «Диаграмма» и «Очистить», которые запрограммируем так: procedure TForm1.Button2Click(Sender: TObject); var k:integer; begin for k:=1 to n do series1.AddBar(a[k],inttostr(a[k]),random(1000000)); end; procedure TForm1.Button3Click(Sender: TObject); begin series1.Clear; end; Проект №7 В проекте №6 добавьте кнопку «Max» («Min»), которая найдет наибольший (наименьший) элемент в заданном массиве. Для кнопки «Max» напишем такой код: procedure TForm1.Button4Click(Sender: TObject); var i,r,max:integer; begin max:=-50; for i:=1 to n do if max<a[i] then begin max:=a[i]; r:=i; end; showmessage(inttostr(max)); series1.ValueColor[r-1]:=clred; end; Дополнительно: можно поменять в диаграмме Max и Min. Для этого для кнопки «Поменять» можно написать такой код: procedure TForm1.Button3Click(Sender: TObject); var w:doubler; begin w=series1.YValue[r1-1]; series1.YValue[r1-1]:=series1.YValue[r2-1]; series1.YValue[r2-1]:=w; series1.labels.exchange(r1-1,r2-1); {меняем метки в диаграмме} end; Здесь, r1 – индекс элемена с наибольшим значением, r2 – с наименьшим. Проект №8 Сортировка массива по возрастанию (убыванию) значений элементов. Шаг 1. Задать размер массива (количество элементов) N. Шаг 2. Задать значения элементов (используя Random) в диапазоне от -50 до 50. Шаг 3. Упорядочить элементы массива по возрастанию их значений, используя следующий алгоритм: 1. Пусть k=N (количество элементов). 2. Найти Мах-й элемент среди k элементов массива и его номер в массиве (r). 3. Поменять местами этот Мах-й элемент и k-й (последний в этом списке) элемент массива: 4. Уменьшить k на 1 и вернуться к шагу 2, если k>1 (т.е. в просматриваемом списке больше 1 элемента). Шаг 4. Построить диаграмму, показывающую результат сортировки массива. Пример: -3 4 5 6 2 -4 -3 4 5 -4 2 | 6 -3 4 5 -4 2 | 6 -3 4 2 -4 | 5 6 …. -4 -3 2 4 5 6 Подсказка: В шаге 3, необходимо использовать два вложенных цикла: for k:=N downto 2 do begin max:=-50; for i:=1 to k do if max<a[i] then begin max:=a[i]; r:=i; end; меняем местами r -й и k –й элементы массива. end; Подсказка: менять местами можно так: w:=a[r]; a[r]:=a[k]; a[k]:=w; или, короче: a[r]:=a[k]; a[k]:=max; Проект №9 Игра «Пятнашки». Некоторая картинка разбита на фрагменты (5 на 5). Необходимо за меньшее число ходов получить исходную картинку: Привожу только текст модуля, без объяснений: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, extctrls, jpeg; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FormClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; im:array[1..4,1..4]of timage; a,b:array[1..4,1..4]of integer; x1,y1,q,w,g,h:integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i,k,r:integer; s:string; begin r:=1; q:=310; w:=250; g:=4; h:=4; for i:=1 to 4 do for k:=1 to 4 do begin a[i,k]:=i; b[i,k]:=k; im[i,k]:=timage.Create(form1); im[i,k].Left:=k*100-90; im[i,k].Top:=i*80-70; im[i,k].Width:=100; im[i,k].Height:=80; if r<10 then s:='0'+inttostr(r) else s:=inttostr(r); s:='images\1_'+s+'.bmp'; im[i,k].Picture.LoadFromFile(s); im[i,k].Parent:=form1; im[i,k].OnMouseMove:=formmousemove; im[i,k].OnClick:=formclick; if r=15 then exit; inc(r); end; end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin x1:=mouse.CursorPos.X-form1.Left-4; y1:=mouse.CursorPos.Y-form1.Top-23; {для XP не 23, а 30 } end; procedure TForm1.FormClick(Sender: TObject); var u,v,j,t,i,k:integer; begin i:=trunc((y1-10)/80)+1; k:=trunc((x1-10)/100)+1; if (i=g) and (k=h) then exit; j:=a[i,k]; t:=b[i,k]; u:=im[j,t].Left; v:=im[j,t].Top; im[j,t].Left:=q; im[j,t].Top:=w; q:=u; w:=v; a[g,h]:=j; b[g,h]:=t; g:=i; h:=k; end; end.