| Другое > Hard'n'Soft |
| Програмирование на C++ |
| << < (2/25) > >> |
| gepar:
--- Цитата: AjaxVS ---пипец, а если надо было бы юзать 100 функций из std, он бы все их с using упоминал? --- Конец цитаты --- Это он чтобы прокомментить можно было сразу при надобности ну и чтобы показать что мы будем использовать от каждой из подключаемых директив в текущей программе. Имхо так нагляднее так что всё автор правильно делает. Я сам потом просто пишу using namespace std и всё. И всё же что за "прекомпилированный заголовок" кто-нибудь знает? :) |
| DeniSS:
--- Цитата: gepar от 24 Январь 2011, 00:33:40 ---И всё же что за "прекомпилированный заголовок" кто-нибудь знает? :) --- Конец цитаты --- Google it! Вот же. Учитывая сложность твоего проекта, это дело можно выключить ;) |
| gepar:
Маленькая задачка: разбить число на цифры. Я это ещё на паскале не любил, но тут в книженции это задание мне даётся с расчётом что я не буду пользоваться массивом, на а строчкой символов пользоваться как-то глупо в этом случае. Тогда как это можно решить? Количество цифр заранее неизвестно. --- Код: ---//Выводит цифры из числа через пробел # include <iostream> # include <iomanip> using namespace std; void space (int); int main() { int x; // Число, цифры которого и нужно будет вывести cout<<"Enter x: "; cin>>x; space(x); return 0; } void space (int x) { int a; // Счётчик для подсчёта цифр в числе int b=x; // Копия x нужная для того чтобы сосчитать количество цифр в числе do { b/=10; a++; }while (b>0); for (int i=a; i>=1; i--)//Попытка вывести цифры из числа с пробелами { cout<<x%10<<" "; x/=10; } } --- Конец кода --- |
| DeniSS:
itoa, atoi не? |
| gepar:
--- Цитата: DeniSS ---itoa, atoi --- Конец цитаты --- FigPoimeshKudaKakoiCikl. Больше на шифровку шпиёну похоже :) Не настолько я воспринимаю же на слово. |
| DeniSS:
Например А вообще, надо дружить с мануалами. Я так вот почти всегда MSDN-овскую справку открытой держу - мало ли ;) Добавлено позже: Дык а задание-то в каком контексте дано? Знание чего тебе должно помочь разбирать числа на цифры? |
| gepar:
DeniSS, ну перечислять по пунктам что уже было в книге я не буду (долго же), но то что помогло бы в этом случае вроде массивов идёт чуточку дальше, ну а строки использовать имхо глупо. ТЕ: разрешено всё (в пределах разумного) кроме строк, массивов и подключения директив, которые используют эти строки и массивы для того чтобы разбить число на цифры. Расшифруй что ты написал в прошлый раз, ты я вижу там предлагаешь какой-то цикл, но какой и куда его я без экстрасенсорных возможностей боюсь не догадаюсь. Добавлено позже: Ну а вообще это я так балуюсь, мне чисто интересно реально ли это сделать без строк и массивов :) |
| kamre:
Ни массивов, ни строк не использовано: --- Код: ---#include <iostream> void digits(int i) { int j = i / 10; if (j != 0) digits(j); std::cout << i % 10 << " "; } int main() { std::cout << "Number: "; int n; std::cin >> n; std::cout << "Digits: "; digits(n); return 0; } --- Конец кода --- |
| HardWareMan:
--- Цитата: kamre от 25 Январь 2011, 06:18:41 ---Ни массивов, ни строк не использовано: --- Конец цитаты --- Наглая ложь! Твой массив есть в стеке. Ибо рекурсия. :3 |
| kamre:
--- Цитата: HardWareMan от 25 Январь 2011, 07:27:10 ---Твой массив есть в стеке. --- Конец цитаты --- И где же указатель на первый элемент этого "массива"? ) --- Цитата: HardWareMan от 25 Январь 2011, 07:27:10 ---Ибо рекурсия. --- Конец цитаты --- Ну для задачки с такими ограничениями в самый раз. |
| HardWareMan:
--- Цитата: kamre от 25 Январь 2011, 09:27:24 ---И где же указатель на первый элемент этого "массива"? ) --- Конец цитаты --- --- Цитата ---#include <iostream> void digits(int i) { int j = i / 10; if (j != 0) digits(j); << Указатель на следующий элемент массива std::cout << i % 10 << " "; } int main() { std::cout << "Number: "; int n; std::cin >> n; std::cout << "Digits: "; digits(n); << Указатель на первый элемент массива return 0; } --- Конец цитаты --- Кто скажет что это не так - лично плюну в глаз. :3 |
| gepar:
kamre, засчитывается :) Интересный алгоритм получился. |
| kamre:
--- Цитата: HardWareMan от 25 Январь 2011, 10:52:00 ---Кто скажет что это не так - лично плюну в глаз. :3 --- Конец цитаты --- Прикрывая глаз, цитирую: --- Цитата ---An array is a series of elements of the same type placed in contiguous memory locations that can be individually referenced by adding an index to a unique identifier. --- Конец цитаты --- А в моем примере все промежуточные значения находятся в локальных переменных, которые лежат в stack frames вперемешку с параметром функции и адресом возврата. |
| gepar:
Вопрос на засыпку номер 2: почему в c++ новые переменные изначально не равны 0, какая польза из того что в них случайные числа? Ведь это лишний повод сделать ошибку забыв обнулить счётчик например. В это же время статические (static) новые переменные обнулены. |
| HardWareMan:
--- Цитата: kamre от 25 Январь 2011, 14:43:55 ---Прикрывая глаз, цитирую: А в моем примере все промежуточные значения находятся в локальных переменных, которые лежат в stack frames вперемешку с параметром функции и адресом возврата. --- Конец цитаты --- Да, а стэк является массивом байт памяти. А каждый твой стэкфрэйм (если разговариваем на русском, то лучше говорить "кадр") является одним законченным элементом типа "запись". Правда согласен, рандомный доступ к этому массиву записей имеет только супервизор задач. Ладно, отвлеклись. Так что воооот! |
| kamre:
--- Цитата: HardWareMan от 25 Январь 2011, 18:15:55 ---Да, а стэк является массивом байт памяти. --- Конец цитаты --- Тогда в компьютере все связанное с памятью "является массивом байт" :lol: |
| MetalliC:
kamre, насчет стека оно так и есть, на нем динамически резервируется и потом освобождается некое количество данных, структура/размер которых определяется кол-вом аргументов функции и локальных динамических (не статик) переменных |
| BmpCorp:
--- Цитата: DeniSS ---А вообще, надо дружить с мануалами. Я так вот почти всегда MSDN-овскую справку открытой держу - мало ли --- Конец цитаты --- Она для C++ и правда чем-то может помочь? А то, работая с C#, у меня сложилось впечатление, что она в любой задаче только всё затруднит :) |
| gepar:
Я тут посмотрел на вес скомпилированного exe файла маленькой программки по сортировке одномерного массива с 10 элементами типа int так вес у неё 565 кб (Хотя архивируется она до 104 кб, но это сейчас опустим). Вопрос: а чего так много-то ? :? У программы же даже граф.интерфейса нет да и сама программа небольшая ведь. Добавлено позже: Хм, а скомпилированное через VS2010 приложение весит только 36 кб. Не думал что у них алгоритмы компиляции так сильно отличаются что даже вес настолько разные. |
| MetalliC:
gepar, не сравнивал в последнее время размеры, хотя тут при одинаковых проектах скорее дело в линковке, GCC(?) видимо более туповато линкует объектники и библиотеки, а VS выбирает только нужное из них. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |