PascalABC.NET - PascalABC.NET
| Paradigma | Multiparadigma : prozedural , funktional , objektorientiert , generisch |
|---|---|
| Entworfen von | SS Michalkowitsch, Ivan Bondarev, AV Tkachuk, SO Ivanov |
| Erstmals erschienen | 2002 |
| Stabile Version | 3.8.0.2857 / 7. März 2021
|
| Schreibdisziplin | Statisch , teilweise abgeleitet |
| Implementierungssprache | PascalABC.NET |
| Betriebssystem | Plattformübergreifend |
| Lizenz | LGPLv3 |
| Dateinamenerweiterungen | .pass |
| Webseite | pascalabc |
| Beeinflusst von | |
| Delphi , Pascal , C# , Python | |
PascalABC.NET ist eine Pascal- Programmiersprache, die klassisches Pascal, die meisten Delphi-Sprachfeatures sowie eine Reihe eigener Erweiterungen implementiert. Es ist auf der .NET Framework- Plattform implementiert und enthält alle modernen Sprachfeatures: Klassen, Operatorüberladung , Schnittstellen, Ausnahmebehandlung , generische Klassen und Routinen , Garbage Collection , Lambda-Ausdrücke , parallele Programmiertools ( OpenMP nur ab 2016).
PascalABC.NET ist auch eine einfache und leistungsstarke integrierte Entwicklungsumgebung mit integriertem Debugger, IntelliSense-System, Formulardesigner , Codevorlagen und automatischer Codeformatierung. Der Befehlszeilen-PascalABC.NET-Compiler ist auch unter Linux und MacOS (unter Mono) verfügbar.
PascalABC.NET ist in russischen Schulen und Universitäten beliebt. An der Southern Federal University wird es als Hauptsprache für den Unterricht von Studenten der Informatik im Kurs "Grundlagen der Programmierung" und für den Unterricht von Kindern in einer der größten Computerschulen Russlands verwendet.
Hauptmerkmale von PascalABC.NET
Pascal-Spracherweiterungen
- Betreiber
+= -= *= /= - In-Block-Variablendefinitionen
- Variablendeklaration im
forSchleifenkopf - Variablendeklaration mit Initialisierung (
var n: integer := 10;) - Variablentyp-Abzug (
var x := 1;) foreach- Routinen mit variabler Parameteranzahl
-
setjeglicher Art (set of integer) - Methoden in Aufzeichnungen
- In der Klassendeklaration definierte Methoden
- Vereinfachte Syntax von Einheiten
- Schlüsselwort
new(Aufruf eines Konstruktors) - Feldinitialisierer
- Überlastung des Bedieners
- Statische Konstruktoren
- Direktiven OpenMP
- Fall für Saiten
- Funktionstypsyntax T->T
- Tupeltyp-Syntax (T1, T2)
- Ertrag und Ertragsfolge
- Musterabgleich
- Array-Slices
- interpolierte Zeichenfolgen
- Entpacken von Parametern von Lambda-Ausdrücken in Variablen
Systemeinheiten
Die meisten Einheiten sind auf Bildung ausgerichtet:
- Rastergrafikeinheiten GraphABC (basierend auf Windows Forms), GraphWPF (basierend auf WPF)
- Vektorgrafikeinheiten ABCObjects (basierend auf Windows Forms), WPFObjects (basierend auf WPF)
- 3D-Grafik- und Animationseinheit Graph3D (basierend auf der Helix Toolkit-Bibliothek)
- Unit FormsABC zum Erstellen einfacher Windows-Anwendungen ohne Formulardesigner
- Units-Executors Robot und Drawman (Schulinformatik)
Proben
1. Vertauschen Sie die erste und zweite Hälfte eines Arrays
begin
var a := ArrGen(10,i->2*i+1);
a.Println;
Assert(a.Length mod 2 = 0);
var n := a.Length div 2;
a := a[n:] + a[:n];
a.Println;
end.
2. 100!
begin
var p: BigInteger := 1;
for var i:=1 to 100 do
p := p * i;
Println(p);
end.
3. Größerer gemeinsamer Teiler von zwei ganzen Zahlen
begin
var (a, b) := ReadInteger2;
while b > 0 do
(a, b) := (b, a mod b);
var GCD := Abs(a);
GCD.Print;
end.
4. Zeigen Sie alle Fibonacci-Zahlen unter 1000 . an
begin
SeqWhile(1,1,(x,y)->x+y,x->x<1000).Print;
end.
5. Worthäufigkeitswörterbuch für eine Datei
begin
var d := new Dictionary<string,integer>;
foreach var s in ReadLines('words.txt') do
foreach var word in s.ToWords do
d[word] := d.Get(word) + 1;
d.PrintLines;
end.
5a. Worthäufigkeitswörterbuch für eine Datei. Lösung im funktionalen Stil
begin
ReadLines('words.txt').SelectMany(s->s.ToWords).GroupBy(v->v).EachCount.PrintLines;
end.
6. Parallele Matrixmultiplikation mit OpenMP-Direktiven
procedure Mult(a,b,c: array [,] of real; n: integer);
begin
{$omp parallel for}
for var i:=0 to n-1 do
for var j:=0 to n-1 do
begin
var cc := 0.0;
for var l:=0 to n-1 do
cc += a[i,l]*b[l,j];
c[i,j] := cc;
end;
end;
const n = 1000;
begin
var a := MatrixRandomReal(n,n,1,1.1);
var b := MatrixRandomReal(n,n,1,1.1);
var c := new real[n,n];
Mult(a,b,c,n);
Println(MillisecondsDelta/1000);
end.