『写経』のための「般若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の費用・教科書に使用します。