1000個の固定した文字列から20個を任意に表示するには?

[戻る]
yuki 2001/10/08(月) 10:20:08
例えば データを1000個 プログラム内に登録して
 
100番目から400番目までとかを指定して
 
その中から任意に20個を
 
コンピューターに選択させて 表示させるというような
 
プログラムってどうやってつくればよいのでしょうか?
 
(こんな感じの表示結果)
 
何番から?    とでて 100 と入力
 
何番まで?    とでて 400 と入力
 
いくつ選択する? とでて 20 と入力       
 
そうしたら
 
111 star
 
162 get
 ・
 
 ・
 
 ・
 
320 tax
 
って言う感じに20個出力できたらベストです

2001/10/08(月) 11:55:38
課題でしたら課題を出した方に質問するのが筋だと思います
違ってたらごめんなさい

さて、質問ですが、この程度の問題でここまで仕様が決まっているなら
このまま作れば問題なく動きますよ
逆に、どこが分からないの?って感じです
分からない所を具体的に書きましょう
特殊な知識が必要な問題じゃないので
「手の着けようがないので」最初から教えてくださいというのは無しですよ

1.1000個のデータをプログラム内に保持する方法
2.3つの質問を表示する方法
3.3つの答えを取得する方法
4.開始位置と終了位置の値が逆の場合はどうするのか
 答えの範囲が20個未満ならどうするのか
 (20個未満を表示すればよい等)
 答えの範囲が21個以上ならどう、任意の20個を決めるのか
 (rand()を使うのが楽です)
5.答えを指定開始位置から20個表示する方法
この5つくらいが分かれば答えは出るでしょう
たぶんC言語の入門書の最初の方を見れば
だいたい分かると思うので基礎を身につけましょう

yuki 2001/10/09(火) 18:13:25
すみませんでした
僕が分からないのは
1.1000個のデータをプログラム内に保持する方法
と指定した範囲からランダムに20個表示する方法です
入門書でどのようなものにかいてありますか
そこら辺も勉強したいので是非教えて下さい

CdS 2001/10/09(火) 22:46:12
そのままのサンプルが載っている書籍があるかどうかは知りません。
「配列」「乱数」などで調べればどのような書籍にも大概は書いてあるはずです。

ku 2001/10/09(火) 23:03:11
> 1.1000個のデータをプログラム内に保持する方法
これは配列について書いてありませんでしたか?
良い方法とは思わないけど、intの配列なら
int a[1000] = {1, 100, 〜省略〜};
文字列なら
char *p[1000] = {"abc", "123", 〜省略〜};
なんてやれば1000個のデータを保持できるでしょ
もう少し複雑なものなら構造体(struct)の配列を使う方法があります
また、データをファイルにしておいて、読み込むって方法もあります
intの配列なら、初期値を設定せずにrand()関数を使うという方法もあります

> と指定した範囲からランダムに20個表示する方法です
rand()を使うのが楽ですと一応書いたんだけどね
int nInputStart = ;//最初の位置
int nInputEnd = ;//最後の位置
int nInputExtent = nInputEnd - nInputStart + 1;//有効範囲の個数
int anRandNo[20];//最大で20個の位置を保存する
int nRandCnt = 0;//ランダムの値をカウントする
int nRandMax = 20;//ランダムの値をいくつカウントするかの最大値
// 指定した範囲がカウントの最大値より小さければカウントの最大値を下げる
if (nInputExtent < nRandMax) {
    nRandMax = nInputExtent;
}
while (nRandCnt < nRandMax) {
    int nValue = nInputStart + (rand() % nInputExtent);
    int nRepCheckPos;
    for (nRepCheckPos = 0; nRepCheckPos < nRandCnt; nRepCheckPos++) {
        if (anRandNo[nRepCheckPos] == nValue) {
            continue;
        }
    }
    anRandNo[nRandCnt] = nValue;
    nRandCnt++;
}
int nOutPos;
for (nOutPos = 0; nOutPos < nRandMax; nOutPos++) {
    printf("%d\n", anRandNo[nOutPos]);
}
これは範囲内の任意の20個のインデックスを表示するものです
確認してないので間違っている所があるかもしれません
最後の方のprintfは最終的な情報ではなく、最終的な配列のインデックスなので気を付けて
C言語の場合は変数の宣言の位置にも気を付けてね(C++なら気にしなくていいです)

> 入門書でどのようなものにかいてありますか
> そこら辺も勉強したいので是非教えて下さい
とりあえず、書店へGOです
自分にあった参考書を揃えましょう(合う合わないがあるので自分で選ぶしかないです)
有名な本は初心者には難解な物が多いので、絵や図がたくさん入っているようなもので
C言語とともにコンピュータの仕組みやメモリのことや関数・オート変数とスタックの関係とか
ポインタにアドレスなんかが載っているものが良いかなと思います

yuki 2001/10/27(土) 07:47:54
[[解決]]
本屋やまわりの方々の助けもあり
どうにか問題解決いたしました
kuさんCdSさんありがとうございました

古いスレッドには追加発言できません。