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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++]Функции+указатели, см. выше 
:(
    Опции темы
Palladin
Дата 21.1.2007, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

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



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

Посчитать 2^500 и  1!+2!+…+100!

вот решение по обычному:

Код

int factorial();
int stepen();
int main()
{
cout<<"2 v 500 stepeni     = "<<stepen<<endl;
cout<<"Factorial 100 raven = "<<factorial<<endl;
getch();
return 0;
}
int factorial()
{
int i,fact;
fact=1;
for(i=1;i<=100;i++)
fact*=i;
return(fact);
}
int stepen()
{
int p;
p=pow(2,500);
return(p);
}


Хелп smile 


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
Romikgy
Дата 21.1.2007, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(RooR @  21.1.2007,  22:01 Найти цитируемый пост)
2^500


Цитата(RooR @  21.1.2007,  22:01 Найти цитируемый пост)
int stepen()
{
int p;
p=pow(2,500);
return(p);
}

в инт явно не влезет , может только в int64

Цитата(RooR @  21.1.2007,  22:01 Найти цитируемый пост)
1!+2!+…+100!


Цитата(RooR @  21.1.2007,  22:01 Найти цитируемый пост)
int factorial()
{
int i,fact;
fact=1;
for(i=1;i<=100;i++)
fact*=i;
return(fact);
}

неправильно


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Palladin
Дата 21.1.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

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



Ну ланаsmile вот так может правильно, да и число влазит в int, запусти программуsmile))
вот изменил, с указателями подсаби плз smile 

Код

int factorial();
int stepen();
int main()
{
cout<<"2 v 500 stepeni     = "<<stepen<<endl;
cout<<"Factorial 100 raven = "<<factorial<<endl;
getch();
return 0;
}
int factorial()
{
int i;
long int fact;
fact=1;
for(i=1;i<=100;i++)
fact*=i;
return(fact);
}
int stepen()
{
long int p;
p=pow(2,500);
return(p);
}



--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
Romikgy
Дата 21.1.2007, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



у мя при факториале 22 
Код

#define llong unsigned long long
llong fact(llong x)
{
    llong t;
  //cout<<x<<endl;
  if (x==0 || x ==1) return 1;
  
  //return 
  t=x*(fact(x-1));
  cout<<x<<"\t"<<t<<endl;   
  return t;
}

шкалить разрядную сетку smile

Добавлено @ 23:33 
Цитата(RooR @  21.1.2007,  22:13 Найти цитируемый пост)
с указателями подсаби плз 

Код

char x[100]={0};
sprintf(x,"%p",stepen);
cout<<"2 v 500 stepeni     = "<<x<<endl;
sprintf(x,"%p",factorial);
cout<<"Factorial 100 raven = "<<x<<endl;

что то типа такого ты хотел?


Это сообщение отредактировал(а) Romikgy - 21.1.2007, 23:34


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

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



нет надо сделать передачу из функции в виде указателей ,както такsmile препод сам ниче незнает, поэтому задание дал а как хз


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
Romikgy
Дата 22.1.2007, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(RooR @  21.1.2007,  23:55 Найти цитируемый пост)
надо сделать передачу из функции в виде указателей

ты понял ? я нет , кого передать из ф_ции в виде указателей?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Pete
Дата 22.1.2007, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Romikgy @  22.1.2007,  00:09 Найти цитируемый пост)
в инт явно не влезет , может только в int64

 smile 
Никуда не влезет! Ни в один элементарный тип!!

Цитата(RooR @  22.1.2007,  01:55 Найти цитируемый пост)
нет надо сделать передачу из функции в виде указателей ,както такsmile препод сам ниче незнает, поэтому задание дал а как хз

Это потому, что надо реализовывать длинную арифметику.  smile 

Цитата(Romikgy @  22.1.2007,  00:26 Найти цитируемый пост)
#define llong unsigned long long

По секрету, есть typedef...  smile 

Для сравнения с int64 и т.п.:

100! = 933262154439441526816992388562667004907159682643816
214685929638952175999932299156089414639761565182862536979
20827223758251185210916864000000000000000000000000

2^500 = 32733906078961418700131896968275991522166420460430
647894832913680961337964046745548832700923259041571508866
84127560071009217256545885393053328527589376


--------------------
Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу)
Не откладывай на завтра то, что можешь сделать сегодня. (Пословица)
А теперь выпишем точное значение числа пи... (Препод)
Жахни, Пендальф! © Гоблин
PM   Вверх
Romikgy
Дата 22.1.2007, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(Pete @  22.1.2007,  00:09 Найти цитируемый пост)
По секрету, есть typedef... 

в курсе


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

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



гы, ну челы я незнаю конечно, может и так, но у мя почемуто намашине разницы нет int или long int всеровно выводит 9-и значное число и все, но не в этом дело, короче задача мол сделать через функции эти задачи, но сделать несколько иначе, короче вот return возвращает из двух функции значения, вот это надо сделать через указатели, короче посчитать, потом передать адрес и в мейне уже взять число, конечно если это возможно, анм препод дал такое задание, а препод сам оч "много" знает


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
Pete
Дата 22.1.2007, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(RooR @  22.1.2007,  02:18 Найти цитируемый пост)
разницы нет int или long int

Все зависит от системы. Гарантируется только, что sizeof(int) <= sizeof(long int) <= sizeof(long long int).

Цитата(RooR @  22.1.2007,  02:18 Найти цитируемый пост)
это надо сделать через указатели

По крайней мере, в данном вопросе твой препод дал вполне разумный совет, а разобраться до конца логично поручил тебе.
Так как для таких больших чисел нет встроенного типа, придется реализовывать его самому. Самый простой вариант -- хранить в массиве char'ов цифры данного числа. Самому придется писать функцию (или перегруженный оператор) длинного умножения. Эта проблема обсуждалась несколько раз на форуме, в частности есть очень неплохой исходник из книги для подготовки к олимпиадам по программированию.


--------------------
Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу)
Не откладывай на завтра то, что можешь сделать сегодня. (Пословица)
А теперь выпишем точное значение числа пи... (Препод)
Жахни, Пендальф! © Гоблин
PM   Вверх
Palladin
Дата 22.1.2007, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

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



Нет Пётр, может такое и можно задать, но он точно не могsmile)) поверь мне, короче говоря что в этой программе можно сделать через указатели??? особо не увеличивая код???? и с коментами плз

допустим вот код сделал Ромикьюsmile 

Код

char x[100]={0};
sprintf(x,"%p",stepen);
cout<<"2 v 500 stepeni     = "<<x<<endl;
sprintf(x,"%p",factorial);
cout<<"Factorial 100 raven = "<<x<<endl;


что он делает

Добавлено @ 01:36 
Я так понял эт адреса выдала программа smile мне числа надоsmile

Добавлено @ 01:40 
Короч сорри за оффтоп, вот я так передалал, вроде числа прога показывает, правильно так

Я короч подумал что твой вариант адреса дает, ну и я сделал чтоб показывала прога значения по этим адресам, объясни че за функция sprintf

Добавлено @ 01:41 
Код

char x[100]={0};
sprintf(x,"%p",stepen);
cout<<"2 v 500 stepeni     = "<<&x<<endl;
sprintf(x,"%p",factorial);
cout<<"Factorial 100 raven = "<<&x<<endl;



--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
Pete
Дата 22.1.2007, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(RooR @  22.1.2007,  02:34 Найти цитируемый пост)
объясни че за функция sprintf

Она здесь вообще не нужна, не парься. Просто он в конце адрес печатает.

Добавлено @ 01:49 
Если ты так уверен в простоте задания, то...
Цитата(RooR @  22.1.2007,  02:34 Найти цитируемый пост)
что в этой программе можно сделать через указатели??? особо не увеличивая код????

Ничего. Не увеличивая, НЕЛЬЗЯ. Правда, я совсем не знаю STL полюса, может, там что-то есть, хотя вряд ли. Иначе не писали бы gmp для с++.
Последнее, что приходит мне в голову: он мог давать эту часть (реализацию длинной арифметики) в течение семестра. Ну, еще бывают преподы, которых можно сильно разозлить...   smile 


--------------------
Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу)
Не откладывай на завтра то, что можешь сделать сегодня. (Пословица)
А теперь выпишем точное значение числа пи... (Препод)
Жахни, Пендальф! © Гоблин
PM   Вверх
Palladin
Дата 22.1.2007, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

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



Нет я думаю что ты прав, что именно с арифметикой, но дело в том, что это обычная лаба, на которую отводится полтара часа, мол закрепление знаний о функциях, задания взяты с Минского универа, поэтому-то она такая сложная


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
Pete
Дата 22.1.2007, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тебе лучше знать, что за задание и кто виноват.. Кроме как через длинную арифметику, я не знаю, как решить такую задачу на сях.  smile 


--------------------
Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу)
Не откладывай на завтра то, что можешь сделать сегодня. (Пословица)
А теперь выпишем точное значение числа пи... (Препод)
Жахни, Пендальф! © Гоблин
PM   Вверх
Palladin
Дата 22.1.2007, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

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



А насколько сложна такая задача если её делать через арифметику, я то точно сам не сделаю, просто если не сложно сделай плз с коментами, все одно знать больше будуsmile smile 


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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