Questions sur la langue 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);
}

comment fonctionne cette syntaxe ? le f-e est en lui même ? 2 fois aussi bien

Par ailleurs, pouvez-vous me recommander un bon livre instructif et pas trop long ?

J'en ai une.

Б. Kernighan, D. Ritchie

Le langage de programmation C.

Edition 3 révisée

 

Cela est également possible dans mql. Une fonction n'est pas appelée deux fois de plus à chaque fois qu'elle est appelée - il y a un retour au début de la fonction.

C'est ce qu'on appelle la récursion.

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

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

 
Dmitry Fedoseev:

Cela est également possible dans mql. Une fonction n'est pas appelée deux fois de plus à chaque fois qu'elle est appelée - il y a un retour au début de la fonction.

C'est ce qu'on appelle la récursion.

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

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

Je suis en train de réécrire l'une des bibliothèques sur mql, en suivant vos conseils ;))

 
Maxim Dmitrievsky:

Suggérez aussi un bon livre, instructif et pas trop long.

J'ai lu Straustrup à l'université, mais je ne pense pas que vous ayez besoin d'un manuel sur les constructions de base du langage, vous avez déjà une expérience de la programmation, vous n'avez pas besoin de lire à partir de zéro.

Je n'ai jamais écrit en C#, mais j'avais l'habitude d'écrire des programmes Windows. Lorsque j'ai décidé de m'essayer au C#, l'aide en ligne a été très utile, toutes les petites questions ont été clarifiées, j'ai lu de courts articles sur cette ressource, la récursion C++ est brièvement décrite ici.

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

Tutoriel général sur le C++https://metanit.com/cpp/tutorial/, je doute que vous trouviez des informations plus concises que sur ce site ;)

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

J'ai lu Straustrup à l'université, mais je ne pense pas que vous ayez besoin d'un manuel sur les constructions de base du langage, vous avez déjà une expérience de la programmation, vous n'avez pas besoin de lire à partir de zéro.

Je n'ai jamais écrit en C#, mais j'avais l'habitude d'écrire des programmes Windows. Lorsque j'ai décidé de m'essayer au C#, l'aide en ligne a été très utile, toutes les petites questions ont été clarifiées, j'ai lu de courts articles sur cette ressource, la récursion C++ est brièvement décrite ici.

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

Je doute que vous trouviez des informations plus concises que sur ce site ;)

La principale difficulté est que tout le code est écrit à l'aide de pointeurs et de goto, et qu'il y a beaucoup de choses inutiles avec l'allocation puis la suppression de la mémoire.

On peut donc affirmer que mql et CY sont des langages absolument différents. Même des constructions aussi simples que le passage de pointeurs au lieu de tableaux dans une fonction ne fonctionnent pas ici, c'est très difficile à réécrire.

 
Maxim Dmitrievsky:

Il est facile de se familiariser avec le langage, la principale difficulté réside dans le fait que tout le code est écrit à l'aide de pointeurs et de goto, il y a également beaucoup de choses inutiles avec l'allocation et la destruction de la mémoire.

C'est pourquoi il est évident que mql et CY sont des langages absolument différents. Même des constructions aussi simples que le passage de pointeurs au lieu de tableaux dans une fonction ne fonctionnent pas ici, c'est très difficile à réécrire.

Le processeur ne connaît pas les noms des identifiants (noms des variables), il ne connaît que les décalages relatifs des données (liens vers les adresses mémoire) et les données référencées doivent être typées - c'est ce que fait un pointeur - il décrit le type de données et l'endroit où les données sont stockées en mémoire.


MQL est vraiment un langage différent


pointeurshttps://metanit.com/cpp/tutorial/4.1.php

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

C'est ce qui est intéressant avec le C++ - il fonctionne avec des pointeurs, toute la flexibilité du langage est basée sur le travail avec des pointeurs - c'est-à-dire une imitation complète du travail avec la mémoire du processeur, le processeur ne connaît pas les noms des identifiants (noms des variables), il ne connaît que les décalages relatifs des données (en fait, les références aux adresses de la mémoire) et les données par référence doivent être typées - c'est ce que fait un pointeur - il décrit le type de données et l'endroit où les données sont stockées dans la mémoire.


MQL est vraiment un langage différent


pointeurshttps://metanit.com/cpp/tutorial/4.1.php

Oui, merci, je suis déjà familier avec les pointeurs, et le livre a...

Le site est pratique, d'ailleurs, je l'ai ajouté à mes favoris.

voici un bon cours magistral vidéo pour les paresseux, du c au cp


 

Voici un exemple tiré de l'en-tête de la bibliothèque :

les structures sont créées avec des pointeurs vers quelque chose de pas clair (apparemment, ce sont des tableaux qui n'existent pas encore), alors je comprends qu'une ...er...variable de cette structuremine_score ; avec le même nom est déclarée?

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;

nous devrons faire face à cela aussi

puis on déclare un f-i qui écrira son résultat directement dans l'espace mémoire de cette variable ?

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

Voici un exemple tiré de l'en-tête de la bibliothèque :

les structures sont créées avec des pointeurs vers quelque chose de pas clair (apparemment, ce sont des tableaux qui n'existent pas encore), alors je comprends qu'une ...er...variable de cette structuremine_score ; avec le même nom est déclarée?

nous devrons faire face à cela aussi

et ensuite nous déclarons un f qui écrira son résultat directement dans l'emplacement mémoire de cette variable ?

Non, le type de données déclaré ici est mine_score, qui est une structure mine_score.

Et la fonction renvoie un pointeur vers cette structure, qui sera créée à l'intérieur de cette fonction. Par conséquent, le but de la fonction est de créer une entité de type min_score et d'en transférer la propriété à la portée de l'appel de fonction.

 

Maxim Dmitrievsky:

il faudra également s'occuper de ce problème

puis on déclare un f-i qui écrira son résultat directement dans l'espace mémoire de cette variable ?

J'ai oublié depuis longtemps les typedefs, merci à MQL de m'aider à me souvenir de ces constructions encombrantes)), apparemment, c'est juste une déclaration de typemine_score, qui est une structure et la description de la structure a été "collée" dans la déclaration de type ( typedef ), mais je peux me tromper, voici une question similaire discutée et une explication assez détaillée:

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


Maxim Dmitrievsky:

et ensuite vous déclarez un f-i qui écrira son résultat directement dans l'espace mémoire de cette variable ?

En C++, le programmeur est chargé de l'allocation de la mémoire, donc si le résultat d'une fonction renvoie un pointeurmine_score*, celui qui reçoit ce pointeur doit allouer de la mémoire, c'est-à-dire qu'il ne s'agit pas d'une variable mais d'un pointeur vers la donnée

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

J'ai oublié les typedefs il y a longtemps, heureusement MQL aide à se souvenir de ces constructions encombrantes)), apparemment c'est juste une déclaration de typemine_score, qui est une structure et la description de la structure a été "collée" dans la déclaration de type ( typedef ) , mais je peux me tromper, voici une question similaire discutée et une explication assez détaillée:

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


En C++, l'allocation de mémoire est la responsabilité du programmeur, donc si le résultat d'une fonction renvoie un pointeurmine_score *, celui quireçoit ce pointeur doit allouer la mémoire, c'est-à-dire qu'il ne s'agit pas d'une variable mais d'un pointeur sur les données.

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

J'ai alloué de la mémoire à l'intérieur de la fonction et je l'ai libérée dans la portée de la variable à laquelle j'ai passé la référence.

Raison: