C dili hakkında sorular

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

bu sözdizimi nasıl çalışır? f-i kendi içinde? ayrıca 2 kez

ayrıca, bilgilendirici ve çok uzun olmayan iyi bir kitap tavsiye edin.

bende bir tane var

B. Kernighan, D. Ritchie

C programlama dili

3. baskı, gözden geçirilmiş

 

Bu mql ile de mümkündür. Bir işlev her çağrıldığında değil, iki kez daha çağrılır - işlevin başında bir dönüş vardır.

Buna özyineleme denir.

https://ru.wikipedia.org/wiki/Recursion

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

 
Dmitry Fedoseev :

Bu mql ile de mümkündür.Bir işlev her çağrıldığında değil, iki kez daha çağrılır - işlevin başında bir dönüş vardır.

Buna özyineleme denir.

https://ru.wikipedia.org/wiki/Recursion

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

teşekkürler, daha birçok soru olacak.. Tavsiyeniz üzerine kütüphanelerden birini mql'ye yeniden yazıyorum))

 
Maxim Dmitrievsky :

ayrıca, bilgilendirici ve çok uzun olmayan iyi bir kitap tavsiye edin.

Stroustrup Üniversitesi'nde okuyorum, ancak dilin temel yapıları hakkında bir ders kitabına ihtiyacınız olmadığını düşünüyorum, zaten programlama deneyiminiz var, artık sıfırdan okumanıza gerek yok

Hiç C# ile yazmadım ama Windows altında programlar yazdım. Elimi C#'da denemeye karar verdiğimde, çevrimiçi yardım bana çok yardımcı oldu, küçük soruları netleştirebildim, bu kaynakla ilgili kısa makaleler okudum ve C++ özyineleme kısaca açıklanıyor

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

Genel C++ eğitimi https://metanit.com/cpp/tutorial/ , bu sitede olduğundan daha kısa bilgiler bulacağınızdan şüpheliyim ;)

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

Stroustrup Üniversitesi'nde okuyorum, ancak dilin temel yapıları hakkında bir ders kitabına ihtiyacınız olmadığını düşünüyorum, zaten programlama deneyiminiz var, artık sıfırdan okumanıza gerek yok

Hiç C# ile yazmadım ama Windows altında programlar yazdım. Elimi C#'da denemeye karar verdiğimde, çevrimiçi yardım bana çok yardımcı oldu, küçük soruları netleştirebildim, bu kaynakla ilgili kısa makaleler okudum ve C++ özyineleme kısaca açıklanıyor

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

Bu sitedekinden daha özlü bilgi bulacağınızdan şüpheliyim;)

evet, sadece dili girin, asıl zorluk, tüm kodun işaretçiler ve goto ile yazılmasıdır, bellek tahsisi ve ardından imha ile çok daha fazla gereksizdir.

bu nedenle mql ve SI'nin tamamen farklı diller olduğu söylenebilir. Diziler yerine işaretçileri f-th'e geçirmek gibi basit yapılar bile artık burada çalışmıyor, yeniden yazma saçmalık

 
Maxim Dmitrievsky :

evet, sadece dili girin, asıl zorluk, tüm kodun işaretçiler ve goto ile yazılmasıdır, bellek ayırma ve ardından imha ile çok daha fazla gereksizdir.

bu nedenle mql ve SI'nin tamamen farklı diller olduğu söylenebilir. Diziler yerine işaretçileri f-th'e geçirmek gibi basit yapılar bile artık burada çalışmıyor, yeniden yazma saçmalık

C++ ile ilgili ilginç olan şey işaretçilerle çalışmasıdır, dilin tüm esnekliğine sahiptir ve işaretçilerle çalışmaya dayanır - tabiri caizse, işlemci RAM'iyle çalışmanın tam bir taklididir, işlemci tanımlayıcıların adlarını bilmez (değişken adları), ancak yalnızca göreli ofset verilerini bilir (aslında, bellek adreslerine bağlantılar) ve referansa göre verilerin yazılması gerekir - işaretçi bunu yapar - veri türünü ve verilerin depolandığı yeri açıklar. hafıza


MQL gerçekten farklı bir dildir


işaretçiler https://metanit.com/cpp/tutorial/4.1.php

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

