ポインタ項の演習問題の質問です。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
uvale

ポインタ項の演習問題の質問です。

#1

投稿記事 by uvale » 15年前

はじめまして、「uvale」と申します。以前からこの掲示板はたびたび拝見さしていただいていました。
現在は「新版明解c++」にてc++の勉強をしているのですが、どうしてもできない問題がでてきたので、
質問さしていただきたいと思います。

問題
n行5列のint型2次元配列aの各行の最大値を、要素数nの1次元配列mに格納する関数maxlineを作成せよ。
void maxline(int a[/url][5],int m[/url],int n);
たとえば、aに受け取った3行5列の構成要素が{{1,2,5,3,8},{6,7,4,2,3},{3,0,5,9,1}}であれば、mに{8,7,9}を格納せよ。

という問題です。以下開発環境と自分の作ったプログラムです。

OS:Windows XP
コンパイラ:Borand C++
#include<iostream>

using namespace std;

void maxline(int a[/url][5],int m[/url],int n);

int main(void)
{
    int n;
    int a[/url][5]={0};
    int m[/url]={0};
    
    cout << "行数:";    cin >> n;
    
    for(int i=0;i<n;i++){
        for(int j=0;j<5;j++){
            cout << "a[" << i << "][" << j << "] = ";
            cin >> a[j];
        }
    }
    
    maxline(a,m,n);
    
    for(int i=0;i<n;i++){
        cout << "m[" << i << "] = " << m << '\n';
    }
}

void maxline(int a[/url][5],int m[/url],int n)
{
    int max;
    for(int i=0;i<n;i++){
        max=a[0];
        for(int j=1;j<5;j++){
            if(max<a[j]){
                max=a[j];
            }
        }
        m=max;
    }
}


プログラムは実行できるのですが、思ったとおりに動きません。
最初nに3を代入してもなぜか、ループが5回になってしまいます。
何度か見直したのですが、どうしても分かりません。
どうかご協力お願いします。

non

Re:ポインタ項の演習問題の質問です。

#2

投稿記事 by non » 15年前

> int a[/url][5]={0};
> int m[/url]={0};
これは、まずいですね。
行数が後で、入力されるのなら、メモリを動的に確保しなくてはいけません。

uvale

Re:ポインタ項の演習問題の質問です。

#3

投稿記事 by uvale » 15年前

>>nonさん
動的にという意味がよく分からず、索引で見てみたのですが、どうやらこれより後のページにでているよう見たいです。ということでとりあえず今回は、

const int n=3;
int a[n][5];
int m[n];

という風にしました。回答ありがとうございました。
また、分からないところがあったら質問させていただきたいと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る