【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.20871

難しいので聞きたい。
投稿者---ピカら(2005/04/29 14:48:27)


このプログラムを完成させてください。
とても説明を聞くだけでは難しいので。
(プログラム)
8個の0から9までの数字を入力したとき、その8個の数字を並べ替えてできる、最大の整数と最小の整数の差を出力して終了するプログラムを作成しなさい。
(例)
入力
 8個の数字の並び(0から9)
出力
 並べ替えでできる最大値と最小値の差
入力
 65539010
出力
 96417531
↑よろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:難しいので聞きたい。 20872 REE 2005/04/29 15:04:34
<子記事> Re:難しいので聞きたい。 20875 まきじ 2005/04/29 18:37:50
<子記事> Re:難しいので聞きたい。 20883 RiSK 2005/04/30 00:20:23


No.20872

Re:難しいので聞きたい。
投稿者---REE(2005/04/29 15:04:34)


>このプログラムを完成させてください。

いやです。
ここは、プログラム依頼掲示板ではありません。

>とても説明を聞くだけでは難しいので。

説明を聞いても分からないほど難しい問題とは思えません。

>(プログラム)
>8個の0から9までの数字を入力したとき、その8個の数字を並べ替えてできる、最大の整数と最小の整数の差を出力して終了するプログラムを作成しなさい。

1.8個の数字を入力する。
2.ソートする
3.最大の整数を作る
4.最小の整数を作る
5.最大の整数と最小の整数の差を求めて出力

もし、分からない部分があれば、改めてそこを質問してください。


この投稿にコメントする

削除パスワード

No.20873

Re:難しいので聞きたい。
投稿者---RAPT(2005/04/29 15:57:26)


ま、注意点としては「0」が入力された時、最小の値の先頭に「0」は来ない
ということくらいでしょうか。



この投稿にコメントする

削除パスワード

No.20874

Re:難しいので聞きたい。
投稿者---REE(2005/04/29 16:11:25)


>ま、注意点としては「0」が入力された時、最小の値の先頭に「0」は来ない
>ということくらいでしょうか。

それも少し考慮しましたが、最小の8桁との指定がないことと、
(例)のような結果になるためには、先頭に0が来なければいけないことから、
その制限はないものと判断しました。


この投稿にコメントする

削除パスワード

No.20875

Re:難しいので聞きたい。
投稿者---まきじ(2005/04/29 18:37:50)


>注意点としては「0」が入力された時、最小の値の先頭に「0」は来ない
は考慮してませんが、、

#include<stdio.h>

#define SIZE 8

int main(void){
    
    char val[SIZE], tmp;
    long max, min;
    int i, j;
    
    for(i = 0; i < SIZE; i++){
        rewind(stdin);
        printf(">");
        scanf("%[0-9]c",&val[i]);
        if(val[i] < '0' || val[i] > '9') i--;
    }
    
    for(i = 0; i < SIZE; i++){
        for(j = i + 1; j < SIZE; j++){
            if(val[i] > val[j]){
                tmp = val[j];
                val[j] = val[i];
                val[i] = tmp;
            }
        }
    }
    
    for(i = 0, max = 0, min = 0; i < SIZE; i++){
        min = min * 10 + (val[i] - '0');
        max = max * 10 + (val[SIZE - i - 1] - '0');
    }
    
    printf("max:%ld\nmin:%ld\n",max,min);
    printf("diff:%ld\n",max-min);
    
    return 0;
}




この投稿にコメントする

削除パスワード

No.20876

Re:難しいので聞きたい。
投稿者---dark(2005/04/29 18:45:11)


>このプログラムを完成させてください。
でホントにつくるか普通。

ここで聞けば答えがもらえるとおもわれるし、
【掲示板ご利用上の注意】にも 学校の課題の丸投げ禁止! とあるしなぁ。
(そのつどあなたが答えてあげれば別ですが。)

答えるか答えないかは個人の自由だけど。



この投稿にコメントする

削除パスワード

No.20877

Re:難しいので聞きたい。
投稿者---まきじ(2005/04/29 19:34:24)


>>このプログラムを完成させてください。
>でホントにつくるか普通。

「このプログラムを完成させてください。」と仰ってるから
コーディングしたわけじゃないです。

>答えるか答えないかは個人の自由だけど。

と思ってるなら、言わないでいいでしょう。

理解する気のある質問者なら、分からない部分は
また、質問すると思います。
学校の課題だとして、誰かがコーディングしたソースを
そのまま提出したとしても、自分の為にならない事ぐらい
本人が、一番分かってるはずと思いますが。


この投稿にコメントする

削除パスワード

No.20879

Re:難しいので聞きたい。
投稿者------(2005/04/29 19:59:10)


>「このプログラムを完成させてください。」と仰ってるから
>コーディングしたわけじゃないです。
では何のために?自分はこれだけできるんだぞとか見せつけたいとか?
参考にしてもらいたいなら、つくってくれといわれたものをそのまま載せる必要はないと。
少しは考えてほしいという意図がみえないが。

多分、この質問者は何も考えずこのまま提出しそうだが。


この投稿にコメントする

削除パスワード

No.20882

Re:難しいので聞きたい。
投稿者---私信(2005/04/29 22:51:57)


# 削除済みのレスについてという野暮な話なので…

「理由」については納得できませんでしたが基本的なスタンスは理解できました
「初心者のためのポイント学習C言語」サイトの掲示板というTPOの問題?



この投稿にコメントする

削除パスワード

No.20881

Re:難しいので聞きたい。
投稿者---Ban(2005/04/29 20:58:44)


> 理解する気のある質問者なら、分からない部分は
> また、質問すると思います。

あくまで学校の課題の丸投げ禁止!であって
回答で丸投げし返していけないとは明示されてませんし、
止める権利があるわけではありませんが、
禁止事項の要求に対して一見正当な応答が返るのは、
要求側にとって、エラーが返るより誤解しやすいものだと思います。

課題にそのまま動くソースだけ張るのはある意味回答の丸投げな
気がします。

# 1 が宿題に答える類のスレなら神の一人になりうるのでしょうが。


この投稿にコメントする

削除パスワード

No.20901

Re:難しいので聞きたい。
投稿者---影丸(2005/05/03 02:18:59)


できてないですよ!実行しましたか?


この投稿にコメントする

削除パスワード

No.20904

Re:難しいので聞きたい。
投稿者---RiSK(2005/05/03 08:45:23)


>できてないですよ!実行しましたか?

処理系に依存するコードなのでまきじさんの環境ではOKでも,
影丸さんの環境ではNGなのでしょう。

>        rewind(stdin);
>        scanf("%[0-9]c",&val[i]);



この投稿にコメントする

削除パスワード

No.20883

Re:難しいので聞きたい。
投稿者---RiSK(2005/04/30 00:20:23)


いろいろ遊んでみた。

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

#define TO_STRING_DUMMY(x) #x
#define TO_STRING(x) TO_STRING_DUMMY(x)
#define FIGURE 8
#define FIGURE_STR TO_STRING(FIGURE)

int get_digit_char(void)
{
    int  c;
    while ((c = getchar()) != EOF && !isdigit(c))
        ;
    return c;
}

int in(int * digit, size_t figure)
{
    size_t i;
    for (i = 0; i < figure; ++i) {
        if ((digit[i] = get_digit_char()) == EOF) return 0;
        digit[i] -= '0';
    }
    return 1;
}

int descending(const void * e1, const void * e2) {
    return *(const int *)e2 - *(const int *)e1;
}

int ascending(const void * e1, const void * e2) {
    return *(const int *)e1 - *(const int *)e2;
}

unsigned long int_array_to_ulong(const int * digit, size_t figure)
{
    size_t i;
    unsigned long value = 0;
    for (i = 0; i < figure; ++i) {
        value = value * 10 + digit[i];
    }
    return value;
}

unsigned long get_value(int * digit, size_t figure, int (*order)(const void *, const void *))
{
    qsort(digit, figure, sizeof(int), order);
    return int_array_to_ulong(digit, figure);
}

int main(void)
{
    int digit[FIGURE];
    unsigned long max, min;
    if (!in(digit, FIGURE)) return 1;
    max = get_value(digit, FIGURE, descending);
    min = get_value(digit, FIGURE, ascending);
    printf("max:%0"FIGURE_STR"lu min:%0"FIGURE_STR"lu diff:%0"FIGURE_STR"lu\n", max, min, max - min);
    return 0;
}



この投稿にコメントする

削除パスワード

No.20885

Re:難しいので聞きたい。
投稿者---dark(2005/04/30 00:37:07)


上のツリーで宿題丸投げに解答丸投げすべきかどうか論議がおこっている
のに何故?

よくみたら、ほかの問題丸投げに対しても解答丸投げしてますね。
(最近のやつだとNo.20835、No.20795、No.20673)
神にでもなりたいとか?

# でもこのソースだとそのまま出すとおこられるかな。



この投稿にコメントする

削除パスワード

No.20886

Re:難しいので聞きたい。
投稿者---RiSK(2005/04/30 00:59:03)


場所はわきまえましょう。

誘導
おしゃべり掲示板No: 2526


この投稿にコメントする

削除パスワード

No.20887

「課題の丸投げ」について
投稿者---管理人(2005/04/30 10:39:50)


おはようございます。

掲示板を立ち上げて丸4年、同じ議論が繰り返されるのは管理人として心苦しいのですが、今回の件は、荒れた部類にも入らず、それぞれのご意見(「お喋り掲示板 No2526〜No2531)をなるほどな、と思いながら読ませていただきました。

以前にも書いたことがあるのですが、課題を受け取る側としては、各学生のレベルは承知しているので、自力か他力かは判断が付きます。回答者のみなさんも、それは承知のはず。
ですから、質問者の向こう側にいる閲覧者を対象に回答者のみなさんは回答しているものと考えています。
ただ、これも以前に書いたのですが、「あそこに行けば課題は楽勝」と思われるのは心外なので、やはりそのものずばりの回答は避けていただけるとありがたいです。

