PDA

Показать полную графическую версию : Задача, помогите разобраться с процедурой


acidspark
12-12-2011, 22:49
задача такова, необходимо решить выражение с двумя переменными..при этом чтобы программа выводила ошибку при вводе значений не удовлетворяющих ОДЗ, и результат конечно же..
вот программа которая получилась у меня:





#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 - код ошибки...
помогите пожалуйста доделать...

ferget
13-12-2011, 02:10
не удовлетворяющих ОДЗ »
что это такое?

в с++/с процедур нет, только функции

Verholom
13-12-2011, 12:34
Сделайте их указателями и не забывайте о разименовании

acidspark
13-12-2011, 22:56
ребят, дело в том, что я в си вообще не соображаю, мне ближе паскаль, можно пожалуйста подробнее?

ОДЗ это область значений при которых будет существовать эта функция двух переменных.

acidspark
14-12-2011, 20:52
Я подправил через указатели: Но я там понимаю параметр 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;
}

ferget
15-12-2011, 02:57
вроде так


#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;
}

acidspark
15-12-2011, 23:25
я сделал хитрее немного:


#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;
}



Спасибо всем)

Busla
16-12-2011, 11:10
в с++/с процедур нет, только функции »
процедура - это передача параметров по ссылке и оно в c++ есть




© OSzone.net 2001-2012