Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2009, 19:19   #1
S@muel
 
Регистрация: 29.03.2009
Сообщений: 6
По умолчанию Проблема с формулой в фкнкции

Программа считает проценты.

Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>

int percent (int y)
{
float a,b,c;

if (y>0)
{
c=a*b/100;
return (1);
}
else

return (-1);

}
void main ()
{
float a,b,c;
clrscr ();
printf ("Enter values:\n");
scanf ("%f", &a);
printf ("Enter percent:\n");
scanf ("%f",&b);
if (percent (b)<0)
{
printf ("Error\nInvalid value");
}
else
printf ("The percent from the entered number is equal: %.2f",c);
getch();
}
Только у меня она не считает нечего, если формулу по вычислению процента указать в функции mein то все работает замечательно. Но формула должна остаться в функции а так она выдает ответ все время ноль так как значение не присваивается. Пожалуйста подскажите как исправить это ошибку. Заранее очень благодарен.
S@muel вне форума Ответить с цитированием
Старый 14.04.2009, 19:38   #2
Volchara
Пользователь
 
Аватар для Volchara
 
Регистрация: 25.03.2009
Сообщений: 55
По умолчанию

А вас не смущает, что значения переменным a,b,c даются в main (), а используете вы их в другой функции. Либо вставьте формулу в main () либо измените функцию percent (). Например так:

Код:
int percent (int y, float a, float b, float c)
{
if (y>0)
{
c=a*b/100;
return (1);
}
else

return (-1);
}

void main ()
{
float a,b,c;
clrscr ();
printf ("Enter values:\n");
scanf ("%f", &a);
printf ("Enter percent:\n");
scanf ("%f",&b);
if (percent (b, a, b, c)<0)
{
printf ("Error\nInvalid value");
}
else
printf ("The percent from the entered number is equal: %.2f",c);
getch();
}
Hа C я могy пpосто делать ошибки, на C++ я могy их наследовать!
Volchara вне форума Ответить с цитированием
Старый 14.04.2009, 19:41   #3
S@muel
 
Регистрация: 29.03.2009
Сообщений: 6
По умолчанию

ОМГ все гениальное просто... Спасибо большое.
S@muel вне форума Ответить с цитированием
Старый 14.04.2009, 19:56   #4
S@muel
 
Регистрация: 29.03.2009
Сообщений: 6
По умолчанию

Но она по прежнему не работает даже если я указал я переменные в функции.
S@muel вне форума Ответить с цитированием
Старый 14.04.2009, 20:52   #5
S@muel
 
Регистрация: 29.03.2009
Сообщений: 6
По умолчанию

Нечего не изменилось даже. В чем проблема то тогда????
S@muel вне форума Ответить с цитированием
Старый 14.04.2009, 21:00   #6
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию

что-то примерно вот такое:

Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>

int percent (float a,float b,float *c)
{

if (b>0)
{
*c=a*b/100;
return 1;
}
else

return -1;

}
void main ()
{
float a,b,c;
clrscr ();
printf ("Enter values:\n");
scanf ("%f", &a);
printf ("Enter percent:\n");
scanf ("%f",&b);
if (percent (a,b,&c)<0)
{
printf ("Error\nInvalid value");
}
else
printf ("The percent from the entered number is equal: %.2f",c);
getch();
}

Последний раз редактировалось MaTBeu; 15.04.2009 в 17:22.
Petruha-nsk вне форума Ответить с цитированием
Старый 14.04.2009, 21:02   #7
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию

может коряво объясню,но всё же: вся проблема в том,что в качестве выходых параметров мы должны использвать адрес переменной С и поэтому в подпрограмме рассматриваем указатель на эту переменную и ее адресу присваиваем значение вычислений.
Petruha-nsk вне форума Ответить с цитированием
Старый 14.04.2009, 21:27   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Правильнее было бы использовать ссылку, а не указатель. С указателем можно вызвать функцию так: percent(5, 10, NULL), т.е. нужно (по хорошему если всё делать) обрабатывать ситуацию с передачей нулевого указателя. Ссылка тоже может быть вникуда, но это уже нужно постараться. Хотя в принципе сути дела это не меняет
Код:
int percent (float a, float b, float &c)
{
if ( b > 0)
{
  c = a * b / 100;
  return 1;
}
return -1;
}
pu4koff вне форума Ответить с цитированием
Старый 14.04.2009, 23:40   #9
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Правильнее было бы использовать ссылку, а не указатель.
Мне так кажется тут язык Си используется. В нем нет ссылок
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 15.04.2009, 07:36   #10
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию

"С указателем можно вызвать функцию так: percent(5, 10, NULL), т.е. нужно (по хорошему если всё делать) обрабатывать ситуацию с передачей нулевого указателя."

а зачем передавать нулевой указатель? ведь мы же определили переменную С как статическую, выделили под нее память, ну в данном случае 4 кб, а потом просто используем указатель на эту переменную. получается, при таком способе мы полностью исключаем работу с неопределенными указателями. или я что-то не понимаю?
Petruha-nsk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите с формулой master_3 Microsoft Office Excel 4 17.04.2009 19:15
Трудности с формулой arr1val Microsoft Office Excel 1 15.08.2008 17:18
Помогите с формулой ivkoa Microsoft Office Excel 7 28.07.2008 15:21
ПОМОГИТЕ С ФОРМУЛОЙ А^ександр Microsoft Office Excel 6 19.02.2008 10:17
Проблема с формулой - =ЕСЛИ(ЕПУСТО(B5);" ";ПРОСМОТР(B5;AE$2:AE$5230;AD$2:AD$5230)) КаТеРиНка Microsoft Office Excel 1 20.09.2007 16:34