更新手続き – プログラミング – Home

通知
すべてクリア

[解決済] 更新手続き


仕事人
 仕事人
(@仕事人)
ゲスト
結合: 22年前
投稿: 13
Topic starter  

お忙しい中、失礼します。
昨晩から悩んでおり、解決しないため掲示板を利用させてもらいました。
私は現在、配列a1の一回先のデータと現在のデータとの変化率をfor文中で取り出そうと
試みていますが、取り出すことができません。
どなたかご教授ください。
宜しくお願いいたします。
#include <stdio.h>
#include <stdlib.h>
int main( )
{

int a1[5];
double b[5];//変化率

int i;
int a=1;
int *ptr;

for( i = 0; i < 5; i++ )
{

a = a +i ;//
ptr= &a;//ポインタ
a1[i]= *ptr; //配列利用。
//printf( a1: 順番%d a1:%d\n, i,*ptr );
printf( a2: 順番%d a2:%d\n, i,a1[i]);

printf(\n);

      b[i]=a1[i+1]/a1[i];//
printf( b : %f\n, b[i] );

}//for i

return 0;

}


引用未解決
トピックタグ
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 23年前
投稿: 280
 

簡単に直してみました。
後は自分で考えてください。

#include <stdio.h>
#include <stdlib.h>
int main( )
{

int a1[5];
double b[5];//変化率

int i;
int a=1;
int *ptr;

for( i = 0; i < 5; i++ )
{

a = a +i ;//
ptr= &a;//ポインタ
a1[i]= *ptr; //配列利用。
//printf( a1: 順番%d a1:%d\n, i,*ptr );
printf( a2: 順番%d a2:%d\n, i,a1[i]);

printf(\n);

if( i > 1) {
b[i]=(double)a1[i]/(double)a1[i-1];//
printf( b : %f\n, b[i] );
}
}//for i

return 0;

}


返信引用
をよよ
 をよよ
(@をよよ)
ゲスト
結合: 22年前
投稿: 15
 

> b[i]=a1[i+1]/a1[i];//

iを0から順番に1ずつ増やしながら処理するのですから、この段階で、a1[i+1]にはまだ
値が代入されていません。
本題とは別ですが、(int型の値)/(int型の値)はint型ですから、小数点以下が丸められ
てしまいます。
さらに、i=4のときには、a1[i+1]でアクセス違反(配列として確保したメモリの範囲外
にアクセスしようとしている)をします。
ポインタを使う意義もよくわかりません。

できるだけ原型に近くかくなら、こんな感じ。

int a1 [ 5 ];
double b[ 5 ];
int a = 1;
int i;

for( i = 0; i < 5; ++i )
{
a = a + i;
a1[ i ] = a;
printf( a1: 順番%d a1 ; %d\n\n, i, a1[ i ] );
}

for( i = 0; i < 4; ++i )
{
b[ i ] = ( double )a1[ i + 1 ] / a1[ i ];
printf( b : %f\n, b[ i ] );
}


返信引用
仕事人
 仕事人
(@仕事人)
ゲスト
結合: 22年前
投稿: 13
Topic starter  

お二人とも有難うございました。
大変助かりました。
>i=4のときには、a1[i+1]でアクセス違反
本当に有難うございました。
そのとおりだと思います。
>if( i > 1)
アイススケーターさん有難うございました。
>ポインタを使う意義もよくわかりません。
ポインタを使用したのはこのソース(コマンド)を親ソースの途中から利用しようと思っ
たからです。
有難うございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました