C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: 配列に数値を代入する


(過去ログ 87 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■51664 / inTopicNo.1)  配列に数値を代入する
  
□投稿者/ ポカリ (1回)-(2010/07/13(Tue) 19:55:50)

分類:[C/C++] 

12
23
34
54
12

上記のようなテキストファイルを読み込んで配列に代入するにはどのようにしたらいいでしょうか?

./a<test.txt

#include<stdio.h>
#define MAXLINE 256

int main(void)
{
	char buffer[MAXLINE];
	int data[MAXLINE];
	
	while(gets(buffer) != NULL){
		int i = 0;
		data[i] = atoi(buffer);
		i++;
	}
	printf("%d %d %d", data[0], data[1], data[2] );
}

上記のプログラムで実行してみたのですが、
12 1628476484 2279632
と表示され、一つ目以外は狙い通りに表示されませんでした。テキストのデータが改行されていることで問題が生じていると思うのですが、自分ではよくわかりません。

間違ってる点、改善点を指摘していただけますか。

引用返信 編集キー/
■51665 / inTopicNo.2)  Re[1]: 配列に数値を代入する
□投稿者/ aetos (317回)-(2010/07/13(Tue) 20:07:01)
No51664 (ポカリ さん) に返信
ループの中で i を宣言、初期化しているため、data[0] に上書きしているだけで data[1] data[2] にデータが入っていません。
どう直せばよいかは考えてみてください。
引用返信 編集キー/
■51668 / inTopicNo.3)  Re[2]: 配列に数値を代入する
□投稿者/ ポカリ (2回)-(2010/07/13(Tue) 20:48:44)
2010/07/13(Tue) 20:55:41 編集(投稿者)
手違いで連投してしまいました。すみません。

引用返信 編集キー/
■51669 / inTopicNo.4)  Re[3]: 配列に数値を代入する
□投稿者/ ポカリ (3回)-(2010/07/13(Tue) 20:49:23)
2010/07/13(Tue) 20:53:59 編集(投稿者)

手違いで連投してしまいました。すみません。
引用返信 編集キー/
■51670 / inTopicNo.5)  Re[4]: 配列に数値を代入する
□投稿者/ ポカリ (4回)-(2010/07/13(Tue) 20:51:07)
2010/07/13(Tue) 20:58:33 編集(投稿者)
2010/07/13(Tue) 20:58:21 編集(投稿者)
2010/07/13(Tue) 20:52:24 編集(投稿者)
くだらないミスでした。指摘ありがとうございます。
#include<stdio.h>
#define MAX_LINE 256
#define MAX_DATA 500

int main(void);

int main(void)
{
	char buffer[MAX_LINE], c;
	int data[MAX_DATA];
	int i = 0, j = 0;
	
	while(gets(buffer) != NULL){
		data[i] = atoi(buffer);
		i++;
	}
	for (j = 0; j < i; j++){
	printf("data[%d] = %d \n", j, data[j]);
	}
}

これで
12
23
34
54
13
を
data[0] = 12
data[1] = 23
data[2] = 34
data[3] = 54
data[4] = 13
と表示できました。

続けて質問させてください。
数値のTOP3とその数値がもとのテキストの何番目のものかを表示するプログラムに変更したいのですが、どのようにすればいいのでしょうか?
一応数値を大きい順に並べ替え、上から3つを表示するという方法はできるのですが、そうするとテキストの何番目のものであるかをうまく示すことができませんでした。

下記のように表示させたい
TOP1 54 4番目
TOP2 34 3番目  
TOP3 23 2番目

引用返信 編集キー/
■51672 / inTopicNo.6)  Re[5]: 配列に数値を代入する
□投稿者/ .SHO (1362回)-(2010/07/13(Tue) 21:30:33)
No51670 (ポカリ さん) に返信

> 一応数値を大きい順に並べ替え、上から3つを表示するという方法はできるのですが、そうするとテキストの何番目のものであるかをうまく示すことができませんでした。

他に何番目かを示す配列を持つ。

#なんでmainのプロトタイプ宣言するの?
引用返信 編集キー/
■51675 / inTopicNo.7)  Re[6]: 配列に数値を代入する
□投稿者/ ポカリ (5回)-(2010/07/13(Tue) 21:41:33)
特に意味はありませんが、自分が使っている入門書の例題には常に書かれているので、自分も書いています。

