![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Всем привет. Помогите, пожалуйста. Я мега-новичок и пытаюсь написать программу для расчета оптимального автомобильного маршрута примерно как здесь.
В общем я создал две ComboBox и Button: ![]() Так как я мега-новичок в Delphi и еще много не знаю у меня несколько вопросов: 1. Как можно сделать так, чтобы выбранное значение ComboBox1 присваивалось переменной? 2. Я хочу сделать структуру IF (условие), и если оба ComboBox пусты, то будет выводиться сообщение ('Заполните поля!'). Вот как-то так. Помогите, пожалуйста. |
|
#2
|
||||
|
||||
|
Цитата:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
str: String;
begin
// 1) Считываем в переменную str выбранное в ComboBox1 значение:
str := ComboBox1.Text;
// 2) Проверяем чтобы был заполнен хоть один ComboBox:
if (ComboBox1.Text = '') and (ComboBox2.Text = '') then
begin
ShowMessage('Заполните поля!');
Exit;
end;
.....
end; |
| Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
KVESTOR (30.04.2014)
| ||
|
#3
|
||||
|
||||
|
Цитата:
|
|
#4
|
||||
|
||||
|
Цитата:
Код:
if (ComboBox1.Text = '') or (ComboBox2.Text = '') then |
| Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
KVESTOR (30.04.2014)
| ||
|
#5
|
||||
|
||||
|
А я вот написал тут еще немного строк кода:
Код:
if (ComboBox1.Text = 'Москва') and (ComboBox2.Text = 'Новосибирск') then
begin
ShowMessage('Ваш путь лежит через города Нижний Новгород, Казань, Уфа, Челябинск, Омск. Протяженность маршрута 3410 километров.');
end;
Exit;Но вот ничего не работает. Просто ничего не происходит... Последний раз редактировалось KVESTOR, 30.04.2014 в 18:18. |
|
#7
|
||||
|
||||
|
Оффтоп:
Цитата:
Небольшая переделка Код:
const
ns: array[0..49] of string =
{0 } ('Москва',
{1 } 'Санкт-Петербург',
{2 } 'Новосибирск',
{3 } 'Екатеринбург',
{4 } 'Нижний Новгород',
{5 } 'Казань',
{6 } 'Самара',
{7 } 'Омск',
{8 } 'Челябинск',
{9 } 'Ростов-на-Дону',
{10} 'Уфа',
{11} 'Волгоград',
{12} 'Красноярск',
{13} 'Пермь',
{14} 'Воронеж',
{15} 'Саратов',
{16} 'Краснодар',
{17} 'Тольятти',
{18} 'Тюмень',
{19} 'Ижевск',
{20} 'Барнаул',
{21} 'Ульяновск',
{22} 'Иркутск',
{23} 'Владивосток',
{24} 'Ярославль',
{25} 'Хабаровск',
{26} 'Махачкала',
{27} 'Оренбург',
{28} 'Новокузнецк',
{29} 'Томск',
{30} 'Кемерово',
{31} 'Рязань',
{32} 'Астрахань',
{33} 'Пенза',
{34} 'Набережные Челны',
{35} 'Липецк',
{36} 'Тула',
{37} 'Киров',
{38} 'Чебоксары',
{39} 'Калининград',
{40} 'Курск',
{41} 'Улан-Удэ',
{42} 'Ставрополь',
{43} 'Магнитогорск',
{44} 'Брянск',
{45} 'Иваново',
{46} 'Тверь',
{47} 'Белгород',
{48} 'Сочи',
{49} 'Нижний Тагил');
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
for i := 0 to 49 do
begin
ComboBox1.Items.Add(ns[i]);
ComboBox2.Items.Add(ns[i]);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if (ComboBox1.ItemIndex = -1) and (ComboBox2.ItemIndex = -1) then
begin
ShowMessage('Выберите начальный и конечный город!');
Exit;
end;
if ComboBox1.ItemIndex = -1 then
begin
ShowMessage('Выберите начальный город!');
Exit;
end;
if ComboBox2.ItemIndex = -1 then
begin
ShowMessage('Выберите конечный город!');
Exit;
end;
if ((ComboBox1.ItemIndex = 0 {Москва} ) or (ComboBox2.ItemIndex = 0)) and
((ComboBox2.ItemIndex = 2 {Новосибирск}) or (ComboBox1.ItemIndex = 2)) then
begin
ShowMessage('Ваш путь лежит через города ' +
ns[4] + ', ' + {Нижний Новгород}
ns[5] + ', ' + {Казань}
ns[34] + ', ' + {Набережные Челны}
ns[10] + ', ' + {Уфа}
ns[8] + ', ' + {Челябинск}
ns[7] + {Омск}
'. Протяженность маршрута 3410 километра.');
end;
end; |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
KVESTOR (03.05.2014)
| ||
|
#8
|
||||
|
||||
|
А что значит -1?
Код:
ComboBox1.ItemIndex = -1 Последний раз редактировалось KVESTOR, 03.05.2014 в 10:08. |
|
#9
|
||||
|
||||
|
А все, я понял. Это типа счет начинается с 0, 0 - это Москва, а -1 это значит дефолтное значение, то есть "Выберите начальный город".
Последний раз редактировалось KVESTOR, 03.05.2014 в 10:09. |
|
#10
|
||||
|
||||
|
А можно ли как-то сделать, чтобы еще при выборе одинаковых городов выводилось сообщение типа: "Выберите другие города!"?
Последний раз редактировалось KVESTOR, 03.05.2014 в 10:08. |
|
#11
|
||||
|
||||
|
Цитата:
Код:
if ComboBox1.ItemIndex = ComboBox2.ItemIndex then
begin
ShowMessage('Выберите другие города!');
Exit;
end;З.Ы. <DELETED> Спасибо за понимание ![]() Последний раз редактировалось Alegun, 03.05.2014 в 10:16. Причина: ремарка |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
KVESTOR (03.05.2014)
| ||
|
#12
|
||||
|
||||
|
Цитата:
|
| Этот пользователь сказал Спасибо KVESTOR за это полезное сообщение: | ||
Alegun (03.05.2014)
| ||
|
#13
|
||||
|
||||
|
Я тут посчитал, если я буду дописывать эту мини-программу. То мне придется сделать 2500 записей. Сперва из Москвы в 50 других крупных городов, потом еще остальные 49 городов... Если использовать:
Код:
if (StartCity.ItemIndex = 0) and (FinalCity.ItemIndex = 1) or (StartCity.ItemIndex = 1) and (FinalCity.ItemIndex = 0) then begin |
|
#14
|
||||
|
||||
|
Что поделаешь, придётся, поскольку у вас изначально "бейсиковый" алгоритм задуман - для каждого маршрута готовый ответ. Лучше бы конечно вогнать в массив не ответы, а только последовательности городов (напр. '0-2:4,5,34,10,8,7=3410') так проще выводить результат. Ещё вариант хранить растояния от города к городу и потом их складывать в соответствии с последовательностью - (0-4 + 4-5 + 5-34... итд.) Цифр так много, но зато всё расчитываться будет автоматом
|
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
KVESTOR (03.05.2014)
| ||
|
#15
|
||||
|
||||
|
Про "вгон" в массив последовательности городов я понял. Там все равно придется описать 2500 вариантов, вроде. Но вот про расстояния — не понял.
|