バブルソートを用いた問題

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

バブルソートを用いた問題

#1

投稿記事 by mogu2522 » 6年前

問題
下の例のように偶数の場合にはその数だけ○.奇数の場合にはその数だけ×を出力するプログラムを作れ。また各行の左端には○もしくは×の個数も出力すること


1:×
3:×××
4:○○○○
4:○○○○
4:○○○○
5:××××××
8:○○○○○○○○
9:××××××××××
12:○○○○○○○○○○○○
15:×××××××××××××××

この問題についてなんですがバブルソートで昇順に並び変えるのは理解できるのですが数値を出力させ、かつ○×を出すのがよく分からなくて教えていただきたいです。

box
記事: 2002
登録日時: 13年前

Re: バブルソートを用いた問題

#2

投稿記事 by box » 6年前

mogu2522 さんが書きました: バブルソートで昇順に並び変えるのは理解できる
では、そのときのコードを見せてください。たぶんちょっとした修正でうまくいくと思います。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

mogu2522

Re: バブルソートを用いた問題

#3

投稿記事 by mogu2522 » 6年前

コード:

#include<stdio.h>
main()
{
              int num[10], i, j, k, temp, n = 10;
              for (i = 0; i < 10; i++)
              {
                            printf("整数値を入力せよ:");
                            scanf_s("%d", &num[i]);
              }
              for (j = 0; j < n - 1; j++)
              {
                            for (k = 0; k < n - 1; k++)
                            {
                                          if (num[k] > num[k + 1])
                                          {
                                                        temp = num[k];
                                                        num[k] = num[k + 1];
                                                        num[k + 1] = temp;
                                          }
                                          if (num[k] % 2 == 0)
                                          {
                                                        printf("%d:", num[k]);
                                                        for (i = 1; i <= num[k]; i++)
                                                        {
                                                                      printf("〇");
                                                        }
                                                        printf("\n");
                                          }
                                          else
                                          {
                                                        printf("%d:", num[k]);
                                                        for (i = 1; i <= num[k]; i++)
                                                        {
                                                                      printf("×");
                                                        }
                                                        printf("\n");

                                          }
                            }
              }

ほとんどあってるんですが途中の過程も繰り返されてしまい原因がつかめないのでお願いします

box
記事: 2002
登録日時: 13年前

Re: バブルソートを用いた問題

#4

投稿記事 by box » 6年前

何でもかんでもmain()にぶち込まない方がよいと思います。

コード:

// 全面的に改変しました

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

#define N (10)

void makeRandomNumber(int *a, int n)
{
    int i;

    for (i = 0; i < n; i++) {
        a[i] = rand() % 20 + 1;         // 1~20の乱数を発生
    }
}

void sortArray(int *a, int n)
{
    int i, j, t;

    for (i = 0; i < n - 1; i++) {
        for (j = i; j < n; j++) {
            if (a[i] > a[j]) {
                t = a[i], a[i] = a[j], a[j] = t;
            }
        }
    }
}

void printResult(int *a, int n)
{
    int i, j;

    for (i = 0; i < n; i++) {
        printf("%2d:", a[i]);
        if (a[i] % 2 == 0) {
            for (j = 0; j < a[i]; j++) {
                putchar('o');
            }
        }
        else {
            for (j = 0; j < a[i]; j++) {
                putchar('x');
            }
        }
        putchar('\n');
    }
}

int main(void)
{
    int arr[N];

    srand((unsigned) time(NULL));
    makeRandomNumber(arr, N);
    sortArray(arr, N);
    printResult(arr, N);
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

mogu2522

Re: バブルソートを用いた問題

#5

投稿記事 by mogu2522 » 6年前

すいません。学校ではそう習っているのでmain()を使うしかわからないです。
まだ始めて2ヶ月なんですいません

かずま

Re: バブルソートを用いた問題

#6

投稿記事 by かずま » 6年前

mogu2522 さんが書きました:ほとんどあってるんですが途中の過程も繰り返されてしまい原因がつかめないのでお願いします
次のように 4行追加して、ソートと表示を分離しましょう。

コード:

#include <stdio.h>
int main()
{
    int num[10], i, j, k, temp, n = 10;
    for (i = 0; i < 10; i++)
    {
        printf("整数値を入力せよ:");
        scanf_s("%d", &num[i]);
    }
    for (j = 0; j < n - 1; j++)
    {
        for (k = 0; k < n - 1; k++)
        {
            if (num[k] > num[k + 1])
            {
                temp = num[k];
                num[k] = num[k + 1];
                num[k + 1] = temp;
            }
        }                     // 追加
    }                         // 追加
    for (k = 0; k < n; k++)   // 追加
    {                         // 追加
        if (num[k] % 2 == 0)
        {
            printf("%d:", num[k]);
            for (i = 1; i <= num[k]; i++)
            {
                printf("〇");
            }
            printf("\n");
        }
        else
        {
            printf("%d:", num[k]);
            for (i = 1; i <= num[k]; i++)
            {
                printf("×");
            }
            printf("\n");
 
        }
    }
}
インデントが深すぎるので 14個のスペースを 4個にしました。

mogu2522

Re: バブルソートを用いた問題

#7

投稿記事 by mogu2522 » 6年前

できました!!
ありがとうございます☺️

返信

“C言語何でも質問掲示板” へ戻る