Перемножение полиномов

Автор: Пользователь скрыл имя, 28 Января 2011 в 23:37, лабораторная работа

Краткое описание

1. Цель работы:
Написать программу для умножения двух полиномов произвольного размера.

Файлы: 1 файл

ПрограммированиеPolinom.docx

— 27.95 Кб (Скачать)
 

ГУАП

КАФЕДРА № 

ОТЧЕТ  
ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

доц.,к.т.н.       А.С. Слюсаренко
должность, уч. степень, звание   подпись, дата   инициалы, фамилия
 
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №3

Умножение полиномов.

по  курсу: Программирование на языках высокого уровня

 
 

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. 1963       С.А. Дементьев
      подпись, дата   инициалы, фамилия
 

Санкт-Петербург 
2010

  1. Цель работы:

Написать программу  для умножения двух полиномов  произвольного размера.

  1. Алгоритм умножения двух полиномов:

Полиномы должен быть вида Pm(x)=amxm+…+a0

Далее строится временная матрица ctmp,где ctmp[i][j]=a[i]*b[j]

Далее из ctmp строится результирующий полином c,где c[k]=c[k]+a[i][j] и i+j=k 

 

2.1 Блок-схема алгоритма умножения полиномов и нахождение его в точке.

 

2.1.1 Блок-схема подпрограммы Ввод. 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

2.1.2 Блок-схема подпрограммы В точке х.

 

  1. Текст программы  на языке С:
 

#include <stdio.h>

#include <stdlib.h>

#include <conio.h> 

void vivodom(int im,float *a)

{

      for (int i=im;i>=0;i--)

            printf("%0.1f*x^%d  ",*(a+i),i);

      printf("\n");

} 

void vvodom(int im,float *a)

{

      for (int i=im;i>=0;i--)

      {

            printf("pri x^%d:",i);scanf("%f",&*(a+i));

      }

} 

float findx(float *c,float x,int l)

{

      float *tmp;

      tmp=(float*)calloc(l+1,sizeof(float));

      *(tmp+0)=*(c+0);

      for(int i=1;i<=l;i++)

      {

            *(tmp+i)=*(c+i)*pow(x,i);

            *(tmp+i)+=*(tmp+i-1);

      }

      return *(tmp+l);

      free(tmp);

} 

int main()

{

      int i,j,m,n,k;

      float *a,*b,*c,*ctmp;

      printf("Polinomy vvodiatsya vida Pn(x)=an*x^n+...+a1*x+a0 !!!\n");

      printf("Vvedite razmernost' Pm(x):");scanf("%d",&m);

      printf("Vvedite razmernost' Pn(x):");scanf("%d",&n); 

      a=(float*)calloc(m+1,sizeof(float));

      b=(float*)calloc(n+1,sizeof(float));

      c=(float*)calloc(m+n+1,sizeof(float));

      ctmp=(float*)calloc((m+1)*(n+1),sizeof(float)); 

      printf("--------------------------------------------\n"); 

      printf("Vvedite koeficenty pri \"x\" dlia P%d(x)\n",m);

      vvodom(m,a);

      printf("Vvedite koeficenty pri \"x\" dlia P%d(x)\n",n);

      vvodom(n,b); 

      printf("----------------------------------------------------\n"); 

      for (i=0;i<=m;i++)

            for (j=0;j<=n;j++)

                  *(ctmp+i*(n+1)+j)=(*(a+i))*(*(b+j)); 

      for (i=0;i<=m;i++)

            for (j=0;j<=n;j++)

            for (k=0;k<=m+n;k++)

            if(i+j==k)

                  *(c+k)+= *(ctmp+i*(n+1)+j);

      vivodom(m,a);

      vivodom(n,b);

      vivodom(m+n,c); 

      printf("\n------------------------------------------------------\n\tNahozhdenie v tochke\n");

      printf("--------------------------------------------------------\n");

      printf("Vvedyte X:");scanf("%f",&x);

      printf("Otvet:%0.2f\n", findx(c,x,m+n)); 

      system("pause");

      free(a);

      free(b);

      free(c);

      free(ctmp);

      return 0;

      }

Информация о работе Перемножение полиномов