PascalABC.NET - PascalABC.NET

PascalABC.NET
Paradigma Moniparadigma : menettelyllinen , toiminnallinen , olio-orientoitu , yleinen
Suunnitellut SS Mikhalkovich, Ivan Bondarev, AV Tkachuk, SO Ivanov
Ilmestyi ensimmäisen kerran 2002 ; 19 vuotta sitten ( 2002 )
Vakaa vapautus
3.8.0.2857 / 7. maaliskuuta 2021 ; 3 kuukautta sitten ( 2021-03-07 )
Kirjoituskuri Staattinen , osittain päätelty
Toteutuskieli PascalABC.NET
Käyttöjärjestelmä Monitasoinen
Lisenssi LGPLv3
Tiedostonimen laajennukset .pas
Verkkosivusto pascalabc .net / fi /
Vaikuttanut
Delphi , Pascal , C # , Python

PascalABC.NET on Pascal- ohjelmointikieli, joka ottaa käyttöön klassisen Pascalin, useimmat Delphi- kieliominaisuudet sekä useita omia laajennuksia. Se on toteutettu .NET Framework -alustalla ja sisältää kaikki modernit kieliominaisuudet: luokat, operaattorin ylikuormitus , rajapinnat, poikkeusten käsittely , yleiset luokat ja rutiinit , roskien keräys , lambda-lausekkeet , rinnakkaiset ohjelmointityökalut ( OpenMP vain vuodesta 2016).

PascalABC.NET on myös yksinkertainen ja tehokas integroitu kehitysympäristö kanssa integroitu debuggeri, IntelliSense järjestelmä, lomakkeen suunnittelija , koodi malleja ja koodin automaattinen alustus. Komentorivin PascalABC.NET-kääntäjä on saatavana myös Linuxilla ja MacOS: lla (kohdassa Mono).

PascalABC.NET on suosittu venäläisissä kouluissa ja yliopistoissa. Eteläisessä liittovaltion yliopistossa sitä käytetään pääkielenä tietotekniikan opiskelijoiden opettamiseen kurssilla "Ohjelmoinnin perusteet" ja lasten opettamiseen yhdessä Venäjän suurimmista tietokonekouluista.

PascalABC.NET: n tärkeimmät ominaisuudet

Pascal-kielen laajennukset

  • Operaattorit += -= *= /=
  • lohkon sisäiset muuttujien määritelmät
  • Muuttujailmoitus forsilmukan otsikossa
  • Muuttuva ilmoitus alustuksella ( var n: integer := 10;)
  • Muuttujan tyypin vähennys ( var x := 1;)
  • foreach
  • Rutiinit vaihtelevalla määrällä parametreja
  • setminkä tahansa tyyppinen ( set of integer)
  • Menetelmät rekistereissä
  • Luokan ilmoituksessa määritellyt menetelmät
  • Yksinkertaistettu syntaksi yksiköistä
  • Avainsana new(rakentajan kutsuminen)
  • Kentän alustusohjelmat
  • Kuljettajan ylikuormitus
  • Staattiset rakentajat
  • Direktiivejä OpenMP
  • merkkijono
  • funktiotyypin syntaksit T-> T
  • kaksoistyyppinen syntakse (T1, T2)
  • saanto ja saantosekvenssi
  • kuvion sovitus
  • taulukon viipaleet
  • interpoloidut merkkijonot
  • lambda-lausekkeiden parametrien purkaminen muuttujiksi

Järjestelmäyksiköt

Suurin osa yksiköistä on keskittynyt koulutukseen:

  • Rasterigrafiikkayksiköt GraphABC (perustuu Windows Forms), GraphWPF (perustuu WPF)
  • Vektorigrafiikkayksiköt ABCObjects (perustuu Windows Forms), WPFObjects (perustuu WPF)
  • 3D-grafiikka- ja animaatioyksikkö Graph3D (perustuu Helix Toolkit -kirjastoon)
  • Unit FormsABC luoda yksinkertaisen Windows-sovelluksen ilman lomakesuunnittelijaa
  • Yksiköt-toteuttajat Robot ja Drawman (koulun tietojenkäsittelytiede)

Näytteet

1. Vaihda matriisin ensimmäinen ja toinen puolisko

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. Kahden kokonaisluvun suurempi yhteinen jakaja

begin
  var (a, b) := ReadInteger2;
  while b > 0 do
    (a, b) := (b, a mod b);
  var GCD := Abs(a);
  GCD.Print;
end.

4. Näytä kaikki alle 1000 Fibonacci-numerot

begin
  SeqWhile(1,1,(x,y)->x+y,x->x<1000).Print;
end.

5. Tiedoston sanataajuussanakirja

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.

5а. Tiedoston sanataajuussanakirja. Ratkaisu toiminnallisessa tyylissä

begin
  ReadLines('words.txt').SelectMany(s->s.ToWords).GroupBy(v->v).EachCount.PrintLines;
end.

6. Rinnakkainen matriisikertaus käyttämällä OpenMP-direktiivejä

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.

Katso myös

Viitteet

Ulkoiset linkit