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

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

15.03.2015, 17:07. Просмотров 1714. Ответов 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:
(кто знает как вывести в строку и по возможности с помощью цикла 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
Ответы с готовыми решениями:

[Brainfuck] Дано число, необходимо получить в памяти его же + его обратную запись
Помогите пожалуйста написать прогу на языке brainfuck: дано число, и необходимо...

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

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

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

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

16
DrOffset
8460 / 4738 / 1160
Регистрация: 30.01.2014
Сообщений: 7,722
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
Модератор
7272 / 5526 / 692
Регистрация: 14.02.2011
Сообщений: 18,723
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
Модератор
7272 / 5526 / 692
Регистрация: 14.02.2011
Сообщений: 18,723
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
8460 / 4738 / 1160
Регистрация: 30.01.2014
Сообщений: 7,722
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
Модератор
7272 / 5526 / 692
Регистрация: 14.02.2011
Сообщений: 18,723
16.03.2015, 15:24 8
Цитата Сообщение от DrOffset Посмотреть сообщение
Это, кстати, не будет работать, потому что в Lua деление не целочисленное.
а я не был уверен
взял твой код из 2 поста и добавил
Цитата Сообщение от ValeryS Посмотреть сообщение
val=val*10+sum
0
DrOffset
8460 / 4738 / 1160
Регистрация: 30.01.2014
Сообщений: 7,722
16.03.2015, 15:27 9

Не по теме:

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



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

Не по теме:

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

0
ValeryS
Модератор
7272 / 5526 / 692
Регистрация: 14.02.2011
Сообщений: 18,723
16.03.2015, 15:27 10
Цитата Сообщение от DrOffset Посмотреть сообщение
Потом подумал, что тебе интересно будет.
тогда скажи, где применяется, и где почитать про него, на уровне "для чайников"
0
DrOffset
8460 / 4738 / 1160
Регистрация: 30.01.2014
Сообщений: 7,722
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
8460 / 4738 / 1160
Регистрация: 30.01.2014
Сообщений: 7,722
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
8460 / 4738 / 1160
Регистрация: 30.01.2014
Сообщений: 7,722
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
8460 / 4738 / 1160
Регистрация: 30.01.2014
Сообщений: 7,722
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. Программа...


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

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

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