Другое > Hard'n'Soft
Програмирование на C++
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 выбирает только нужное из них.
Навигация
Перейти к полной версии