Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ функция Todec, вопрос по ней, когда она в программу внедрена

Автор: neZvezda 19.05.2006 0:45

Есть функция ToDec (перевод из любой сист. счисления в 10ричную).

function ToDec(n:string; radix:longint):longint;
const
digit : string[16] = '0123456789ABCDEF';
var
m, i : longint;
begin
m:=0;
while n[1]='0' do
delete(n,1,1);

for i:=1 to length(n) do
m:=m*radix+pos(n[i],digit)-1;
ToDec:=m;
end;

По ней есть вопрос, когда она в программу внедрена. Ошибку дает, когда есть одно определенное условие.
Думаю, у знающего человека займет не более 10 минут. help

есть вектор А и Б. Состоят из единиц и двоек. Заносятся в матрицу. Для этого идет перевод в двоичную систему, все 2ки из векторов заменяются на 1, 1цы из векторов - на 0. Далее при помощи функции ToDec производится преобразование в десятичное представление.
Так вот, если имеется вектор, состоящий из единиц, 11111. Тогда при переводе в двоичное число, будет 00000. А строка программы while n[1]='0' do delete(n,1,1); из строки n удаляет один символ, начиная с первого. Если там все нули, тогда удаляет строку вобще всю! И идет ошибка в программе.
перед while надо сделать условие?
типа того
for i:= 1 to 5 do begin
if n[i]=0 then не удалять

я так понимаю, что если все элементы вектора равны 0, тогда не удалять?
или как все это реализовать)) запуталась.

Автор: Malice 19.05.2006 0:57

Тогда вот так:

Код
while (n[1]='0') and (length(n)>1) do delete(n,1,1);

Автор: neZvezda 19.05.2006 1:08

Цитата(Malice @ 18.05.2006 20:57) *

Тогда вот так:
Код
while (n[1]='0') and (length(n)>1) do delete(n,1,1);



при этом условии программа ошибка не дает, но незультат ее НЕверен.
все же склоняюсь к тому, чтобы перед вайл было условие не удаления строки, если там все 0. Хотя, не знаю...

Автор: volvo 19.05.2006 1:20

Ну, тогда приводи код ПРОГРАММЫ, если нужна помощь... К процедуре перевода ToDec претензий быть больше не может, она будет работать...

Вопрос теперь в том, КАК ты ее вызываешь, и что делаешь ПЕРЕД вызовом...

Цитата
все же склоняюсь к тому, чтобы перед вайл было условие не удаления строки, если там все 0
А это без разницы: что '000' выдаст 0 в результате конвертации, что '0' выдаст тот же 0. А вот согласно логике твоей программы может потребоваться, чтобы '111' и '1111' выдавали разные результаты (если ты делаешь что-то типа хеша, например) - тогда такой подход в корне неверен...

Так что условие и программу - в студию smile.gif

Автор: neZvezda 19.05.2006 1:36

Цитата(volvo @ 18.05.2006 21:20) *

Так что условие и программу - в студию smile.gif

эм..она достаточно большая, из модулей состоит.

два сюда кину, которые взаимодействую, но они большие..звиняйте

" (Показать/Скрыть)


и второй модуль, кусочек

" (Показать/Скрыть)

Автор: volvo 19.05.2006 3:46

Первое, что бросилось в глаза -

  For i := 1 to 8 do
Begin
If TestVector[i] = '2' then
TestVector[i] := '1'
Else
TestVector[i] := '1'; // Уверена, что не TestVector[i] := '0' ?
End;


А в остальном - присоедини архив с программой (только без EXE smile.gif ), так сложно что-то говорить. Надо видеть всю программу, а не ее куски.

Автор: how long does prednisolone take 7.10.2021 7:37

Levitra 20 Mg 30 Tablet

Автор: cheapest prices for viagra onlin 13.11.2021 23:57

Comprar Viagra En Tenerife

Автор: nishaknapp 16.01.2023 6:38

Why not settling on games that is fun and at the same time your earning. Well it'll make suspense because the game is well but dude just try it and it gave me hope while pandemic is real rn. https://newsportsweb.com/online-casino-gaming-best-practices/

Автор: povekag860 29.08.2023 19:20

Мне кажется, прямо сейчас выгоднее играть в более популярные игровые автоматы на площадке казино Покердом по ссылке https://pokerdom12.top/, сегодня можно играть легко и с уникальным преимуществом, который вы можете найти сразу. Также PokerDom Casino считается полностью позволяет вам играть в удивительные игровые автоматы и слоты, призы и деньги с возможностью хорошо провести время.

Автор: likeinsomnia 4.02.2024 22:21

Приготуйтеся до захоплюючого шляху в світ найкращих азартних розваг – це час розкрити таємниці ТОП ігрових автоматів України! Тут, серед ексклюзивних ігор, ви знайдете справжню перлину азартного світу, яка завоювала симпатії гравців. Топ ігрових автоматів України https://jk-yagoda.com.ua/ – це не просто гри, це емоційний вибух та безмежні можливості виграти великі призи. Відкрийте для себе неповторний досвід гри в ігрові автомати, де кожен спін - це крок до захоплюючих виграшів.