Новичок
Профиль
Группа: Участник
Сообщений: 20
Регистрация: 25.12.2008
Репутация: нет Всего: нет
|
Код | MAIN.C #include <stdio.h> #include <conio.h>
void main(){ void Slojenie(float *k1,int n1,float *k2,int n2,float *k3); void conv(char *p); void print_polynom(float *k,int n); int stepen(char *p); void string_masiv(char *p,float *k);
char p1[150],p2[150]; int n1,n2,n3; int i; float *k1,*k2,*k3; do{ clrscr(); printf("введите первый полином:\n"); gets(p1); //ввод строки conv(p1); //удаление лишних символов n1=stepen(p1); k1=new float[n1+1]; for(i=0;i<n1+1;i++)k1[i]=0; //обнуление string_masiv(p1,k1); //выделяем массив коэффициента1 printf("введите второй полином:\n"); gets(p2); conv(p2); n2=stepen(p2); k2=new float[n2+1]; for(i=0;i<n2+1;i++)k2[i]=0; string_masiv(p2,k2); print_polynom(k1,n1); printf("+"); print_polynom(k2,n2); printf("="); n3=(n1>n2?n1:n2); k3=new float[n3+1]; Slojenie(k1,n1+1,k2,n2+1,k3); print_polynom(k3,n3); printf("\n\n еще раз? [y/n]? "); }while(getche()!='n'); clrscr(); }
|
Код | CONV.C #include <string.h> void conv(char *p){ // удаление лишнмх символов
char ds[]="0123456789.+-x^"; // допустимые символы int i,j; for(i=0;p[i]!=0;) if(strchr(ds,p[i])!=NULL) //i-символа нет среди допустимых i++; else //i-символ есть for(j=i;p[j]!=0;j++)p[j]=p[j+1]; //сдвиг символов влево }
|
Код | PRI_POL.C #include <string.h> #include <stdio.h> #include <math.h> void print_polynom(float*k,int n){ //Печатает полином n-ой степени, коэффициенты - в массиве k int i, pr=0; printf("\n"); for(i=0;i<n+1;i++) { if(fabs(k[i])>1E-5) { pr=1; if(i==0)printf("%.2f",k[i]); else if(fabs(k[i]-1)<1E-5) if(i==1) printf("x"); else printf("x^%d",i); else if(fabs(k[i]+1)<1E-5) if(i==1) printf("-x"); else printf("-x^%d",i); else if(i==1) printf("%+.2fx",k[i]); else printf("%+.2fx^%d",k[i],i); } } if(pr==0)printf("0"); printf("\n"); }
|
Код | STEPEN.C #include <stdio.h> #include <string.h> int stepen(char *p){ // возвращает степень многочлена, записанного в символьном виде int n=0,i,tn; for(i=0;p[i]!=0;i++) { if(p[i]=='x'&&p[i+1]=='^') { sscanf(p+i+2,"%d",&tn); //вводится переменная tn из строки p начиная с сим ном i+2
if(tn>n)n=tn; } } if(n==0 && strchr(p,'x')!=NULL)n=1; //ищем символ x в строке p, возвращаем указатель на найденный символ если не нашёл возвр NULL return n; }
|
Код | STR_MAS.C #include <stdio.h> void string_masiv(char *p,float *k){ //вычисляет массив коэффициентов многочлена, записанного в символьном виде int i,tn; float tk; for(i=0;p[i]!=0;) {
if(p[i]=='x' || p[i+1]=='x'&&(p[i]=='-'||p[i]=='-')) // если коэффициент пропущен (1 или -1) if(p[i]=='x'||p[i]=='+') tk=1; else tk=-1; else //если коэффициент имеется sscanf(p+i,"%f",&tk);
if(p[i]!='x') i++;
for(;p[i]!='x'&&p[i]!='+' &&p[i]!='+' &&p[i]!=0;i++); //ищем конец коэффициента if(p[i]=='+'||p[i]=='-'||p[i]==0)tn=0; //если коэффициента нет х, степень =0 else { if(p[i+1]=='^')sscanf(p+i+2,"%d",&tn); //если за х символ^, вводим степень else tn=1; //Иначе степень =1 for(;p[i]!='+' &&p[i]!='-' &&p[i]!=0;i++); //Ищем начало следующего коэффициента } k[tn]+=tk; //коэффициент помещаем в массив коэффициента } }
|
Код | SLOJENIE.C void Slojenie(float *k1,int n1,float *k2,int n2,float *k3){ //Складываем первый полином (K1) со вторым полиномом(K2) //результат помещаем в полином К3 int i; for(i=0;i<n1 && i<n2;i++)k3[i]=k1[i]+k2[i]; if(i<n1) for(;i<n1;i++)k3[i]=k1[i]; if(i<n2) for(;i<n2;i++)k3[i]=k2[i]; }
|
Всем привет. почините пожалуйста программу т.к. работает неправильно :( З.Ы. как убрать нули когда складываешь? "7.00 + 5.00 = 12.00
|