Perguntas sobre a linguagem 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);
}

como funciona esta sintaxe? é a f-e em si mesma? 2 vezes também

Além disso, você pode recomendar um bom livro que seja informativo e não muito longo?

Eu tenho um.

Б. Kernighan, D. Ritchie

A linguagem de programação C.

Edição 3 revisada

 

Isto também é possível em mql. Não toda vez que uma função é chamada, ela é chamada duas vezes mais - há um retorno no início da função.

Chama-se recursividade.

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

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

 
Dmitry Fedoseev:

Isto também é possível em mql. Não toda vez que uma função é chamada, ela é chamada duas vezes mais - há um retorno no início da função.

Chama-se recursividade.

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

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

Estou reescrevendo uma das bibliotecas no mql, seguindo seu conselho ))

 
Maxim Dmitrievsky:

Além disso, sugira um bom livro que seja informativo e não muito longo.

Eu li Straustrup na uni, mas acho que você não precisa de um livro de texto sobre construções básicas de linguagem, você já tem experiência em programação, não precisa ler do zero.

Eu nunca escrevi em C#, mas costumava escrever programas Windows. Quando decidi tentar minha mão em C# a ajuda online foi muito útil, quaisquer pequenas perguntas esclarecidas, li pequenos artigos sobre este recurso, a recursividade C++ é brevemente descrita aqui

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

Tutorial geral C++https://metanit.com/cpp/tutorial/, duvido que você encontre informações mais concisas do que neste site ;)

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

Eu li Straustrup na uni, mas acho que você não precisa de um livro sobre construções básicas de linguagem, você já tem experiência em programação, você não precisa ler do zero

Eu nunca escrevi em C#, mas costumava escrever programas Windows. Quando decidi tentar minha mão em C# a ajuda online foi muito útil, quaisquer pequenas perguntas esclarecidas, li pequenos artigos sobre este recurso, a recursividade C++ é brevemente descrita aqui

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

Duvido que você encontre informações mais concisas do que neste site ;)

A principal dificuldade aí é que o código inteiro é escrito através de ponteiros e goto, e há muitas coisas desnecessárias com alocação de memória e depois deleção.

Portanto, pode-se afirmar que mql e CY são idiomas absolutamente diferentes. Mesmo construções tão simples como passar apontadores em vez de arrays para uma função não funcionam aqui, é muito difícil de reescrever.

 
Maxim Dmitrievsky:

É fácil entrar no idioma, a principal dificuldade aí é que todo o código é escrito através de ponteiros e goto, há também muito desnecessário com alocação de memória e depois destruição

É por isso que é óbvio que o mql e o CY são idiomas absolutamente diferentes. Mesmo construções tão simples como passar apontadores em vez de arrays para uma função não funcionam aqui, é muito difícil de reescrever.

O processador não conhece nomes de identificadores (nomes de variáveis), só conhece offsets de dados relativos (links para endereços de memória) e os dados referenciados precisam ser digitados - é isso que um ponteiro faz - descreve o tipo de dados e onde os dados são armazenados na memória


MQL é realmente uma linguagem diferente


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

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

É isso que é interessante no C++ - funciona com ponteiros, toda a flexibilidade da linguagem é baseada no trabalho com ponteiros - também conhecido como imitação completa do trabalho com memória do processador, o processador não conhece nomes de identificadores (nomes de variáveis), conhece apenas offsets de dados relativos (na verdade, referências a endereços de memória) e dados por referência devem ser digitados - é isso que um ponteiro faz - descreve o tipo de dados e o local onde os dados são armazenados na memória


MQL é realmente uma linguagem diferente


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

Sim, obrigado, já estou familiarizado com as dicas, e o livro tem

O site é útil, a propósito, adicionou-o aos meus favoritos.

aqui está um bom curso de vídeo-palestra para os preguiçosos, do cp ao cp


 

Aqui está um exemplo do cabeçalho da biblioteca:

estruturas são criadas com indicações para algo pouco claro (aparentemente, são arrays que ainda não existem), então entendo que uma ...er...variável desta estruturameu_ponto; com o mesmo nome é declarada?

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;

teremos que lidar com isso também

e então é declarado um f-i que irá escrever seu resultado diretamente no espaço de memória desta variável?

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

Aqui está um exemplo do cabeçalho da biblioteca:

estruturas são criadas com indicações para algo pouco claro (aparentemente, são arrays que ainda não existem), então entendo que uma ...erm...variável desta estruturameu_ponto; com o mesmo nome é declarada?

teremos que lidar com isso também

e então declaramos um f-que escreverá seu resultado diretamente na localização da memória desta variável?

Não, o tipo de dados declarados aqui é meu_score, que é uma estrutura de mina_score.

E a função retorna um ponteiro a esta estrutura, que será criada dentro desta função. Assim, o objetivo da função é criar uma entidade do tipo min_score e transferir a propriedade da mesma para o escopo da chamada de função.

 

Maxim Dmitrievsky:

isto também terá que ser tratado

e então é declarado um f-i que irá escrever seu resultado diretamente no espaço de memória desta variável?

Esqueci dos typedefs há muito tempo, graças à ajuda da MQL para lembrar essas construções incômodas), aparentemente é apenas uma declaração do tipomeu_score, que é uma estrutura e descrição da estrutura foi "colada" na definição do tipo ( typedef ), mas posso estar errado, aqui está uma questão semelhante discutida e explicação bastante detalhada:

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


Maxim Dmitrievsky:

e então você declara um f-i que irá escrever seu resultado diretamente no espaço de memória desta variável?

Em C++, o programador é responsável pela alocação da memória, portanto, se o resultado de uma função retorna um ponteiro depontuação de mina*, aquele que recebe esse ponteiro deve alocar memória, ou seja, não é uma variável, mas um ponteiro para os dados

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

Esqueci os typedefs há muito tempo, felizmente o MQL ajuda a lembrar essas construções incômodas), aparentemente é apenas uma declaração do tipomine_score, que é uma estrutura e descrição da estrutura foi "colada" na declaração do tipo ( typedef ), mas posso estar errado, aqui está uma questão semelhante discutida e explicação bastante detalhada:

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


Em C++, a alocação de memória é de responsabilidade do programador, portanto, se o resultado de uma função retornar um ponteiro depontuação de mina *, quemreceber esse ponteiro deve alocar a memória, ou seja, não é uma variável, mas um ponteiro para os dados

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

Alocar memória dentro da função e liberá-la no escopo da variável para a qual passei a referência.

Razão: