Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться, Прога на С 
:(
    Опции темы
zarogon
Дата 27.12.2005, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.11.2005
Где: Украина, Киев

Репутация: нет
Всего: нет



Вот есть готовая прога и мне нужно что бы объяснили пошагово каждое действие и сделали похожую если не трудно (задание лежит в документе ворд).
Само задание готовой проги вот:
1. Сделать итеративную функцию вычисления значения суммы ряда.
2. Сделать рекурсивную функцию вычисления суммы ряда.
3. Сравнить результаты Ваших вычислений с результатом работы стандартной функции языка программирования.
4. Построить график функции на определенном выбранном промежутке (изобразить одним цветом график функции, точки для которого вычисляются “своей” функций, другим – график, точки для которого вычисляются стандартной функцией). Для построения графика сделать подпрограмму, параметром, которой будет функция вычисления.
5. Функция лежит тоже в ворде под номером 14.

А вот код:
Код

#include <stdio.h>
#include <math.h>
#include <graphics.h>

float fy (float x, float a, int b)
{
  return atan(x);
}

float fy_iter (float x,float eps, int b)
{
  float tmp,sum;
  int i,znac;

  tmp = fy(x, eps, b);

  if (x>-1) sum = 3.14/2;
  else sum = -3.14/2;
  i=1;
  znac = -1;
  while (fabs(sum-tmp)>eps)
  {
    sum+=1/(pow(x,i)*i)*znac;
    i+=2;
    znac=-znac;
  }
return(sum);
}

float fy_rec_tmp (float x, float eps, int i)
{
  float tmp;
  tmp = 1/(pow(x,i)*i);
  if (fabs(tmp)>eps) return tmp - fy_rec_tmp(x,eps,i+2);
  else return tmp;
}

float fy_rec (float x, float eps, int i)
{
  if (x>-1)return (3.14/2 - fy_rec_tmp(x,eps,i));
  else return (-3.14/2-fy_rec_tmp(x,eps,i));
}




void MinMax (int* min, int* max, int n, int xn, int xk)
{
  int i,tmp;
  float dx;
  dx = (float)abs(xk-xn)/n;
  *min = *max = fy(xn+dx, i, tmp);

  for (i=2; i<=n; i++)
  {
    tmp = fy(xn+dx*i, dx,n);
    if (*min>tmp) *min = tmp;
    else
      if (*max<tmp) *max = tmp;
  }
}

void init (int* x0, int* y0, int* ed_izm, int xn, int xk )
{
  int xm,ym,gd,gm, ed_izmX, min, max;

  *ed_izm = 50;
  gd=DETECT;
  initgraph(&gd,&gm,"c:\\studprog\\tc\\bgi");
  setcolor(2);
  xm=getmaxx();
  ym=getmaxy();

  MinMax(&min,&max,50, xn, xk);
  if (abs(max)>abs(min)) *ed_izm = ym/abs(max*2);
  else *ed_izm = ym/abs(min*2);

  if (abs(xk)>abs(xn)) ed_izmX = xm/abs(xk*2);
  else ed_izmX = xm/abs(xn*2);

  if (ed_izmX<*ed_izm) *ed_izm = ed_izmX;

  *y0=(int) (ym/2);
  *x0=(int) (xm/2);

  line(0,*y0,xm-7,*y0);
  line (*x0,0,*x0,ym);
  outtextxy (*x0-3,0,"^");
  outtextxy (xm-7,*y0-3,">");
  setcolor(12);

  outtextxy (*x0-10,*y0-*ed_izm,"1-");
  outtextxy (*x0+*ed_izm,*y0-3,"|");
  outtextxy (*x0+*ed_izm,*y0+9,"1");
  setcolor(12);
  line (*x0+(*ed_izm),0,*x0+(*ed_izm),ym);
  line (*x0-(*ed_izm),0,*x0-(*ed_izm),ym);
}

void ShowGraphic (float(*fn)(float, float, int),int n, int x0, int y0, float eps, int ed_izm, int color, int xn, int xk)
{
  float d,x,y;
  int x1,x2,y1,y2,i;
  d=(float)(xk-xn)/n;
  x=xn;
 setcolor(color);
 if (n<30)
 while (xk>=x)
 {
  i=1;
  y=(*fn)(x,eps,i);

  x2=(int)(x*ed_izm);
  y2=(int)(y*ed_izm);
  putpixel (x0+x2,y0-y2,color);
  circle (x0+x2,y0-y2,2);
  if (x>xn)
  line (x0+x1,y0-y1,x0+x2,y0-y2);
  x1=x2;
  y1=y2;
  x=x+d;
}
else
 while (xk>=x)
 {
  y=fy(x,x,1);
  x2=(int)(x*ed_izm);
  y2=(int)(y*ed_izm);
  putpixel (x0+x2,y0-y2,color);
  if (x>xn)
  line (x0+x1,y0-y1,x0+x2,y0-y2);
  x1=x2;
  y1=y2;
  x=x+d;
}
}

main()

 {
  float eps;
  char res;
  int x0,y0,x1,y1,x2,y2,n, ed_izm, xn, xk;
  do
  {
    clrscr();
    printf ("Vvedite n   ");
    scanf ("%d",&n);
    printf ("Vvedite epsilon   ");
    scanf ("%f",&eps);

    printf ("Vvedite xn   ");
    scanf ("%d",&xn);
    printf ("Vvedite xk   ");
    scanf ("%d",&xk);


    if (((xn>1)&&(xk>1)) || ((xn<-1) && (xk<-1)))
    {

      init(&x0,&y0, &ed_izm, xn,xk);

      ShowGraphic(fy, n, x0, y0, eps, ed_izm,15, xn, xk);
      ShowGraphic(fy_iter, n, x0, y0, eps, ed_izm,13, xn, xk);
      ShowGraphic(fy_rec, n, x0, y0, eps, ed_izm,14, xn, xk);
      getch();
      restorecrtmode ();
    }
    else printf ("Error!!!");
    printf ("Press Y to continue or any key to exit");
    res = getch();
  }
  while (res == 'y');
}



ЗАРАНЕЕ БЛАГОДАРЕН ВСЕМ КТО ПОМОЖЕТ

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  Zadanie.doc 20,00 Kb
PM MAIL ICQ   Вверх
zarogon
Дата 30.12.2005, 05:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 4.11.2005
Где: Украина, Киев

Репутация: нет
Всего: нет



Я очень сильно извиняюсь за нарушение, но пожалуйста глянти, мне надо к сесси на 10 число.


Заранее благодарен.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0396 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.