>他に何番目かを示す配列を持つ。

もうひとつ何番目かを示すための配列を作るということですか?いまいちよくわかりません。

引用返信 編集キー/
■51677 / inTopicNo.8)  Re[5]: 配列に数値を代入する
□投稿者/ やじゅ (1673回)-(2010/07/13(Tue) 21:57:47)
やじゅ さんの Web サイト
2010/07/13(Tue) 21:58:40 編集(投稿者)

No51670 (ポカリ さん) に返信
> 数値のTOP3とその数値がもとのテキストの何番目のものかを表示するプログラムに変更したいのですが、
> どのようにすればいいのでしょうか?

数値を1000倍して、1桁目に何番目かをセットする。
data[1] = 23*1000 + 1
data[2] = 34*1000 + 2
data[3] = 54*1000 + 3
数値を表示する際に、data[i]/1000で割る。テキストの何番目かはdata[i]%1000(剰余)を使う。

引用返信 編集キー/
■51681 / inTopicNo.9)  Re[6]: 配列に数値を代入する
□投稿者/ あんどちん (1回)-(2010/07/14(Wed) 00:02:44)
あんどちん さんの Web サイト
No51677 (やじゅ さん) に返信
> 2010/07/13(Tue) 21:58:40 編集(投稿者)
>
> ■No51670 (ポカリ さん) に返信
>>数値のTOP3とその数値がもとのテキストの何番目のものかを表示するプログラムに変更したいのですが、
>>どのようにすればいいのでしょうか?
>
> 数値を1000倍して、1桁目に何番目かをセットする。
> data[1] = 23*1000 + 1
> data[2] = 34*1000 + 2
> data[3] = 54*1000 + 3
> 数値を表示する際に、data[i]/1000で割る。テキストの何番目かはdata[i]%1000(剰余)を使う。
>
これだと代入できる値が制限されますね。
質問で出ている数値が2桁までなので、恐らく100までだと判断されたのでしょうが、そのような記述は無いように思います。

数値を代入している配列を指す配列を用意し、そちらでソートすればいいと思います。
インデックスでソートするものを作ってみたのでリンクを張っておきます。参考になれば幸いです。

http://codepad.org/MLHcnpcb

引用返信 編集キー/
■51682 / inTopicNo.10)  Re[7]: 配列に数値を代入する
□投稿者/ やじゅ (1675回)-(2010/07/14(Wed) 01:05:33)
やじゅ さんの Web サイト
No51681 (あんどちん さん) に返信
> これだと代入できる値が制限されますね。
> 質問で出ている数値が2桁までなので、恐らく100までだと判断されたのでしょうが、そのような記述は無いように思います。

100ではなく、1000にしてますよ。MAX_DATA 500ってなっていたので。
引用返信 編集キー/
■51683 / inTopicNo.11)  Re[8]: 配列に数値を代入する
□投稿者/ あんどちん (2回)-(2010/07/14(Wed) 01:29:51)
あんどちん さんの Web サイト
No51682 (やじゅ さん) に返信
> ■No51681 (あんどちん さん) に返信
>>これだと代入できる値が制限されますね。
>>質問で出ている数値が2桁までなので、恐らく100までだと判断されたのでしょうが、そのような記述は無いように思います。
>
> 100ではなく、1000にしてますよ。MAX_DATA 500ってなっていたので。

1000にしているのは知っています。100以上なら問題ないと判断されたのだと思いました。
MAX_DATAは配列の要素数として使われているのであって入力数値の最大値ではないと思いますが?

やじゅさんの示された方法は1つの配列でインデックスも記憶しておける効率のよい方法だと思いますが、元記事に最大値の指定が無いのでこの場合適切かどうか判断つきかねます。


引用返信 編集キー/
■51684 / inTopicNo.12)  Re[9]: 配列に数値を代入する
□投稿者/ επιστημη (2535回)-(2010/07/14(Wed) 05:58:38)
επιστημη さんの Web サイト
> 数値のTOP3とその数値がもとのテキストの何番目のものかを表示するプログラムに変更したい

data[N] と index[N] を用意する。
index[N] は 1, 2, 3, 4, ... N を代入しておく。

で、ソート中 data[i] と data[j] を交換するついでに index[i] と index[j] も交換する。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -