Вопрос № 117219: Здравствуйте уважаемые эксперты по Делфи.Помогите мне с одной проблемкой.
значит пишу одну прогу.Там через IdSMTP надо авторизоваться на сервере типа нужна правильная связка(логин-пароль).так вот как мне сделать чтобы в случае неверной связки(лог...Вопрос № 117228: Здравствуйте и с Наступившим Новым, уважаемые эксперты! Помогите кто сможет: разбираюсь с округленными подсказками в System Tray в Win2k/WinXP, но что-то не получается. MSDN2005 не помог (может плохо искал). Подкиньте примерчики, может статейки какие...Вопрос № 117287: Здравствуйте, Уважаемые эксперты! Вот пытаюсь решить задачку, но пока выходит что-то не то. Подскажите, что не так?
Задачка следующая: «Вывести позицию самой длинной группы одинаковых подряд идущих символов».
Заранее всем спасибо!!!:-)
..
Вопрос № 117.219
Здравствуйте уважаемые эксперты по Делфи.Помогите мне с одной проблемкой.
значит пишу одну прогу.Там через IdSMTP надо авторизоваться на сервере типа нужна правильная связка(логин-пароль).так вот как мне сделать чтобы в случае неверной связки(логин проль) процесс коннекта с серваком пошел занова(то есть логин на серваке с новой указанной связкой),и не вылезала ошибка "project rised excepion class EldProtocolReplyError with message : Incorrect authentication data :process stoped.Use step or run to cont.".Пользуюсь Delphi 7
Приложение:
Отправлен: 06.01.2008, 17:15
Вопрос задал: Ренат (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Selya
Здравствуйте, Ренат!
Обрабатывай эту ситуацию через try...except. И делай всё что что хочешь, в т.ч. коннекться с серваком заново...
Ответ отправил: Selya (статус: 3-ий класс)
Ответ отправлен: 07.01.2008, 15:48 Оценка за ответ: 3 Комментарий оценки: Не помогло почему то( все равно те же ошибки вылетают,но все равно спс за помощь
Вопрос № 117.228
Здравствуйте и с Наступившим Новым, уважаемые эксперты! Помогите кто сможет: разбираюсь с округленными подсказками в System Tray в Win2k/WinXP, но что-то не получается. MSDN2005 не помог (может плохо искал). Подкиньте примерчики, может статейки какие поскажете. Помогите, please.
Отправлен: 06.01.2008, 17:47
Вопрос задал: Beginner (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Louken
Здравствуйте, Beginner!
Да что может быть проще. Вот статья: Использование подсказки в Tray в виде шара
Код рабочий, сам проверял (ну почти рабочий, навсякий случай в приложении находиться рабочий код).
Если в чем то не разберётесь, то обращайтесь в минифорум.
С Рождеством Христовым.
Ответ отправил: Louken (статус: Студент)
Ответ отправлен: 06.01.2008, 23:01 Оценка за ответ: 4 Комментарий оценки: Нечто похожее я видел в DRKB.chm c www.drkb.ru. Что-ж попробую...
Вопрос № 117.287
Здравствуйте, Уважаемые эксперты! Вот пытаюсь решить задачку, но пока выходит что-то не то. Подскажите, что не так?
Задачка следующая: «Вывести позицию самой длинной группы одинаковых подряд идущих символов».
Заранее всем спасибо!!!:-)
Приложение:
Отправлен: 07.01.2008, 00:45
Вопрос задала: Krista (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: DimonSoft
Здравствуйте, Krista!
Для начала укажу Вам на ряд неточностей и ошибок, найденных мной в приведённом Вами фрагменте программы. Я немного переформатировал исходник, чтобы сделать его более наглядным для разбора данной программы.
procedure TForm1.Button1Click(Sender: TObject);
var
N,i:Integer;
Str:String;
Count:Integer;
CountFirst:Integer;
begin
Str:=Edit1.Text;
Count:=1;
for i:=1 to Length(Str) do
begin
if Str[i]=Str[i+1] then
begin
N:=i;
Inc(Count);
CountFirst:=Count;
end
else
if Count>CountFirst then
begin
CountFirst:=Count;
Count:=1;
end;
Count:=1;
end;
Label1.Caption:=IntToStr(N);
Label2.Caption:=IntToStr(CountFirst);
end;
Итак, проблема первая. При первой проверке условия "Count>CountFirst" значение переменной CountFirst будет неопределённым. Надеяться на то, что переменная примет нулевое значение по воле компилятора - это дурной тон в программировании, тогда как явная инициализация переменных помогает упростить отладку программы в дальнейшем и избежать появления в ней малозаметных и очень "коварных" ошибок.
Проблема вторая. Цикл для i продолжается до значения i=Length(Str), а в теле цикла используется i+1-й символ строки, что, мягко говоря, не есть хорошо.
Проблема третья. Предполагаю, что CountFirst - это длина искомой подстроки, Count - длина проверяемой в данный момент подстроки (это видно из присвоения значений Caption'ам Label'ов). Давайте проанализируем, что же делает Ваша процедура. Переменную N рассматривать пока не будем (от нас, вообще говоря, по условию ничего, кроме CountFirst, не требуется).
Итак, при первом проходе (т.е. на первом символе заданной строки) Count=1. Мы проверяем, равен ли первый символ второму. Предположим, что Str[1]=Str[2]. Значение Count увеличивается на 1, т.е. теперь Count=2. CountFirst тоже становится равным 2. Ветка "else" пропускается, а за ней идёт присвоение Count:=1;. Нетрудно заметить, что, как бы мы ни старались, больше 2 в ответе по этому алгоритму мы не получим, поскольку при каждом выполнении тела цикла длина текущей подстроки возвращаетс в исходное состояние
(1).
Поступлюсь своими принципами и приведу одно из решений, пришедших мне в голову. Код в среде программирования не проверял, могут быть ошибки на стадии компиляции (хотя вряд ли :)).
procedure TForm1.Button1Click(Sender: TObject);
var
N,i:Integer;
Str:String;
Curr,Best:Integer;
begin
Str:=Edit1.Text;
Best:=1; i:=1;
while (i<=Length(Str)) do
begin
N:=i;
while (i<=Length(Str)) and (Str[N]=Str[i]) do Inc(i);
Curr:=i-N; //Длина текущей подстроки
if Curr>Best then Best:=Curr;
if i=N then Inc(i); //Это условие будет истинно, если вложенный while не выполнился ни разу
end;
Label1.Caption:=IntToStr(N);
Label2.Caption:=IntToStr(CountFirst);
end;
Сложность алгоритма по-прежнему O(N), но теперь он работает (даю 99%, не 100% только потому, что я поленился запустить среду программирования:)).
Найти решение, которое будет работать быстрее, чем за линейное время, не удастся, поэтому других способов рассказывать не буду, но если Вам они интересны - поищите в интернете инормацию по темам "Рекуррентные соотношения" и "Хеширование". Использование названных приёмов в этойзадаче не имело смысла, поскольку потребовало бы больших затрат оперативной памяти, но во многих более сложных задачах эти приёмы оказываются очень удобными.
С уважением, DimonSoft.
Ответ отправил: DimonSoft (статус: 3-ий класс)
Ответ отправлен: 07.01.2008, 01:57 Оценка за ответ: 5 Комментарий оценки: Спасибо Большое ВАМ за подробное объяснение!:-) С Рождеством ВАС!:-) Удачи!:-)
Отвечает: Esi
Здравствуйте, Krista!
В вашей программе, не всё учитывается. Например, теряется позиция самой длинной строки, выводятся значения в label внутри цикла... В приложении написал свой вариант. Хотя он может и не всё понравится, имея ввиду использование функции сору(). Данный вариант, я не проверял, потому что рядом нет DELPHI.
Приложение:
Ответ отправил: Esi (статус: 3-ий класс)
Ответ отправлен: 07.01.2008, 02:18 Оценка за ответ: 5 Комментарий оценки: Огромное ВАМ спасибо!!!:-) С Рождеством ВАС!:-) Удачи!:-)
Отвечает: Markedone
Здравствуйте, Krista!
У тебя были ошибки.
Вот, попробуй исправленный вариант:
procedure TForm1.Button1Click(Sender: TObject);
Var N, CountFirst ,Count, i:integer;
Str:string;
begin
Str:=Edit1.Text;
Count:=1;
For i:=1 to Length(Str) do
Begin
If Str[i]=Str[i+1] then
Begin N:=i;
Inc(Count);
CountFirst:=Count; end
else If Count=CountFirst then
Begin CountFirst:=Count;
Count:=1;
end;
Count:=1;
end;
Label1.Caption:=IntToStr(N);
Label2.Caption:=IntToStr(CountFirst);
end;
Ответ отправил: Markedone (статус: 2-ой класс)
Ответ отправлен: 07.01.2008, 17:11 Оценка за ответ: 3