Сборник проектов в Delphi

advertisement
Сборник проектов
в среде визуального проектирования 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.
Download