С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lua
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Slenon
3 / 3 / 3
Регистрация: 25.07.2016
Сообщений: 160
1

Конструкция if.elseif.else.end работает не так как мне надо

30.12.2016, 12:02. Просмотров 628. Ответов 7
Метки нет (Все метки)

Вот код:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
rim = {"M", "D", "C", "L", "X", "V", "I"}
function dom(a, b)
  x = (a - math.fmod(a, b))/b
  return x
end
function a_r(Arab)
     local qm = ""
     d = dom(Arab, 1000)
  for k = 1, d do
     qm = qm .. "M"
  end
  local w = ""
  for i = 1, 3 do
  s = dom(math.fmod(Arab, math.pow (10, (4-i))), math.pow (10, (3-i)))
  i3 = 2*i+1; i2 = 2*i; i1 = 2*i-1; s1 = s-5
      if s == 9 then q = rim[i3] .. rim[i1]; print("9 = ", q)
  elseif s == 4 then q = rim[i3] .. rim[i2]; print("4 = ", q)
  elseif 0 < s and s <  4 then q = ""
          for j = 1, s do q = q .. rim[i3] end print("1-3 = ", q)
    else     local q1 = rim[i2]; local q2 = ""
          for j = 1, s1 do q2 = q2 .. rim[i3] end
              q =  "0"  end print("5-8 = ", q)
 
print("q = ",q)
w = w .. q
print("w = ", w)
end
return qm, w
end
repeat
print("Введите Arab")
Arab = io.read()
print("Rim = ", a_r(Arab))
until Arab == "n"
Вот вывод всех print:
Введите Arab
3
5-8 = 0
q = 0
w = 0
5-8 = 0
q = 0
w = 00
1-3 = III
5-8 = III
q = III
w = 00III
Rim = 00III
Введите Arab
33
5-8 = 0
q = 0
w = 0
1-3 = XXX
5-8 = XXX
q = XXX
w = 0XXX
1-3 = III
5-8 = III
q = III
w = 0XXXIII
Rim = 0XXXIII
Введите Arab
333
1-3 = CCC
5-8 = CCC
q = CCC
w = CCC
1-3 = XXX
5-8 = XXX
q = XXX
w = CCCXXX
1-3 = III
5-8 = III
q = III
w = CCCXXXIII
Rim = CCCXXXIII

Почему ветвь else работает когда не должна и почему наслаивается значение предыдущего q...

Добавлено через 19 часов 21 минуту
Вот так код работает:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
rim = {"M", "D", "C", "L", "X", "V", "I"}
function dom(a, b)
  x = (a - math.fmod(a, b))/b
  return x
end
function a_r(Arab)
     local qm = ""
     d = dom(Arab, 1000)
  for k = 1, d do
     qm = qm .. "M"
  end
  local w = ""
  for i = 1, 3 do
  s = dom(math.fmod(Arab, math.pow (10, (4-i))), math.pow (10, (3-i)))
  i3 = 2*i+1; i2 = 2*i; i1 = 2*i-1; s1 = s-5
      if s == 9 then q = rim[i3] .. rim[i1]
  elseif s == 4 then q = rim[i3] .. rim[i2]
  elseif 0 < s and s <  4 then q = ""
          for j = 1, s do q = q .. rim[i3] end
  elseif  4 < s and s < 9 then  q1 = rim[i2];  q2 = ""
          for j = 1, s1 do q2 = q2 .. rim[i3] end
              q =  q1 .. q2
       else q = "" end
w = w .. q
end
return qm, w
end
repeat
print("Введите Arab = ")
Arab = io.read()
print("Rim = ", a_r(Arab))
until Arab == "n"
хотя вопрос о else всё же остался...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2016, 12:02
Ответы с готовыми решениями:

Не работает switch так, как мне надо
Мне нужно сделать 2 условия: n - не четырехзначное число или четырехзначное....

При переходе к якорю, он работает не так как мне надо
В общем, при нажатии на кнопку влево или вправо всё работает, но... позиция...

Зачем нужна конструкция ElseIf и как ей пользоваться?
Помогите разобрать код.И что такое ElseIf и как им пользоваться? Dim a as...

Форма не так открывается как мне надо в БД Access 2007
Помогите пожалуйста... Я создаю БД &quot;Телефонный справочник&quot; и у меня следующая...

Как мне сделать так чтобы не надо было указывать полный путь
Добрый день , форумчане. Как мне сделать так чтобы не надо было указывать...

7
ProgJ
87 / 85 / 10
Регистрация: 20.11.2008
Сообщений: 724
30.12.2016, 12:13 2
Цитата Сообщение от Slenon Посмотреть сообщение
Почему ветвь else работает когда не должна и почему наслаивается значение предыдущего q..
Всё работает как написано
Тут другой вопрос: почему вы так написали?

Добавлено через 1 минуту
Цитата Сообщение от Slenon Посмотреть сообщение
хотя вопрос о else всё же остался...
вы о каком else? что не так?
0
Slenon
3 / 3 / 3
Регистрация: 25.07.2016
Сообщений: 160
30.12.2016, 13:38  [ТС] 3
Если всё работает как написано - то как написать что бы ветвь else работала только тогда, когда не выполняются условия if и всех elseif... (в данный момент и в первом и во втором варианте кода значения q в else прибавляются к любому результату!)
0
ProgJ
87 / 85 / 10
Регистрация: 20.11.2008
Сообщений: 724
30.12.2016, 15:34 4
Цитата Сообщение от Slenon Посмотреть сообщение
значения q в else прибавляются к любому результату!
разве эта строка в else?
Код
w = w .. q
Код надо аккуратно оформлять
0
Slenon
3 / 3 / 3
Регистрация: 25.07.2016
Сообщений: 160
30.12.2016, 18:17  [ТС] 5
Bash
1
2
3
else q = "|" end
w = w .. q
end
Результат работы в таком варианте:
Код
Введите Arab = 3

Rim = 		||III
Введите Arab = 
33
Rim = 		|XXXIII
Введите Arab = 
333
Rim = 		CCCXXXIII
Введите Arab = 
0
Rim = 		|||
Введите Arab =
0
ProgJ
87 / 85 / 10
Регистрация: 20.11.2008
Сообщений: 724
30.12.2016, 18:23 6
и что?

оформите код, найдёте ошибки
0
vantfiles
118 / 49 / 24
Регистрация: 07.05.2013
Сообщений: 170
31.12.2016, 00:50 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-- конвертирует целое в римскую цифру
 
function toRoman( num )
 
    local res = ""
    local romans = {
        { 1000,  "M" }, { 900, "CM" }, { 500,  "D" }, { 400, "CD" }, { 100,  "C" },
        {   90, "XC" }, {  50,  "L" }, {  40, "XL" }, {  10,  "X" }, {   9, "IX" },
        {    5,  "V" }, {   4, "IV" }, {   1,  "I" }
    }
 
    local k = num
 
    for i, j in ipairs( romans ) do
        val, sym = unpack( j )
        while k >= val do
            k = k - val
            res = res .. sym
        end
    end
    
    return res
end
0
Slenon
3 / 3 / 3
Регистрация: 25.07.2016
Сообщений: 160
31.12.2016, 14:22  [ТС] 8
Вобщем и целом -
Код
rim = {"M", "D", "C", "L", "X", "V", "I"}
function dom(a, b)
  x = (a - math.fmod(a, b))/b
  return x
end
function a_r(Arab)
     local qm = ""
	 d = dom(Arab, 1000)
  for k = 1, d do
     qm = qm .. "M"
  end
  w = ""
  for i = 1, 3 do
  s = dom(math.fmod(Arab, math.pow (10, (4-i))), math.pow (10, (3-i)))
  i3 = 2*i+1; i2 = 2*i; i1 = 2*i-1; s1 = s-5
	 if s == 9 then q = rim[i3] .. rim[i1]
     elseif s == 4 then q = rim[i3] .. rim[i2]
     elseif 0 < s and s <  4 then q = ""
		    for j = 1, s do q = q .. rim[i3] end
     elseif 4 < s and s < 9 then q1 = rim[i2]; q2 = ""
		    for j = 1, s1 do q2 = q2 .. rim[i3] end
		      q =  q1 .. q2
     else      q = ""
     end
w = w .. q
end
return qm, w
end
repeat
print("Введите Arab = ")
Arab = io.read()
print("Rim = ", a_r(Arab))
until Arab == "n"
else всегда выполняется когда не выполняются все условия...
0
31.12.2016, 14:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.12.2016, 14:22

Что мне надо поменять в моём компе, работает медленно как то!
Ребята подскажите кто хорошо понимает, модернизация последняя 14.03.11год. Сижу...

Работает не так как надо
я ввожу ааа - выводит qqq а должен выводить qaz что нужно поменять? хотя бы...

Код работает, но не так как надо
Здравствуйте. Нужно, чтобы строка поиска увеличивалась в длине от 0px до...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru