Помощь - Поиск - Пользователи - Календарь
Полная версия: функция Todec, вопрос по ней, когда она в программу внедрена
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
neZvezda
Есть функция 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
Тогда вот так:
Код
while (n[1]='0') and (length(n)>1) do delete(n,1,1);
neZvezda
Цитата(Malice @ 18.05.2006 20:57) *

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



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

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

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

Так что условие и программу - в студию smile.gif
neZvezda
Цитата(volvo @ 18.05.2006 21:20) *

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

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

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

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


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

" (Показать/Скрыть)
volvo
Первое, что бросилось в глаза -
  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
Levitra 20 Mg 30 Tablet
cheapest prices for viagra onlin
Comprar Viagra En Tenerife
nishaknapp
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. Online Casino Gaming Best Practices
povekag860
Мне кажется, прямо сейчас выгоднее играть в более популярные игровые автоматы на площадке казино Покердом по ссылке pokerdom12.top, сегодня можно играть легко и с уникальным преимуществом, который вы можете найти сразу. Также PokerDom Casino считается полностью позволяет вам играть в удивительные игровые автоматы и слоты, призы и деньги с возможностью хорошо провести время.
likeinsomnia
Приготуйтеся до захоплюючого шляху в світ найкращих азартних розваг – це час розкрити таємниці ТОП ігрових автоматів України! Тут, серед ексклюзивних ігор, ви знайдете справжню перлину азартного світу, яка завоювала симпатії гравців. Топ ігрових автоматів України https://jk-yagoda.com.ua/ – це не просто гри, це емоційний вибух та безмежні можливості виграти великі призи. Відкрийте для себе неповторний досвід гри в ігрові автомати, де кожен спін - це крок до захоплюючих виграшів.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.