[[:oktatas:programozás:d|< D]] ====== A D programozási nyelv ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2011, 2014 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://szit.hu ===== Bevezetés ===== A D nyelv egy új programozási nyelv, a C és a C++ alapjain. Egy programozási nyelv csak akkor használható ha van hozzá fordító. Fordítót az alábbi helyről tölthetünk le: * http://www.digitalmars.com/d/download.html De egy Debian GNU/Linux 6.0-án csak adjuk ki a következő parancsot: apt-get install gdc ===== Helló Világ ===== import std.stdio; void main() { writeln("Helló Világ"); } Fordítás: gdc -o main main.d ===== Kivitel ===== Kivitelre használható függvények: * write() * writeln() * writef() A write() függvény sortörés nélkül ír a képernyőre. A writeln() függvény a kiírt adatok végén sortörést ír a képernyőre. A writef() függvénye nem tesz sortörés karaktert, és formázott kivitelre találták ki. A formázott kivitelről később lesz szó. A write() függvénynek több paramétere is lehet: write("Egy", "Kettő","Három"); A writeln() szintén: writeln("Egy", "Kettő", "Három"); Mindkét függvény használható paraméter nélkül is. Írás az alapértelmezett kimenetre: stdout.writeln(); ===== A D nyelv típusai ===== | byte | -128 ... 127 | 1 byte | | ubyte | 0 ... 255 | 1 byte | | short | -32768 ... 32767 | 2 bytes | | ushort | 0 ... 65535 | 2 bytes | | int | -2147483648 ... 2147483647 | 4 bytes | | uint | 0 ... 4294967296 | 4 bytes | | long | -9223372036854775808 ... 9223372036854775807 | 8 bytes | | ulong | 0 ... 18446744073709551616 | 8 bytes | | float | kb.: -3.4E38 ... kb.: 3.4Ee38 | 4 bytes | egy valós szám | ifloat | kb.: -3.4E38i ... kb.: 3.4Ee38i | 4 bytes | egy képzetes szám | | double | kb.: -1.8e308 ... kb.: 1.8e308 | 8 bytes | nagy valós szám | | idouble | kb.: -1.8e308i ... kb.: 1.8e308i | 8 bytes | nagy képzetes szám | | real | (x86-os gépen) Kb.: -5.9e4436 ... (x86-os gépen) Kb.: 5.9e4436 | 10 bytes | | ireal | (x86-os gépen) Kb.: -5.9e4436 ... (x86-os gépen) Kb.: 5.9e4436 | 10 bytes | képzetes szám | | char | 0 ... 255 | 1 byte | egy karakter, pl.: 'a' | | wchar | 0 ... 65535 | 2 bytes | UTF-16 karakter | | dchar | 0 ... 4294967296 | 4 bytes | UTF-32 karakter | ===== Változók és állandók a D nyelvben ===== int a = 35; double b = 3.12; int kor = 27; writeln("Jóska", kor, "éves" ); ===== Formázott kivitel ===== A formázott kivitel a következő két függvénnyel lehetséges: * writef() * writefln() int a = 35; writef("%d", a); Pontosság meghatározása: double b = 3.1234567; writef("%.2f\n", b); A kiírás szélességének megadása: double b = 3.1234567; writef("%20f\n", b); Vezető nullák megadása: double b = 3.1234567; writef("%020f\n", b); A writefln() metódus létrehozása: double b = 3.1234567; writefln("%020f", b); ===== Matematikai függvények ===== A matematikai függvények a std.math névtérben vannak. Abszolút érték számítás például: import std.stdio; import std.math; void main(){ writeln(abs(-5)); } import std.stdio; import std.math; void main(){ double szog = 30; writeln(sin(szog * PI / 180)); } ===== Bevitel ===== import std.stdio; void main() { string s; s = readln(); writefln("Ezt írtad: %s", s); } Szám bevitel import std.stdio, std.conv, std.string; void main() { writef("Szám: "); int a = toInt(chop(readln)); writefln("Ezt írtad: %d", a); } import std.stdio, std.conv, std.cstream; void main() { writef("Szám: "); int a = toInt(din.readLine()); writefln("Ezt írtad: %d", a); } ===== Szelekció ===== ==== Egy ágú ==== import std.stdio; void main() { int a = 3; if (a < 4) writefln("Kisebb"); } ==== Két ágú ==== import std.stdio; void main() { int a = 3; if (a < 4) writefln("Kisebb"); else writefln("Nagyobb"); } ==== Több ágú, több utasításos ==== import std.stdio; void main() { int a = 3; if (a < 2) { writefln("Kisebb"); writefln("a = %d",a); } else { writefln("Nagyobb"); writefln("a = %d", a); } } ==== Több ágú if szelekció ==== import std.stdio; void main() { int a = 0; if (a > 0 ) writefln("Pozitív"); else if(a < 0) writefln("Negatív"); else writefln("Nulla"); } ===== Iteráció ===== ==== for növekményes ciklus ==== import std.stdio; void main() { for( int i = 0; i< 10; i++) writefln(i); } ==== Egyszerűen foreach-el ==== import std.stdio; void main() { int[] tomb = [5, 2, 9, 3, 4]; foreach(elem ; tomb) writefln(elem); } import std.stdio; void main() { int[] tomb = [5, 2, 9, 3, 4]; foreach(index, elem ; tomb) writefln("Index: %d Elem: %d", index, elem); } Visszafele: import std.stdio; void main() { int[] tomb = [5, 2, 9, 3, 4]; foreach_reverse(index, elem ; tomb) writefln("Index: %d Elem: %d", index, elem); } Minden egyes elemet 1-gyel megemelünk import std.stdio; void main() { int[] tomb = [5, 2, 9, 3, 4]; foreach(ref elem; tomb) elem++; foreach(elem ; tomb) writefln(elem); } ==== Amíg típusú ciklusok ==== while(feltétel) { //ide jön a kód } do { //kód } while(feltétel) ===== Tömb ===== import std.stdio; void main() { int[] tomb = [1, 2, 3, 4 ]; writefln(tomb[0]); } Az egész tömb kiíratása: import std.stdio; void main() { int[] tomb = [1, 2, 3, 4 ]; writefln(tomb); } Az eredmény: [1,2,3,4] ===== Karaktersorozatok kezelése ===== Karaktersorozat beolvasása: import std.stdio; void main(){ char[] nev; write("Név: "); readln(nev); writeln("Ezt írtad: ", nev); } Sorvége jelek bezárása: import std.stdio; import std.string; void main(){ char[] nev; write("Név: "); readln(nev); nev = chomp(nev); writeln("Ezt írtad: ", nev); } Esetleg így: import std.stdio; import std.string; void main(){ write("Név: "); string nev = chomp(readln()); writeln("Ezt írtad: ", nev); } A szöveg hossza: import std.stdio; import std.string; void main(){ write("Név: "); string nev = chomp(readln()); writeln("A beírt szöveg hossza: ", nev.length); }