A Digitalmars D programozási nyelv

Példaprogramok

wordcount (wc)

Az alábbi példaprogram a digitalmars D honlapjáról származik.

import std.stdio; import std.stream; int main (char[][] args) { int w_total;  int l_total;  ulong c_total; int[char[]] dictionary;  writefln(" lines words bytes file"); foreach (arg;  args[1 .. args.length]) { int w_cnt, l_cnt;  bool inword;  auto c_cnt = std.file.getSize(arg); if (c_cnt < 10_000_000) { size_t wstart; auto input = cast(char[])std.file.read(arg); foreach (j, c; input) { if (c == '\n') ++l_cnt; if (c >= '0' && c <= '9') { } else if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') { if (!inword) { wstart = j; inword = true; ++w_cnt; } } else if (inword) { auto word = input[wstart .. j]; dictionary[word]++; inword = false; } } if (inword) { auto w = input[wstart .. input.length]; dictionary[w]++; } } else { auto f = new BufferedFile(arg); char[] buf; while (!f.eof()) { char c; f.read(c); if (c == '\n') ++l_cnt; if (c >= '0' && c <= '9') { if (inword) buf ~= c; } else if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') { if (!inword) { buf.length = 1; buf[0] = c; inword = 1; ++w_cnt; } else buf ~= c; } else if (inword) { if (++dictionary[buf] == 1) buf = null; inword = 0; } } if (inword) { dictionary[buf]++; } } writefln("%8s%8s%8s %s\n", l_cnt, w_cnt, c_cnt, arg); l_total += l_cnt; w_total += w_cnt; c_total += c_cnt; } if (args.length > 2) { writefln("--------------------------------------\n%8s%8s%8s total", l_total, w_total, c_total); } writefln("--------------------------------------"); foreach (word1; dictionary.keys.sort) { writefln("%3s %s", dictionary[word1], word1); } return 0; }

"C-szerű" fordító

A mellékelt példaprogram egy működő fordítóprogram, mely C-szerű szintaxisból állít elő olyan kimenetet, amelyből azután az NASM assemblerrel lehet futtatható kódot előállítani (nem nagyon használ semmilyen NASM specialitást a program, elvileg nem lenne nehéz más szintaxishoz hozzáidomítani).
Amit tudni érdemes róla:

Faktoriális

A feladat : egyszerű, faktoriálist kiszámító program (egy szám paramétert vár)

Szerzo : Csík Peter

Készítés éve : 2008

Fordító : dmd 1.030.

A program

Fibonacci

A feladat : a paraméterként megadott sorszámú Fibonacci-számot adja vissza

Szerző : Csík Peter

Készítés éve : 2008

Fordító : dmd 1.030.

A program

FileIO

A feladat : file IO bemutatása

Szerző : Csík Peter

Készítés éve : 2008

Fordító : dmd 1.030.

A program

Osztályok

A feladat : osztályok bemutatása

Szerző : Csík Peter

Készítés éve : 2008

Fordító : dmd 1.030.

A program

Statikus tömb

A feladat : statikus tömbök bemutatása.

Szerző : Csík Peter

Készítés éve : 2008

Fordító : dmd 1.030.

A program

Szerződés

A feladat : szerződések alapjainak bemutatása

Szerző : Csík Peter

Készítés éve : 2008

Fordító : dmd 1.030.

A program

Labirintus

A feladat : Útkeresés labirintusban két adott pont között

Részletesebben : A program a LabyrintInput.txt fájlból olvassa be az információkat, az első 3 sor 3 kordinátát tartlmaz (labiintus mérete, start, cél), majd ezután következik a labirintus tértképe, 'X' a fal, ' ' a járható terület. A megoldás standard outputon lesz olvasható a program futtatása után. A program egy egyszerű minden irányba haladó rekurzív algorimtust használ, ezért nagy labirintusok esetében egyáltalán nem hatékony, de nem is ezért készült a program. Elsődleges cél bemutatni a nyelvebn rejlő lehetőségeket, új funkciókat, különös tekintettel az assertek, elő és utófeltételek illetve az osztályinvariánsok használatára. Valójában az algorimtus nem fog minden irányba haladni, mivel a rekurzív hívások adott sorrendben futnak le mindig, nem pedig párhuzamosan.

Szerző : Leskó Dániel

Készítés éve : 2009

Fordító : dmd 2.0.

A program

Mátrix szorzás

A feladat: A mátrix szorzás megvalósításán keresztül bemutatni a D nyelv párhuzamosságot támogató lehetőségeit.

Részletesebben: A program paraméterként várja a beolvasandó fájl nevét, mely két mátrixot tartalmaz. Mindkét mátrix esetén először a sorok és oszlopok számát, majd sorfolytonosan a mátrix elemeit.
Ezután a képernyőre írja a két operandust, majd sorban elvégzi a mátrixok szorzását mindhárom implementált módon. Ezek eredményét is a képernyőre írja.
A mátrix szorzás párhuzamosság szempontjából érdekes része a kiszámolt adatok összegyűjtése egyetlen mátrixba. Erre három módszert is bemutat a program.

Szerző: Juhász Dávid

Készítés éve: 2011

Fordító: dmd 2.051

A program

Quicksort

A feladat: A Quicksort algoritmus különböző megvalósításait megmutatni a D programozási nyelven.

Részletesebben: A program a gyorsrendezés három különböző megvalósítását mutatja be. Első megvalósítása az eredeti, rekurzív algoritmus. A második megvalósítás az elosztott quicksort algoritmust mutatja be. Ez nagyon hasonló az elsőhöz, a különbség az, hogy a rekurzív hívásokat külön szálban indítja el. Az első két megoldás helyben rendez. A harmadik megvalósítás a quicksort algoritmus funkcionális elvű megközelítése. Ez a megoldás nem helyben rendezi a tömböt. Az algoritmusok generikusak, valamint rendelkeznek elő- és utófeltétellel.

Szerző: Borók-Nagy Zoltán

Készítés éve: 2011

Fordító: dmd 2.052

A program

Calc

A feladat: Egyszerű grafikus számológép.

Részletesebben: A program egy egyszerű példa Form-ok használatára D-ben. Alkalmaz típus invariánst és cast operátor felüldefiniálást, csak a bemutatás kedvéért.

Szerző: Kiss Ferenc

Készítés éve: 2012

Fordító:
C:\d_fordito\dmd_tango\bundle\bin>dfl -dfl-ver
Using Tango library
DFL version 1.0
Tested with DMD v1.068 and v1.030.
DFL lib files compiled with Digital Mars D Compiler v1.056
Installed compiler is Digital Mars D Compiler v1.056

A program

Generikus verem osztály

A feladat: verem sablonosztály segédfüggvényekkel.

Részletesebben: A program példát ad egy generikus verem osztályra és ennek alkalmazására. Az implementáció bemutatja a D nyelv generikus, verifikációs és funkcionális eszközeit.

Szerző: Tanyi Viktor

Készítés éve: 2014

Fordító: dmd 2.065

A program

Konfigurációs fájl olvasó

A feladat: Adott formátumú konfigurációs fájl sorait beolvasni.

Részletesebben: A reguláris kifejezés könyvtári csomag, a debug(identifier), a unittest, és a design by contract nyelvi elemek valós használatának bemutatása egy olyan programmal, mely egy konfigurációs fájlt olvas be, aminek a tartalma bizonyos formátumnak megfelel. Programkódból megadhatóak az egyes konfig elemek lehetséges értékei és alapértelmezett értéke.

Szerző: Drozdík Zoltán

Készítés éve: 2014

Fordító: DMD64 D Compiler v2.065

Fordítás és futtatás:
  Makefile-t használva: make run
  Makefile nélkül: dmd -unittest -debug=contract configReader.d configReaderHelper.d example.d -ofconfigReader.exe && configReader.exe

A program