二次元配列の引渡し
二次元配列の引渡し
ちょっとわからないことがあったので質問させていただきます.
以下のような場合に二次元配列を引数に持ってくることって出来ますか?
○プログラム内容○
1.1列10データ,5列の二次元配列がある.
2.各列の要素ごとの平均をとる
1列 10 20 30 40 50・・・
2列 12 19 31 40 55・・・
・
・
5列 ・
平均 11 19 32 41 54・・・
3.新しいデータ配列を持ってくるために,1列目のデータに2列目のデータを入れ,
2列目のデータに3列目のデータを入れていく・・・そして最後の5列目に新しいデータを入れる
○プログラム○
#include <stdio.h>
#define data_number 10 //データ数
#define number 5 //データ列の個数
float a[data_numbe[/url][numbe[/url],b[data_numbe[/url][numbe[/url]; //データ配列
float a_ave[data_numbe[/url],b_ave[data_numbe[/url]; //データ配列の平均
void average(?float c[/url][/url]?,float *ave);
void main()
{
average(?a?,a_ave);
average(?b?,a_ave);
}
void average(?float c[/url][/url]?,float *ave)
{
int i,j;
float newdata[data_numbe[/url]; //新しいデータ
//各列の要素ごとの平均
for(i=0;i<number;i++){
ave=0;
for(j=0;j<data_number;j++){
ave+=c[j];
}
ave=ave/number;
}
//データの更新(1列目を古いデータ,5列目を新しいデータと考える)
for(i=0;i<number-1;i++){
for(j=0;j<data_number;i++){
c[j]=c[j+1]; //ひとつ上の列に移動
}
}
for(j=0;j<data_number;j++){
c[number-1]=newdata; //新しいデータを5列目に入れる
}
}
こんな感じで動かそうとするときの二次元配列の引数の仕方がわかりません.
二次元配列の1列分だけを引数にするんではなくすべての列を渡すにはどうしたらいいんでしょうか?
以下のような場合に二次元配列を引数に持ってくることって出来ますか?
○プログラム内容○
1.1列10データ,5列の二次元配列がある.
2.各列の要素ごとの平均をとる
1列 10 20 30 40 50・・・
2列 12 19 31 40 55・・・
・
・
5列 ・
平均 11 19 32 41 54・・・
3.新しいデータ配列を持ってくるために,1列目のデータに2列目のデータを入れ,
2列目のデータに3列目のデータを入れていく・・・そして最後の5列目に新しいデータを入れる
○プログラム○
#include <stdio.h>
#define data_number 10 //データ数
#define number 5 //データ列の個数
float a[data_numbe[/url][numbe[/url],b[data_numbe[/url][numbe[/url]; //データ配列
float a_ave[data_numbe[/url],b_ave[data_numbe[/url]; //データ配列の平均
void average(?float c[/url][/url]?,float *ave);
void main()
{
average(?a?,a_ave);
average(?b?,a_ave);
}
void average(?float c[/url][/url]?,float *ave)
{
int i,j;
float newdata[data_numbe[/url]; //新しいデータ
//各列の要素ごとの平均
for(i=0;i<number;i++){
ave=0;
for(j=0;j<data_number;j++){
ave+=c[j];
}
ave=ave/number;
}
//データの更新(1列目を古いデータ,5列目を新しいデータと考える)
for(i=0;i<number-1;i++){
for(j=0;j<data_number;i++){
c[j]=c[j+1]; //ひとつ上の列に移動
}
}
for(j=0;j<data_number;j++){
c[number-1]=newdata; //新しいデータを5列目に入れる
}
}
こんな感じで動かそうとするときの二次元配列の引数の仕方がわかりません.
二次元配列の1列分だけを引数にするんではなくすべての列を渡すにはどうしたらいいんでしょうか?
Re:二次元配列の引渡し
#include <stdio.h>
#define data_number 10 //データ数
#define number 5 //データ列の個数
float a[data_numbe[/url][numbe[/url],b[data_numbe[/url][numbe[/url]; //データ配列
float a_ave[data_numbe[/url],b_ave[data_numbe[/url]; //データ配列の平均
void average(float c[/url][2],float *ave);
void main()
{
//average(a,a_ave);
//average(?b?,a_ave);
}
void average(float c[/url][2],float *ave)
{
int i,j;
float newdata[data_numbe[/url]; //新しいデータ
//各列の要素ごとの平均
for(i=0;i<data_number;i++){
for(j=0,ave=0;j<number;j++){
ave+=c[j];
}
ave=ave/number;
}
//データの更新(1列目を古いデータ,5列目を新しいデータと考える)
for(i=0;i<number-1;i++){
for(j=0;j<data_number;i++){
c[j]=c[j][i+1]; //ひとつ上の列に移動
}
}
for(i=0;i<data_number;i++){
c[number-1]=newdata; //新しいデータを5列目に入れる
}
}
#define data_number 10 //データ数
#define number 5 //データ列の個数
float a[data_numbe[/url][numbe[/url],b[data_numbe[/url][numbe[/url]; //データ配列
float a_ave[data_numbe[/url],b_ave[data_numbe[/url]; //データ配列の平均
void average(float c[/url][2],float *ave);
void main()
{
//average(a,a_ave);
//average(?b?,a_ave);
}
void average(float c[/url][2],float *ave)
{
int i,j;
float newdata[data_numbe[/url]; //新しいデータ
//各列の要素ごとの平均
for(i=0;i<data_number;i++){
for(j=0,ave=0;j<number;j++){
ave+=c[j];
}
ave=ave/number;
}
//データの更新(1列目を古いデータ,5列目を新しいデータと考える)
for(i=0;i<number-1;i++){
for(j=0;j<data_number;i++){
c[j]=c[j][i+1]; //ひとつ上の列に移動
}
}
for(i=0;i<data_number;i++){
c[number-1]=newdata; //新しいデータを5列目に入れる
}
}
Re:二次元配列の引渡し
すみません、電話がはいって遅くなりました。
では先に書いてくださったプログラムのおかしなところからみていきましょう。
以下のプログラムは書いていただいたプログラムにコメントしてあるだけです。
#include <stdio.h>
#define data_number 10 //データ数
#define number 5 //データ列の個数
//グローバル変数にすると意味が無くなる。
//初期化しないといけません。
float a[data_numbe[/url][numbe[/url],b[data_numbe[/url][numbe[/url]; //データ配列
float a_ave[data_numbe[/url],b_ave[data_numbe[/url]; //データ配列の平均
//要素数が2?! 要素数はdata_numberです。
//aveは配列ですからポインタはいりません。
void average(float c[/url][2],float *ave);
void main()
{
//average(a,a_ave);
//average(?b?,a_ave);
}
//要素数が2?! 要素数はdata_numberです。
//aveは配列ですからポインタはいりません。
void average(float c[/url][2],float *ave)
{
int i,j;
//初期化が必要です。
float newdata[data_numbe[/url]; //新しいデータ
//for文が少しへんです。それに5*10行列が、10*5行列になっています。
//平均の考え方はOK。
for(i=0;i<data_number;i++){
for(j=0,ave=0;j<number;j++){
ave+=c[j];
}
ave=ave/number;
}
//データの更新(1列目を古いデータ,5列目を新しいデータと考える)
//列と行をいれちがえてしまっています。[j]でなければなりません。
for(i=0;i<number-1;i++){
for(j=0;j<data_number;i++){
c[j]=c[j][i+1]; //ひとつ上の列に移動
}
}
//これでは前の配列要素に渡しています。しかも列は10個もありません。
//列を操作するならi-1で要素を変化させなければなりません。
for(i=0;i<data_number;i++){
c[number-1]=newdata; //新しいデータを5列目に入れる
}
}
上記の事を踏まえて、直したプログラムを書きました。
グローバル変数にすると意味がなくなるのでグローバル変数は消しました。
具体的な数値を入力してサンプルが表示できるようになっています。
初期化のしかたとして
float a_ave[10]={0,};
このようにかくと全て0で初期化が出来ます。
プログラムはこちらからダウンロードしてください。
http://dixq.net/board/program/arr.cpp
#include <stdio.h>
#define data_number 10 //データ数
#define number 5 //データ列の個数
void average(float c[/url][data_numbe[/url],float ave[/url])
{
int i,j;
float newdata[data_numbe[/url]={1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,2.2};
//新しいデータ
//各列の要素ごとの平均
//iが列、jが要素ですから。要素はi=5個 j=10個
for(i=0;i<number;i++){
for(j=0;j<data_number;j++)
ave+=c[i][j];
ave[i]/=data_number;
}
//データの更新(1列目を古いデータ,5列目を新しいデータと考える)
//次の「列」ですからiを一つ先にしてやらないといけません。
for(i=0;i<number-1;i++){
for(j=0;j<data_number;j++){
c[i][j]=c[i+1][j]; //ひとつ上の列に移動
}
}
//要素を使っている事を示すためjを使用しています。
//[☆][/url] この☆が列です。
for(j=0;j<data_number;j++){
c[number-1][j]=newdata[j]; //新しいデータを5列目に入れる
}
}
void disp(float c[/url][data_numbe[/url],float ave[/url]){
int i,j;
/*アベレージ表示*/
printf("ave\n");
for(i=0;i<number;i++)
printf("%.1f ",ave[i]);
printf("\n\n");
/*二次元配列表示*/
for(i=0;i<number;i++){
for(j=0;j<data_number;j++)
printf("%.1f ",c[i][j]);
printf("\n\n");
}
}
void main()
{
int i,j;
//データ配列
float a_ave[numbe[/url]={0,},b_ave[numbe[/url]={0,}; //データ配列の平均
float a[numbe[/url][data_numbe[/url]={
{0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,2},
{2,2,2,2,2,2,2,2,2,3},
{3,3,3,3,3,3,3,3,3,4},
{4,4,4,4,4,4,4,4,4,5}
},
b[numbe[/url][data_numbe[/url]={
{5,5,5,5,5,5,5,5,5,6},
{6,6,6,6,6,6,6,6,6,7},
{7,7,7,7,7,7,7,7,7,8},
{8,8,8,8,8,8,8,8,8,9},
{9,9,9,9,9,9,9,9,9,10}
};
printf("変更前\n");
disp(a,a_ave);
disp(b,b_ave);
average(a,a_ave);
average(b,b_ave);
printf("変更後\n");
disp(a,a_ave);
disp(b,b_ave);
}
二次元配列の初期化は、平均がきちんと行われているかどうかを調べるために
列ごとに一つだけ異なる値がいれてあります。
ですから初期状態だと、a[0]のアベレージは0.1になるはずですね。
では先に書いてくださったプログラムのおかしなところからみていきましょう。
以下のプログラムは書いていただいたプログラムにコメントしてあるだけです。
#include <stdio.h>
#define data_number 10 //データ数
#define number 5 //データ列の個数
//グローバル変数にすると意味が無くなる。
//初期化しないといけません。
float a[data_numbe[/url][numbe[/url],b[data_numbe[/url][numbe[/url]; //データ配列
float a_ave[data_numbe[/url],b_ave[data_numbe[/url]; //データ配列の平均
//要素数が2?! 要素数はdata_numberです。
//aveは配列ですからポインタはいりません。
void average(float c[/url][2],float *ave);
void main()
{
//average(a,a_ave);
//average(?b?,a_ave);
}
//要素数が2?! 要素数はdata_numberです。
//aveは配列ですからポインタはいりません。
void average(float c[/url][2],float *ave)
{
int i,j;
//初期化が必要です。
float newdata[data_numbe[/url]; //新しいデータ
//for文が少しへんです。それに5*10行列が、10*5行列になっています。
//平均の考え方はOK。
for(i=0;i<data_number;i++){
for(j=0,ave=0;j<number;j++){
ave+=c[j];
}
ave=ave/number;
}
//データの更新(1列目を古いデータ,5列目を新しいデータと考える)
//列と行をいれちがえてしまっています。[j]でなければなりません。
for(i=0;i<number-1;i++){
for(j=0;j<data_number;i++){
c[j]=c[j][i+1]; //ひとつ上の列に移動
}
}
//これでは前の配列要素に渡しています。しかも列は10個もありません。
//列を操作するならi-1で要素を変化させなければなりません。
for(i=0;i<data_number;i++){
c[number-1]=newdata; //新しいデータを5列目に入れる
}
}
上記の事を踏まえて、直したプログラムを書きました。
グローバル変数にすると意味がなくなるのでグローバル変数は消しました。
具体的な数値を入力してサンプルが表示できるようになっています。
初期化のしかたとして
float a_ave[10]={0,};
このようにかくと全て0で初期化が出来ます。
プログラムはこちらからダウンロードしてください。
http://dixq.net/board/program/arr.cpp
#include <stdio.h>
#define data_number 10 //データ数
#define number 5 //データ列の個数
void average(float c[/url][data_numbe[/url],float ave[/url])
{
int i,j;
float newdata[data_numbe[/url]={1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,2.2};
//新しいデータ
//各列の要素ごとの平均
//iが列、jが要素ですから。要素はi=5個 j=10個
for(i=0;i<number;i++){
for(j=0;j<data_number;j++)
ave+=c[i][j];
ave[i]/=data_number;
}
//データの更新(1列目を古いデータ,5列目を新しいデータと考える)
//次の「列」ですからiを一つ先にしてやらないといけません。
for(i=0;i<number-1;i++){
for(j=0;j<data_number;j++){
c[i][j]=c[i+1][j]; //ひとつ上の列に移動
}
}
//要素を使っている事を示すためjを使用しています。
//[☆][/url] この☆が列です。
for(j=0;j<data_number;j++){
c[number-1][j]=newdata[j]; //新しいデータを5列目に入れる
}
}
void disp(float c[/url][data_numbe[/url],float ave[/url]){
int i,j;
/*アベレージ表示*/
printf("ave\n");
for(i=0;i<number;i++)
printf("%.1f ",ave[i]);
printf("\n\n");
/*二次元配列表示*/
for(i=0;i<number;i++){
for(j=0;j<data_number;j++)
printf("%.1f ",c[i][j]);
printf("\n\n");
}
}
void main()
{
int i,j;
//データ配列
float a_ave[numbe[/url]={0,},b_ave[numbe[/url]={0,}; //データ配列の平均
float a[numbe[/url][data_numbe[/url]={
{0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,2},
{2,2,2,2,2,2,2,2,2,3},
{3,3,3,3,3,3,3,3,3,4},
{4,4,4,4,4,4,4,4,4,5}
},
b[numbe[/url][data_numbe[/url]={
{5,5,5,5,5,5,5,5,5,6},
{6,6,6,6,6,6,6,6,6,7},
{7,7,7,7,7,7,7,7,7,8},
{8,8,8,8,8,8,8,8,8,9},
{9,9,9,9,9,9,9,9,9,10}
};
printf("変更前\n");
disp(a,a_ave);
disp(b,b_ave);
average(a,a_ave);
average(b,b_ave);
printf("変更後\n");
disp(a,a_ave);
disp(b,b_ave);
}
二次元配列の初期化は、平均がきちんと行われているかどうかを調べるために
列ごとに一つだけ異なる値がいれてあります。
ですから初期状態だと、a[0]のアベレージは0.1になるはずですね。
Re:二次元配列の引渡し
ごめんなさい.うまく伝わってなかったかもしれないです.
平均化したいのは,列ごとです.
a[/url][0]=10 20 30 40 50
a[/url][1]=11 21 31 41 51
a[/url][2]=10.5 20.5 30.5 40.5 50.5
だとしたときに縦に平均したいんです.管理人さんが書いてくださったプログラムは横に平均してますよね?
平均化したいのは,列ごとです.
a[/url][0]=10 20 30 40 50
a[/url][1]=11 21 31 41 51
a[/url][2]=10.5 20.5 30.5 40.5 50.5
だとしたときに縦に平均したいんです.管理人さんが書いてくださったプログラムは横に平均してますよね?
Re:二次元配列の引渡し
列と行って言葉ご存知でしょうか?
列は縦の分割として表現したいんですよね?
でしたら
1列 10 20 30 40 50・・・
2列 12 19 31 40 55・・・
・
・
5列 ・
これは
1行 10 20 30 40 50・・・
2行 12 19 31 40 55・・・
・
・
5行 ・
という意味ですね?。
「最後の5列目に新しいデータを入れる」
というのは5行目ということでいいのでしょうか?
列は縦の分割として表現したいんですよね?
でしたら
1列 10 20 30 40 50・・・
2列 12 19 31 40 55・・・
・
・
5列 ・
これは
1行 10 20 30 40 50・・・
2行 12 19 31 40 55・・・
・
・
5行 ・
という意味ですね?。
「最後の5列目に新しいデータを入れる」
というのは5行目ということでいいのでしょうか?
Re:二次元配列の引渡し
ん~・・やっぱ説明文読んでも両方に取れてしまう・・。
横方向を「行」
縦方向を「列」として
もう一度説明文を書いていただけませんでしょうか?
> //データの更新(1列目を古いデータ,5列目を新しいデータと考える)
> for(i=0;i<number-1;i++){
> for(j=0;j<data_number;i++){
> c[j]=c[j][i+1]; //ひとつ上の列に移動
> }
> }
と書いてありますけど、列は10個ありますよね?
行のことですか?
横方向を「行」
縦方向を「列」として
もう一度説明文を書いていただけませんでしょうか?
> //データの更新(1列目を古いデータ,5列目を新しいデータと考える)
> for(i=0;i<number-1;i++){
> for(j=0;j<data_number;i++){
> c[j]=c[j][i+1]; //ひとつ上の列に移動
> }
> }
と書いてありますけど、列は10個ありますよね?
行のことですか?
Re:二次元配列の引渡し
2次元の世界を
高
さ
↑
→水平
だとすると。
人は水平方向にしか歩いて行けないですよね。
水平方向にしか歩いて「行」けない
水平方向が「行」
という風に私は覚えました。
参考になってないかもしれないですけど、よければそう覚えてみてください^^;
高
さ
↑
→水平
だとすると。
人は水平方向にしか歩いて行けないですよね。
水平方向にしか歩いて「行」けない
水平方向が「行」
という風に私は覚えました。
参考になってないかもしれないですけど、よければそう覚えてみてください^^;
Re:二次元配列の引渡し
1行10個(列)のデータ列があります.それが5行あります.
それで1行目の1列,2行目の1列・・・5行目の1列を平均します.
そして,2行目を1行目に,3行目を2行目に・・・5行目を4行目に
最後に新しいデータを5行目に入れます
10列
○○○○○○○○○○
××××××××××
5行 △△△△△△△△△△
□□□□□□□□□□
◎◎◎◎◎◎◎◎◎◎←新しいデータを入れる(行)
↑
ここを縦に平均
それで1行目の1列,2行目の1列・・・5行目の1列を平均します.
そして,2行目を1行目に,3行目を2行目に・・・5行目を4行目に
最後に新しいデータを5行目に入れます
10列
○○○○○○○○○○
××××××××××
5行 △△△△△△△△△△
□□□□□□□□□□
◎◎◎◎◎◎◎◎◎◎←新しいデータを入れる(行)
↑
ここを縦に平均
Re:二次元配列の引渡し
コレでいいと思うんですが、どうでしょう。
先に実行結果の写真見てもらったほうがいいかもしれません。
アベレージは要素を移動する前の平均ですから
1.2とかは平均に含まれていませんのでご注意を。
#include <stdio.h>
#define data_number 10 //データ数
#define number 5 //データ列の個数
void average(float c[/url][data_numbe[/url],float ave[/url])
{
int i,j;
float newdata[data_numbe[/url]={1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,2.2}; //新しいデータ
//各列の要素ごとの平均
for(j=0;j<data_number;j++){
for(i=0;i<number;i++)
ave[j]+=c[j];
ave[j]/=number;
}
//データの更新(1列目を古いデータ,5列目を新しいデータと考える)
for(i=0;i<number-1;i++){
for(j=0;j<data_number;j++){
c[j]=c[i+1][j]; //ひとつ上の列に移動
}
}
for(j=0;j<data_number;j++){
c[number-1][j]=newdata[j]; //新しいデータを5列目に入れる
}
}
void disp(float c[/url][data_numbe[/url],float ave[/url]){
int i,j;
printf("ave\n");
for(i=0;i<data_number;i++)
printf("%.1f ",ave);
printf("\n配列要素\n");
for(i=0;i<number;i++){
printf("行%d ",i);
for(j=0;j<data_number;j++)
printf("%.1f ",c[j]);
printf("\n");
}
}
void main()
{
int i,j;
//データ配列
float a_ave[data_numbe[/url]={0,},b_ave[data_numbe[/url]={0,}; //データ配列の平均
float a[numbe[/url][data_numbe[/url]={
{0,5,1,6,2,7,3,8,4,8},
{1,6,2,7,3,8,4,9,5,9},
{2,7,3,8,4,9,5,0,6,1},
{3,8,4,9,5,0,6,1,7,2},
{4,9,5,0,6,1,7,2,8,3}
},
b[numbe[/url][data_numbe[/url]={
{9,4,8,3,7,2,6,1,5,0},
{8,3,7,2,6,1,5,0,4,9},
{7,2,6,1,5,0,4,9,3,8},
{6,1,5,0,4,9,3,8,2,7},
{5,0,4,9,3,8,2,7,1,6}
};
printf("変更前\n");
disp(a,a_ave);
disp(b,b_ave);
average(a,a_ave);
average(b,b_ave);
printf("\n変更後\n");
disp(a,a_ave);
disp(b,b_ave);
}
先に実行結果の写真見てもらったほうがいいかもしれません。
アベレージは要素を移動する前の平均ですから
1.2とかは平均に含まれていませんのでご注意を。
#include <stdio.h>
#define data_number 10 //データ数
#define number 5 //データ列の個数
void average(float c[/url][data_numbe[/url],float ave[/url])
{
int i,j;
float newdata[data_numbe[/url]={1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,2.2}; //新しいデータ
//各列の要素ごとの平均
for(j=0;j<data_number;j++){
for(i=0;i<number;i++)
ave[j]+=c[j];
ave[j]/=number;
}
//データの更新(1列目を古いデータ,5列目を新しいデータと考える)
for(i=0;i<number-1;i++){
for(j=0;j<data_number;j++){
c[j]=c[i+1][j]; //ひとつ上の列に移動
}
}
for(j=0;j<data_number;j++){
c[number-1][j]=newdata[j]; //新しいデータを5列目に入れる
}
}
void disp(float c[/url][data_numbe[/url],float ave[/url]){
int i,j;
printf("ave\n");
for(i=0;i<data_number;i++)
printf("%.1f ",ave);
printf("\n配列要素\n");
for(i=0;i<number;i++){
printf("行%d ",i);
for(j=0;j<data_number;j++)
printf("%.1f ",c[j]);
printf("\n");
}
}
void main()
{
int i,j;
//データ配列
float a_ave[data_numbe[/url]={0,},b_ave[data_numbe[/url]={0,}; //データ配列の平均
float a[numbe[/url][data_numbe[/url]={
{0,5,1,6,2,7,3,8,4,8},
{1,6,2,7,3,8,4,9,5,9},
{2,7,3,8,4,9,5,0,6,1},
{3,8,4,9,5,0,6,1,7,2},
{4,9,5,0,6,1,7,2,8,3}
},
b[numbe[/url][data_numbe[/url]={
{9,4,8,3,7,2,6,1,5,0},
{8,3,7,2,6,1,5,0,4,9},
{7,2,6,1,5,0,4,9,3,8},
{6,1,5,0,4,9,3,8,2,7},
{5,0,4,9,3,8,2,7,1,6}
};
printf("変更前\n");
disp(a,a_ave);
disp(b,b_ave);
average(a,a_ave);
average(b,b_ave);
printf("\n変更後\n");
disp(a,a_ave);
disp(b,b_ave);
}
Re:二次元配列の引渡し
これでOKです.ありがとうございました★
今まで配列の0の初期化はforを使ってまわしてたんですど,簡単に初期化する方法があったなんて初めて知りました.
いつもこのサイトを拝見させていただいてます.人の質問を見て自分なりに考えたりしています.
これからもお邪魔させていただきますね
今まで配列の0の初期化はforを使ってまわしてたんですど,簡単に初期化する方法があったなんて初めて知りました.
いつもこのサイトを拝見させていただいてます.人の質問を見て自分なりに考えたりしています.
これからもお邪魔させていただきますね
Re:二次元配列の引渡し
あ、サンプルお渡ししてませんでした。
それから、ちょっと見やすく変更しました。
http://dixq.net/board/program/arr.cpp
写真みたら平均が見やすくなっていると思います。
解決してよかったです♪
これからもお気軽にご活用くださいまし☆
それから、ちょっと見やすく変更しました。
http://dixq.net/board/program/arr.cpp
写真みたら平均が見やすくなっていると思います。
解決してよかったです♪
これからもお気軽にご活用くださいまし☆
Re:二次元配列の引渡し
配列の初期化について予備知識を一つ。
先ほど
int a[10]={0,};
とすれば0で初期化できるといいましたが、
int a[10]={1,};
とすれば1で初期化されるわけではありません。
初期化するとき書かなかった要素は0になるのです。
ですから
int a[10]={};
とすれば、同じ事ができます。わざわざ1個だけ0と書いたのは
0で初期化されていることを明示的に示すためで深い意味はありません。
他にも初期化のしかたは沢山あります。
中でも最もよいのはメモリ領域の確保と一緒に初期化すること。
メモリ領域の確保はアプリやソフトを作る時に大切です。
実行する前に実行できる領域が本当にあるかどうか調べるのです。
それと同時に初期化できます。
#include <stdio.h>
#include <stdlib.h>
void main(){
int *mem;
//1つのintのバイトを3つ分領域確保し0で初期化する。
mem = (int *)calloc(3, sizeof(int));
printf("mem[0]=%d\n", mem[0]);
printf("mem[1]=%d\n", mem[1]);
printf("mem[2]=%d\n", mem[2]);
free(mem);
}
実行結果
mem[0]=0
mem[1]=0
mem[2]=0
http://always-pg.com/c/runtime_rd/memory/calloc.html
この関数に関してはこちらに詳細が書かれています。
標準関数の使い方を覚える時はこちらが便利です。
http://always-pg.com/c/runtime_rd/
他にもこんな事もできます。
#include <stdio.h>
#include <string.h>
void main()
{
char str[/url] = "0123456789";
memset(str+2,'*', 5);
printf("%s\n",str);
}
実行結果
01*****789
memsetは第一引数のアドレスから第3引数のバイト分第二引数で埋めます。
Cは書き方しだいで本当にいろんなことができます。
参考にしてください。
先ほど
int a[10]={0,};
とすれば0で初期化できるといいましたが、
int a[10]={1,};
とすれば1で初期化されるわけではありません。
初期化するとき書かなかった要素は0になるのです。
ですから
int a[10]={};
とすれば、同じ事ができます。わざわざ1個だけ0と書いたのは
0で初期化されていることを明示的に示すためで深い意味はありません。
他にも初期化のしかたは沢山あります。
中でも最もよいのはメモリ領域の確保と一緒に初期化すること。
メモリ領域の確保はアプリやソフトを作る時に大切です。
実行する前に実行できる領域が本当にあるかどうか調べるのです。
それと同時に初期化できます。
#include <stdio.h>
#include <stdlib.h>
void main(){
int *mem;
//1つのintのバイトを3つ分領域確保し0で初期化する。
mem = (int *)calloc(3, sizeof(int));
printf("mem[0]=%d\n", mem[0]);
printf("mem[1]=%d\n", mem[1]);
printf("mem[2]=%d\n", mem[2]);
free(mem);
}
実行結果
mem[0]=0
mem[1]=0
mem[2]=0
http://always-pg.com/c/runtime_rd/memory/calloc.html
この関数に関してはこちらに詳細が書かれています。
標準関数の使い方を覚える時はこちらが便利です。
http://always-pg.com/c/runtime_rd/
他にもこんな事もできます。
#include <stdio.h>
#include <string.h>
void main()
{
char str[/url] = "0123456789";
memset(str+2,'*', 5);
printf("%s\n",str);
}
実行結果
01*****789
memsetは第一引数のアドレスから第3引数のバイト分第二引数で埋めます。
Cは書き方しだいで本当にいろんなことができます。
参考にしてください。
Re:音楽ファイルについて
変換するソフトは星の数ほど出回っているんで
検索ググればたいてい出てきますよ^^
http://www.google.co.jp/search?hl=ja&q=WMA+MP3&lr=
http://www.google.co.jp/search?hl=ja&q= ... %8F%9B&lr=
こんな感じでお好きなものを使えばよろしいかと^^
検索ググればたいてい出てきますよ^^
http://www.google.co.jp/search?hl=ja&q=WMA+MP3&lr=
http://www.google.co.jp/search?hl=ja&q= ... %8F%9B&lr=
こんな感じでお好きなものを使えばよろしいかと^^
Re:音楽ファイルについて
おお~、ありがとうございます。
ついでに質問なのですが、著作権保護されてるようなファイルの保護をとることはできますか?違法なんでしょうか?別に人に回すわけでなく自分で聞くだけなのですが・・。
ついでに質問なのですが、著作権保護されてるようなファイルの保護をとることはできますか?違法なんでしょうか?別に人に回すわけでなく自分で聞くだけなのですが・・。
Re:音楽ファイルについて
コピーガード除去ですね。
出来ますよ。
それはCDですか?CDでしたら
CD Manipulatorが一般的です。
http://www.google.co.jp/search?hl=ja&q= ... urator&lr=
使い方簡単ですけどもしわからなかったら聞いてください。
このソフトは一時期非難されたようですけど、とっても使いやすいソフトです。
コピーガード除去しても個人の使用範囲で使うのでしたら問題ないと思います。
DVDではDVDシュリンク使うのが一般的でしょう。
http://www.google.co.jp/search?hl=ja&q= ... Shrink&lr=
リッピングとか自分でしたければリッピングソフト使ったりします。
もし深く知りたいんでしたら、パソコン誌見てみるといいですよ。
「DVDコピー」とか大きく書いたパソコン雑誌わんさかありますから。
シュリンクは何もしなくてもこのソフトがコピーガード除去してくれるようで、使いやすいです。
※この回答をご覧になったかた、著作権のあるデータを不正に複製し、配布、公開する事は違法です。Winnyなどでアップロードしたりしないようにしましょう。
出来ますよ。
それはCDですか?CDでしたら
CD Manipulatorが一般的です。
http://www.google.co.jp/search?hl=ja&q= ... urator&lr=
使い方簡単ですけどもしわからなかったら聞いてください。
このソフトは一時期非難されたようですけど、とっても使いやすいソフトです。
コピーガード除去しても個人の使用範囲で使うのでしたら問題ないと思います。
DVDではDVDシュリンク使うのが一般的でしょう。
http://www.google.co.jp/search?hl=ja&q= ... Shrink&lr=
リッピングとか自分でしたければリッピングソフト使ったりします。
もし深く知りたいんでしたら、パソコン誌見てみるといいですよ。
「DVDコピー」とか大きく書いたパソコン雑誌わんさかありますから。
シュリンクは何もしなくてもこのソフトがコピーガード除去してくれるようで、使いやすいです。
※この回答をご覧になったかた、著作権のあるデータを不正に複製し、配布、公開する事は違法です。Winnyなどでアップロードしたりしないようにしましょう。
Re:音楽ファイルについて
CDの方は今教えてもらったのでやっていけそうです。ありがとうございます。
ですが、シュリンクで少し疑問が・・・。前、シュリンクでDVDコピーしようと思ったのですが、コピーガードエラーみたいなの(確かそんなのだった・・・)が出てコピーできないものがありました。いえ、むしろ出来ないものの方が多かったです。なぜでしょう?友達のパソコンでそれをやってみるとできるのに。。。
友達が言うには性能の差なんじゃないかとか・・。そんなことってありえますか?もしそうなら、僕の『えふえむぶい』はダメな奴なのですか?うぅ(泣)教えてください。
ですが、シュリンクで少し疑問が・・・。前、シュリンクでDVDコピーしようと思ったのですが、コピーガードエラーみたいなの(確かそんなのだった・・・)が出てコピーできないものがありました。いえ、むしろ出来ないものの方が多かったです。なぜでしょう?友達のパソコンでそれをやってみるとできるのに。。。
友達が言うには性能の差なんじゃないかとか・・。そんなことってありえますか?もしそうなら、僕の『えふえむぶい』はダメな奴なのですか?うぅ(泣)教えてください。
Re:音楽ファイルについて
いやスペックの違いでコピーが出来たり出来なかったりはしないでしょう。
DVDコピーは4年くらい前はよくやってたんですけど、最近全然やってないんで、使ってません。
最近のDVDはより強化されてるんですかね?
ちょっと調べてみます。
DVDコピーに興味がおありなら今後ご自分でもコンビニとかにもあるんで、パソコン誌読んでみてください^^
DVDコピーは4年くらい前はよくやってたんですけど、最近全然やってないんで、使ってません。
最近のDVDはより強化されてるんですかね?
ちょっと調べてみます。
DVDコピーに興味がおありなら今後ご自分でもコンビニとかにもあるんで、パソコン誌読んでみてください^^
Re:音楽ファイルについて
サイトのうけうり
最近はコピーガードが強化され、DVDのコピーを防ぐ為にSONYが開発した「ArccOS」がかかっているものがある。
これがかかっているDVDはShrinkやリッパーでコピーできない。
ということらしいです。
最近はコピーガードが強化され、DVDのコピーを防ぐ為にSONYが開発した「ArccOS」がかかっているものがある。
これがかかっているDVDはShrinkやリッパーでコピーできない。
ということらしいです。
Re:音楽ファイルについて
あるサイトにこのような記述があります。
±R DL(8.5GB)を使用したコピー方法を追加。
ARccOSプロテクト解除に対応したDVD Fab DecrypterとSONICRecordNOW!を使用したコピー方法を紹介。
DVD Fab Decrypter+Record Nowでコピー(メニュー特典映像有り)
http://haring.bizz.st/dvd-kowaza/dvdfab ... rypter.htm
±R DL(8.5GB)を使用したコピー方法を追加。
ARccOSプロテクト解除に対応したDVD Fab DecrypterとSONICRecordNOW!を使用したコピー方法を紹介。
DVD Fab Decrypter+Record Nowでコピー(メニュー特典映像有り)
http://haring.bizz.st/dvd-kowaza/dvdfab ... rypter.htm
Re:音楽ファイルについて
しかし、ここで疑問が残ります。
僕はその友達にパソコン誌を借りてシュリンクをインストしました。つまり友達が使っているものと僕が使っているものは同じだということになります。スペックでなければ何が要因しているのでしょうか?
僕はその友達にパソコン誌を借りてシュリンクをインストしました。つまり友達が使っているものと僕が使っているものは同じだということになります。スペックでなければ何が要因しているのでしょうか?
Re:音楽ファイルについて
エラーでとまったりするわけじゃないんですか?
容量がオーバーだとか。
ソフトを使用してコピーするのであればそのソフトの最低環境を満たしていなければ動作しないと思います。
OSが対象じゃないとか。
う~ん、そうじゃない場合は・・なんでしょうね;
容量がオーバーだとか。
ソフトを使用してコピーするのであればそのソフトの最低環境を満たしていなければ動作しないと思います。
OSが対象じゃないとか。
う~ん、そうじゃない場合は・・なんでしょうね;
Re:音楽ファイルについて
コピープロテクトエラーっぽいのは出ます。容量オーパーってメモリーのことですか?HDには余裕がありますが・・・。それにソフト自体は動きます。現に、コピーできたDVDもありますから。
ってか新しいパソ凄いですね。なんなんですかあれは!HD500GB!!!?管理人さんがTBに手を出すのはすぐかもしれませんね。。。しかも、めっちゃ豪華な飾りつきじゃあないですか。
正直、感服いたしました。相当先になるでしょうが、今度パソ買うときは部品買って、ここ参照して作らさせていただきます。それまではこのFMVこそが我が恋人です。(こんなこと言ってたら「まなみ化」するかもしれませんね)
はぁ。管理人さん今回えらく遅かったから、バイクで事故にでもあわれたんじゃないかと心配しました。ご無事で何よりでした・・。
追伸:ウォークマン買っちゃいました。といっても品切れ状態で、届くのは1週間後なんですけど・・。
ってか新しいパソ凄いですね。なんなんですかあれは!HD500GB!!!?管理人さんがTBに手を出すのはすぐかもしれませんね。。。しかも、めっちゃ豪華な飾りつきじゃあないですか。
正直、感服いたしました。相当先になるでしょうが、今度パソ買うときは部品買って、ここ参照して作らさせていただきます。それまではこのFMVこそが我が恋人です。(こんなこと言ってたら「まなみ化」するかもしれませんね)
はぁ。管理人さん今回えらく遅かったから、バイクで事故にでもあわれたんじゃないかと心配しました。ご無事で何よりでした・・。
追伸:ウォークマン買っちゃいました。といっても品切れ状態で、届くのは1週間後なんですけど・・。
Re:音楽ファイルについて
テスト終わりました。今から法事で徳島いってきます。帰るのは月曜の夜かな?
C言語講座コピーしたんで、帰ってくるまでに勉強しときます。
それでは!(゜∀゜)ノシ
C言語講座コピーしたんで、帰ってくるまでに勉強しときます。
それでは!(゜∀゜)ノシ
Re:音楽ファイルについて
ごめんなさい、Shrinkについて、これ以上知識がありません:;
コピープロテクトエラーなら、コピーできないDVDだったんでしょう。
ArccOSがかかっているDVDとか。
しかし同じ方法で友達のパソコンでは出来たというのでしたら、原因不明です・・。
ArccOSもShrinkではなく、上記の方法でコピーガード除去できるようです。
ちょと試してみてはいかがでしょうか。
>新しいパソ凄いですね。なんなんですかあれは!HD500GB!!!?管理人さんがTBに手を出すのはすぐかもしれませんね。。。
いや~もう十分なんで、大丈夫^^;
学校のサーバーがTBなんで、始めてみたときTBの表示に驚きましたよw
>しかも、めっちゃ豪華な飾りつきじゃあないですか。
デコレーションに気合入れてみました^^
これよく見えないけどファンコンもついていて、ファンの回転数制御できます。
うるさくしたくないときは回転数下げたりして。
すべてのパーツはファンが21dB以下なんでとっても静かですよ!
グラフィックボードのファンとかひきちぎって静音ファンつけましたから^^;
静かなファン=風の量が少ない
なんで、その時に応じて回転数が制御できるのはうれしいです☆
>それまではこのFMVこそが我が恋人です。(こんなこと言ってたら「まなみ化」するかもしれませんね)
ダッシュさんが恋人だと思っているなら逆バージョンですねw
>はぁ。管理人さん今回えらく遅かったから、バイクで事故にでもあわれたんじゃないかと心配しました。ご無事で何よりでした・・。
すみません^^;
パソコン組み立てるのはすぐできたんですが、問題が発生して・・。
今回はグラフィックボードかわずに前のパソコンの使おうとしたんですよ。
デスクトップパソコンは3台あるんですけど、前の前のパソコンのグラフィックボードを前のパソコンに、前のパソコンのグラフィックボードを新パソコンにつけようと、んで前の前のパソコンは廃棄しようと
思っていました。しかし、イージーミス!なんと一番前のパソコンのグラフィックボードはAGPでした・・orz
(AGPとは古い規格のグラフィックボードの事で、今の規格と違うとささりもしない)
グラフィックボードがない=モニタにうつらない
のでどうしようもなく・・、
ローカルエリアネットワークつかってHDDの内容コピーしようとしたんですけど、
これじゃDVDにデータ焼いて移動させないと・・。
ということでB'sクリップでデータ焼いて移動させることに。
前の前のパソコンからデータ引っ張るときに20GBくらいのデータをDVDに焼くのは時間がかかって・・・。
よし全部やけた!
前のパソコンのパーツを新パソコンにうつして接続して、スイッチオン。
しかし・・ユニバーサルディスクフォーマットで焼かれたDVDは開けるわけもなく・・。
ガーン・・。
ネットでユニバーサルディスクフォーマットリーダー探してもなぜかXPに対応したものがない!
B'sClip以外の会社のリーダーインストしてもなぜか読めない・・
もう面倒だ!焼きなおす!・・しかしディスクが足りない・・。
ケーズデンキにお買い物。
DVDを買ってきて、パーツが足りないんで、また新パソコンのパーツを旧パソコンに移動させて配線を全部旧パソコンにつなぎかえてスイッチオン!
今度はレコーダーで記憶。
また延々と時間をかけてDVD用意完了。
またまたパーツを旧パソコンから新パソコンにつなぎ換えて、配線つないで準備完了!
「あ!ケーズデンキ行ったときに静音ファンとかかってきたんだった!」
というわけでCPUクーラーの変更。なに!?このファンはマザーボードのうらから取り付けるタイプ・・。
またつないだ線とってひっくりかえさにゃ・・(T_T)
試行錯誤してファンをとりつけ、配線を元通りにして、スイッチオン!
あ!旧パソコンの重要なデータ取り忘れた!
そしてまた新パソコンのパーツをとって旧パソコンにつないで、配線をやりかえて・・・・・・
そんなこと延々としていると2日かかってしまいました^^;
>テスト終わりました。
お疲れ様です^^
>今から法事で徳島いってきます。帰るのは月曜の夜かな?
お~楽しみですね~☆
でもこの記事みるときにはもう帰ってるかな?
お土産(話)楽しみにしてます^^
コピープロテクトエラーなら、コピーできないDVDだったんでしょう。
ArccOSがかかっているDVDとか。
しかし同じ方法で友達のパソコンでは出来たというのでしたら、原因不明です・・。
ArccOSもShrinkではなく、上記の方法でコピーガード除去できるようです。
ちょと試してみてはいかがでしょうか。
>新しいパソ凄いですね。なんなんですかあれは!HD500GB!!!?管理人さんがTBに手を出すのはすぐかもしれませんね。。。
いや~もう十分なんで、大丈夫^^;
学校のサーバーがTBなんで、始めてみたときTBの表示に驚きましたよw
>しかも、めっちゃ豪華な飾りつきじゃあないですか。
デコレーションに気合入れてみました^^
これよく見えないけどファンコンもついていて、ファンの回転数制御できます。
うるさくしたくないときは回転数下げたりして。
すべてのパーツはファンが21dB以下なんでとっても静かですよ!
グラフィックボードのファンとかひきちぎって静音ファンつけましたから^^;
静かなファン=風の量が少ない
なんで、その時に応じて回転数が制御できるのはうれしいです☆
>それまではこのFMVこそが我が恋人です。(こんなこと言ってたら「まなみ化」するかもしれませんね)
ダッシュさんが恋人だと思っているなら逆バージョンですねw
>はぁ。管理人さん今回えらく遅かったから、バイクで事故にでもあわれたんじゃないかと心配しました。ご無事で何よりでした・・。
すみません^^;
パソコン組み立てるのはすぐできたんですが、問題が発生して・・。
今回はグラフィックボードかわずに前のパソコンの使おうとしたんですよ。
デスクトップパソコンは3台あるんですけど、前の前のパソコンのグラフィックボードを前のパソコンに、前のパソコンのグラフィックボードを新パソコンにつけようと、んで前の前のパソコンは廃棄しようと
思っていました。しかし、イージーミス!なんと一番前のパソコンのグラフィックボードはAGPでした・・orz
(AGPとは古い規格のグラフィックボードの事で、今の規格と違うとささりもしない)
グラフィックボードがない=モニタにうつらない
のでどうしようもなく・・、
ローカルエリアネットワークつかってHDDの内容コピーしようとしたんですけど、
これじゃDVDにデータ焼いて移動させないと・・。
ということでB'sクリップでデータ焼いて移動させることに。
前の前のパソコンからデータ引っ張るときに20GBくらいのデータをDVDに焼くのは時間がかかって・・・。
よし全部やけた!
前のパソコンのパーツを新パソコンにうつして接続して、スイッチオン。
しかし・・ユニバーサルディスクフォーマットで焼かれたDVDは開けるわけもなく・・。
ガーン・・。
ネットでユニバーサルディスクフォーマットリーダー探してもなぜかXPに対応したものがない!
B'sClip以外の会社のリーダーインストしてもなぜか読めない・・
もう面倒だ!焼きなおす!・・しかしディスクが足りない・・。
ケーズデンキにお買い物。
DVDを買ってきて、パーツが足りないんで、また新パソコンのパーツを旧パソコンに移動させて配線を全部旧パソコンにつなぎかえてスイッチオン!
今度はレコーダーで記憶。
また延々と時間をかけてDVD用意完了。
またまたパーツを旧パソコンから新パソコンにつなぎ換えて、配線つないで準備完了!
「あ!ケーズデンキ行ったときに静音ファンとかかってきたんだった!」
というわけでCPUクーラーの変更。なに!?このファンはマザーボードのうらから取り付けるタイプ・・。
またつないだ線とってひっくりかえさにゃ・・(T_T)
試行錯誤してファンをとりつけ、配線を元通りにして、スイッチオン!
あ!旧パソコンの重要なデータ取り忘れた!
そしてまた新パソコンのパーツをとって旧パソコンにつないで、配線をやりかえて・・・・・・
そんなこと延々としていると2日かかってしまいました^^;
>テスト終わりました。
お疲れ様です^^
>今から法事で徳島いってきます。帰るのは月曜の夜かな?
お~楽しみですね~☆
でもこの記事みるときにはもう帰ってるかな?
お土産(話)楽しみにしてます^^