お喋り掲示板でもう結論の出ていることですが、重ねてご理解よろしくお願いいたします。




この投稿にコメントする

削除パスワード

No.20900

Re:「課題の丸投げ」について
投稿者---ピカら(2005/05/03 02:13:27)


これは課題の丸投げではなく自分が解けなかった問題の解き方を聞いてもわからなかったので、知りたかっただけであって、約束には反していません。


この投稿にコメントする

削除パスワード

No.20902

Re:「課題の丸投げ」について
投稿者---紙風船(2005/05/03 03:24:40)


これは課題の丸投げではなく自分が解けなかった問題の解き方を聞いても わからなかったので、知りたかっただけであって、約束には反していません。
おいおい、こりゃ重症だな( ゜Д゜)y─┛
このプログラムを完成させてください。
これこそが丸投げだってことが理解できていないようだな。 少なくとも下記3点が遵守されていないように見受けられるがな(w ※題名は具体的に! ※学校の課題の丸投げ禁止! ※環境(OSとコンパイラ)や症状は具体的に詳しく! 言い訳にもなっていないことに気付いていないのがもう(以下略 それより作業報告はしたのか? # 質問に関係無い話は誘導先に書くべきじゃないかね?



この投稿にコメントする

削除パスワード

No.20987

もう時効かな。C++で書いてみた。
投稿者---紙風船(2005/05/10 01:07:53)


#include <cstdlib>
#include <algorithm>
#include <iostream>
#include <string>

using namespace std;

int main(void)
{
    string ss;
    cin >> ss;
    ss.resize(8);
    sort(ss.begin(), ss.end());
    long min = atol(ss.c_str());
    reverse(ss.begin(), ss.end());
    cout << atol(ss.c_str()) - min << endl;
    return 0;
}



この投稿にコメントする

削除パスワード

No.20988

Re:もう時効かな。C++で書いてみた。
投稿者---かずま(2005/05/10 02:58:51)


C で書いてみました。
#include <stdio.h>
#include <stdlib.h>

int comp(const void *a, const void *b) { return *(int *)a - *(int *)b; }

int main(void)
{
    int a[8];
    if (scanf("%1d%1d%1d%1d%1d%1d%1d%1d", a,a+1,a+2,a+3,a+4,a+5,a+6,a+7) == 8) {
        qsort(a, 8, sizeof *a, comp);
        printf("%ld\n",
            (a[7] - a[0]) * (10000000L - 1) + (a[6] - a[1]) * (1000000L - 10) +
            (a[5] - a[2]) * (100000L - 100) + (a[4] - a[3]) * (10000L - 1000));
    }
    return 0;
}



この投稿にコメントする

削除パスワード

No.20990

Re:もう時効かな。C++で書いてみた。
投稿者---RAPT(2005/05/10 23:45:57)


int comp(const void *a, const void *b) { return *(int *)a - *(int *)b; }
これって、厳密には、(const void *) から (int *) には変換できないのでは? (const int *) でキャストすべきかと存じますが、いかがでしょうか。



この投稿にコメントする

削除パスワード

No.20995

Re:もう時効かな。C++で書いてみた。
投稿者---かずま(2005/05/11 10:17:49)


> これって、厳密には、(const void *) から (int *) には変換できないのでは?

できます。

逆にお尋ねします。できないと思った根拠は何ですか?
警告やエラーを出すコンパイラがあるんですか?
できないと書いてある書籍があるんですか?
C++ の const_cast と混同していませんか?


> (const int *) でキャストすべきかと存じますが、いかがでしょうか。

してもいいけど、すべきとまでは言えません。
const int * に変換するのなら、キャストを使わず、次のように書けます。
int comp(const void *a, const void *b)
{
    const int *p = a, *q = b;
    return *p - *q;
}



この投稿にコメントする

削除パスワード

No.21011

Re:もう時効かな。C++で書いてみた。
投稿者---RAPT(2005/05/12 00:16:45)


> 逆にお尋ねします。できないと思った根拠は何ですか?
(snip)
> int comp(const void *a, const void *b)
> {
>     const int *p = a, *q = b;
>     return *p - *q;
> }

失礼しました。この代入処理と取り違えていたようです。



この投稿にコメントする

削除パスワード

No.20905

Re:「課題の丸投げ」について
投稿者---おでん(2005/05/03 11:59:27)


>これは課題の丸投げではなく自分が解けなかった問題の解き方を聞いてもわからなかったので、知りたかっただけであって、約束には反していません。

解こうとする努力、聞こうとする態度それだけでも回答者の反応は
違います。

課題があって、もしソースを作る所まで言っていないとしても、
「私はこのように考えているが、間違っていないか?」
という問いかけであれば、誰も文句は言わないと思います。

1.8桁の数字から、最大/最小の数字はどうすれば作れるか?
2.入力された8桁の数字を、並べ替えて最大または最小の数字(文字列)を
 作るには?
3.8桁の数字(文字列)を数値に変換するには?

分かりますか?

それすら分からない(調べられない)のであれば、
何のために勉強しているのでしょう?


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