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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2011, 20:14   #1
Diman2225
Новичок
Джуниор
 
Регистрация: 30.11.2011
Сообщений: 2
По умолчанию Динамический массив (Язык С)

ОС: Windows
Компилятор: Dev,Turbo C
Задача: Вычислить и напечатать таблицу значений функции
и ее максимальное по модулю значение для x [a, b) при дискретном увеличении x с шагом h. Вычисление f(x) для одного значения аргумента определить в отдельной функции.
Сама функция прикреплена. Так же прикрепил что выдают оба компилятора. В Dev ошибок вроде не находит,но не запускается. В Turbo C вроде запустилась, но дальше работать не хочет,тупо зависает.

Код:
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define L 300
//Modul
float Modul(float y)
{
 if(y>0)
 {
  return y;
 }
 else
 {
  return (-y);
 }
}
//Stepen
float Stepen (float x, float y)
{if(x==0) 
 {
  return (0);
 }
 else
 {
  if(y==0)
  { 
   return (1);
  }
  else 
  {
   if(y==1) 
   {
    return (x);
   }
   else 
   {
    return (x*Stepen(x, y-1));
   }
  }
 }
}
//Koren
float Koren(float x)
{
 float eps=1e-4, y=0, z=1;
 while(Modul(z)>eps)
 {
  y+=z;
  z=(x/y-y)/2.;
 }
 return y;
}
//Faktorial
float Faktorial (float x)
{
 if(x<0) 
 {
 printf("\nU otritsatelnykh chisel ne sushchestvuet faktoriala! Press any key to exit");
 getch();
 exit(0); 
 }
 else 
 {
  if((x==0)||(x==1))
  {
   return 1;
  } 
  else 
  {
   return (x*Faktorial(x-1));
  }
 }
}
//Sinus
float Sinus (float x)
{
 float i, n, eps=1e-6, z=1, y=0;
 for(n=1; Modul(z)>eps; n++)
 {
  i=2*n-1;
  z=Stepen(-1, n+1)*Stepen(x, i)/Faktorial(i);
  y+=z; 
 }
 return y;
}
//Cosinus
float Kosinus (float x)
{
 float i, n, eps=1e-6, z=1, y=0;
 for(n=0; Modul(z)>eps; n++)
 {
  i=2*n;
  z=Stepen(-1, n)*(Stepen(x, i)/Faktorial(i));
  y+=z; 
 }
 return y;
}
//Tangens
float Tangens (float x)
{
 return (Sinus(x)/Kosinus(x));
}
//Arctangens
float Arctan(float x)
{
  float i, n=1, eps=1e-6, z=1, y=0;
  for(n=0;Modul(z)>eps;n++)
  {
    i=2*n+1;
    z=Stepen((-1), n)*(Stepen(x, i)/i);
    y+=z; 
  }
  return y;
}
float f1(float x)
{
return (Stepen(x, 2)*Koren(Modul(x)));
}
int main()
{
  int i; 
  float a, b, h, *Arr1, *Arr2, *Arr3, x, max,razmer;	 /* a-nachalo
			    b-konec
			    h-shag
			    Arr-ukazatel' na massiv */

  printf("Nizhniy Novgorod Technical University\nStudy work number 3.\nPerformed by student Sdobnov Dmitriy\nProgramm Laba4\nPress any key to continue\n");
  system("cls");
  getch();
  printf("Vvedite interval dlya nahozhdeniya X i shag: ");
  if(scanf("%f %f %f", &a, &b, &h)==1)  //Proveryaem chto vvodyat chisla!
  { printf("Dostupen vvod tolko chisel!\n"); exit(0);}  	  
  if(b<a) //Proverka pravilnosti vvoda intervala
  { printf("A ne mozhet byt' bolshe B!!\n"); exit(0);} 
  if(h>(b-a)) //Proverka shaga
  {printf("Shag slishkom bolshoy!\n"); exit(0);}
  razmer=(b-a)/h;
  //Pervaya funkciya
  Arr1=(float *) malloc(razmer * sizeof(float));
    if(Arr1==NULL)
  {
              printf("Oshibka vydeleniya pamyati!\a");
              getchar();
              exit(0);
  }    
  for(i=0, x=a;i<razmer;i++, x+=h)
    *(Arr1+i)=f1(x); 
  
  //Vtoraya funkciya
  Arr2=(float *) malloc(razmer * sizeof(float));
    if(Arr2==NULL)
  {
              printf("Oshibka vydeleniya pamyati!\a");
              getchar();
              exit(0);
  }    
  for(i=0, x=a;i<razmer;i++, x+=h)
    *(Arr2+i)=Stepen(x, 2)*Arctan(2*x+1);
  
  //Tretya funkciya
  Arr3=(float *) malloc(razmer * sizeof(float));
    if(Arr3==NULL)
  {
              printf("Oshibka vydeleniya pamyati!\a");
              getchar();
              exit(0);
  }    
  for(i=0, x=a;i<razmer;i++, x+=h)
    *(Arr3+i)=Sinus(Kosinus(Modul(x)));  
  
  max=*(Arr1);
  for(i=0, x=a;i<razmer;i++, x+=h)
  {
    if(*(Arr1+i)>max) max=*(Arr1+i);
    if(*(Arr2+i)>max) max=*(Arr2+i);
    if(*(Arr3+i)>max) max=*(Arr3+i);
  }

printf("\t\tTablica znacheniy funkcii s sahgom %f:\n", h);
 
printf("________________________________________________________________________\n");
printf("|   x   | f(x)=x^2+?|x| |  f(x)=x^2*arctg(2x+1)  |  f(x)=sin(cos(|x|)) |\n");
 for(i=0, x=a;i<razmer;i++, x+=h)
  {
    printf("|%6.2f |   %-11.6f |      %-17.6f |      %-14.6f |\n", x, *(Arr1+i), *(Arr2+i), *(Arr3+i));
  }
printf("************************************************************************\n");


printf("\n\tMax znachenie x=%f\n", max);



 
  free(Arr1);
  free(Arr2);
  free(Arr3);
  return 0;
}
Подскажите, пожалуйста, что не так?
Изображения
Тип файла: png function.png (2.7 Кб, 12 просмотров)
Тип файла: png Error(dev).png (5.3 Кб, 37 просмотров)
Тип файла: png Error(tur).png (1.7 Кб, 32 просмотров)
Diman2225 вне форума Ответить с цитированием
Старый 30.11.2011, 23:32   #2
Diman2225
Новичок
Джуниор
 
Регистрация: 30.11.2011
Сообщений: 2
По умолчанию

Немного исправил код:
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <cstdlib>
#define L 300
//Modul
float Modul(float y):confused:
{
 if(y>0)
 {
  return y;
 }
 else
 {
  return (-y);
 }
}
//Stepen
float Stepen (float x, float y)
{if(x==0) 
 {
  return (0);
 }
 else
 {
  if(y==0)
  { 
   return (1);
  }
  else 
  {
   if(y==1) 
   {
    return (x);
   }
   else 
   {
    return (x*Stepen(x, y-1));
   }
  }
 }
}
//Koren
float Koren(float x)
{
 float eps=1e-4, y=0, z=1;
 while(Modul(z)>eps)
 {
  y+=z;
  z=(x/y-y)/2.;
 }
 return y;
}
//Faktorial
float Faktorial (float x)
{
 if(x<0) 
 {
 printf("\nU otritsatelnykh chisel ne sushchestvuet faktoriala! Press any key to exit");
 getch();
 exit(0); 
 }
 else 
 {
  if((x==0)||(x==1))
  {
   return 1;
  } 
  else 
  {
   return (x*Faktorial(x-1));
  }
 }
}
//Sinus
float Sinus (float x)
{
 float i, n, eps=1e-6, z=1, y=0;
 for(n=1; Modul(z)>eps; n++)
 {
  i=2*n-1;
  z=Stepen(-1, n+1)*Stepen(x, i)/Faktorial(i);
  y+=z; 
 }
 return y;
}
//Cosinus
float Kosinus (float x)
{
 float i, n, eps=1e-6, z=1, y=0;
 for(n=0; Modul(z)>eps; n++)
 {
  i=2*n;
  z=Stepen(-1, n)*(Stepen(x, i)/Faktorial(i));
  y+=z; 
 }
 return y;
}
//Tangens
float Tangens (float x)
{
 return (Sinus(x)/Kosinus(x));
}
//Arctangens
float Arctan(float x)
{
  float i, n=1, eps=1e-6, z=1, y=0;
  for(n=0;Modul(z)>eps;n++)
  {
    i=2*n+1;
    z=Stepen((-1), n)*(Stepen(x, i)/i);
    y+=z; 
  }
  return y;
}
//pervaya funkciya
float f1(float x)
{
return (Stepen(x, 2)*Koren(Modul(x)));
}
int main()
{
  int i,razmer; 
  float a, b, h, *Arr1, *Arr2, *Arr3, x, max;
    int*calloc (size_t razmer);	 /* a-nachalo
			    b-konec
			    h-shag
			    Arr-ukazatel' na massiv */

  printf("Nizhniy Novgorod Technical University\nStudy work number 4.\nPerformed by student Sdobnov Dmitriy\nProgramm Laba4\nPress any key to continue\n");
  getch();
  system("cls");
  printf("Vvedite interval dlya nahozhdeniya X i shag: ");
  if(scanf("%f %f %f", &a, &b, &h)==1)  //Proveryaem chto vvodyat chisla!
  { printf("Dostupen vvod tolko chisel!\n"); exit(0);}  	  
  if(b<a) //Proverka pravilnosti vvoda intervala
  { printf("A ne mozhet byt' bolshe B!!\n"); exit(0);} 
  if(h>(b-a)) //Proverka shaga
  {printf("Shag slishkom bolshoy!\n"); exit(0);}
  razmer=((int)b-(int)a)/(int)h;

  //Pervaya funkciya
  Arr1=(float *) malloc(razmer*sizeof(float));
    if(Arr1==NULL)
  {
              printf("Oshibka vydeleniya pamyati!\a");
              getch();
              exit(0);
  }    
  for(i=0, x=a;i<razmer;i++, a+=h)
    *(Arr1+i)=f1(x); 
  
  //Vtoraya funkciya
  Arr2=(float *) malloc(razmer * sizeof(float));
    if(Arr2==NULL)
  {
              printf("Oshibka vydeleniya pamyati!\a");
              getch();
              exit(0);
  }    
  for(i=0, x=a;i<razmer;i++, x+=h)
    *(Arr2+i)=Stepen(x, 2)*Arctan(2*x+1);
  
  //Tretya funkciya
  Arr3=(float *) malloc(razmer * sizeof(float));
    if(Arr3==NULL)
  {
              printf("Oshibka vydeleniya pamyati!\a");
              getchar();
              exit(0);
  }    
  for(i=0, x=a;i<razmer;i++, x+=h)
    *(Arr3+i)=Sinus(Kosinus(Modul(x)));  
  
  max=*(Arr1);
  for(i=0, x=a;i<razmer;i++, x+=h)
  {
    if(*(Arr1+i)>max) max=*(Arr1+i);
    if(*(Arr2+i)>max) max=*(Arr2+i);
    if(*(Arr3+i)>max) max=*(Arr3+i);
  }

printf("\t\tTablica znacheniy funkcii s sahgom %f:\n", h);
 
printf("________________________________________________________________________\n");
printf("|   x   | f(x)=x^2+?|x| |  f(x)=x^2*arctg(2x+1)  |  f(x)=sin(cos(|x|)) |\n");
 for(i=0, x=a;i<razmer;i++, x+=h)
  {
    printf("|%6.2f |   %-11.6f |      %-17.6f |      %-14.6f |\n", x, *(Arr1+i), *(Arr2+i), *(Arr3+i));
  }
printf("************************************************************************\n");


printf("\n\tMax znachenie x=%f\n", max);



 
  free(Arr1);
  free(Arr2);
  free(Arr3);
  return 0;
}
Теперь в Дэве тоже самое что и турбо с,программа просто не работает дальше момента ввода данных.
Diman2225 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив - Нужно написать массив и распечатать на экран с конца в начало(язык С++) econ Помощь студентам 1 29.05.2011 22:02
Динамический массив, массив указателей alexalisa Паскаль, Turbo Pascal, PascalABC.NET 4 22.04.2011 21:33
Динамический массив - или всё таки не динамический? vedro-compota Общие вопросы C/C++ 30 10.12.2010 23:22
Динамический массив DEMUT Общие вопросы C/C++ 2 07.11.2010 21:10
Динамический массив Lemo Помощь студентам 5 16.09.2009 06:26