Вопрос № 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 используется именно индекс.
Здравствуйте уважаемые эксперты! Хотелось бы знать возможно ли в ComboBox строку закрасить в определенный цвет. Допустим один элемент красный и жирный, а все остальные имеют черный цвет ? Если да .. то можна ссылочку или куда хоть бы пойти посмотреть... За пример благодарен.
Отвечает: 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-адреса указанного хоста.
Приложение:
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Отвечает: Решетник Д
Здравствуйте, Barbos!
Насколько я знаю, исторически сложилось так, что сервер берет себе 1-й номер (Х.Х.Х.1).
По ходу, нужно всего лишь узнать лишь свой ИП и подставить туда 1...
если способ совсем глупый, не пинайте...
--------- Жизнь коротка, чтобы писать на ассемблере
Ответ отправил: Решетник Д (статус: 10-ый класс)
Ответ отправлен: 30.06.2006, 16:59