質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

5回答

1325閲覧

配列の要素を5個の要素からなるグループに分けたい

mah-cold

総合スコア8

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2022/01/28 06:13

編集2022/01/28 13:51

前提・実現したいこと

配列の要素を5個の要素からなるグループに分けたいのですが方法が分かりません。

該当のソースコード

#include <stdio.h> #include <malloc.h> #include <stdlib.h> int main(void){ int num[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} int A[5], B[5]; num[]の要素を先頭から取り出してそれぞれA, Bの順に入れ、表示させるようなプログラムを作りたいです。

補足情報(FW/ツールのバージョンなど)

Cygwin64

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatsu99

2022/01/28 06:27

Aには0,2,4,6,8 Bには1,3,5,7,9 と入れたいのでしょうか。 いずれにしろ、A,Bはint型で確保しないと格納できません。
mah-cold

2022/01/28 06:42

Aに0, 1, 2, 3, 4 Bに5, 6, 7, 8, 9 と入れたいです。
jimbe

2022/01/28 10:30

表示するだけなら本当に分ける必要は無いと思いますが。
guest

回答5

0

2次元配列にキャストする方法はどうでしょうか?

C

1#include <stdio.h> 2 3#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) 4#define SPLIT_SIZE 5 5 6int main(void) 7{ 8 int num[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, }; 9 int (*split_num)[SPLIT_SIZE] = (int(*)[SPLIT_SIZE])num; 10 11 for (size_t i = 0; i < ARRAY_SIZE(num) / SPLIT_SIZE; i++){ 12 for (size_t j = 0; j < SPLIT_SIZE; j++){ 13 printf("split_num[%zu][%zu] = %d\n", i, j, split_num[i][j]); 14 } 15 } 16 17 size_t i = ARRAY_SIZE(num) / SPLIT_SIZE; 18 for (size_t j = 0; j < ARRAY_SIZE(num) % SPLIT_SIZE; j++){ 19 printf("split_num[%zu][%zu] = %d\n", i, j, split_num[i][j]); 20 } 21 22 return 0; 23}

投稿2022/01/28 10:38

編集2022/01/28 13:27
shsh_

総合スコア113

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

int uver(int *a, int n, int k) { int i, x; int *M; x = n / 5; M = (int *)malloc( x * sizeof(int) ); for(i = 0; i < x; i++){ bubble( a+5*i, 5); M[i] = a[5*i+2]; }

このようにすることで配列を5個の要素からなるグループに分け、バブルソートでソートし、配列Mに各グループの中央値を代入することが出来た。

投稿2022/01/31 14:17

mah-cold

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

配列 x[] を要素数Nのグループに分割したように見せかけるなら、
第g(>=0)グループのm(=0~N-1)番目は x[g*N+m] となります。

投稿2022/01/30 01:53

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

int型が1000個の配列のケースの例です。
X = (int *)malloc( 1000 * sizeof(int) );を使用する例です。
1000個の配列を5個単位で200組と考えます。
1組目=X[0]~X[4]
2組目=X[5]~X[9]
のように考えます。

C

1#include <stdio.h> 2#include <stdlib.h> 3int main(void) 4{ 5 int num[1000] = { 0 }; 6 int *X; 7 int i; 8 //numに初期値を設定する { 0,1,2,3,....999} 9 for (i = 0; i < 1000; i++) { 10 num[i] = i; 11 } 12 X = (int*)malloc(1000*sizeof(int)); 13 // Xへnumの値をコピーする 14 for (i = 0; i < 1000; i++) { 15 *(X+i) = num[i]; 16 } 17 //Xの内容を5個ごとに印字する 18 for (i = 0; i < 200; i++) { 19 printf("%d番目のテーブル [0]=%d [1]=%d [2]=%d [3]=%d [4]=%d\n", i+1, 20 *(X+5*i),*(X+5*i+1),*(X+5*i+2),*(X+5*i+3),*(X+5*i+4)); 21 } 22 return 0; 23} 24

投稿2022/01/28 23:40

tatsu99

総合スコア5438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

以下のようにしてください。

C

1#include <stdio.h> 2int main(void) 3{ 4 int num[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 5 int A[5], B[5]; 6 int i; 7 for (i = 0; i < 5; i++) { 8 A[i] = num[i]; 9 B[i] = num[i + 5]; 10 } 11 12 for (i = 0; i < 5; i++) { 13 printf("A[%d]=%d\n", i, A[i]); 14 } 15 for (i = 0; i < 5; i++) { 16 printf("B[%d]=%d\n", i, B[i]); 17 } 18 return 0; 19} 20

投稿2022/01/28 07:00

tatsu99

総合スコア5438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mah-cold

2022/01/28 07:06

ありがとうございます。 ちなみに、要素数が1000個などの大きい数になった場合はどのようにすれば良いでしょうか。
episteme

2022/01/28 08:12 編集

> 要素数が1000個などの大きい数になった場合はどのようにすれば良いでしょうか。 なにがわからんのですか? 5を境に前半/後半 が 500を境に前半/後半 になるだけちゃいますか? 1000個の要素を5個ずつ、200の配列に振り分けるには、ですか? A,B,C... と200個の配列を用意するつもりですか?
tatsu99

2022/01/28 08:04

int A[5],B[5]をA[500],B[500]にします。 for (i=0;i < 5;i++) の5を500に変えます。(全箇所) 以上です。
mah-cold

2022/01/28 08:15

1000個の要素を5個ずつ、200の配列に振り分けるには、です。
tatsu99

2022/01/28 10:09

>1000個の要素を5個ずつ、200の配列に振り分けるには、です。 A[5]のような配列を200個用意するということでしょうか。 その場合、変数名はどうしますか。A[5],B[5],・・・Z[5]だと26個までしか、用意できません。 具体的な200個の変数名を提示してください。
mah-cold

2022/01/28 13:45

int *X; int x; として、データ数n(今回は1000, 10000などの大きい5の倍数を想定)に対して x = n / 5 とし、 X = (int *)malloc( x * sizeof(int) ); としたいです。
tatsu99

2022/01/28 14:32

>データ数n(今回は1000, 10000などの大きい5の倍数を想定)に対して x = n / 5 とし、 >X = (int *)malloc( x * sizeof(int) ); データ数=1000とすると X= (int *)malloc( 200 * sizeof(int) ); なので200個のint型のデータなので、これでは足りません。 200個のテーブルなので(int型が5個のテーブル)×200個のサイズが必要ですよ。
mah-cold

2022/01/28 15:07 編集

int型が5個のテーブルを作るにはどのようにすれば良いですか?
tatsu99

2022/01/28 23:37 編集

(int型が5個のテーブル)×200=int型×1000 なので、int型が1000個の配列にすれば良いです。 X = (int *)malloc( 1000 * sizeof(int) ); になります。 このケースのサンプルを回答欄に書きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問