 |
|
Задача, помогите разобраться с процедурой
задача такова, необходимо решить выражение с двумя переменными..при этом чтобы программа выводила ошибку при вводе значений не удовлетворяющих ОДЗ, и результат конечно же..
вот программа которая получилась у меня:
Код:
#include <math.h>
#include <stdio.h>
#include <conio.h>
int x,p,k;
float a,b,c;
void main()
{
clrscr();
printf("vvedite znachenije x= ");
scanf("\n %d", &x);
printf("vvedite znachenie p= ");
scanf("\n %d", &p);
k=0;
reshenie(int x, int p, int k, int c);
if (k!=4)
{
if (k!=3)
{
if (k!=2)
{
if (k!=1)
{
printf("znachenie drobi ravno = %f\n",c);
}
else printf("v znamenatele 0");
}
else printf("pod logarifmom 0");
}
else printf("pod kornem 0");
}
}
float reshenie(int x, int p, int k, float c)
{
if ((2*x*x-p)>0)
{
if (x!=-p)
{
if ((tan(log((x+p)*(x+p))-x*x*pow(p,4)))!=0)
{
a=3*pow(x,3)*p*p-sqrt(2*x*x-p);
b=tan(log((x+p)*(x+p))-x*x*pow(p,4));
c=a/b;
k=1;
}
else k=2;
}
else k=3;
}
else k=4;
return c;
}
Мне нужно чтобы в основную программу процедура возвращала c - результат и k - код ошибки...
помогите пожалуйста доделать...
|
что это такое?
в с++/с процедур нет, только функции
|
Сделайте их указателями и не забывайте о разименовании
|
ребят, дело в том, что я в си вообще не соображаю, мне ближе паскаль, можно пожалуйста подробнее?
ОДЗ это область значений при которых будет существовать эта функция двух переменных.
|
Я подправил через указатели: Но я там понимаю параметр k не передается в основную программу. Как это исправить??
Код:
#include <math.h>
#include <stdio.h>
#include <conio.h>
int x,p,k;
float a,b,c;
float reshenie(int x, int p, int *k, float c)
{
int l=*k;
if ((2*x*x-p)>0)
{
if (x!=-p)
{
if ((tan(log((x+p)*(x+p))-x*x*pow(p,4)))!=0)
{
a=3*pow(x,3)*p*p-sqrt(2*x*x-p);
b=tan(log((x+p)*(x+p))-x*x*pow(p,4));
c=a/b;
l=1;
}
else l=2;
}
else l=3;
}
else l=4;
*k=l;
return c;
}
int main()
{
clrscr();
printf("vvedite znachenije x= ");
scanf("\n %d", &x);
printf("vvedite znachenie p= ");
scanf("\n %d", &p);
reshenie(x, p, &k, c);
if (k!=4)
{
if (k!=3)
{
if (k!=2)
{
if (k!=1)
{
printf("znachenie drobi ravno = %f\n",c);
}
else printf("v znamenatele 0");
}
else printf("pod logarifmom 0");
}
else printf("pod kornem 0");
}
getch();
return 0;
}
|
вроде так
Код:
#include <math.h>
#include <stdio.h>
#include <conio.h>
int k;
float x,p;
float a,b,c;
double reshenie(float x, float p, int *k, float c)
{
if ((2*x*x-p)>0)
{
if (x!=-p)
{
if ((tan(log((x+p)*(x+p))-x*x*pow(p,4)))!=0)
{
a=3*pow(x,3)*p*p-sqrt(2*x*x-p);
b=tan(log((x+p)*(x+p))-x*x*pow(p,4));
c=a/b;
*k=1;
}
else *k=2;
}
else *k=3;
}
else *k=4;
return c;
}
int main()
{
printf("vvedite znachenije x= ");
scanf("\n %f", &x);
printf("vvedite znachenie p= ");
scanf("\n %f", &p);
c=reshenie(x, p, &k, c);
if (k!=4)
{
if (k!=3)
{
if (k!=2)
{
if (k!=1)
{
printf("znachenie drobi ravno = %f\n",c);
}
else printf("v znamenatele 0");
}
else printf("pod logarifmom 0");
}
else printf("pod kornem 0");
}
getch();
return 0;
}
|
я сделал хитрее немного:
Код:
#include <math.h>
#include <stdio.h>
#include <conio.h>
int x,p,k,i,n;
float a,b,c;
float oshibka (int x, int p, int k)
{
if ((2*x*x-p)>0)
{
if (x!=-p)
{
if ((tan(log((x+p)*(x+p))-x*x*pow(p,4)))!=0)
{
k=1;
}
else k=2;
}
else k=3;
}
else k=4;
return k;
}
float reshenie (int x, int p, float c)
{
a=3*pow(x,3)*p*p-sqrt(2*x*x-p);
b=tan(log((x+p)*(x+p))-x*x*pow(p,4));
c=a/b;
return c;
}
int main()
{
clrscr();
printf("vvedite kolichestvo vuchislenii n= ");
scanf("\n %d",&n);
for (i=1;i<n;i++)
{
printf("vvedite znachenije x= ");
scanf("\n %d", &x);
printf("vvedite znachenie p= ");
scanf("\n %d", &p);
k=oshibka(x, p, k);
if (k==4)
{
printf("pod kornem 0");
}
else if (k==3)
{
printf("pod logarifmom 0");
}
else if (k==2)
{
printf("v znamenatele 0");
}
else if (k==1)
{
c=reshenie(x,p,c);
printf("znachenie drobi ravno = %f\n",c);
}
}
getch();
return 0;
}
Спасибо всем)
|
Цитата:
Цитата ferget
в с++/с процедур нет, только функции »
|
процедура - это передача параметров по ссылке и оно в c++ есть
|
Время: 08:52.
© OSzone.net 2001-