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 |
| Vakaa vapautus | 3.8.0.2857 / 7. maaliskuuta 2021
|
| Kirjoituskuri | Staattinen , osittain päätelty |
| Toteutuskieli | PascalABC.NET |
| Käyttöjärjestelmä | Monitasoinen |
| Lisenssi | LGPLv3 |
| Tiedostonimen laajennukset | .pas |
| Verkkosivusto | pascalabc |
| 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.