【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.21187

構造体の関数への値渡し
投稿者---あお(2005/05/29 09:44:24)


複数の不等式ax+by<=cの係数a,b,cを入力してそれらを満たす交点を出力するというプログラムを作っています。その中で構造体を使用してしているのですが関数への値渡しがうまくいきません。どのようにすればいいのか教えてください。37〜41行のところでsubscripted value is neither array nor pointerというエラーがでます。お願いします。環境はCygwinを使ってます。

000: #include<stdio.h>
001: …省略
002: struct data input();
003: struct data kouten(struct data);
004: struct data
005: {
006:     double a,b,c;
007: };
008: 
009: main()
010: {
011:     struct data keisu[M];
012:     …省略
013:     n_input(); //n入力関数
014:     for(i=1;i<=n;i++)
015:       keisu[i]=input();         //入力関数
016:     kouten(keisu);   //交点を求める関数
017: }  
018: 
019: struct data input()    //不等式の係数を入力
020: {
021:     int i;
022:     struct data values;
023:     
024:     printf("ax+by≧c \n");
025:     printf("不等式の係数aを入力--- ");
026:     scanf("%lf",&values.a);
027:     printf("不等式の係数bを入力--- ");
028:     scanf("%lf",&values.b);
029:     printf("不等式の係数cを入力--- ");
030:     scanf("%lf",&values.c);
031:     return values;
032: }
033: 
034: struct data kouten(struct data keisu)//交点を求める
035: {
036:  …省略
037:       x1=keisu[i].b*keisu[j].c-keisu[j].b*keisu[i].c;     //分子
038:       x2=keisu[j].a*keisu[i].b-keisu[i].a*keisu[j].b;     //分母
039:           
040:       y1=keisu[i].c*keisu[j].a-keisu[j].c*keisu[i].a;     //分子
041:       y2=keisu[j].a*keisu[i].b-keisu[i].a*keisu[j].b;     //分母
042:       
043:  …省略    
044:         while(k<=n)            
045:         {
046:           if(keisu[k].a *x[i]+ keisu[k].b *y[i]< keisu[k].c)   //式に代入
047:             break;
048:   …省略
049: }
050: /*** by blue ***/




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:構造体の関数への値渡し 21188 nop 2005/05/29 10:13:48
<子記事> Re:構造体の関数への値渡し 21189 あお 2005/05/29 22:15:26
<子記事> Re:構造体の関数への値渡し 21191 あお 2005/05/29 23:20:25


No.21188

Re:構造体の関数への値渡し
投稿者---nop(2005/05/29 10:13:48)


> 003: struct data kouten(struct data);
> 011: struct data keisu[M];
> 016: kouten(keisu); //交点を求める関数

型が違います。
C では、配列全体の値渡しは出来ません。

 struct data kouten( struct data *, int );
 kouten( keisu, sizeof(keisu)/sizeof(keisu[0]) );

と言う形で、配列の先頭ポインタと、要素数を渡すのが一般的です。



この投稿にコメントする

削除パスワード

No.21189

Re:構造体の関数への値渡し
投稿者---あお(2005/05/29 22:15:26)


ありがとうございます。
配列の先頭ポインタと、要素数を渡すということなんですけど、
34行目のkouten関数の()内と36〜41の構造体を使った計算のところはどのようにしたら良いんでしょうか。
お願いします。
000: #include<stdio.h>
003: struct data kouten(struct data*,int);
…………………
009: main()
010: {
011: struct data keisu[M];
012: …省略
013: n_input(); //n入力関数
014: for(i=1;i<=n;i++)
015: keisu[i]=input(); //入力関数
016: kouten(keisu,sizeof(keisu)); //交点を求める関数
017: }
034: struct data kouten(struct data keisu)//交点を求める
035: {
036:  …省略
037: x1=keisu[i].b*keisu[j].c-keisu[j].b*keisu[i].c; //分子
038: x2=keisu[j].a*keisu[i].b-keisu[i].a*keisu[j].b; //分母
039:
040: y1=keisu[i].c*keisu[j].a-keisu[j].c*keisu[i].a; //分子
041: y2=keisu[j].a*keisu[i].b-keisu[i].a*keisu[j].b; //分母
043:  …省略
049: }




この投稿にコメントする

削除パスワード

No.21190

Re:構造体の関数への値渡し
投稿者---まきじ(2005/05/29 22:52:27)


>034: struct data kouten(struct data keisu)//交点を求める

構造体でも普通の配列と同じです。

struct data kouten(struct data keisu[]){
とすればよいと思います。
プロトタイプ宣言もお忘れなく。


この投稿にコメントする

削除パスワード

No.21191

Re:構造体の関数への値渡し
投稿者---あお(2005/05/29 23:20:25)


問題を解決することが出来ました!!
nopさん、まきじさんありがとうございました!!


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