C言語で行列の境界要素の合計を求めて出力するプログラム
行列が与えられたとき、その外周(境界)にある要素だけを出力し、それらの合計を求めて表示するのが本記事の目的です。ここでは、その考え方と具体的なC言語の実装例をわかりやすく解説します。
例
まず、次の3×3の行列を例に考えてみましょう。
入力された行列
1 2 3 4 5 6 7 8 9
境界行列(外周のみ表示)
1 2 3 4 6 7 8 9
このとき、境界要素は「1, 2, 3, 4, 6, 7, 8, 9」であり、中央の「5」は内部要素のため除外されます。
境界要素の合計:1 + 2 + 3 + 4 + 6 + 7 + 8 + 9 = 40
境界要素の合計を求めるロジック
境界要素かどうかの判定は、条件分岐を使って行います。具体的には、行番号 i が 0(最初の行)または m-1(最後の行)、もしくは列番号 j が 0(最初の列)または n-1(最後の列)に一致する場合、その要素は行列の境界上にあると判断できます。
for(i = 0; i<m; i++){
for(j = 0; j<n; j++){
if (i == 0 || j == 0 || i == m - 1 || j == n - 1){
printf("%d ", mat[i][j]);
sum = sum + mat[i][j];
}
else
printf(" ");
}
printf("\n");
}
境界上の要素であれば値を表示して合計に加算し、それ以外の場合は空白を表示することで、境界行列の形を保ったまま出力できます。
Cプログラム
以下は、行列の境界要素の合計を出力するCプログラムの完全なコードです。
#include<stdio.h>
#include<limits.h>
int main(){
int m, n, sum = 0;
printf("\nEnter the order of the matrix : ");
scanf("%d %d",&m,&n);
int i, j;
int mat[m][n];
printf("\nInput the matrix elements\n");
for(i = 0; i<m; i++){
for(j = 0; j<n; j++)
scanf("%d",&mat[i][j]);
}
printf("\nBoundary Matrix\n");
for(i = 0; i<m; i++){
for(j = 0; j<n; j++){
if (i == 0 || j == 0 || i == m - 1 || j == n - 1){
printf("%d ", mat[i][j]);
sum = sum + mat[i][j];
}
else
printf(" ");
}
printf("\n");
}
printf("\nSum of boundary is %d", sum);
}
このプログラムでは、まず行列の行数 m と列数 n を入力として受け取り、続いて各要素を読み込みます。その後、二重ループで全要素を走査しながら、境界判定の条件に合致する要素のみを表示して合計値に加算していきます。
実行結果
上記のプログラムをコンパイルして実行すると、次のような出力が得られます。
Enter the order of the matrix : 3 3 Input the matrix elements : 1 2 3 4 5 6 7 8 9 Boundary Matrix : 1 2 3 4 6 7 8 9 Sum of boundary is 40
このように、条件分岐による境界判定を組み込むだけで、任意のサイズの行列に対して外周要素の抽出と合計計算を簡単に実装できます。ぜひ実際にコードを動かして、挙動を確認してみてください。
-
Cプログラムで2次元行列の四隅の要素とその合計を出力する方法
概要 サイズ2×2以上の2次元配列(行列)が与えられたとき、その四隅に格納されているすべての要素を取り出し、合計を求めて出力するのが本記事のテーマです。 四隅の要素とは? 行数「r」、列数「c」(いずれも0から開始)をもつ行列 mat[r][c] を考えると、四隅の要素は次の4つになります。 左上:mat[0][0] 右上:mat[0][c-1] 左下:mat[r-1][0] 右下:mat[r-1][c-1] したがって、求める合計は次の式で表されます。mat[0][0] + mat[0][c-1] + mat[r-1][0] + mat[r-1][c-1]これらの四隅の要素を取得して加算
-
C++プログラム:配列内の各要素の最後の出現を相対的な順序で出力する方法
配列 a[] が与えられたとき、リスト内の各要素について最後に出現したものだけを出力するのが本記事の目的です。ここでは単純に重複要素を削除するだけでなく、各要素が配列内で最後に出現したタイミングに基づき、元の相対的な順序を維持したまま出力する必要があります。例えば、6つの要素を持つ配列 {1, 3, 2, 3, 1, 2} には重複した値が含まれています。この場合、期待される結果は「3 1 2」になります。入力例と出力例Input: a[]={4,2,2,4,1,5,1} Output : 2 4 5 1この例では、「2」はインデックス2で最後に出現し、「4」はインデックス3、「5」はインデッ