SI言語に関する質問

 
void quicksort(double *a, int *idx, int l, int u)
{
  int i, m, idx_temp;
  double a_temp;

  if (l >= u)
    return;

  m = l;
  for (i=l+1; i<=u; i++)
    {
      if (a[i] < a[l])
        {
          ++m;

          idx_temp = idx[m];
          idx[m] = idx[i];
          idx[i] = idx_temp;

          a_temp = a[m];
          a[m] = a[i];
          a[i] = a_temp;
        }
    }

  idx_temp = idx[l];
  idx[l] = idx[m];
  idx[m] = idx_temp;

  a_temp = a[l];
  a[l] = a[m];
  a[m] = a_temp;

  quicksort(a, idx, l, m-1);
  quicksort(a, idx, m+1, u);
}

この構文はどうなっているのか、f-eはそれ自体の中にあるのか、2倍もあるのか。

また、情報量が多く、あまり長くない良い本を紹介してください。

あるんです。

Б.カーニガン、D.リッチー

プログラミング言語「C」。

エディション3改訂版

 

これは、mqlでも可能です。関数が呼び出される たびに、さらに2回呼び出されるわけではありません。関数の最初にリターンがあるのです。

再帰性というやつですね。

https://ru.wikipedia.org/wiki/Рекурсия

https://habr.com/ru/post/275813/

 
Dmitry Fedoseev:

これは、mqlでも可能です。関数が呼び出される たびに、さらに2回呼び出されるわけではありません。関数の最初にリターンがあるのです。

再帰性というやつですね。

https://ru.wikipedia.org/wiki/Рекурсия

https://habr.com/ru/post/275813/

あなたのアドバイスに従って、mqlのライブラリの一つを書き換えています ))

 
Maxim Dmitrievsky:

また、情報量が多く、長過ぎない良い本を提案してください。

ユニでストラウストラップを読みましたが、基本的な言語構造の教科書は必要ないと思います、すでにプログラミングの経験があるのですから、一から読む必要はないでしょう。

C#で書いたことはないのですが、以前はWindowsのプログラムを書いていました。C#に挑戦しようと決めたとき、オンラインヘルプはとても役に立ち、どんな小さな疑問も解決してくれました。

https://metanit.com/cpp/tutorial/3.6.php

一般的なC++チュートリアルhttps://metanit.com/cpp/tutorial/, このサイトより簡潔な情報を見つけることはできないでしょう ;)

C++ | Рекурсивные функции
  • metanit.com
Рекурсивные функции - это функции, которые вызывают сами себя. Например, определим вычисление факториала в виде рекурсивной функции: В функции factorial задано условие, что если число n больше 1, то это число умножается на результат этой же функции, в которую в качестве параметра передается число n-1. То есть происходит рекурсивный спуск. И так...
 
Igor Makanu:

私は大学時代にStraustrupを読みましたが、基本的な言語構造の教科書は必要ないと思います。あなたはすでにプログラミングの経験があるので、ゼロから読む必要はないでしょう

C#で書いたことはないのですが、以前はWindowsのプログラムを書いていました。C#に挑戦しようと決めたとき、オンラインヘルプはとても役に立ち、どんな小さな疑問も解決してくれました。

https://metanit.com/cpp/tutorial/3.6.php

このサイト以上に簡潔な情報はないだろう ;)

ただ、ポインタとgotoで書かれたコードで、メモリの確保と削除という無駄なことが多いのが難点です。

つまり、mqlとCiは全く別の言語であると言える。配列の代わりにポインタを関数に渡すといった単純な構成もここでは通用しないので、書き換えるのは非常に難しい。

 
Maxim Dmitrievsky:

言語への入り込みは簡単ですが、一番の難点は、すべてのコードがポインタとgotoで書かれていること、メモリの確保と破棄に多くの不必要なものがあることです。

だから、mqlとCYは絶対に違う言語であることは明白だ。配列の代わりにポインタを関数に渡すといった単純な構成もここでは通用しないので、書き換えるのは非常に難しい。

C++が面白いのはその点で、ポインタを扱うことが基本になっています。 プロセッサは識別子(変数名)の名前を知らず、相対的なデータオフセット(メモリアドレスへのリンク)しか知らないので、参照するデータは型付けする必要があります - これがポインタの役割です -データの型と メモリ内のデータの格納場所を記述します


MQLは本当に別の言語


ポインツhttps://metanit.com/cpp/tutorial/4.1.php

C++ | Что такое указатели
  • metanit.com
Указатели представляют собой объекты, значением которых служат адреса других объектов (переменных, констант, указателей) или функций. Как и ссылки, указатели применяются для косвенного доступа к объекту. Однако в отличие от ссылок указатели обладают большими возможностями. Для определения указателя надо указать тип объекта, на который указывает...
 
Igor Makanu:

プロセッサは識別子(変数名)の名前を知らないので、相対的なデータのオフセット(実際にはメモリアドレスへの参照)しか知りません。また、参照するデータは型付けされなければなりません。


MQLは本当に別の言語


ポインツhttps://metanit.com/cpp/tutorial/4.1.php

はい、ありがとうございます。私はすでにポインターに精通していますし、この本には

ところで、このサイトは便利ですね、お気に入りに追加しました。

このビデオ講義は、CからCPまで、怠け者のための良い講義です。


 

以下は、ライブラリのヘッダーからの例です。

構造体が不明確なものへのポインタ(まだ存在しない配列らしい)で作成されている場合、この構造体mine_score;同名の...えーと...変数が宣言されていると理解すればよいのでしょうか

typedef struct mine_score
{
  int n;      /* number of rows of M */
  int *m;     /* number of cols of M[i] for each i */
  double **M; /* the (equi)characteristic matrix */
} mine_score;

それも含めて

を宣言し、その結果をこの変数のメモリ空間に直接書き込む f-i を宣言するのですか?

mine_score *mine_compute_score(mine_problem *prob, mine_parameter *param);
 
Maxim Dmitrievsky:

以下は、ライブラリのヘッダーからの例です。

構造体が不明確なものへのポインタ(まだ存在しない配列らしい)で作成されている場合、この構造体mine_score;同名の...えーと...変数が宣言されていると理解すればよいのでしょうか

それも含めて

を宣言し、その結果をこの変数のメモリ位置に直接書き込むf-thatを宣言するのですか?

いいえ、ここで宣言されているデータ型は、mine_score構造体です。

そして、この関数はこの構造体へのポインタを返します。この構造体はこの関数の内部で生成されます。したがって、この関数の目的は、min_score型のエンティティを作成し、その所有権を関数呼び出しの スコープに移すことである。

 

Maxim Dmitrievsky:

此れも又然り

を宣言し、その結果をこの変数のメモリ空間に直接書き込む f-i を宣言するのですか?

私は長い間typedefsを忘れてしまった、これらの面倒な構造を覚えてくれてありがとうMQLヘルプ))、どうやら、それはちょうど型の宣言ですmine_scoreは、構造体と構造の説明を型宣言( typedef )に "貼り付け" 、しかし私は間違っているかもしれません、ここで議論し、かなり詳細に説明する同様の質問 です。

http://qaru.site/questions/13054/typedef-struct-vs-struct-definitions


マキシム・ドミトリエフスキー

を宣言して、その結果をこの変数のメモリ空間に直接書き込むf-iを宣言するのですか?

C++では、プログラマーがメモリの割り当てを担当するため、関数の結果がmine_score* ポインタを返す場合、このポインタを受け取った人はメモリを割り当てなければならない、つまり、変数ではなくデータへのポインタ であるということです

Определение typedef struct vs struct
  • 2009.11.04
  • user69514
  • qaru.site
Я новичок в программировании на С, но мне было интересно узнать, какая разница между использованием при определении структуры или использованием . Мне кажется, что нет никакой разницы, они достигают той же цели.
 
Igor Makanu:

私はずっと前にtypedefを忘れてしまいましたが、幸いにもMQLはそれらの面倒な構造を思い出すのを助けてくれました))、それは単に構造体であるmine_scoreの宣言と構造の説明が型定義(typedef )に「貼り付け」 られたように見えますが、私は間違っているかもしれません、ここで同様の質問が取り上げられかなり詳しい説明をしています

http://qaru.site/questions/13054/typedef-struct-vs-struct-definitions


C++では、メモリの確保はプログラマーの責任であり、関数の結果がmine_score * ポインタを返す場合、そのポインタを受け取った人はメモリを確保しなければならない、つまり、それは変数ではなくデータへのポインタ である

#include "pch.h"
#include <iostream>

using namespace std;

int* Foo(int i)
{
        int* x = new int(i);
        return x;
}

int main()
{
        int* x = Foo(5);
        cout << *x;
        delete x;
        return 0;
}

関数内部でメモリを確保し、参照を渡した変数のスコープで解放しました。

理由: