Показать полную графическую версию : [решено] помогите с типом int
Cherterok
23-01-2011, 14:16
Вобщем опять я)) препод как всегда смолол чуш..хотя может и не чуш) мне не понять)) вот задание
Дано трехзначное число. Вывести число, полученное при переста-
новке цифр сотен и десятков исходного числа (например, 123 перейдет
в 213).
препод сказал использовать оператор sizeof . собственно я не понял для чего. примера своей програмы нету т.к. я вобще не понял как перебрасывать числа в с++.
пробывал через сдвиг . толи я не понял как оно работает толи вобще не то делал
Cherterok,
препод смолол чушь, в существительных женского рода шипящие надо говорить и писать мягко (глаза режет)
я тоже не понимаю, зачем нужен sizeof и сдвиг. Если решать задачку на бумаге, то всё обходится без них. Попробуй для начала на бумаге. Распиши подробно как делал (возможны 2 варианта, один хитрый, другой - тот, который хочет препод)
немного теории:
сдвиг смещает биты в двоичном представлении. Операция выполняется очень быстро, поэтому пользуется популярностью среди программистов. Сдвиг на один влево - это умножение на 2. Сдвиг на один вправо - это деление на 2. В данном случае умножать и делить на 2 не имеет смысла.
В итоге:
пробовал через сдвиг . то_ли я не понял как оно работает, то_ли вообще не то делал »
верно и то, и другое
возможны 2 варианта, один хитрый, другой - тот, который хочет препод »
хитрый это который со строками?
Cherterok
23-01-2011, 18:21
не ну на бумаге же просто перевернул число и все. а тут как?? теперь я понял что такое сдвиг:)) ато белеберда получалась типо 2<<111 получалось 444. я вобще не понимал как:)
Есть еще такая вещь - остаток от деления.
Есть различия в цифрах по позициям. Т.е. позиционная система счисления.
Соответственно вопрос - чем цифра одного разряда отличается от цифры другого разряда? Как отличить разряд сотен, от разряда единиц?
А на бумаге надо нарисовать концептуальную модель задачи. (я таки нашел это вумное слово :) )
Когда ты меняешь цифры местами ты должен каждую из них охарактеризовать и расписать порядок действий. Чтобы любой человек повторив эти действия пришел к искомому значению.
1. Можно операцией деления на остаток вычислить количество чисел в числе(или привести преобразование целого в строку и strlen вычислить длину строки) эта длина будет равна количеству разрядов
2. Создаём динамический массив равный количеству разрядов
3. Используя операцию деления на остаток и деления, отрываем разряды и помещаем их в массив
4. Выводим элементы массива на экран, начиная с последнего.
Cherterok
23-01-2011, 23:22
оО омг) кароче скажу преподу шо тут мего супер масивы и без 5 литров водки не разобраца.
Cherterok, решено. (http://forum.oszone.net/post-910225-4.html) Сообразишь сам? :)
Печальный чайник
24-01-2011, 00:20
Самый простой вариант, по-моему, воспользоваться функцией преобразования в строку . Затем взять символ, скопировать в переменную a, скопировать второй символ в первый, а на его место a. Так же можно добавить strlen(str)==3. Затем можно преобразовать строку в число, а можно сразу вывести на экран. Только как тут приписать sizeof? По-любому для int будет 4 байта.
Печальный чайник, проще ли? Вводить дополнительные переменные символьного типа. Вызывать подпрограммы обработки. Для работы в пределах 1000 слишком много лишних действий. Это уже современные пользователи, ресурсами, пардон, зажрались.
Печальный чайник
24-01-2011, 15:13
lxa85, без дополнительных переменных по-любому не обойтись. Нужно же где-то хранить десятки, сотни и остатки. А тут на всё хватит четырёх байт строки (ужас как много!!!). Функция преобразования в строку действует быстро и аналогично прямому выделению десяток, сотен, так что, выводя данные в строку, мы много не потеряем. Затем переставить два символа строки и вывести готовое на экран. Это что, по-вашему, мега-растрата ресурсов? Напомню, в любом случае число будет преобразовываться в строку при выводе на экран, и если посмотреть с этой стороны, то у нас получится даже экономия ресурсов. Вот с strlen я ступил, да, проще было сделать проверку x<1000&&x>99.
lxa85, согласен с Печальным чайником - вводить сразу строку, она хранится как массив символов, доступ к отдельным произвольный, т.е. нужно банально двум переменным обменяться значениями. И это ещё обобщённый случай, а на самом деле не нужно вообще никаких дополнительных символьных переменных - выводим итоговую строку посимвольно, только порядок вывода подменяем.
Cherterok
26-01-2011, 14:02
ладно народ забейте:)) не для моего ума пока это:) масивы и в паскале не понял
Печальный чайник, Busla, хм, да, согласен, прошу прощения. В полпервого ночи сложно думалось.
Надо будет мне поаккуратнее в следующий раз.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.