更新手続き

[戻る]
仕事人 2003/10/24(金) 14:36:59
お忙しい中、失礼します。
昨晩から悩んでおり、解決しないため掲示板を利用させてもらいました。
私は現在、配列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;

}

アイススケーター 2003/10/24(金) 14:46:22
簡単に直してみました。
後は自分で考えてください。

#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;

}

をよよ 2003/10/24(金) 15:05:07
>       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 ] );
}

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

古いスレッドには追加発言できません。