C++ ile ilgili ilginç olan şey işaretçilerle çalışmasıdır, dilin tüm esnekliğine sahiptir ve işaretçilerle çalışmaya dayanır - tabiri caizse, işlemci RAM'iyle çalışmanın tam bir taklididir, işlemci tanımlayıcıların adlarını bilmez (değişken adları), ancak yalnızca göreli ofset verilerini bilir (aslında, bellek adreslerine bağlantılar) ve referansa göre verilerin yazılması gerekir - işaretçi bunu yapar - veri türünü ve verilerin depolandığı yeri açıklar. hafıza


MQL gerçekten farklı bir dildir


işaretçiler https://metanit.com/cpp/tutorial/4.1.php

Evet, teşekkürler, işaretçilere zaten aşinayım ve o kitapta

site uygun, bu arada, favorilere eklendi

İşte tembeller için c'den cpp'ye kadar iyi bir video ders kursu


 

İşte kütüphane başlığından bir örnek:

yapılar işaretçilerle oluşturuluyor ne olduğu belli değil (görünüşe göre bunlar henüz var olmayan diziler), sonra anladığım kadarıyla ..uh .. bu yapının değişkenini bildiriyorlar mine_score; aynı isimle?

 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;

bununla da ilgilenilmesi gerekecek.

ve ardından sonucunu doğrudan bu değişkenin bellek alanına yazacak bir işlev bildirildi mi?

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

İşte kütüphane başlığından bir örnek:

yapılar işaretçilerle oluşturuluyor ne olduğu belli değil (görünüşe göre bunlar henüz var olmayan diziler), sonra anladığım kadarıyla ..uh .. bu yapının değişkenini bildiriyorlar mine_score; aynı isimle?

bununla da ilgilenilmesi gerekecek.

ve ardından sonucunu doğrudan bu değişkenin bellek alanına yazacak bir işlev bildirildi mi?

Hayır, burada mine_score yapısı olan mine_score veri türü bildirilir.

Ve fonksiyon, bu fonksiyon içinde oluşturulacak olan bu yapıya bir işaretçi döndürür. Buna göre, işlevin amacı min_score türünde bir varlık oluşturmak ve bunun sahipliğini işlev çağrısının kapsamına aktarmaktır.

 

Maxim Dmitrievsky :

bununla da ilgilenilmesi gerekecek.

ve ardından sonucunu doğrudan bu değişkenin bellek alanına yazacak bir işlev bildirildi mi?

Typedef'leri uzun zaman önce unutmuştum, çünkü MQL bu hantal yapıları hatırlamaya yardımcı oluyor))), görünüşe göre bu , bir yapı olan mine_score türünün bir bildirimidir ve yapının açıklaması, tür bildirimine ( typedef) "takılıdır" ), ama yanılıyor olabilirim, işte benzer bir soru tartışıldı ve oldukça ayrıntılı bir açıklama:

http://stackoverflow.com/questions/13054/typedef-struct-vs-struct-definitions


Maksim Dmitrievski :

ve ardından sonucunu doğrudan bu değişkenin bellek alanına yazacak bir işlev bildirildi mi?

C++'da, programcı bellek ayırmaktan sorumludur, bu nedenle bir işlevin sonucu bir işaretçi döndürürse   mine_score * , sonra bu işaretçiyi kabul eden ve bellek ayırması gereken kişi, yani. bu bir değişken değil, verilere bir işaretçi

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

Typedef'leri uzun zaman önce unutmuştum, çünkü MQL bu hantal yapıları hatırlamaya yardımcı oluyor))), görünüşe göre bu , bir yapı olan mine_score türünün bir bildirimidir ve yapının açıklaması, tür bildirimine ( typedef) "takılıdır" ), ama yanılıyor olabilirim, işte benzer bir soru tartışıldı ve oldukça ayrıntılı bir açıklama:

http://stackoverflow.com/questions/13054/typedef-struct-vs-struct-definitions


C++'da, programcı bellek ayırmaktan sorumludur, bu nedenle bir işlevin sonucu bir işaretçi döndürürse   mine_score * , sonra bu işaretçiyi kabul eden ve bellek ayırması gereken kişi, yani. bu bir değişken değil, verilere bir işaretçi

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

İşlevin içine bellek ayırdım ve bağlantıyı geçtiğim değişken kapsamında serbest bıraktım.