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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2012, 15:35   #1
Cuda
Новичок
Джуниор
 
Регистрация: 30.05.2012
Сообщений: 3
По умолчанию Создать класс

Здравствуйте. Имеется работающий код программы(деление многочленов). Подскажите пожалуйста как этот код перевести в класс?
Код:
#include <stdio.h>
#include <math.h>
void PrintPolynom(float *p, int n)
{
  for(int i=0;i<n;i++)
    printf("%+f x^%d",*(p+i),n-i-1);
  printf("\n");
}
main()
{
int N,M;
float *P;
float *Q;
printf("vvedite N");//степень многочлена P(x)
scanf("%d",&N);
P=new float [N];
printf("vvedite M");//степень многочлена Q(x)
scanf("%d",&M);
Q=new float [M];
float S[N-M+1];
for ( int i = 0; i < N; i ++ )
{
printf("Vvedite P[%d]> ", i );
scanf ("%f", &P[i]);//ввод P[i]
}
for ( int i = 0; i < M; i ++)
{
printf("Vvedite Q[%d]> ", i );
scanf ("%f", &Q[i]); // ввод Q[i]
}
  // выводим многочлены
  printf("P(x):\n");
  PrintPolynom(P,N);
  printf("Q(x):\n");
  PrintPolynom(Q,M);
  // деление
  for(int i=0;i<N-M+1;i++)
  {
    S[i]=P[i]/Q[0];
    for(int j=0;j<M;j++)
      P[i+j]-=S[i]*Q[j];
  }
  // выводим результат
  printf("\nresult:\n");
  PrintPolynom(S,N-M+1);
  // остаток
  printf("ostatok:\n");
  PrintPolynom(P+(N-M+1),M-1);
}
Cuda вне форума Ответить с цитированием
Старый 30.05.2012, 17:40   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Реализуйте класс многочлена:
Код:
class Polynom
{
public:
//Конструкторы и деструкторы, вариант максимум, для простоты можно обойтись только вторым конструктором и деструктором
Polynom();
Polynom(double* aa, int nn);
Polynom(const Polynom& P);
~Polynom();

//Собственно функция деления
Polynom operator/(const Polynom& P);

//Дружественные функции ввода-вывода через стандартные потоки
friend std::ostream& operator<<(std::ostream& out, const Polynom& P);
friend std::istream& operator>>(const std::istream& in, Polynom& P);
private:
double* a;
int n;
};

std::ostream& operator<<(std::ostream& out, const Polynom& P);
std::istream& operator>>(const std::istream& in), Polynom& P;
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 30.05.2012, 17:50   #3
Cuda
Новичок
Джуниор
 
Регистрация: 30.05.2012
Сообщений: 3
По умолчанию

Гром, спасибо большое, но я вообще классы не знаю. поэтому конструкторы и деструкторы не понимаю что это

Последний раз редактировалось Cuda; 30.05.2012 в 17:54.
Cuda вне форума Ответить с цитированием
Старый 30.05.2012, 20:10   #4
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
но я вообще классы не знаю
так может стоит узнать, прежде чем их писать?
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 30.05.2012, 23:54   #5
Cuda
Новичок
Джуниор
 
Регистрация: 30.05.2012
Сообщений: 3
По умолчанию

вот работающий код программы(деление многочленов)
Код:
#include <stdio.h>
#include <math.h>
void PrintPolynom(float *p, int n)
{
  for(int i=0;i<n;i++)
    printf("%+f x^%d",*(p+i),n-i-1);
  printf("\n");
}
main()
{
int N,M;
float *P;
float *Q;
printf("vvedite N");//степень многочлена P(x)
scanf("%d",&N);
P=new float [N];
printf("vvedite M");//степень многочлена Q(x)
scanf("%d",&M);
Q=new float [M];
float S[N-M+1];
for ( int i = 0; i < N; i ++ )
{
printf("Vvedite P[%d]> ", i );
scanf ("%f", &P[i]);//ввод P[i]
}
for ( int i = 0; i < M; i ++)
{
printf("Vvedite Q[%d]> ", i );
scanf ("%f", &Q[i]); // ввод Q[i]
}
  // выводим многочлены
  printf("P(x):\n");
  PrintPolynom(P,N);
  printf("Q(x):\n");
  PrintPolynom(Q,M);
  // деление
  for(int i=0;i<N-M+1;i++)
  {
    S[i]=P[i]/Q[0];
    for(int j=0;j<M;j++)
      P[i+j]-=S[i]*Q[j];
  }
  // выводим результат
  printf("\nresult:\n");
  PrintPolynom(S,N-M+1);
  // остаток
  printf("ostatok:\n");
  PrintPolynom(P+(N-M+1),M-1);
а вот этот же код только написанный вроде как в классе(без разницы).
Код:
#include <stdio.h>
#include <math.h>
class F
{
public:
void PrintPolynom(float *p, int n);
void vvod_N();
void vvod_M();
void print();
void vvod_P();
void vvod_Q();
void del_pol();
int N,M, i,j;
float *P;
float *Q;
};
void F:: PrintPolynom(float *p, int n)
{
  for( i=0;i<n;i++)
    printf("%+f x^%d",*(p+i),n-i-1);
  printf("\n");
}
void F:: vvod_N()
{
printf("vvedite N");//степень многочлена P(x)
scanf("%d",&N);
}
void F:: vvod_M()
{
printf("vvedite M");//степень многочлена Q(x)
scanf("%d",&M);
}
void F::vvod_P()
{
for ( i = 0; i < N; i ++ )
{
printf("Vvedite P[%d]> ", i );
scanf ("%f", &P[i]);//ввод P[i]
}
}
void F::vvod_Q()
{
for ( i = 0; i < M; i ++)
{
printf("Vvedite Q[%d]> ", i );
scanf ("%f", &Q[i]); // ввод Q[i]
}
}
 void F::del_pol()
 {
     float S[N-M+1];
 // деление
  for( i=0;i<N-M+1;i++)
  {
    S[i]=P[i]/Q[0];
    for( j=0;j<M;j++)
      P[i+j]-=S[i]*Q[j];
  }
 }
 void F::print()
 {
     float S[N-M+1];
      // выводим результат
  printf("\nresult:\n");
  PrintPolynom(S,N-M+1);
  // остаток
  printf("ostatok:\n");
  PrintPolynom(P+(N-M+1),M-1);
 }
  main()
  {
  F f;
  f.vvod_N();
  f.P=new float [f.N];
  f.vvod_M();
  f.Q=new float [f.M];
  f.vvod_P();
  f.vvod_Q();
   // выводим многочлены
  printf("P(x):\n");
  f.PrintPolynom(f.P,f.N);
  printf("Q(x):\n");
  f.PrintPolynom(f.Q,f.M);
  f.del_pol();
  f.print();
  }
в первом коде здесь получается и результат верный и остаток:
Код:
// выводим результат
  printf("\nresult:\n");
  PrintPolynom(S,N-M+1);
  // остаток
  printf("ostatok:\n");
  PrintPolynom(P+(N-M+1),M-1);
а во втором коде(в виде класа) остаток считается верно но результат почему то обнуляется-показывает нули умноженные на x^n. подскажите пожалуйста где здесь может быть ошибка.
Cuda вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cоздать класс жидкость. определить конструкторы деструкторы и функцию печати. создать публик производный класс. (С++) Динар Габбасов Помощь студентам 0 28.05.2012 18:44
создать класс на c# michal3003 Помощь студентам 1 15.12.2011 19:22
Создать класс Date ГлавБухОЙ Помощь студентам 5 13.06.2011 11:41
C++ создать класс Вектор Drakowa Помощь студентам 2 29.03.2011 17:06
Создать Класс Heat JNN Общие вопросы C/C++ 0 04.06.2009 00:53