Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] помогите с типом int (http://forum.oszone.net/showthread.php?t=197391)

Cherterok 23-01-2011 14:16 1595358

помогите с типом int
 
Вобщем опять я)) препод как всегда смолол чуш..хотя может и не чуш) мне не понять)) вот задание
Дано трехзначное число. Вывести число, полученное при переста-
новке цифр сотен и десятков исходного числа (например, 123 перейдет
в 213).
препод сказал использовать оператор sizeof . собственно я не понял для чего. примера своей програмы нету т.к. я вобще не понял как перебрасывать числа в с++.
пробЫвал через сдвиг . толи я не понял как оно работает толи вобще не то делал

pva 23-01-2011 15:36 1595432

Cherterok,
препод смолол чушь, в существительных женского рода шипящие надо говорить и писать мягко (глаза режет)
я тоже не понимаю, зачем нужен sizeof и сдвиг. Если решать задачку на бумаге, то всё обходится без них. Попробуй для начала на бумаге. Распиши подробно как делал (возможны 2 варианта, один хитрый, другой - тот, который хочет препод)

немного теории:
сдвиг смещает биты в двоичном представлении. Операция выполняется очень быстро, поэтому пользуется популярностью среди программистов. Сдвиг на один влево - это умножение на 2. Сдвиг на один вправо - это деление на 2. В данном случае умножать и делить на 2 не имеет смысла.
В итоге:
Цитата:

Цитата Cherterok
пробовал через сдвиг . то_ли я не понял как оно работает, то_ли вообще не то делал »

верно и то, и другое

Hector 23-01-2011 16:50 1595490

Цитата:

Цитата pva
возможны 2 варианта, один хитрый, другой - тот, который хочет препод »

хитрый это который со строками?

Cherterok 23-01-2011 18:21 1595550

не ну на бумаге же просто перевернул число и все. а тут как?? теперь я понял что такое сдвиг:)) ато белеберда получалась типо 2<<111 получалось 444. я вобще не понимал как:)

lxa85 23-01-2011 19:33 1595586

Есть еще такая вещь - остаток от деления.
Есть различия в цифрах по позициям. Т.е. позиционная система счисления.
Соответственно вопрос - чем цифра одного разряда отличается от цифры другого разряда? Как отличить разряд сотен, от разряда единиц?
А на бумаге надо нарисовать концептуальную модель задачи. (я таки нашел это вумное слово :) )
Когда ты меняешь цифры местами ты должен каждую из них охарактеризовать и расписать порядок действий. Чтобы любой человек повторив эти действия пришел к искомому значению.

Drongo 23-01-2011 23:19 1595750

1. Можно операцией деления на остаток вычислить количество чисел в числе(или привести преобразование целого в строку и strlen вычислить длину строки) эта длина будет равна количеству разрядов
2. Создаём динамический массив равный количеству разрядов
3. Используя операцию деления на остаток и деления, отрываем разряды и помещаем их в массив
4. Выводим элементы массива на экран, начиная с последнего.

Cherterok 23-01-2011 23:22 1595753

оО омг) кароче скажу преподу шо тут мего супер масивы и без 5 литров водки не разобраца.

Drongo 23-01-2011 23:29 1595759

Cherterok, решено. Сообразишь сам? :)

Печальный чайник 24-01-2011 00:20 1595793

Самый простой вариант, по-моему, воспользоваться функцией преобразования в строку . Затем взять символ, скопировать в переменную a, скопировать второй символ в первый, а на его место a. Так же можно добавить strlen(str)==3. Затем можно преобразовать строку в число, а можно сразу вывести на экран. Только как тут приписать sizeof? По-любому для int будет 4 байта.

lxa85 24-01-2011 00:37 1595801

Печальный чайник, проще ли? Вводить дополнительные переменные символьного типа. Вызывать подпрограммы обработки. Для работы в пределах 1000 слишком много лишних действий. Это уже современные пользователи, ресурсами, пардон, зажрались.

Печальный чайник 24-01-2011 15:13 1596169

lxa85, без дополнительных переменных по-любому не обойтись. Нужно же где-то хранить десятки, сотни и остатки. А тут на всё хватит четырёх байт строки (ужас как много!!!). Функция преобразования в строку действует быстро и аналогично прямому выделению десяток, сотен, так что, выводя данные в строку, мы много не потеряем. Затем переставить два символа строки и вывести готовое на экран. Это что, по-вашему, мега-растрата ресурсов? Напомню, в любом случае число будет преобразовываться в строку при выводе на экран, и если посмотреть с этой стороны, то у нас получится даже экономия ресурсов. Вот с strlen я ступил, да, проще было сделать проверку x<1000&&x>99.

Busla 25-01-2011 11:34 1596734

lxa85, согласен с Печальным чайником - вводить сразу строку, она хранится как массив символов, доступ к отдельным произвольный, т.е. нужно банально двум переменным обменяться значениями. И это ещё обобщённый случай, а на самом деле не нужно вообще никаких дополнительных символьных переменных - выводим итоговую строку посимвольно, только порядок вывода подменяем.

Cherterok 26-01-2011 14:02 1597624

ладно народ забейте:)) не для моего ума пока это:) масивы и в паскале не понял

lxa85 26-01-2011 15:03 1597664

Печальный чайник, Busla, хм, да, согласен, прошу прощения. В полпервого ночи сложно думалось.
Надо будет мне поаккуратнее в следующий раз.


Время: 14:31.

Время: 14:31.
© OSzone.net 2001-