0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ポインタに触れて、レポートを殺ろう!

Last updated at Posted at 2022-07-13

ミスなどがあればぜひコメントしてください!

Scan2022-07-13_221320.jpg

あくまで例なので丸写しは勘弁してください🙏

prepare.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 100

int main(void){
    int i,a;

    srand(time(NULL));
    for(i=0;i<=N;i++){
        a=rand()%100;
        printf("a=%d\n",a);
    }

    return 0;
}

ume.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 100

int main(void){
    int i,j,a[5][5],c[100],tmp;

    for(i=0;i<N;i++){
        c[i]=1;
    }

    srand(time(NULL));
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            tmp=rand()%100;
            while(c[tmp]==0){
                tmp=rand()%100;
            }
            a[i][j]=tmp;
            c[tmp]=0;
        }
    }
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            printf("%4d",a[i][j]);
        }
        printf("\n");
    }
    printf("search=");
    scanf("%d",&tmp);
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            if(a[i][j]==tmp){
                printf("i=%d, j=%d\n",i,j);
            }
        }
    }

    return 0;
}
take.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 100

int main(void){
    int i,j,a[5][5],c[100],tmp;

    for(i=0;i<N;i++){
        c[i]=1;
    }

    srand(time(NULL));
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            tmp=rand()%15 + 1;
            tmp+=15*i;
            while(c[tmp]==0){
                tmp=rand()%15 + 1;
                tmp+=15*i;
            }
            a[i][j]=tmp;
            c[tmp]=0;
        }
    }
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            printf("%4d",a[i][j]);
        }
        printf("\n");
    }
    printf("search=");
    scanf("%d",&tmp);
    i=(tmp-1)/15;
    for(j=0;j<5;j++){
        if(a[i][j]==tmp){
            printf("i=%d, j=%d\n",i,j);
        }
    }

    return 0;
}
matsu.c
/* ビンゴマシンから出た番号を人が入れるバージョン */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 5       /* 縦横の大きさ */
#define M 15      /* 同じ列内の数の幅 */
#define HOLE (-1) /* 穴 */

/* numset(): ダブりなく x[][] に乱数を入れ中央に穴を空ける */
void numset(int x[][N])
{
    /* ダブりなく x[][] に乱数を入れ中央に穴を空ける */
    int available[100];
    int i, j, tmp;

    for (i = 0; i < 100; i++)
    {
        available[i] = 1;
    }

    srand(time(NULL));
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            tmp = rand() % M + 1;
            tmp += M * i;
            while (available[tmp] == 0)
            {
                tmp = rand() % M + 1;
                tmp += M * i;
            }
            x[i][j] = tmp;
            available[tmp] = 0;
        }
    }

    x[2][2] = HOLE;
}

/* search(): x[*pi][*pj] = num になる (*pi, *pj) を探す.その有無も
 *pfound に入れて返す */
void search(int num, int x[][N], int *pfound, int *pi, int *pj)
{
    int i, j;

    /* x[*pi][*pj] = num になる (*pi, *pj) を探す.
       その有無も *pfound に入れて返す */
    *pfound = 0;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            if (x[i][j] == num)
            {
                *pi = i;
                *pj = j;
                *pfound = 1;
            }
        }
    }
}

/* check(): x[inum][jnum] でゲームが継続するかを判定し,継続か否かを
 *pcont に入れて返す */
void check(int x[][N], int inum, int jnum, int *pcont)
{
    int i, j, bingo_cnt;

    /* x[inum][jnum] の縦横対角線方向を調べてBINGOになったか(ゲームが
        継続するか)を判定し,継続か否かを *pcont に入れて返す */

    // bingo j
    bingo_cnt = 0;
    for (j = 0; j < 5; j++)
    {
        if (x[inum][j] == HOLE)
        {
            bingo_cnt++;
        }
    }
    if (bingo_cnt == 5)
    {
        *pcont = 0;
    }

    // bingo i
    bingo_cnt = 0;
    for (i = 0; i < 5; i++)
    {
        if (x[i][jnum] == HOLE)
        {
            bingo_cnt++;
        }
    }
    if (bingo_cnt == 5)
    {
        *pcont = 0;
    }

    // bingo cross
    if (jnum == inum)
    {
        bingo_cnt = 0;
        for (i = 0, j = 0; i < 5; i++, j++)
        {
            if (x[i][j] == HOLE)
            {
                bingo_cnt++;
            }
        }
        if (bingo_cnt == 5)
        {
            *pcont = 0;
        }
    }
    if (jnum + inum == N - 1)
    {
        bingo_cnt = 0;
        for (i = 0, j = 5; i < 5; i++, j--)
        {
            if (x[i][j] == HOLE)
            {
                bingo_cnt++;
            }
        }
        if (bingo_cnt == 5)
        {
            *pcont = 0;
        }
    }
}

/* numout(): 現在の x[][] の状態を出力する */
void numout(int x[][N])
{
    int i, j;

    /* 現在の x[][] の状態(盤面)を出力する */
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            if (x[i][j] == HOLE)
            {
                printf("  --");
            }
            else
            {
                printf("%4d", x[i][j]);
            }
        }
        printf("\n");
    }
}

/* メインプログラム */
int main(void)
{
    int num;     /* ビンゴマシンから出た番号 */
    int cont;    /* BINGO になっていないかを示す(1:未達; 0: BINGO) */
    int a[N][N]; /* 盤面 */
    /* 他にも必要な変数を加える */
    int pfound, pi, pj;

    /* 最初に numset() で最初の盤面にし,numout() で出力する */
    numset(a);
    numout(a);

    cont = 1;
    while (cont == 1)
    {
        /* (1) 1 <= n <= 75 である num を scanf で入力する */
        printf("num=");
        scanf("%d", &num);
        /* (2) search() で 盤面に num があるか調べる */
        search(num, a, &pfound, &pi, &pj);
        /* (3) (2) で見つかったらその場所に穴を開け,
               check() で BINGO になったか調べ,
               BINGO になったら cont を 0 にする(while 文を抜ける) */
        if (pfound == 1)
        {
            a[pi][pj] = HOLE;
            check(a, pi, pj, &cont);
        }
        /* (4) 毎回 numout() で変化した盤面を表示する */
        numout(a);
        /* 終了表示 */
    }
}
0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?