Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рекурсия 
:(
    Опции темы
zim22
Дата 2.3.2009, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Garcian @  2.3.2009,  17:32 Найти цитируемый пост)
Сегодня еще раз спросил у препода насчет массивов 

у тебя одного в группе такое задание? нельзя спросить у однокурсников как они решили?


--------------------
PM MAIL   Вверх
Dmi3ev
Дата 2.3.2009, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Цитата

Сегодня еще раз спросил у препода насчет массивов - сказал нельзя! На вопрос " А как тогда?", он ехидно ответил "Не знаю".

ну тогда и ты прояви чудеса хитрости:
1) пять переменных объяви, по сути это не есть массив
2) пользуйся указателем, как в моем примере, тоже можно преподу втереть, что это не есть массив
3) объяви переменную типа long int и запихни туда свои цифры (пять цифр туда поместятся), а получай их, пользуясь остатком от деления:
long int x=12345;
//x%10
только сегодня выкладывал
Код

#include "stdafx.h"
#include <iostream>

using namespace std;

int mysum(long int n)
{
    if (n==0)
        return 0;
    else
        return((n%10)+mysum(n/10));
}

int _tmain()
{
    long int n=1234567;
    cout<<mysum(n)<<endl;
    system("pause");
    return 0;
}

это для понимания...
4) из файла читай, тоже не массив будет
5) тебе говорили про строки string, тоже возьми на заметку
вариантов куча, а потом просто объясни преподу, в чем разница между выбранным тобой вариантом и массивом (предварительно почитав), чтобы он точно не пенился)))

Добавлено через 3 минуты и 43 секунды
Цитата

Dmi3ev,  спасибо, а где второй пункт

посчитал нужным его убрать из вежливости... дабы не обидеть...  smile 


--------------------

PM MAIL   Вверх
mes
Дата 2.3.2009, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Dmi3ev @  2.3.2009,  17:27 Найти цитируемый пост)
1) пять переменных объяви, по сути это не есть массив

боюсь тс нужно всего лишь переставить цифры в числе, именно поэтому массив сущность излишняя, так как переменная уже хранит все данные.



--------------------
PM MAIL WWW   Вверх
bsa
Дата 2.3.2009, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



я плакалъ! Ну нафлудили!
Код
#include <iostream>
#include <cmath>

int getDig(int n, int r)
{
        return (n/r) % 10; //текущая цифра
}

int setDig(int n, int r, int dig)
{
        return n + r * (dig - getDig(n, r) ); //текущая цифра
}

void outAll(int n, int r)
{
    if (r < 10)
        std::cout << n << std::endl;
    else {
        const int d = getDig(n, r); //текущая цифра
        for(int x = r; x > 0; x /= 10) {
            int d2 = getDig(n, x);
            int t = setDig( setDig(n, x, d), r, d2);
            outAll(t, r/10);
        }
    }
}

int main()
{
    int n;
    std::cout << "Input number: " << std::flush;
    std::cin >> n;
    int power = static_cast<int>(log(n)/log(10)); //целое количество десятичных разрядов в числе -1
    outAll(n, static_cast<int>( pow(10, power) ) );
    return 0;
}

PM   Вверх
Anikmar
Дата 2.3.2009, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



bsa, +1, действительно удовлетворяет всем условиям задачи. Массива нет никак (только если рассматривать целое число как массив бит  smile ).

Лично мне вариант очень понравился.


PM MAIL ICQ   Вверх
Albor
Дата 2.3.2009, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 2
Всего: 9



а если на тип int посмотреть вот так
Код

int a(12345678);
    char *p=(char*)&a;
    for(int i=0;i<sizeof(int);i++)
        printf("%X ",*(p+i)&0xFF);

уж не массив ли это char-ов? smile  А если копнуть глубже, то всё состоит из битовых массивов. Так как решать задачу? smile  И чем, после этого, условию не удовлетворяет string?


Это сообщение отредактировал(а) Albor - 3.3.2009, 00:05
PM MAIL ICQ   Вверх
Anikmar
Дата 3.3.2009, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(Albor @  2.3.2009,  23:50 Найти цитируемый пост)
уж не массив ли это char-ов?   А если копнуть глубже, то всё состоит из битовых массивов. Так как решать задачу?   И чем, после этого, условию не удовлетворяет string?

Про битовый массив я уже написал. smile Можно еще опуститься до массива тактов задающего генератора системной шины.

Тем не менее, если не доводить до маразма, то вариант действительно отличный. Я думаю, препод именно это имел ввиду - дотумкает ли до использования чистой математики или пойдет по пути строки. Лично я бы по причине своей лени пошел бы наверное по пути строки. И скорее всего схлопотал бы пару.

Это сообщение отредактировал(а) Anikmar - 3.3.2009, 00:06
PM MAIL ICQ   Вверх
math64
Дата 3.3.2009, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Если есть ограничение на число n (n<10 или n<16), то как я уже говорил, int32 можно использовать для хранения 9 десятичных цифр, а uint64 для хранения 16 шестнадцатиричных цифр:
Код

bool has_digit(int digit, int32 number) {
  int32 mod;
  if (number == 0) // 0 не используем
    return false;
  mod = number % 10;
  if (mod == digit)
    return true;
  return has_digit(digit, number / 10);
}

// добавление к числу новой цифры
number = number * 10 + new_digit;


Код

bool has_hexdigit(int xdigit, uint64 number, int count_digits) {
  uint64 mod;
  if (count_digits == 0)
    return false;
  mod = number % 16; // or number & 0xF;
  if (mod == xdigit)
    return true;
  return has_hexdigit(xdigit, nuber / 16, count_digits - 1); // or number >> 4
}

// добавление к числу новой цифры
number = number * 16 + new_digit; // or number = (number << 4) + new_digit;
count_digits++;

Но с использованием структур ограничений на n нет (если обеспечить достаточный размер стека)

Добавлено через 6 минут и 45 секунд
Albor: string условию не удовлетворяет, нельзя использовать std::
Но обычные строки ("") по-видмому можно, иначе как печатать результат? (ostream тоже в std::, так что printf)
PM   Вверх
mes
Дата 3.3.2009, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



 smile 
Цитата(Albor @  2.3.2009,  22:50 Найти цитируемый пост)
уж не массив ли это char-ов? smile  А если копнуть глубже, то всё состоит из битовых массивов. Так как решать задачу? smile  И чем, после этого, условию не удовлетворяет string?

а если сказано в условии, что функции не использовать нельзя, то как писать программу ?! smile  ведь main() тоже функция.  smile 



--------------------
PM MAIL WWW   Вверх
bsa
Дата 3.3.2009, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



math64, читай условие внимательно - он сказал, что число разрядов не более пяти.
PM   Вверх
math64
Дата 3.3.2009, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Ну для 5 хватит 5 восьмиричных цифр в int16
PM   Вверх
mes
Дата 3.3.2009, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(math64 @  3.3.2009,  11:55 Найти цитируемый пост)
Ну для 5 хватит 5 восьмиричных цифр в int16 

восьмиричных ?! a почему бы сразу не использовать тогда char для 5ти двоичных ?


--------------------
PM MAIL WWW   Вверх
math64
Дата 3.3.2009, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Нужно запоминать не только набранные числа, но и их порядок, поэтому хранение в битах не годится.
у bsa действительно лучшее решение,  правда нет проверки того, что в введённом числе есть одинаковые цифры.
И насколько я понимаю, ostream нужно переделать на printf(), 
Его можно переделать и для шестнацатиричных чисел.

PM   Вверх
Garcian
Дата 5.3.2009, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 5.11.2008

Репутация: нет
Всего: нет




bsa, спасибо большое! Что касается проверки на повторяющиеся символы, имхо, она не нужна. Идет проверка только на пустой файл и на его отсутствие. Еще вопрос: что значит static_cast<int> и flush?

Albor, string нельзя использовать точно) Зато его дали для следущей работы на подстроки  smile 
--------------------
Неродивый студент
PM MAIL   Вверх
Albor
Дата 5.3.2009, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 2
Всего: 9



Цитата(bsa @ 2.3.2009,  18:01)
[code=cpp    int power = static_cast<int>(log(n)/log(10)); //целое количество десятичных разрядов в числе -1
 [/code]

log10(n) даст тотже самый результат. static_cast<int> - приведение типа, говорит компилятору (в данном контексте) :" не ругайся, я знаю что из double получаю int"

Это сообщение отредактировал(а) Albor - 5.3.2009, 13:37
PM MAIL ICQ   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0722 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.