Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

ошибка в коде С++

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> ошибка в коде С++
Имя
Сообщение << Старые топики   Новые топики >>
ошибка в коде С++ - 2009-02-28 00:02:33.940000   
oneTrouble

Сообщений: 31
Оценки: 0
Присоединился: 2009-02-27 23:46:41.190000
Собственно код:
#include <iostream.h>
#include <conio.h>

int power(int,int);//prototype

int main()
{ int mult,base,step;
cout <<"enter base and step: "<<endl;
cin >>base;
cin >>step;
mult=power(base);
cout<<"power(base)="<<mult<<endl;
getch();
return 0;
}

int power(int base,int step)
{
int i=1;
if(i<step)
i++;
return power(base*base);
}
учу С++ по книге Джесса Либерти "C++ за 21 день"
так вот, в книге после главы Функции есть задание:
написать прогу нахождения степени числа n с помощью рекурсии.
При компиляции кода выходит ошибки:
Error:  na4alo.cpp(11,19):Too few parameters in call to 'power(int,int)'
Error:  na4alo.cpp(23,24):Too few parameters in call to 'power(int,int)'
пользуюсь Borland C++ 5.01.
Вообщем не могу понять как исправить эти ошибки.
Post #: 1
RE: ошибка в коде - 2009-02-28 00:15:46.426666   
Xelle

Сообщений: 20
Оценки: 0
Присоединился: 2008-07-10 23:07:46.580000
mult=power(base);

в ф-цию power надо два интеджера передавать, а ты один передаешь
Post #: 2
RE: ошибка в коде С++ - 2009-02-28 04:19:02.650000   
HolyAnimal =^.^=

Сообщений: 88
Оценки: 0
Присоединился: 2009-02-28 01:26:28.003333
quote:

ORIGINAL: oneTrouble
учу С++ по книге Джесса Либерти "C++ за 21 день"

неплохо-бы есчо и английский по какойнить книже (школе/вузе) поучить -_^
quote:

ORIGINAL: С++ компилятор =)
Too few parameters in call to 'power(int,int)'

Одним словом ГЫ))))
Post #: 3
RE: ошибка в коде - 2009-02-28 04:20:42.403333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Что за адская рекурсия и почему ты туда передаёшь только один параметр, хотя сам же определил 2?

Между прочим, в math.h есть своя функция pow. Может воспользоваться готовым, вместо велосипедописания?
http://msdn.microsoft.com/en-us/library/dt5dakze.aspx

P.S. в своей функции power вместо int i; напиши static int i; - ты наверно акого эффекта изначально хотел добиться. Да, и почитай про рекурсию.
Post #: 4
RE: ошибка в коде - 2009-03-02 20:31:38.763333   
oneTrouble

Сообщений: 31
Оценки: 0
Присоединился: 2009-02-27 23:46:41.190000
вот исправил, но работать не хочет (
вот код:
#include <iostream.h>
#include <conio.h>

int power(int,int);

int main(int base,int step)
{
int p;
cout << "enter two numbers:\n";
cin>>base>>step;
p=power(base,step);
cout <<"power("<<base<<","<<step<<")="<<p<<endl;
getch();
return 0;
}

int power(int base,int step)
{
static int i;
int p=1;
if(i<step)
p*=base;
p=power(base,step);
i++;
return (p);
}
компилятор не выдает никаких ошибок, а просто после ввода base и step виснет о0 кто нить поможет найти ошибку?
Post #: 5
RE: ошибка в коде - 2009-03-02 20:57:07.193333   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: oneTrouble

int power(int base, int step) { static int i; int p=1; if(i&lt;step) p*=base; p=power(base,step); i++; return (p); }


во-первых, где база рекурсии? во-вторых, чему при первом вызове равно i? в-третьих, зачем нужна проверка, если значение p ты всё равно затираешь? в-четвёртых, рекурсивный вызов ты делаешь с неизменёнными аргументами - если он отработал в первый раз, то откуда уверенность что в какой-то из последующих не отработает?

в-пятых, читай книжки - в них рулез. или хотя бы педивикию:

http://en.wikipedia.org/wiki/Primitive_recursive_function

quote:

ORIGINAL: oneTrouble

компилятор не выдает никаких ошибок, а просто после ввода base и step виснет о0 кто нить поможет найти ошибку?


искать там надо не ошибку, а правильный код. ибо его там заметно меньше
Post #: 6
RE: ошибка в коде - 2009-03-02 21:05:36.110000   
Xelle

Сообщений: 20
Оценки: 0
Присоединился: 2008-07-10 23:07:46.580000
1-е
вынеси
quote:

static int i;
ЗА пределы функции power т.к. сейчас у тебя для каждой вызываемой функции переменная i своя.

2-е
инкремент i
quote:

i++;
надо делать ДО вызова функции power т.к. сейчас условие
quote:

if(i&lt;step)
никогда не будет false (кроме step = 0)

3-е
все операторы которые должны выполняться при условии
quote:

if(i&lt;step)
надо взять в логические скобки т.к. сейчас у тебя от него зависит только выполнение
quote:

p*=base;


з.ы. виснет потому что переменная i всегда меньше step (кроме step = 0) по всем трем причинам и ты получаешь бесконечный цикл.
Post #: 7
RE: ошибка в коде - 2009-03-02 21:30:32.850000   
oneTrouble

Сообщений: 31
Оценки: 0
Присоединился: 2009-02-27 23:46:41.190000
уфф.. все, разобрался. спасиб
Post #: 8
RE: ошибка в коде - 2009-03-02 22:16:09.266666   
Xelle

Сообщений: 20
Оценки: 0
Присоединился: 2008-07-10 23:07:46.580000
пока не залошили кул хацкеры исправлюсь - первая причина не при чем, затупил, статик такой незаметный )
Post #: 9
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> ошибка в коде С++







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.