Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lua
Войти
Регистрация
Восстановить пароль
 
Ярослав Гефест
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 6
#1

Пользователь вводит с клавиатуры число, необходимо перевернуть его (число) - Lua

15.03.2015, 17:07. Просмотров 1596. Ответов 16
Метки нет (Все метки)

Написать на Lua(использовать цикл for): Пользователь вводит с клавиатуры число, необходимо перевернуть его (число) и вывести на экран(к примеру 12345). С помощью for что-то не получается.

Вот код:
Код
digit=0
sum=0

print "Vvedite chislo:\n"
digit = tonumber(io.read())

print "Vashe chislo naoborot = "

while (digit>1) do

	sum=digit%10
	digit = digit/10

	print(sum)

end
Но есть проблема: число 54321 выводится не с строку а в СТОЛБИК!!, вот что выдает Lua:
http://www.cyberforum.ru/other-lang/thread19908.html
(кто знает как вывести в строку и по возможности с помощью цикла for)
12345
Vashe chislo naoborot =
5
4.5
3.45
2.345
1.2345
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2015, 17:07
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Пользователь вводит с клавиатуры число, необходимо перевернуть его (число) (Lua):

Пользователь вводит с клавиатуры число, необходимо перевернуть его (число) и вывести на экран
2. Пользователь вводит с клавиатуры число, необходимо перевернуть его (число) и...

Пользователь вводит с клавиатуры число, необходимо перевернуть его (число) и вывести на экран.
Сегодняшнее домашнее задание основано именно на этом принципе, однако, вам...

Пользователь вводит с клавиатуры число, необходимо показать на экран сумму его цифр
3. Пользователь вводит с клавиатуры число, необходимо показать на экран сумму...

Пользователь вводит с клавиатуры число от 0 до 100, программа выводит число буквами
Пользователь вводит с клавиатуры число от 0 до 100, программа выводит число в...

Пользователь вводит с клавиатуры две границы диапазона и число. Проверить, попадает ли число в диапазон
Пользователь вводит с клавиатуры две границы диапазона и число. Если число не...

16
DrOffset
7517 / 4513 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
16.03.2015, 11:58 #2
Ярослав Гефест, Если оставлять твой вариант, то так:
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
digit=0
sum=0
 
print "Vvedite chislo:\n"
digit = tonumber(io.read())
 
io.write("Vashe chislo naoborot = ")
 
while digit > 1
do
    sum   = digit % 10
    digit = digit / 10
 
    io.write(string.format("%d", sum))
end
io.write("\n")
А еще можно так:
Perl
1
2
3
4
print("Vvedite chislo:\n")
digit = io.read()
 
io.write("Vashe chislo naoborot = " .. string.reverse(digit) .. "\n")
1
Ярослав Гефест
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 6
16.03.2015, 13:36  [ТС] #3
DrOffset, а можно сделать так что б выводило перевернутое число не по циферно а единым числом т.е. 54321 - 1 = 54320
0
ValeryS
Модератор
7124 / 5392 / 669
Регистрация: 14.02.2011
Сообщений: 18,205
16.03.2015, 13:44 #4
Цитата Сообщение от DrOffset Посмотреть сообщение
while digit > 1
do
sum = digit % 10
digit = digit / 10

io.write(string.format("%d", sum))
end
а это точно С++?
0
Ярослав Гефест
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 6
16.03.2015, 13:49  [ТС] #5
ValeryS, это уже код Lua задача в том что б он выводи ответ адекватно. Сейчас мне интересно можно ли сделать так что б перевернутое число выводилось именно единым числом(т.е. 54321 - 1 = 54320), а в этом примере уже подправленном выводится оно поциферно(посимвольно)
0
ValeryS
Модератор
7124 / 5392 / 669
Регистрация: 14.02.2011
Сообщений: 18,205
16.03.2015, 13:54 #6
Цитата Сообщение от Ярослав Гефест Посмотреть сообщение
это уже код Lua
просто лежит в ветке С++
энтот язык совершенно не знаю
могу только предположить
Код
while digit > 1
do
    sum   = digit % 10
    digit = digit / 10
    val=val*10+sum
    io.write(string.format("%d", sum))
end
val перед циклом равен 0
потом после цикла в нем будет перевернутое число
0
DrOffset
7517 / 4513 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
16.03.2015, 15:19 #7
Цитата Сообщение от ValeryS Посмотреть сообщение
а это точно С++?
Нет. Совсем нет. Это Lua
Цитата Сообщение от Ярослав Гефест Посмотреть сообщение
это уже код Lua задача в том что б он выводи ответ адекватно. Сейчас мне интересно можно ли сделать так что б перевернутое число выводилось именно единым числом(т.е. 54321 - 1 = 54320), а в этом примере уже подправленном выводится оно поциферно(посимвольно)
Можно,
Perl
1
2
3
4
5
6
7
8
9
10
11
12
print("Vvedite chislo:\n")
digit = math.abs(tonumber(io.read()))
 
res   = digit % 10
digit = math.modf(digit / 10)
while digit > 0
do
    res = res * 10 + digit % 10
    digit = math.modf(digit / 10)
end
--Если здесь надо, например, твое перевернутое число - 1, то напиши res - 1
print("Vashe chislo naoborot:", res)
Цитата Сообщение от ValeryS Посмотреть сообщение
просто лежит в ветке С++
Это странно, но раздела по Lua тут все равно нет.

Добавлено через 1 минуту
Ярослав Гефест, Или еще проще вот так:
Perl
1
2
3
4
print("Vvedite chislo:\n")
digit = io.read()
res  = tonumber(string.reverse(digit)) 
print("Vashe chislo naoborot = ", res)
/*Исправил опечатку*/

Добавлено через 14 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
могу только предположить
Это, кстати, не будет работать, потому что в Lua деление не целочисленное.
И ограничивать надо цикл до нуля, а не до единицы (иначе потеряем последнюю цифру).
Вот твой вариант работоспособный:
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
print("Vvedite chislo:\n")
digit = math.abs(tonumber(io.read()))
 
val = 0
sum = 0
while digit > 0
do
    sum   = digit % 10
    digit = math.modf(digit / 10)
    val   = val * 10 + sum
end
 
print("Vashe chislo naoborot:", val)
0
ValeryS
Модератор
7124 / 5392 / 669
Регистрация: 14.02.2011
Сообщений: 18,205
16.03.2015, 15:24 #8
Цитата Сообщение от DrOffset Посмотреть сообщение
Это, кстати, не будет работать, потому что в Lua деление не целочисленное.
а я не был уверен
взял твой код из 2 поста и добавил
Цитата Сообщение от ValeryS Посмотреть сообщение
val=val*10+sum
0
DrOffset
7517 / 4513 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
16.03.2015, 15:27 #9

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
а я не был уверен
Я знаю, просто к сведению написал (сперва не хотел тебя поправлять). Потом подумал, что тебе интересно будет.



Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
взял твой код из 2 поста
Код из второго поста расчитан на посимвольный вывод. Поэтому условие с единицей там работает

0
ValeryS
Модератор
7124 / 5392 / 669
Регистрация: 14.02.2011
Сообщений: 18,205
16.03.2015, 15:27 #10
Цитата Сообщение от DrOffset Посмотреть сообщение
Потом подумал, что тебе интересно будет.
тогда скажи, где применяется, и где почитать про него, на уровне "для чайников"
0
DrOffset
7517 / 4513 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
16.03.2015, 15:32 #11
Цитата Сообщение от ValeryS Посмотреть сообщение
тогда скажи, где применяется, и где почитать про него, на уровне "для чайников"
Lua?
В основном в качестве игрового скриптинга. См. игры Сталкер, Аллоды Онлайн, World of Warcraft (самое что на слуху было), и куча других.
Почитать можно, например, тут.
1
Ярослав Гефест
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 6
16.03.2015, 15:35  [ТС] #12
digit=0
sum=0

print "Vvedite chislo:\n"
digit = (io.read())

while digit > 1
do
sum = digit % 10
digit = digit / 10

io.write("Vashe chislo naoborot = " .. string.reverse(digit) .. "\n")

end
io.write("\n") - При данных поправках ("а можно еще так") Lua выдает ошибку:
[string "stdin"]:7: attempt to compare number with string
0
DrOffset
7517 / 4513 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
16.03.2015, 15:40 #13
Цитата Сообщение от Ярослав Гефест Посмотреть сообщение
При данных поправках ("а можно еще так") Lua выдает ошибку:
А зачем ты соединил два примера в один?
Бери как есть из постов, не надо ничего соединять
0
Ярослав Гефест
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 6
16.03.2015, 16:08  [ТС] #14
DrOffset, 1-й вариант посимвольного вывода(попроще)
digit=0
sum=0

print "Vvedite chislo:\n"
digit = (io.read())

while digit > 1
do
sum = digit % 10
digit = digit / 10

io.write("Vashe chislo naoborot = " .. string.reverse(digit) .. "\n")

end
io.write("\n") - При данных поправках ("а можно еще так") Lua выдает ошибку:
[string "stdin"]:7: attempt to compare number with string

2-й вариант вывода перевернутого но уже числа(упрощенный) также с ошибкой
digit=0
res=0

print("Vvedite chislo:\n")
digit = io.read

res = digit % 10
digit = math.modf(digit / 10)
while digit > 0
do
res = tonumber(string.reverse(digit))
digit = math.modf(digit / 10)
end
res = res-1 -- проверка введенного числа
print("Vashe chislo naoborot:", res)
В чем ошибка упрощенных вариантов? может не в том порядке строки кода?
0
DrOffset
7517 / 4513 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
16.03.2015, 16:22 #15
Цитата Сообщение от Ярослав Гефест Посмотреть сообщение
В чем ошибка упрощенных вариантов? может не в том порядке строки кода?
В том, что ты неправильно их применяешь. Объединил разный код, с разным подходом к решению, в один.
Вот первый вариант (здесь мы вообще не рассматриваем последовательность, как число, кроме самого последнего этапа)
Perl
1
2
3
4
print("Vvedite chislo:\n")
digit = io.read()
res  = tonumber(string.reverse(digit)) -- Выполняется разворот _строки_ ! и только потом результат преобразуется в _число_
print("Vashe chislo naoborot = ", res)
Все, ничего в этот код добавлять не нужно. Никаких циклов и деления

Теперь второй вариант. Тут мы делаем арифметику по развороту числа. На входе сразу преобразуем его из строки в число и дальше работаем как с числом.
Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
print("Vvedite chislo:\n")
digit = math.abs(tonumber(io.read()))
 
val = 0
sum = 0
while digit > 0
do
    sum   = digit % 10
    digit = math.modf(digit / 10)
    val   = val * 10 + sum
end
 
print("Vashe chislo naoborot:", val)
Все, этот пример тоже полный и не нуждается во вставке string.reverse.
Это были приведены два совершенно разных примера, не надо их смешивать, как я уже выше говорил.
0
Ярослав Гефест
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 6
17.03.2015, 07:44  [ТС] #16
DrOffset,
Можеш обьяснить что сдесь происходит:

print("Vvedite chislo:\n")
digit = math.abs(tonumber(io.read()))

val = 0
sum = 0
while digit > 0
do
sum = digit % 10
digit = math.modf(digit / 10)
val = val * 10 + sum
end

print("Vashe chislo naoborot:", val)
0
DrOffset
7517 / 4513 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
17.03.2015, 09:37 #17
Лучший ответ Сообщение было отмечено Ярослав Гефест как решение

Решение

Цитата Сообщение от Ярослав Гефест Посмотреть сообщение
Можеш обьяснить что сдесь происходит:
Читаем строку с экрана. Преобразуем ее в число. Берем абсолютное значение этого числа (чтобы правильно работало с отрицательными числами).
Идем по циклу пока digit > 0.
Находим остаток от деления digit на 10 (эта штука получает десятичные разряды с конца: 12345 / 10 = 1234.5, остаток 5).
Берем целую часть от деления digit на 10 (это нужно для проверки условия выхода из цикла).
В результат записываем значение результата на предыдущей итерации, умноженное на 10 (нужно, чтобы сдвинуть разряд на 1 влево), плюс текущий остаток от деления (текущий десятичный разряд с конца).
Например для числа 12345 будет так (по итерациям):
1) sum: 5 (12345 % 10 = 5)
val: 5 (0 * 10; 0 + 5 = 5)
digit: 1234 (12345 / 10 = целая часть - 1234)
2) sum: 4 (1234 % 10 = 4)
val: 54 (5 * 10; 50 + 4 = 54)
digit: 123 (1234 / 10 = целая часть - 123)
3) sum: 3 (123 % 10 = 3)
val: 543 (54 * 10; 540 + 3 = 543)
digit: 12 (123 / 10 = целая часть - 12)
4) sum: 2 (12 % 10 = 2)
val: 5432 (543 * 10; 5430 + 2 = 5432)
digit: 1 (12 / 10 = целая часть - 1)
5) sum: 1 (1 % 10 = 1)
val: 54321 (5432 * 10; 54320 + 1 = 54321)
digit: 0 (1 / 10 = целая часть - 0)
выход из цикла
1
17.03.2015, 09:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2015, 09:37
Привет! Вот еще темы с решениями:

Пользователь вводит число, найти его корень, если число отричательное, объявить о ошибке
Условие: Пользователь вводит число, найти его корень, если число...

Пользователь вводит с клавиатуры натуральное число меньшее 10000
Пользователь вводит с клавиатуры натуральное число меньшее 10000. Программа...

Пользователь вводит число с клавиатуры ему выводит знак зодиака
пользователь вводит число с клавиатуры ему выводит знак зодиака

необходимо перевернуть его (число) и вывести на экран.
1. Пользователь вводит с клавиатуры число - программа должна показать сколько в...


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

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

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