見出し画像

『写経』のための「般若C経」を思いついた

おつかれさまです。Y研究員です。般若心経の本を読んで勉強しています。

そこで、プログラムの『写経』に最適なサンプルコードを作れるのではないかと思いつきました。何度も繰り返して書いて完全に記憶すれば、そのままプログラムが書けるようになるイメージです。言語を構成する型や構文を幅広く取り入れて、必要な最低知識を詰め込めれば良いと思います。

『1行記憶写経』から着想を得て262行にまとめれば、般若心経の漢字の個数と同じにできます。また「無」がテーマなので、C言語のヌルポインタやヌル文字も上手く取り入れたいです。K研究員からはvoidも「無」の概念に入るのではないかと助言を得ました。確かに何も返さないのは「無」なので、void関数も採用したいと思います。

話題沸騰のChatGPTに書かせるのが良いだろう、というアドバイスも得たので実際に書いてもらいました。

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

#define MAX_PRODUCTS 100

typedef struct product {
    char name[50];
    int stock;
    float price;
} product;

void update_product(product *p, int stock, float price) {
    p->stock = stock;
    p->price = price;
}

int main() {
    FILE *fp;
    product *products = NULL;
    int num_products = 0, i, new_stock;
    float new_price;
    char file_name[50], search_name[50];

    printf("Enter the name of the file containing product data: ");
    scanf("%s", file_name);

    fp = fopen(file_name, "r");
    if (fp == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    // Read the number of products from the file
    fscanf(fp, "%d", &num_products);
    if (num_products > MAX_PRODUCTS) {
        printf("Error: too many products.\n");
        fclose(fp);
        return 1;
    }

    // Allocate memory for the products array
    products = (product *)malloc(num_products * sizeof(product));
    if (products == NULL) {
        printf("Error allocating memory.\n");
        fclose(fp);
        return 1;
    }

    // Read the product data from the file
    for (i = 0; i < num_products; i++) {
        fscanf(fp, "%s %d %f", products[i].name, &products[i].stock, &products[i].price);
    }

    fclose(fp);

    // Print the product data
    printf("Name\tStock\tPrice\n");
    for (i = 0; i < num_products; i++) {
        printf("%s\t%d\t%.2f\n", products[i].name, products[i].stock, products[i].price);
    }

    // Search for a product by name
    printf("\nEnter the name of the product to search for: ");
    scanf("%s", search_name);
    for (i = 0; i < num_products; i++) {
        if (strcmp(products[i].name, search_name) == 0) {
            printf("\nProduct found!\n");
            printf("Name: %s\n", products[i].name);
            printf("Stock: %d\n", products[i].stock);
            printf("Price: %.2f\n", products[i].price);
            printf("Enter new stock and price: ");
            scanf("%d %f", &new_stock, &new_price);
            update_product(&products[i], new_stock, new_price);
            printf("\nProduct updated!\n");
            printf("Name: %s\n", products[i].name);
            printf("Stock: %d\n", products[i].stock);
            printf("Price: %.2f\n", products[i].price);
            break;
        }
    }
    if (i == num_products) {
        printf("Product not found.\n");
    }

    // Free the memory allocated for the products array
    free(products);
    products = NULL;

    return 0;
}

これで91行です。ヌル文字が入ってない気配ですが、色々入れてくれるのでたたき台としては悪くなさそうです。何個かサンプルプログラムをつくてもらいましたが、どれもデータベース(従業員、学生、商品)なのは面白かったです。

しかし勝手に「お経」を書くのはなんとなく罰当たり?な気もしました。そこで、昔HONDAのエンジニアが人型ロボットASIMOを作ったときに、バチカンにお伺いを立てた話を思い出しました。とりあえず今は喧伝せずに、般若心経や仏教についてもう少し学びを深めてから、また「般若C経」に取り組みたいと思います。

写真はインドのゴアにあった教会の写真です。インドは様々な言語があると言われますが、宗教も分かるだけでヒンディ、ムスリム、仏教、キリスト教と、あとたしかゾロアスター教もいて多彩ですね。いつかまた行きたいなと思いました。

お詫び:毎日書くと言いつつ、昨日は飛ばしてしまいました。すみません。若い来客の対応を週末にしてその後、気を許したスキに寝てしまいました。連載の大変さを知るとともに、ストックをためておく重要さも理解しました。。。

それではまた。

般若心経の写経とプログラムの『写経』に関する記事はこちらからどうぞ。



無料のプログラミングクラブCoderDojoを運営するにあたり寄付を受け付けています。お金は会場費・Wifiの費用・教科書に使用します。