Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Задача, помогите разобраться с процедурой (http://forum.oszone.net/showthread.php?t=222756)

acidspark 12-12-2011 22:49 1814048

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



Код:


#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 1814113

Цитата:

Цитата acidspark
не удовлетворяющих ОДЗ »

что это такое?

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

Verholom 13-12-2011 12:34 1814282

Сделайте их указателями и не забывайте о разименовании

acidspark 13-12-2011 22:56 1814728

ребят, дело в том, что я в си вообще не соображаю, мне ближе паскаль, можно пожалуйста подробнее?

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

acidspark 14-12-2011 20:52 1815330

Я подправил через указатели: Но я там понимаю параметр 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 1815519

вроде так

Код:

#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 1816152

я сделал хитрее немного:

Код:

#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 1816369

Цитата:

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

процедура - это передача параметров по ссылке и оно в c++ есть


Время: 08:52.

Время: 08:52.
© OSzone.net 2001-