Author Topic: Узрите ошибку плиз!  (Read 7824 times)

0 Members and 1 Guest are viewing this topic.

MIG29

  • Освоившийся
  • **
  • Posts: 45
    • View Profile
Узрите ошибку плиз!
« on: August 14, 2013, 03:26:00 PM »
Code: (clickermann) [Select]
$cena = strreadln("1.txt",1)
$ves = strreadln("1.txt",2)

$cena = inputbox("Юаней?",$cena,60)
$ves = inputbox("ВЕС?",$ves,60)

strwriteln("1.txt",$cena,1)
strwriteln("1.txt",$ves)

$ves = $ves/10

//dollar/grn
$dolar = 8
$dol_kg = 20*$ves//доставка за 1 кг
$postavshik = 2//услуги поставщика

$real_cena = $cena*0.16+$postavshik
$real_cena = $real_cena/10+$real_cena

$real_cena = $real_cena+$dol_kg
$real_cena = $real_cena*1.5*$dolar//накрутка
$real_cena = round($real_cena,0)
//длина строки
$length = strlen($real_cena)
print("$real_cena","-",$real_cena)
print("$length","-",$length)
//без последней
$length_first = $length - 1
$first = strcut2($real_cena,1,$length_first)
print("$first","-",$first)
//последняя
$last = strcut($real_cena,$length,1)
print("$last","-",$last)

if(($last > 2.5)&($last<7.5))
  $last = 5
else
//Ошибка где то в этом месте, переменная Last  больше 2.5 и меньше чем 7.5, но ведёт себя как будто она только болье чем 7.5!!!!!!!!

  if($last > 7.5)
  inc($first)
  $last = 0
  else
  $last = 0
  end_if
end_if
print("$first","-",$first)
print("$last","-",$last)
$real_cena = strconcat($first,$last)
print("$real_cena","-",$real_cena)
hintpopup("---",$real_cena)
toclip($real_cena)
print($real_cena)
print("---------")
halt
if_picture_in - зло

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Узрите ошибку плиз!
« Reply #1 on: August 14, 2013, 05:11:44 PM »
Code: (clickermann) [Select]
$last = strcut($real_cena,$length,1)
print("$last","-",$last)

if(($last > 2.5)&($last<7.5))
  $last = 5
else
//Ошибка где то в этом месте, переменная Last  больше 2.5 и меньше чем 7.5, но ведёт себя как будто она только болье чем 7.5!!!!!!!!

  if($last > 7.5)
//...

Ошибка в том, что переменная $last у тебя после strcut($real_cena,$length,1) строковая.
И сравнение её с числом if(($last > 2.5)&($last<7.5)) не проходит. Условие просто пропускается.
Переведи $last в число при её определении, можно так:

Code: (clickermann) [Select]
$last = round(strcut($real_cena,$length,1),-1)
Зачем в этом месте связываться со строковыми переменными?
Code: (clickermann) [Select]
//длина строки
$length = strlen($real_cena)
print("$real_cena","-",$real_cena)
print("$length","-",$length)
//без последней
$length_first = $length - 1
$first = strcut2($real_cena,1,$length_first)
print("$first","-",$first)

нельзя просто
Code: (clickermann) [Select]
$first=INT($real_cena/10)
В последней версии в выводе в лог нельзя писать символ $
print("$last","-",$last)


MIG29

  • Освоившийся
  • **
  • Posts: 45
    • View Profile
Re: Узрите ошибку плиз!
« Reply #2 on: August 14, 2013, 06:18:56 PM »
Строки нужны чтобы отделить последнюю цифру и округлить до 0 или до 5.

Строковые переменные мне нужны только для этого,  я не знаю как их перводить из чисел в строки и наоборот.

пример:
231.235 грн = 230 грн

123.742 грн = 125 грн

436.534 грн = 435 грн

268.542 грн = 270 грн
« Last Edit: August 14, 2013, 06:22:04 PM by MIG29 »
if_picture_in - зло

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Узрите ошибку плиз!
« Reply #3 on: August 14, 2013, 07:02:02 PM »
Я написал как перевести.
Строки не нужны.
$ostatok=$real_cena-round($real_cena,1)
if(($ostatok>2.5)&($ostatok<7.5))
$cena=round($real_cena,1)+5
ELSE
if($ostatok>7.4))
$cena=round($real_cena,1)+10
ELSE
$cena=round($real_cena,1)
END_IF
END_IF
LOGWRITE("cena = ",$cena)
...
если где-то накосячил, прошу прощения. Пишу с телефона.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Узрите ошибку плиз!
« Reply #4 on: August 14, 2013, 07:15:04 PM »
наверно даже правильней вместо
round($real_cena,1)
писать
(INT($real_cena/10))*10


