Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 523
от 05.07.2006, 18:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 363, Экспертов: 62
В номере:Вопросов: 4, Ответов: 7


Вопрос № 47703: Здравствуйте,уважаемые эксперты!Помогите,пожалуйста,с решением системы: Система имеет n переменных и (n-1) уравнений.По типу U1+V1=3; U1+V2=6; U2+V2=10; U2+V3=5; U3+V3=1; U3+V4=4; где U1=1,какая-нибудь константа. .
Вопрос № 47711: Здравствуйте уважаемые эксперты! Хотелось бы знать возможно ли в ComboBox строку закрасить в определенный цвет. Допустим один элемент красный и жирный, а все остальные имеют черный цвет ? Если да .. то можна ссылочку или куда хоть бы пойти посмотреть...
Вопрос № 47733: Здравствуйте, господа Эксперты! Возникла такая проблема: есть файл со списком вопросов, читаю оттуда вопрос со слуайным номером, этот номер записываю в другой файл (WriteLn()). Потом мне нужно прочитать еще 1 вопрос, (номер генерируется Random), но д...
Вопрос № 47771: Здраствуйте! как узнать IP адрес основного шлюза локальной машины?...

Вопрос № 47.703
Здравствуйте,уважаемые эксперты!Помогите,пожалуйста,с решением системы:
Система имеет n переменных и (n-1) уравнений.По типу
U1+V1=3;
U1+V2=6;
U2+V2=10;
U2+V3=5;
U3+V3=1;
U3+V4=4;
где U1=1,какая-нибудь константа.
Заранее благодарю!
Отправлен: 29.06.2006, 19:09
Вопрос задала: Aim (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: METALLDOCTOR
Здравствуйте, Aim!
Думаю, нужно использовать массив с записями(имя переменной(или константы), булево значение, означающее, что эта переменная вам изветсна и её значение). Далее считывете строку, выделяете из неё имена переменных и ищёте строки, в которых одна из переменных известна, а вторая - нет, после чего делаете процедуру типа Vichislit(Nstr, K: Integer), в которой указываете, какая строка походит вам, и какая переменная вам известна, например: Vichislit(1, 1), а в тексте (определяется CASE-ом по второму параметру) делаете вычисления вроде
Mas[1].Value := 3 - Mas[0].Value;
P.S. Ещё есть методы, которыми это делается в теории принятия решений.
---------
Ни о чём не жалею!
Ответ отправил: METALLDOCTOR (статус: 3-ий класс)
Ответ отправлен: 29.06.2006, 19:55

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Aim!
Для начала вам надо завести массив имен переменных (varNames) - скорей всего, понадобится.
Потом прочесть эти уравнения (я так понимаю, из текстового файла или еще откуда), распознать их и заиметь представления во внутреннем формате. Например, TEquation (см. приложение) и завести массив для обозначения этих уравнений (equs). Тут x1 означает номер первой переменной, x2 - второй. А v - численное значение их суммы.
Теперь читаем построчно файл, например, через строку s. Вообще, хорошо бы эти строки куда-дь сохранить потому как потом будем их много раз прогонять.
Распознавание простое: все до символа '+' - имя первой переменной, меджу '+' и '=' - имя второй переменной, после '=' - значение их суммы. Если буду лишние пробелы - проще всего обрезать их ф-ией Trim (см. help)
пусть теперь у вас содержится в s1 - имя первой перменной, s2 - второй, vs - число.
// добавим имена переменных в список, если их не было.
if varNames.IndexOf(s1) = -1 then varNames.Add(s1);
if varNames.IndexOf(s2) = -1 then varNames.Add(s2);
// Теперь представим ур-ние в "удобном" для нас формате
Equation[z].x1 := varNames.IndexOf(s1);
Equation[z].x2 := varNames.IndexOf(s2);
Equation[z].v := StrToInt(vs);
// z - индексная перменная увеличивается на 1 после каждого нового прочтения строки с ур-нием в переменную s.

После одного прогона мы записали все уравнения и теперь можно прогонять их на предмет решения.
Проще всего сделать так (в т.ч. мне проще написать код, чем объяснять словами =):

ru := 0; // счетчик кол-ва решенных уравнений
while (ru < 6) do begin
for i := 0 to 5 do begin \ на 6 уравнений
if (values[equs[i].x1] = MAXINT) and (values[equs[i].x2] <> MAXINT) then begin
values[equs[i].x1] := equs[i].v - values[equs[i].x2];
inc(ru);
end;
if (values[equs[i].x2] = MAXINT) and (values[equs[i].x1] <> MAXINT) then begin
values[equs[i].x2] := equs[i].v - values[equs[i].x1];
inc(ru);
end;
end;
end;

Тут почти везде вместо 5 и 6 на самом деле надо повставлять z-1 и z.

Ну и во время чтения данных надо бы еще прочесть откуда-дь данные о константе.
Еще раз, есть число, идентифицирующее переменную, но это не ее значение!
p1 - индекс перменной, varNames[p] - ее имя, values[p1] - ее значение. Но в записи TEquation используется именно индекс.

Приложение:

Ответ отправил: Сухомлин Кирилл Владимирович (статус: Студент)
Ответ отправлен: 29.06.2006, 22:10


Вопрос № 47.711
Здравствуйте уважаемые эксперты! Хотелось бы знать возможно ли в ComboBox строку закрасить в определенный цвет. Допустим один элемент красный и жирный, а все остальные имеют черный цвет ? Если да .. то можна ссылочку или куда хоть бы пойти посмотреть... За пример благодарен.

С уважением Александр.
Отправлен: 29.06.2006, 21:35
Вопрос задал: Кныш Александр Александрович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Кныш Александр Александрович!

Если честно, то сам никогда этого не делал, но по-моему, это должно помочь :)

Удачи!
---------
Ответы на все вопросы - на сайте www.ya.ru
Ответ отправил: Устинов Сергей Евгеньевич (статус: Студент)
Ответ отправлен: 29.06.2006, 22:55

Отвечает: Serg_6667
Здравствуйте, Кныш Александр Александрович!

В приложении пример. Только стиль Combobox должен быть csOwnerDrawFixed или csOwnerDrawVariable

Приложение:

Ответ отправил: Serg_6667 (статус: 3-ий класс)
Ответ отправлен: 30.06.2006, 13:51


Вопрос № 47.733
Здравствуйте, господа Эксперты! Возникла такая проблема: есть файл со списком вопросов, читаю оттуда вопрос со слуайным номером, этот номер записываю в другой файл (WriteLn()). Потом мне нужно прочитать еще 1 вопрос, (номер генерируется Random), но другой (номер не равен предыдущему, для этого читаем файл, если равен, генерим до тех пор, пока не равен). Код (см. приложение) завешивает прогу. Где ошибка? Может есть более удобный вариант?

Приложение:

Отправлен: 30.06.2006, 01:56
Вопрос задал: Neiroman (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: DeVampir
Здравствуйте, Neiroman!
Я думаю зависает здесь:
repeat
Readln(PrevList,s);
until CurNum = s;
Если номер так и не повторился, выход из цикла не произойдет.
Если не ошибаюсь, Random генерирует равномерно-распределенную последовательность значений, т.е. если не вставлять Randomize в середину кода, значения не будут повторяться. Однако для проверки, думаю, будет лучше сначала сгенерировать всю последовательность вопросов (номеров), а потом проверить ее на повторы.
---------
Нам будет трудно - это терпимо! (с) М. Горшенев
Ответ отправил: DeVampir (статус: 2-ой класс)
Ответ отправлен: 30.06.2006, 05:48


Вопрос № 47.771
Здраствуйте! как узнать IP адрес основного шлюза локальной машины?
Отправлен: 30.06.2006, 15:57
Вопрос задал: Barbos (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Barbos!
Вот, нашёл по данному вопросу:
1. HKEY_LOCAL_MACHINESystemCurrentControlSetServicesClassNetTrans (для 98-винды) Ищем параметр IPAddress.
2. Программно можно определить следующим образом:

var
WSAData: TWSAData;
p: PHostEnt;
Name: array[0..$FF] of Char;
begin
WSAStartup($0101, WSAData);
GetHostName(name, $FF);
p := GetHostByName(Name);
showmessage(inet_ntoa(PInAddr(p.h_addr_list^)^));
WSACleanup;
end;

3. См. код в приложении для определения IP-адреса указанного хоста.

Приложение:

---------
Нет правила без исключений. Правило без исключений - исключение из правил.

Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 30.06.2006, 16:46

Отвечает: Решетник Д
Здравствуйте, Barbos!
Насколько я знаю, исторически сложилось так, что сервер берет себе 1-й номер (Х.Х.Х.1).
По ходу, нужно всего лишь узнать лишь свой ИП и подставить туда 1...
если способ совсем глупый, не пинайте...
---------
Жизнь коротка, чтобы писать на ассемблере
Ответ отправил: Решетник Д (статус: 10-ый класс)
Ответ отправлен: 30.06.2006, 16:59


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное