PythonからC言語に翻訳

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: PythonからC言語に翻訳

Re: PythonからC言語に翻訳

#5

by eee_eriko » 7年前

かずま様 すみません、データの添付方法がわからなかったので示すことができませんでした。

プログラムは理解した上での意見でした。
1行できていなかったデータは簡単に自分が書いたものを入力してやっていたのですが、
過去にPycharmでのプログラムで入出力したデータで試して見比べてみると、全く同じデータが出力されたので
プログラムに問題はないと確認しました!
自分で書いたことで何か問題があったのだと思います。
お手数をおかけして失礼いたしました。ありがとうございます。

Re: PythonからC言語に翻訳

#4

by かずま » 7年前

eee_eriko さんが書きました: ただ1行だけ、一致しているのに出力されない行があったんですけど、
それはプログラムというより、データの方に問題があると考えたほうがいいのでしょうか…
私にはそのデータが見えません。
データを示さずにデータの方に問題がある、と
考えるは、なぜですか? 私には理解できません。
プログラムのほうは理解されたのでしょうか?

Re: PythonからC言語に翻訳

#3

by eee_eriko » 7年前

かずま様 ありがとうございます!

x_allとy_allはそのあとの別の処理のためのものだったので、無視していただいて大丈夫でした!
失礼しました!

試しに25行あるデータ(手作業で確認できる量)で実行してみたら
だいたいは理想通りになりました!
ただ1行だけ、一致しているのに出力されない行があったんですけど、
それはプログラムというより、データの方に問題があると考えたほうがいいのでしょうか…

Re: PythonからC言語に翻訳

#2

by かずま » 7年前

x_all と y_all は何のためにあるんですか?
分からないので、その処理は省略しました。

コード:

#include <stdio.h>   // fopen, fclose, fgets, fprintf
#include <stdlib.h>  // free
#include <string.h>  // strdup, strtok, strcpy, strcmp

#define LINES_MAX 1000
#define WORDS_MAX 100
#define LINE_SIZE 1024

int main(void)
{
    FILE *fp;
    char buf[LINE_SIZE], *data1[LINES_MAX], *data2[LINES_MAX];
    int n1, n2, nw1, nw2, k;

    fp = fopen("in1.txt", "r");
    if (!fp) return 1;
    for (n1 = 0; n1 < LINES_MAX && fgets(buf, sizeof buf, fp); n1++)
        data1[n1] = strdup(buf);
    fclose(fp);

    fp = fopen("in2.txt", "r");
    if (!fp) return 2;
    for (n2 = 0; n2 < LINES_MAX && fgets(buf, sizeof buf, fp); n2++)
        data2[n2] = strdup(buf);
    fclose(fp);

    fp = fopen("out.txt", "w");
    if (!fp) return 3;

    for (int i = 0; i < n1; i++) {
        char *line1 = data1[i], *words[WORDS_MAX], *p;
        for (nw1 = 0; nw1 < WORDS_MAX && (p = strtok(line1, " \n")); line1 = NULL)
            words[nw1++] = p;
        if (nw1 != 3) continue;

        for (int j = 0; j < n2; j++) {
            char *line2 = strcpy(buf, data2[j]), *words2[WORDS_MAX];
            for (nw2 = 0; nw2 < WORDS_MAX && (p = strtok(line2, " \n")); line2 = NULL)
                words2[nw2++] = p;
            if (nw2 != 3) continue;

            for (k = 0; k < 3 && !strcmp(words[k], words2[k]); k++) ;
            if (k < 3) continue;
            fprintf(fp, "['%s', '%s', '%s']\n", words2[0], words2[1], words2[2]);
        }
    }
    fclose(fp);
    for (int i = 0; i < n1; i++) free(data1[i]);
    for (int i = 0; i < n2; i++) free(data2[i]);
    return 0;
}
行数や単語数の最大値を固定値にしています。
非標準関数の strdup を使用しています。
不都合はありますか?
x_all と y_all の処理も必要ですか?

PythonからC言語に翻訳

#1

by eee_eriko » 7年前

PyCharmによって書かれたPythonのプログラムを
Xcodeで動かすために、C言語に翻訳する必要があるので
どなたかわかる方いましたら教えていただきたいです。
以下がそのPythonのプログラムです。

プログラムの内容はシンプルです。
2つの文字列のデータを入力します。
データ1の1行目と、データ2の全ての行を見比べ一致すれば出力。
データ1の2行目と、データ2の全ての行を見比べ一致すれば出力。
これを繰り返しています。
PythonとC言語の関係がいまいちわかっていないので自力で翻訳することができません。
お願いします。

コード:

import matplotlib.pyplot as plt
coding = (encodingname)

f = open('入力ファイル名1')
data1 = f.readlines()
f.close()
t = open('入力ファイル名2')
data2 = t.readlines()
t.close()
x_all = []
y_all = []
w = open('出力ファイル名' , 'w')

for line1 in data1:
   words = line1.split()
     for line2 in data2:
          words2 = line2.split()
          if(words==words2):
                if(len(words2)==3):
                     x_all.append(words2[0])
                     y_all.append(words2[1])
                     w.write(str(words2)+"\n")


ページトップ