| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Помогите перевеcти c делфи на С++ |
| Автор: Гость_Lena 1.5.2005, 19:45 |
| программа на делфи: Procedure InitLin (Var T: Array of integer; M:integer); begin Setlenght(T,M); For M:=High(T) downto 0 do T[M]:=MaxInt end; Function Hesh (M,K:cardinal;d:extended=0.618033988748948482):cardinal; begin Hesh:=Trunc(M*Frac(K*d)) end; Function VstLin (Var T: Array of integer; Const K: integer):integer; Var j,i:integer; begin Result:=-1; i:=Hesh(Lenght(T),K); j:=i; Repeat if T[j]:=MaxInt then begin T[j]:=K; Exit end; if T[j]=K then begin Result:=j; Exit end; Dec(j); if j<0 then j:=j+Lenght(T) Until j:=i; Result:=MaxInt; end; Procedure TForm.Button1Click(Senger:TObject); Var i,j,K:integer; T: Array of integer; s,s1:string; begin s1:=";s:="; Memo1.Clear; InitLin(T,40); RandSeed:=Round(Pi*5E8); For j:=1to 100 do begin K:=Random(40); i:=VstLin(T,K); if i=MaxInt then begin Memo1.Lines.Add('Переполнение'); Break end; if i>=0 then begin if s='' then begin Memo1.Lines.Add(s1); s1:='';s:='Повтор' end; s:=s+IntToStr(K)+'' end Else bgin if s1=" then begin if s<>" then Memo1.Lines.Add(s); s:=''; s1"='Вставленны:' end; s1:=s1+IntToStr(k)+'' end; end; s:=s+s1; Memo1.Lines.Add(s); T:=Nil; end; |
| Автор: tigger 5.5.2005, 16:03 | ||
| Попробуй так: файл Unit1.cpp
все должно получиться!!! |
| Автор: label 7.5.2005, 12:36 | ||
| Спасибочки тебе ГроМАдНОе!!!!!! Она и вправду идет!!!! Слушай ,а как перевезти вот эту процедурку!!! это в случае строк-ключей. Мне вообще-то нужно будет эту процедурку вставить вместо Hesh, но тогда МAXINT (обозначаю свободные позиции таблицы) нужно будет заменить на что то другое !! а на что??
|
| Автор: label 9.5.2005, 15:42 |
| tigger пожалуйста!!! |
| Автор: tigger 9.5.2005, 16:43 |
| Я про тебя не забыл, но сам понимаешь праздник.... |
| Автор: label 9.5.2005, 20:47 |
| Ясненько.... tigger,Вообще-то я девушка... |
| Автор: tigger 10.5.2005, 13:24 | ||
| Oops! Приятная неожиданность, случайно не Лена? А вот и сам код: попробуй должно получиться вроде бы протестировал, вставь этот код в Unit1.cpp
насчет MaxInt: при инициализации InitLin у тебя массив Т должен состоять из строк наверное а не из чисел если так то задай их строками которые наверняка никогда не получатся в ходе работы проги например "-1-1-1-1-1" это и будет признак пустой строки. Если что-то не так поправь. Если не секрет поподробнее опиши что делает программа? Пока пиши... |
| Автор: label 10.5.2005, 16:27 |
| Программа т.е. лаба на тему информационный поиск. Построение хеш-таблицы с ключами -строками и линейным опробованием позиций при поиске. Добавлено @ 16:30 tigger, СПАСИБО БОЛЬШОЕ ЗА ПОМОЩЬ!!!!!!! |
| Автор: label 10.5.2005, 17:48 | ||
tigger, а что делает вторая кнопка?
|
| Автор: tigger 11.5.2005, 11:03 |
| Да это я просто вставил ее для тестирования функции можешь ее убрать. |
| Автор: label 11.5.2005, 16:14 |
| tigger, ты представляешь...у меня препод вообще!!!! ему теперь нужно чтобы таблица заполнялась на 80% ....а потом посторить ГРАФИК!!!! кошмар! ...лучше сдохнуть щас!!! |
| Автор: tigger 11.5.2005, 17:14 |
| Он тебя доканать решил, напиши поподробней чего ему надо. Да и что за ВУЗ то? |
| Автор: label 11.5.2005, 18:31 | ||||
Если бы я тока поняла ,что ему нужно!!! Я его с первого раза плохо понимаю...ну все же нужно увеличить размер таблицы, т.е. 40 ...а гораздо больше . потом сказал нужно замолнить таблицу на 80% ..значит в функцию VstLin поставить еще один параметр счетчик,наверное так...
и потом в кнопочке втавить цикл , типа если l меньше 80% от заполнение таблице то долже выполнять, что есть в кнопке... потом в кнопочку поставить функцию
...но копмилятор выдает ошибку, и зачем эта функия я так и не поняла...!!! и короче это все для того что построить графики : длина и время зависят от коэфицента заполнения таблицы a=n/M, М-размер таблицы , n- текущее число записей в поисковой структуре. График неуспешного поиска, нелинейный рост длины поиска при увеличении коэфицента я знаю как выглядет, но это не совсем радует!! P.S. учусь в МЭИ |
| Автор: tigger 12.5.2005, 15:23 | ||
| Привет, как успехи?!? Ошибка в функции Vs: переменная К задана как const следовательно ее значение изменить нельзя, а у тебя K = K недопустимо так делать и вообще в чем смысл этого присваивания? И где именно в проге идет вызов VS, в той же кнопке1. Насчет счетчика передай его по ссылке... твой вариант я не смог запустить:
Пиши... |
| Автор: label 14.5.2005, 20:53 |
| Приветик! Я тут подумала и решила , что мне нужна процедура неуспешного поиска элемента в хеше. А потом я буду искать этот элемент при заполнении таблицы с 10% до 80%...а на основе потом данных я и построю график. |