Форум программистов, компьютерный форум, киберфорум
Наши страницы

Lua

Войти
Регистрация
Восстановить пароль
 
Slenon
2 / 2 / 0
Регистрация: 25.07.2016
Сообщений: 92
#1

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

30.12.2016, 12:02. Просмотров 562. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструкция if.elseif.else.end работает не так как мне надо (Lua):

Зачем нужна конструкция ElseIf и как ей пользоваться? - Visual Basic .NET
Помогите разобрать код.И что такое ElseIf и как им пользоваться? Dim a as integer=0 If 3 &gt; 2 Then a = a + 1 ...

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

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

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

Работает не так как надо - C++ Qt
я ввожу ааа - выводит qqq а должен выводить qaz что нужно поменять? хотя бы на примере первого цикла void tras::EncButtonClick()...

Цикл не работает так как надо - C++
Всем привет! Народ, у меня цикл в программе работает не так как надо. 1 круг цикла происходит в норме, а когда начинается 2ой он...

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

Добавлено через 1 минуту
Цитата Сообщение от Slenon Посмотреть сообщение
хотя вопрос о else всё же остался...
вы о каком else? что не так?
0
Slenon
2 / 2 / 0
Регистрация: 25.07.2016
Сообщений: 92
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
2 / 2 / 0
Регистрация: 25.07.2016
Сообщений: 92
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
24 / 24 / 11
Регистрация: 07.05.2013
Сообщений: 91
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
2 / 2 / 0
Регистрация: 25.07.2016
Сообщений: 92
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
Привет! Вот еще темы с ответами:

GetJson работает не так, как надо - jQuery
$.getJSON('mark.php', function(data) { $.each(data, function(lat, lng){ var marker = new google.maps.Marker({ ...

Find работает не так как надо - MathCAD
Здравствуйте, как правильно решить систему уравнений? PTC Mathcad Prime 3.1

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

Почему работает не так как надо? - C (Си)
В общем вот в чем вопрос, есть код на СИ. Задача такова ввести с клавы день, месяц, год рождения двух человек и сравнить их. Кто старше кто...


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

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

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