Preguntas sobre la lengua 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);
}

¿cómo funciona esta sintaxis? ¿la f-e está dentro de sí misma? 2 veces también

Además, ¿puede recomendar un buen libro que sea informativo y no demasiado largo?

Yo tengo uno.

Б. Kernighan, D. Ritchie

El lenguaje de programación C.

Edición 3 revisada

 

Esto también es posible en mql. No cada vez que se llama a una función, se llama dos veces más - hay un retorno al principio de la función.

Se llama recursión.

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

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

 
Dmitry Fedoseev:

Esto también es posible en mql. No cada vez que se llama a una función, se llama dos veces más - hay un retorno al principio de la función.

Se llama recursión.

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

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

Estoy reescribiendo una de las bibliotecas en mql, siguiendo tus consejos ))

 
Maxim Dmitrievsky:

Además, aconseja un buen libro que sea informativo y no demasiado largo.

Yo leí Straustrup en la uni, pero no creo que necesites un libro de texto sobre construcciones básicas del lenguaje, ya tienes experiencia en programación, no necesitas leer desde cero.

Nunca he escrito en C#, pero solía escribir programas para Windows. Cuando decidí probar mi mano en C# la ayuda en línea fue muy útil, cualquier pequeña pregunta aclarada, leí artículos cortos en este recurso, la recursividad C++ se describe brevemente aquí

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

Tutorial general de C++https://metanit.com/cpp/tutorial/, dudo que encuentres información más concisa que en este sitio ;)

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

Yo leí Straustrup en la uni, pero no creo que necesites un libro de texto sobre construcciones básicas del lenguaje, ya tienes experiencia en programación, no necesitas leer desde cero

Nunca he escrito en C#, pero solía escribir programas para Windows. Cuando decidí probar mi mano en C# la ayuda en línea fue muy útil, cualquier pequeña pregunta aclarada, leí artículos cortos en este recurso, la recursividad C++ se describe brevemente aquí

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

Dudo que encuentres información más concisa que en este sitio ;)

Sólo hay que entender el lenguaje. La principal dificultad es que todo el código está escrito mediante punteros y goto, y hay muchas cosas innecesarias con la asignación de memoria y su posterior borrado.

Por tanto, se puede afirmar que mql y Ci son lenguajes absolutamente diferentes. Incluso construcciones tan simples como pasar punteros en lugar de arrays a una función no funcionan aquí, es muy difícil de reescribir.

 
Maxim Dmitrievsky:

Es fácil entrar en el lenguaje, la principal dificultad es que todo el código se escribe a través de punteros y goto, también hay mucho innecesario con la asignación de memoria y luego la destrucción

Por eso es obvio que mql y CY son lenguajes absolutamente diferentes. Incluso construcciones tan simples como pasar punteros en lugar de arrays a una función no funcionan aquí, es muy difícil de reescribir.

El procesador no conoce los nombres de los identificadores (nombres de las variables), sólo conoce los desplazamientos relativos de los datos (enlaces a las direcciones de memoria) y los datos referenciados necesitan ser tipificados - eso es lo que hace un puntero - describe el tipo de datos y dónde se almacenan los datos en la memoria


MQL es realmente un lenguaje diferente


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

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

Eso es lo interesante de C++ - trabaja con punteros, toda la flexibilidad del lenguaje se basa en el trabajo con punteros - es decir, una imitación completa del trabajo con la memoria del procesador, el procesador no conoce los nombres de los identificadores (nombres de las variables), sólo conoce los desplazamientos relativos de los datos (de hecho las referencias a las direcciones de memoria) y los datos por referencia deben ser tipados - eso es lo que hace un puntero - describe el tipo de datos y la ubicación donde se almacenan los datos en la memoria


MQL es realmente un lenguaje diferente


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

Sí, gracias, ya estoy familiarizado con los punteros, y el libro tiene

Por cierto, la página es muy útil, la he añadido a mis favoritos.

aquí hay un buen curso de video conferencia para los perezosos, de c a cp


 

Este es un ejemplo de la cabecera de la biblioteca:

se crean estructuras con punteros a algo poco claro (aparentemente, son arrays que aún no existen), entonces entiendo que se declara una ...er...variable de esta estructuramine_score; con el mismo nombre?

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;

tendremos que lidiar con eso también

y luego se declara una f-i que escribirá su resultado directamente en el espacio de memoria de esta variable?

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

Este es un ejemplo de la cabecera de la biblioteca:

se crean estructuras con punteros a algo poco claro (aparentemente, son arrays que aún no existen), entonces entiendo que se declara una ...er...variable de esta estructuramine_score; con el mismo nombre?

tendremos que lidiar con eso también

y luego declaramos una f-que escribirá su resultado directamente en la ubicación de memoria de esta variable?

No, el tipo de datos declarado aquí es mine_score, que es una estructura mine_score.

Y la función devuelve un puntero a esta estructura, que se creará dentro de esta función. En consecuencia, el propósito de la función es crear una entidad de tipo min_score y transferir su propiedad al ámbito de la llamada a la función.

 

Maxim Dmitrievsky:

esto también tendrá que ser tratado

y luego se declara una f-i que escribirá su resultado directamente en el espacio de memoria de esta variable?

Me olvidé de typedefs hace mucho tiempo, gracias MQL ayudar a recordar estas construcciones engorrosas)), al parecer es sólo una declaración demine_score tipo, que es una estructura y la descripción de la estructura fue "pegado" en la definición del tipo ( typedef ) , pero podría estar equivocado, aquí es una pregunta similar discutido y explicación bastante detallada:

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


Maxim Dmitrievsky:

y luego declaras una f-i que escribirá su resultado directamente en el espacio de memoria de esta variable?

En C++, el programador se encarga de la asignación de memoria, por lo que si el resultado de una función devuelve un punteromine_score*, el que recibe este puntero debe asignar memoria, es decir, no es una variable sino un puntero a los datos

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

Me olvidé de los typedefs hace mucho tiempo, por suerte MQL me ayuda a recordar esas construcciones engorrosas)), parece ser sólo una declaración del tipomine_score, que es una estructura y la descripción de la estructura fue "pegada" en la definición del tipo ( typedef ) , pero podría estar equivocado, aquí hay una pregunta similar discutida y una explicación bastante detallada:

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


En C++, la asignación de memoria es responsabilidad del programador, por lo que si el resultado de una función devuelve un punteromine_score *, quienrecibe ese puntero debe asignar la memoria, es decir, no es una variable sino un puntero a los datos

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

Asigné memoria dentro de la función y la liberé en el ámbito de la variable a la que pasé la referencia.