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

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

新規登録して質問してみよう
ただいま回答率
85.35%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1405閲覧

2次元配列のデータの格納

134

総合スコア1

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/11/24 02:59

前提・実現したいこと

2次元配列に1からxをfor文を使って[0][y]から順番に格納したいです。 つまり x=20 y=3としたとき 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 0 0 0 0 0 このように表示したいです。

発生している問題・エラーメッセージ

xを20、yを3とすると x=20 y=3 0 0 0 0 0 0 0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 このような結果になってしまいます。

該当のソースコード

C++

1#include <iostream> 2#include <iomanip> 3#include <vector> 4 5int main() 6{ 7 int x,y; 8 std::cout<<"x="; 9 std::cin>>x; 10 std::cout<<"y="; 11 std::cin>>y; 12 const int a{6}, b{7}; 13 std::vector< std::vector<int> > v(a, std::vector<int>(b)); 14 for(int i=0; i < a; i++) { 15 if(i==0){ 16 for (int j=y; j<7-b; j++) { 17 for (int k=1; k<=7-b; k++){ 18 v[i][j]=k; 19 } 20 } 21 }else if(i!=0){ 22 for (int j=0; j<b; j++) { 23 for (int k=7-b; k<x+1 ; k++){ 24 v[i][j]=k; 25 } 26 } 27 } 28 } 29 for (int i=0; i<a; i++) { 30 for (int j=0; j<b; j++) { 31 std::cout << std::setw(3) << v[i][j]; 32 } 33 std::cout << "\n"; 34 } 35 return 0; 36}

試したこと

for文の中身や順番を変えてみたりしましたが
Segmentation fault
このようなエラーがでました。

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

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

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

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

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

gpsoft

2020/11/24 03:30

回答としては不完全なので、こっちに書きます。 カレンダーの1行目の処理で、 for (int j=y; j<7-b; j++) { としてますが、 bの値が7なので、このループは1周も回らないのではないでしょうか?
guest

回答1

0

ベストアンサー

y を横幅(列数)で割ったときの商と余りを行番号/列番号にすればいいんじゃなくて?

C++

1#include <iostream> 2#include <iomanip> 3#include <vector> 4 5int main() 6{ 7 int x = 20; 8 int y = 3; 9 const int a{6}, b{7}; 10 std::vector< std::vector<int> > v(a, std::vector<int>(b)); 11 for(int i=0; i < x; i++) { 12 int r = y / b; // 商 13 int c = y % b; // 余り 14 v[r][c] = i+1; // 1から順にセット 15 ++y; // 次のy 16 } 17 18 for (int i=0; i<a; i++) { 19 for (int j=0; j<b; j++) { 20 std::cout << std::setw(3) << v[i][j]; 21 } 22 std::cout << "\n"; 23 } 24 return 0; 25}

投稿2020/11/24 03:26

episteme

総合スコア16612

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問