夏休みプチプログラミングコンテスト2018への投稿です。二つ目!
一つ目はこちらです。
投稿!夏休みプチプログラミングコンテスト2018
クエリちゃん x プロ生ちゃん 夏休み #プチプログラミング コンテスト2018開催!(8/31〆切) https://t.co/9JVhsAaYoh pic.twitter.com/dxMOZNiv19
— プロ生ちゃん(暮井 慧)@コラボ募集中 (@pronama) July 23, 2018
プロ生ちゃんとのコラボ企画!#プチプログラミングコンテスト2018 開催デス(*Q∀Q)!
夏休み、クエリとプロ生ちゃんと一緒に楽しみまショウ(๑Q´ㅂQ´)و✧
詳細はコチラ!https://t.co/rjpf4NK96C#クエリちゃん #プロ生ちゃん #プログラミング #夏休み #コンテスト pic.twitter.com/xLKU6gWTXD— クエリちゃん (@Query_chan) July 23, 2018
今回のプログラムは、「2018夏休み 自由研究」!
「1個のみかんの皮、どこまで伸ばせるのか研究」です。
みかん好きなクエリちゃんが小学生で自由研究をしたら、というところからの考案です。
動作の内容は、mi ka n のいずれかを入力してエンターキー。制限時間内に入力されたmikanの数で、研究結果(長さ)が決まるゲームのようになってます。
ソースはここに載せておきます。改変して利用などもご自由にどうぞ!
スレッド利用やタイマー、入力待ちの使い方など、小さめだけど濃い目です。
無限ループのforとwhileの使い分けは、あとで回数や条件を付けれるようにとかそういう感覚です。
たまたま2つ使ってるので一応書いておきます。
右クリックからダウンロード
https://cocoamix.jp/puttti2018/mikan.c
macではそのまま、
cc mikan.c
./a.out
で動作すると思います。
中身のほぼほぼ全般
// defines int gamejikan =10; //入力時間 int mikanSize = 5;//1MiKaNでの長さ char *title = "⭐️ 2018夏休み 自由研究! ⭐\n「1個のみかんの皮、どこまで伸ばせるのか研究」\n"; char *subtitle = "mi ka n のいずれかを入力してEnter。mikanの数で長さが決まります。制限時間: %d秒\n- Enterで開始 -"; char *msgTimeup = "\n時間で〜〜す!!\n- Enterで結果表示 -\n"; char *mikan[] = { "mi", "ka", "n", }; char *kekka_head = "⭐️ 研究の成果 ⭐️ \n\n🍊"; char *msgTrophy[] = { "先生「努力が足りません。」", "先生「頑張りましたね!!!」", "先生「これは世界新記録かもしれませんよ!」", "先生「チートいけません」", }; char *msgEnd = "--- 自由研究 終了 ---"; ////////////////////////////////////////////////////// // globalな変数 // Mi Ka N カウント保持 int countMi = 0; int countKa = 0; int countN = 0; int endFlug = 0; //スレッド終了用flug ////////////////////////////////////////////////////// int inputMain(); void *inputting(); // // メイン int main(void){ inputMain(); return 0; } // // 入力ループなスレッドfunc void *inputting(){ char buff[256]; for(;;){ // 入力読み込み memset(buff,0x00,sizeof(buff)); fgets(buff, sizeof(buff), stdin); if(strlen(buff)>0)buff[strlen(buff) - 1] = 0x00;//改行消し if(endFlug == 1){ // 入力ループ、thread終了 break; } // Mi or Ka or N int len = strlen(buff); if(len >= 2){ if(strncasecmp(buff, mikan[0],strlen(mikan[0])) == 0){ countMi++; }else if(strncasecmp(buff, mikan[1],strlen(mikan[1])) == 0){ countKa++; } }else{ if(strncasecmp(buff, mikan[2],strlen(mikan[2])) == 0){ countN++; } } //printf("%d %d %d",countMi,countKa,countN); } return 0; } // // みかんチャレンジ int inputMain(){ int ret = 0; // タイトル表示 printf("%s",title); printf(subtitle,gamejikan); char buff[4]; fgets(buff, 4, stdin);//enter待ち用に // 入力スレッド生成 pthread_t inputThread; pthread_create( &inputThread, NULL, &inputting, NULL); // タイマー double timeStart =0; double timeWk =0; double keika =0; double jikan =gamejikan; timeStart = clock() / CLOCKS_PER_SEC ; while(1){ if(keika > jikan)break; timeWk = clock() / CLOCKS_PER_SEC ; keika = timeWk - timeStart; } // 入力終了 printf("%s", msgTimeup); endFlug = 1; pthread_join(inputThread, NULL); //スレッド終了待ち // 結果表示 int kekkaCount = countMi; if(kekkaCount > countKa) kekkaCount = countKa; if(kekkaCount > countN) kekkaCount = countN; printf("%s", kekka_head); sleep(1); for(int i=0; i< kekkaCount;i++){ printf("-"); } printf("\n\n%dセンチまで伸ばせました!\n",kekkaCount*mikanSize); if(kekkaCount < 3){ printf("%s\n\n",msgTrophy[0]); }else if(kekkaCount < 10){ printf("%s\n\n",msgTrophy[1]); }else if(kekkaCount < 20){ printf("%s\n\n",msgTrophy[2]); }else{ printf("%s\n\n",msgTrophy[3]); } printf("入力した数 Mi: %d Ka: %d N: %d\n\n",countMi,countKa,countN); sleep(1); printf("%s\n\n",msgEnd); return ret; }
楽しくなったの二つ目です。
2018夏休み 自由研究のプログラム作りました!
「1個のみかんの皮、どこまで伸ばせるのか研究」https://t.co/CbVHeoDAQN#プチプログラミング @Query_chan @pronama pic.twitter.com/ncYMtkqLTH— うに+✩♪ (@cocoamixjp) July 29, 2018