2017-09-23 22 views
0

多項式は -ファイルから多項式の多項式読み込みの度合いを見つける方法は?

578.9x^45+564x^3+23x+1 

のフォーマット私はそれを文字列として宣言し、新しい文字列内の次の「^」の要素を格納しようとしています。それから私はそれを比較し、その文字列の中で最大の要素を見つけました。しかし、私は度が9より大きいときに同じことをする方法を見つけることができません。また、サイズが多項式の次数になる浮動小数点値の1次元配列を宣言しなければなりません。だから私はintに文字列である度を格納する必要があります。

'q'をintに変換する際に問題があります。

#include <stdio.h> 
#include <stdlib.h> 
#include<string.h> 
int main() 
{ 
    char f[1000]; 
    FILE *input=fopen("input.txt","r"); 
    fgets(f,1000,input); 
    printf("%s\n",f); 
    char a[400],d[10],n; 
    int i,j,k,m,l; 
    m=strlen(f); 
    //printf("%d\n",m); 
    if(f[0]== '-') 
    { 
     for(k=0;k<10;k++) 
     { 
     for(i=0;i<m;i++) 
     { 
      if(f[i]=='x' && f[i+1]=='^') 
      { 
       d[k]=f[i+2]; 
       k=k+1; 
       //break; 
      } 
     } 
     } 
    } 
    l=strlen(d); 
    char q; 
    //printf("%d\n",l); 
    for(i=1;i<l;i++) 
    { 
     q=d[0]; 
     if(d[0]<d[i]) 
     { 
      d[0]=d[i]; 
     } 
     q=d[0]; 
    } 
    printf("%c\n",q); 
printf("%s\n",d); 


    return 0; 
} 
+0

ここにあなたのコードを投稿してください。私たちはあなたの家事をするためにここにいるわけではありません。 – zappy

+0

数字である限り、なぜコピーしないのですか? – Yunnosch

+0

実際、私はそれをして、私は学位を手に入れました。しかし、それはchar型で、整数型に変換する方法はわかりません。 – Vikash

答えて

0

char文字列の代わりに数値文字列を使用して入力できます。 ^(xと言う)のascii値を見つけて、その要素をその隣に保存し続けます。 9より大きい要素の場合、2つの可能性しかなく、+演算子または - 演算子が存在する可能性があります。 ASCIIのコード「+」または「 - 」に達するまで、一時変数にxの後の値を保存し続けます。

temp=0; 
while(not reached '+' or '-') 
{ 
    temp = arr[k] + temp*10; 
    k++; 
} 

ここで、tempをリストに保存すると、簡単に並べ替えることができます。

0

多項式の次数を求めるには、多項式(基数が0ではない)の中で最大の指数を見つけるだけです。

これは、この種の文字列にのみ興味があることを意味します。[number]x^[number]ここで、[number]は小数点以下桁で、正または負です。このような文字列を探す方法はたくさんありますが、私は効率的であることを賢明にしようとはしません。したがって、私は怠惰な文字列を選択します。文字列のオフセットごとにsscanfを使用しています。仕事。私はエラーチェックもしません。

#include <float.h> 
#include <stdlib.h> 
#include <stdio.h> 

#define INPUT_FILE_PATH "input.txt" 

static char *readAllFile(const char *path, const char *mode, size_t *len) { 
    char *s = NULL; 
    FILE *f = fopen(path, mode); 
    fseek(f, 0, SEEK_END); 
    size_t fsize = ftell(f); 
    rewind(f); 
    s = malloc(fsize); 
    fread(s, 1, fsize, f); 
    fclose(f); 
    if (len != NULL) *len = fsize; 
    return s; 
} 

int main(void) { 
    size_t len; 
    char *s = readAllFile(INPUT_FILE_PATH, "r", &len); 
    float maxDegree = FLT_MIN; 
    for (size_t i = 0; i < len; ++i) { 
     float base, degree; 
     if (sscanf(s + i, "%fx^%f", &base, &degree) == 2) { 
      if (base != 0 && degree > maxDegree) maxDegree = degree; 
     } 
    } 
    printf("%f\n", maxDegree); 
    free(s); 
} 

いくつかのテスト:

  • 578.9x^45+564x^3+23x+1 =>45
  • 321.4x^2+0.0x^235-4+16x^3 =>3
  • 1.654x^-15+65x^-3-2x^2 =>2
関連する問題