ошибка в коде С++
Пользователи, просматривающие топик: 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. Вообщем не могу понять как исправить эти ошибки.
|
|
|
RE: ошибка в коде - 2009-02-28 00:15:46.426666
|
|
|
Xelle
Сообщений: 20
Оценки: 0
Присоединился: 2008-07-10 23:07:46.580000
|
mult=power(base); в ф-цию power надо два интеджера передавать, а ты один передаешь
|
|
|
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)' Одним словом ГЫ))))
|
|
|
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; - ты наверно акого эффекта изначально хотел добиться. Да, и почитай про рекурсию.
|
|
|
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 кто нить поможет найти ошибку?
|
|
|
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<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 кто нить поможет найти ошибку? искать там надо не ошибку, а правильный код. ибо его там заметно меньше
|
|
|
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-е инкремент iquote:
i++; надо делать ДО вызова функции power т.к. сейчас условие quote:
if(i<step) никогда не будет false (кроме step = 0) 3-е все операторы которые должны выполняться при условии quote:
if(i<step) надо взять в логические скобки т.к. сейчас у тебя от него зависит только выполнение quote:
p*=base; з.ы. виснет потому что переменная i всегда меньше step (кроме step = 0) по всем трем причинам и ты получаешь бесконечный цикл.
|
|
|
RE: ошибка в коде - 2009-03-02 21:30:32.850000
|
|
|
oneTrouble
Сообщений: 31
Оценки: 0
Присоединился: 2009-02-27 23:46:41.190000
|
уфф.. все, разобрался. спасиб
|
|
|
RE: ошибка в коде - 2009-03-02 22:16:09.266666
|
|
|
Xelle
Сообщений: 20
Оценки: 0
Присоединился: 2008-07-10 23:07:46.580000
|
пока не залошили кул хацкеры исправлюсь - первая причина не при чем, затупил, статик такой незаметный )
|
|
|
|
|