PascalABC.NET - PascalABC.NET

PascalABC.NET
Paradigma Multiparadigma : prozedural , funktional , objektorientiert , generisch
Entworfen von SS Michalkowitsch, Ivan Bondarev, AV Tkachuk, SO Ivanov
Erstmals erschienen 2002 ; Vor 19 Jahren ( 2002 )
Stabile Version
3.8.0.2857 / 7. März 2021 ; vor 3 Monaten ( 2021-03-07 )
Schreibdisziplin Statisch , teilweise abgeleitet
Implementierungssprache PascalABC.NET
Betriebssystem Plattformübergreifend
Lizenz LGPLv3
Dateinamenerweiterungen .pass
Webseite pascalabc .net /de /
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.

Siehe auch

Verweise

Externe Links