質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.84%

  • C++

    3131questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Visual Studio

    1618questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

式には pointer-to-object 型が必要です

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 762

mishima36

score 1

①、②、③のF[i]のところでエラーが起こっています。どなたか何が間違っているか解説と修正をお願いいたします。

発生している問題・エラーメッセージ

エラーメッセージ    
式には pointer-to-object 型が必要です

include<stdio.h>

include<stdlib.h>

include<time.h>

define M 30 /*粒子数 M = 30*/

define D 2  /*解の次元 D = 2*/

int main() {
int t, i, dim;
double r1, r2;
double F = 0;
const double Inf = 10000000000;
double c = 1.494;
double w = 0.729;
int Tmax = 1000; /*最大繰り返し回数*/
double Cr = 0.00001; /*終了条件*/
double Xmin = -5, Xmax = 5; /*範囲*/

double X[M][D]; /*M個×D次元の配列*/
double V[M][D]; /*M個×D次元の配列*/
double F[M]; /*M個分の評価関数値を格納*/
double Fp[M], Xp[M][D]; /*M個分のpbest*/
double Fg, Xg[D]; /*gbest*/

srand(time(NULL)); /*乱数の初期化*/

for (i = 0;i < M;i++) {
for (dim = 1;dim <= D;dim++) {
X[i][dim] = (double)rand() / 32767.0;
X[i][dim] = (Xmax - Xmin) * X[i][i] + Xmin;

V[i][dim] = 0;
}
}
for (i = 0;i < M;i++) {      /*Fp[M]の初期化
*/
Fp[i] = Inf;
}
Fg = Inf;  /*Fg初期化*/

for (t = 0;t < Tmax - 1;t++) {
for (i = 0;i < M;i++) {
①            F[i] = 0;
for (dim = 0;dim < D;dim++) {
Fp[i] += X[i][dim] * X[i][dim];
}
②            if (F[i] < Fp[i]) {
③                F[i] = Fp[i];
for (dim = 0;dim < D;dim++) {
Xp[i][dim] = X[i][dim];
}
if (Fp[i] < Fg) {
Fg = Fp[i];
for (dim = 0;dim < D; dim++) {
Xg[dim] = Xp[i][dim];
}
}

}
}

if (Fg < Cr) {
break;
}
for (i = 0;i < M;i++) {
for (dim = 0;dim < D;dim++) {
r1 = (double)rand() / 32767.0;
r1 = (Xmax - Xmin) * X[i][dim] + Xmin;

r2 = (double)rand() / 32767.0;
r2 = (Xmax - Xmin) * X[i][dim] + Xmin;

V[i][dim] = w * V[i][dim] + c * r1 * (Xp[i][dim]) + c * r2 * (Xg[dim] - X[i][dim]);
X[i][dim] = X[i][dim] + V[i][dim];
printf("%f ", X[i][dim]);
}
}

}

printf("終了時刻t = %d\n", t);
printf("解の目的関数値Fg = %f\n", Fg);
printf("解Xg =[");
for (dim = 0;dim < D;dim++) {
printf("%f", Xg[dim]);
}
printf("]\n");
system("pause");
}

試したこと

課題に対してアプローチしたことを記載してください

補足情報(言語/FW/ツール等のバージョンなど)

C++(visual studio)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2017/12/15 00:18

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 2

checkベストアンサー

0

double F = 0;
double F[M];

main()の中にふたつのFがありますょ?
 

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/14 14:38

    ありがとうございます!

    キャンセル

0

別の間違いとしてはCとC++のrand関数は使うべきではありません。最大値が比較的小さく、使い方によっては一様な値になりません(偏りが出ます)。
C++ならばrandomヘッダが使えると思うので、メルセンヌツイスタとかの乱数生成器を用いるべきです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/14 14:42

    どうもありがとうごさいます!C++に適した乱数作成をもう少し調べてみようと思います。

    キャンセル

  • 2017/12/14 14:50

    "C++に適した"じゃない。
    "問題領域に相応しい"だ。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    C言語 乱数について

    C言語で数当てゲームを作るために乱数関数の正式な使い方を知りたいです 今は a=(rand()%10) として、aに0~9までの乱数を割り当てるようなコードを書いていますが

  • 受付中

    OpenCVで動画の読み込みがうまくできません。

    以前別のプログラムで動画の読み込みができましたが、今現在取り組んでいるプログラムではうまくいきません。 言語はC++でopencv2.4.9を使用しています。 Os windo

  • 解決済

    警告やコンパイルエラーを直すことができません。

    クイックソートのソースを書いているのですがうまくコンパイルすることができません。 #include <stdio.h> #include <stdlib.h> #includ

  • 解決済

    ポインタをループ変数として使用する

    いつもお世話になっています。c言語初心者で、勉強中です。ポインタについて質問させて頂きます。課題で、N個(マクロで5と定義してある)の浮動小数データを入力すると 小さい順に並び換え

  • 受付中

    c言語で

    c言語初心者です、下記の条件を満たすプログラムの書き方がよくわからないのですがどのようにしたらいいのでしょうか? 1・倍精度浮動小数点数のn×n正方行列2つの積を計算するプロ

  • 解決済

    ガチャのシミュレーターを作りたいが乱数に偏りがある

    前提・実現したいこと ソシャゲのガチャのシミュレーターを作りたいが乱数の生成がうまくいかない。 うまく乱数を生成するためにはどうしたらいいのでしょうか。 発生している問題

  • 解決済

    無限ループしてしまうようになった

    解決したいこと 一度はうまくいったのですが、作り直したらなぜか無限ループしてしまうようになってしまいましたのですが、わかる方いますか。コンパイルも通っているのですが。 追記 #

  • 受付中

    プログラムを見やすく改良したい

    正常に動くプルグラムを見やすく改良したい。 具体的に教えていただければありがたいです。セグメンテーションフォルトでベスト7まで表示して停止します。173行あたりだと思うのですが、よ

同じタグがついた質問を見る

  • C++

    3131questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Visual Studio

    1618questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。