MIG29

  • Освоившийся
  • **
  • Posts: 45
    • View Profile
Re: Узрите ошибку плиз!
« Reply #5 on: August 14, 2013, 07:17:28 PM »
Я написал как перевести.
Строки не нужны.
$ostatok=$real_cena-round($real_cena,1)
...

Я понял идею, ПАСИБА))
if_picture_in - зло

MIG29

  • Освоившийся
  • **
  • Posts: 45
    • View Profile
Re: Узрите ошибку плиз!
« Reply #6 on: August 20, 2013, 04:25:36 PM »
Vint!

Code: (clickermann) [Select]
$cena = strreadln("1.txt",1)
$ves = strreadln("1.txt",2)

$cena = inputbox("Юаней?",$cena,60)
$ves = inputbox("ВЕС?",$ves,60)

strwriteln("1.txt",$cena,1)
strwriteln("1.txt",$ves)

$ves = $ves/10

//dollar/grn
$dolar = 8
$dol_kg = 20*$ves//доставка за 1 кг
$postavshik = 2//услуги поставщика

$real_cena = $cena*0.16+$postavshik
$real_cena = $real_cena/10+$real_cena

$real_cena = $real_cena+$dol_kg
$real_cena = $real_cena*1.5*$dolar//накрутка

//цена без последней цифры
$round_cena = int($real_cena/10)*10
$ostatok = $real_cena - $round_cena

print("real_cena_before","-",$real_cena)
print("round_cena","-",$round_cena)
print("ostatok_before","-",$ostatok)

//$ostatok = round($ostatok,-3)
//print("round_ostatok","-",$ostatok)

!!!!!!!!!!!!!!!!!!!!!!!!!
Та же самая песня! какое число не содержит переменная "остаток" , она всегда больше 2.5 и меньше 7.5, и превращается в 5....
!!!!!!!!!!!!!!!!!!!!!!!!!

if($ostatok < 2.5)
$ostatok = 0
else
  if($ostatok > 7.5)
  $ostatok = 10
  else
$ostatok = 5
end_if
end_if
 
print("ostatok","-",$ostatok)
$real_cena = $round_cena + $ostatok

print("$real_cena","-",$real_cena)
hintpopup("---",$real_cena)
toclip($real_cena)
print($real_cena)
print("---------")
halt
if_picture_in - зло

MIG29

  • Освоившийся
  • **
  • Posts: 45
    • View Profile
Re: Узрите ошибку плиз!
« Reply #7 on: August 20, 2013, 04:26:36 PM »
У меня Clickermann 4.7  winXP
if_picture_in - зло

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Узрите ошибку плиз!
« Reply #8 on: August 20, 2013, 04:48:55 PM »
Не знаю что там у тебя получается. Вот пример... В сабе нужный тебе кусок
Code: (clickermann) [Select]
LOGCLEAR

$real_cena=0
WHILE($real_cena<20)
   GOSUB(sub_name)
   $real_cena=$real_cena+0.3
END_CYC
HALT


SUB(sub_name)
   $ostatok=$real_cena-(INT($real_cena/10))*10
   if(($ostatok>2.5)&($ostatok<7.5))
      $cena=(INT($real_cena/10))*10+5
   ELSE
      if($ostatok>7.4))
         $cena=(INT($real_cena/10))*10+10
      ELSE
         $cena=(INT($real_cena/10))*10
      END_IF
   END_IF
   LOGWRITE("real_cena = ",$real_cena,"  cena = ",$cena)
END_SUB

Результат:
[spoiler]17:43:40 real_cena = 0  cena = 0
17:43:40 real_cena = 0.3  cena = 0
17:43:40 real_cena = 0.6  cena = 0
17:43:40 real_cena = 0.9  cena = 0
17:43:40 real_cena = 1.2  cena = 0
17:43:40 real_cena = 1.5  cena = 0
17:43:40 real_cena = 1.8  cena = 0
17:43:40 real_cena = 2.1  cena = 0
17:43:40 real_cena = 2.4  cena = 0
17:43:40 real_cena = 2.7  cena = 5
17:43:41 real_cena = 3  cena = 5
17:43:41 real_cena = 3.3  cena = 5
17:43:41 real_cena = 3.6  cena = 5
17:43:41 real_cena = 3.9  cena = 5
17:43:41 real_cena = 4.2  cena = 5
17:43:41 real_cena = 4.5  cena = 5
17:43:41 real_cena = 4.8  cena = 5
17:43:41 real_cena = 5.1  cena = 5
17:43:41 real_cena = 5.4  cena = 5
17:43:41 real_cena = 5.7  cena = 5
17:43:41 real_cena = 6  cena = 5
17:43:41 real_cena = 6.3  cena = 5
17:43:41 real_cena = 6.6  cena = 5
17:43:41 real_cena = 6.9  cena = 5
17:43:41 real_cena = 7.2  cena = 5
17:43:41 real_cena = 7.5  cena = 10
17:43:41 real_cena = 7.8  cena = 10
17:43:41 real_cena = 8.1  cena = 10
17:43:41 real_cena = 8.4  cena = 10
17:43:41 real_cena = 8.7  cena = 10
17:43:41 real_cena = 9  cena = 10
17:43:41 real_cena = 9.3  cena = 10
17:43:41 real_cena = 9.6  cena = 10
17:43:41 real_cena = 9.9  cena = 10
17:43:41 real_cena = 10.2  cena = 10
17:43:41 real_cena = 10.5  cena = 10
17:43:41 real_cena = 10.8  cena = 10
17:43:41 real_cena = 11.1  cena = 10
17:43:41 real_cena = 11.4  cena = 10
17:43:41 real_cena = 11.7  cena = 10
17:43:41 real_cena = 12  cena = 10
17:43:41 real_cena = 12.3  cena = 10
17:43:41 real_cena = 12.6  cena = 15
17:43:41 real_cena = 12.9  cena = 15
17:43:41 real_cena = 13.2  cena = 15
17:43:41 real_cena = 13.5  cena = 15
17:43:41 real_cena = 13.8  cena = 15
17:43:41 real_cena = 14.1  cena = 15
17:43:41 real_cena = 14.4  cena = 15
17:43:41 real_cena = 14.7  cena = 15
17:43:41 real_cena = 15  cena = 15
17:43:41 real_cena = 15.3  cena = 15
17:43:41 real_cena = 15.6  cena = 15
17:43:41 real_cena = 15.9  cena = 15
17:43:41 real_cena = 16.2  cena = 15
17:43:41 real_cena = 16.5  cena = 15
17:43:41 real_cena = 16.8  cena = 15
17:43:41 real_cena = 17.1  cena = 15
17:43:41 real_cena = 17.4  cena = 15
17:43:41 real_cena = 17.7  cena = 20
17:43:41 real_cena = 18  cena = 20
17:43:41 real_cena = 18.3  cena = 20
17:43:41 real_cena = 18.6  cena = 20
17:43:41 real_cena = 18.9  cena = 20
17:43:41 real_cena = 19.2  cena = 20
17:43:41 real_cena = 19.5  cena = 20
17:43:41 real_cena = 19.8  cena = 20
[/spoiler]

Версия у меня 4.7 SE, но этот кусок правильно работает и на 4.7


MIG29

  • Освоившийся
  • **
  • Posts: 45
    • View Profile
Re: Узрите ошибку плиз!
« Reply #9 on: August 20, 2013, 04:55:17 PM »
Vint!

Другими способами, немного другими строками сделать это хорошо, но ведь я должен разобраться в чем проблема, а не сделать скрипт!

Мне не надо лечить симптомы, а сразу болезнь,  в будущем пригодится! :'(
if_picture_in - зло

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Узрите ошибку плиз!
« Reply #10 on: August 20, 2013, 05:02:23 PM »
Может у тебя опечатка... Может цены такие, что 5 получается.
Я ведь заново не писал, скопировал свой кусок и добавил перебор.

Ладно, вот вставил твой кусок... Всё нормально:
Code: (clickermann) [Select]
LOGCLEAR

$real_cena=0
WHILE($real_cena<20)
   GOSUB(sub_name)
   $real_cena=$real_cena+0.3
END_CYC
HALT


SUB(sub_name)
   $round_cena = int($real_cena/10)*10
   $ostatok = $real_cena - $round_cena
   print("round_cena","-",$round_cena)
   print("ostatok_before","-",$ostatok)
   if($ostatok < 2.5)
      $ostatok = 0
   else
      if($ostatok > 7.5)
         $ostatok = 10
      else
         $ostatok = 5
      end_if
   end_if
   
   print("ostatok","-",$ostatok)
END_SUB


MIG29

  • Освоившийся
  • **
  • Posts: 45
    • View Profile
Re: Узрите ошибку плиз!
« Reply #11 on: August 20, 2013, 05:29:11 PM »
Vint,

Code: (clickermann) [Select]
17:26:34 round_cena-10
17:26:34 ostatok_before-5.9
17:26:34 ostatok-5
17:26:34 round_cena-10
17:26:34 ostatok_before-6.2
17:26:34 ostatok-5
17:26:34 round_cena-10
17:26:34 ostatok_before-6.5
17:26:34 ostatok-5
17:26:34 round_cena-10
17:26:34 ostatok_before-6.8
17:26:34 ostatok-5
17:26:34 round_cena-10
17:26:34 ostatok_before-7.1
17:26:34 ostatok-5
17:26:34 round_cena-10
17:26:34 ostatok_before-7.4
17:26:34 ostatok-5
17:26:34 round_cena-10
17:26:34 ostatok_before-7.7
17:26:34 ostatok-5
17:26:34 round_cena-10
17:26:34 ostatok_before-8
17:26:34 ostatok-10
17:26:34 round_cena-10
17:26:34 ostatok_before-8.3
17:26:34 ostatok-5
17:26:34 round_cena-10
17:26:34 ostatok_before-8.6
17:26:34 ostatok-5
17:26:34 round_cena-10
17:26:34 ostatok_before-8.9
17:26:34 ostatok-5
17:26:34 round_cena-10
17:26:34 ostatok_before-9.2
17:26:34 ostatok-5
17:26:34 round_cena-10
17:26:34 ostatok_before-9.5
17:26:34 ostatok-5
17:26:34 round_cena-10
17:26:34 ostatok_before-9.8
17:26:34 ostatok-5
17:26:34 round_cena-20
17:26:34 ostatok_before-0.100000000000001
17:26:34 ostatok-5
17:26:34 round_cena-20
17:26:34 ostatok_before-0.399999999999999
17:26:34 ostatok-5
17:26:34 round_cena-20
17:26:34 ostatok_before-0.699999999999999
17:26:34 ostatok-5
if_picture_in - зло

MIG29

  • Освоившийся
  • **
  • Posts: 45
    • View Profile
Re: Узрите ошибку плиз!
« Reply #12 on: August 20, 2013, 05:46:52 PM »
Если округлять $ostatok перед условиями сравнения, то получаются разные результаты, но бредовые...
if_picture_in - зло

MIG29

  • Освоившийся
  • **
  • Posts: 45
    • View Profile
Re: Узрите ошибку плиз!
« Reply #13 on: August 20, 2013, 06:48:54 PM »
Ладно, давайте все с начала!

Вот этот скрипт работает в кликермене 4.7 SE, но неправильно работает в 4.7 ... Почему?

Code: (clickermann) [Select]
$cena = strreadln("1.txt",1)
$ves = strreadln("1.txt",2)

$cena = inputbox("Юаней?",$cena,60)
$ves = inputbox("ВЕС?",$ves,60)

strwriteln("1.txt",$cena,1)
strwriteln("1.txt",$ves)

//строки >>> числа
$cena = int($cena)
$ves = int($ves)

$ves = $ves/10

//dollar/grn
$dolar = 8
$dol_kg = 20*$ves//доставка за 1 кг
$postavshik = 2//услуги поставщика

$real_cena = $cena*0.16+$postavshik
$real_cena = $real_cena/10+$real_cena

$real_cena = $real_cena+$dol_kg
$real_cena = $real_cena*1.5*$dolar//накрутка

//цена без последней цифры
$ostatok=$real_cena-int($real_cena/10)*10

print("real_cena_before","-",$real_cena)
print("ostatok_before","-",$ostatok)

По прежнему в этом месте происходит очень странное сравнение переменной с числом!!!!!!

if($ostatok < 2.5)
$ostatok = 0
else
  if($ostatok > 7.5)
  $ostatok = 10
  else
$ostatok = 5
end_if
end_if
 
print("ostatok","-",$ostatok)
$real_cena = int($real_cena/10)*10+ $ostatok

print("real_cena","-",$real_cena)
hintpopup("---",$real_cena)
toclip($real_cena)
print("---------")
halt
if_picture_in - зло

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Узрите ошибку плиз!
« Reply #14 on: August 21, 2013, 06:53:54 AM »
А какой смысл разбирать баги старых версий? Я не знаю, почему в 4.7 если от10.2 отнять 10 получается 1.999999999999
В 4.7 SE всё правильно, результат 0.2
Я старые давно заархивировал и убрал с глаз долой.