Questions tagged [pascalabc.net]

Реализация языка Object Pascal для .NET, ориентированная на обучение современному программированию.

Ключевые особенности PascalABC.NET:

  • Различные расширения языка Pascal, включающие оператор foreach, объявление переменных в блоках, автоопределение типа для var переменных, упрощенный синтаксис модулей, возможность определять методы внутри класса или записи, использование оператора new, анонимные классы, автоклассы, большие числа и т.п.
  • Наиболее современные особенности языка: n-размерные динамичные массивы, дженерики, интерфейсы, оператор перегрузки, исключения, сборщик муссова, лямбда выражения.
  • Эффективная генерация кода для платформы .NET
  • Большая совместимость с Delphi Object Pascal.
  • Высокая скорость выполнения программ.
  • Доступ к большому количеству библиотек .NET.
  • Удобная IDE с встроенным отладчиком, генератором кода и автоформатированием.
  • Встроенные дизайнер форм для быстрой разработки оконных приложений.
  • Простая и эффективная графическая библиотека векторной и растровой графики.
  • Директивы OpenMP для параллельного программирования.

Примеры:

Операторы +=, *=

var a: integer := 1;
begin
 a += 2; 
 a *= 2;
end.

Локальные переменные в блоке

begin
  var n := 10000;
  var s := 0.0;
  for var i:=1 to n do
  for var j:=1 to n do
    s += 1.0/(i*j);
  writeln(Milliseconds);  
end.

Использование foreach

begin
  var arr := new integer[](1,2,3,4);
  foreach var x in arr do
    write(x,' ');
  writeln;  
end.

Большие числа

begin
  var p: BigInteger := 1;
  for var i := 2 to 100 do
    p *= i;
  writeln('100!=',p); 
end.

Короткие функции

function CircleLen(r: real) := 2 * Pi * r;

begin
  writeln(CircleLen(2.3));  
end.

Создание динамичных массивов используя функцию Arr

begin
  var a := Arr(2,5,3,1,9,7);
  Sort(a);
  writeln(a);
  Reverse(a);
  writeln(a);
end.

Динамичные матрицы

function Transpose(a: array [,] of integer): array[,] of integer;
begin
  var m := Length(a,0);
  var n := Length(a,1);
  Result := new integer[n,m];
  for var i:=0 to n-1 do
  for var j:=0 to m-1 do
    Result[i,j] := a[j,i]  
end;

begin
  var a := MatrixRandom(3,4);
  writeln(a);
  var b := Transpose(a);
  writeln(b);
end.

Словари

begin
  var Capital := Dict('Russia'=>'Moscow','Germany'=>'Berlin','France'=>'Paris','Italy'=>'Rom');
  Println(Capital['France'],Capital['Germany']);
end.

Простые операции с файлами

var 
  f: Text;
  s: string;
begin
  Assign(f,'13_Files1.pas');
  Reset(f);
  while not eof(f) do
  begin
    readln(f,s);
    writeln(s);
  end;
  Close(f);
end.


begin
  var f := OpenRead('13_Files2.pas');
  while not f.Eof do
  begin
    var s := f.ReadlnString;
    writeln(s);
  end;
  f.Close;
end.


begin
  foreach var s in ReadLines('13_Files4.pas') do
    writeln(s);
end.

Рисование синуса, используя лямбду

uses GraphABC;

begin
  Draw(x->x*sin(x));
end.

Метод Монте-Карло

begin
  var n := 10000000;
  var pp := Range(1,n)
    .Select(x->Rec(Random(),Random()))
    .Where(p->sqr(p.Item1)+sqr(p.Item2)<1)
    .Count/n*4;
  Print(pp);
end.

Быстрая сортировка с LINQ

function QuickSort(a: sequence of integer): sequence of integer;
begin
  Result := a.Count = 0 ? a : QuickSort(a.Skip(1).Where(x->x<=a.First())) + a.First() + QuickSort(a.Skip(1).Where(x->x>a.First()));
end;  

begin
  var a := ArrRandom(20);
  a.Println;
  QuickSort(a).Println;
end.

Полезные ссылки:

224 questions
1
vote
1 answer

Не получается создать файл записей

Пытаюсь создать типизированный файл из записей, но тут выскакивает ошибка: records.pas(9):Типизированый файл не может содержать элементы такого типа Ранее этот же код запускался в turbopascal'е и работал, так в чем же ошибка?! program…
Ben Nevis
  • 125
1
vote
1 answer

Значение недопустимо большое для int32 (при типе real)

procedure dec_bin(**a:real**); var wstr,mdstr:string;i,lng:integer;b,c,md:real; begin repeat **b:=a/2;** c:=frac(b); if c=0 then md:=0 else md:=1; str(md,mdstr); wstr:=concat(wstr,mdstr); …
1
vote
1 answer

Определение принадлежности точки выделенной области

Вроде все правильно, но ошибка все равно выходит. Заранее спасибо. Вот сам код : uses crt; var Xa,Xb,Xc,Ya,Yb,Yc,x,y:integer; ab,bc,ac,s1,s2,p1,p2,ax,xc:real; begin read(Xa,Xb,Xc,Ya,Yb,Yc,x,y); if (x<=xc) and (y>=0) and (x>=xa) and…
1
vote
2 answers

Переменная double в Windows Forms Pascal ABC

Пишу программу по расчету BMI на формах, ранее написал в консольном виде. Код: uses crt; var m:integer; var h,r:double; begin writeln('Вас приветствует программа по расчету BMI(Расчет индека массы тела) в строчку роста в '); writeln('метрах…
1
vote
1 answer

Не понимаю как исправить. Ошибка времени выполнения: Индекс находился вне границ массива

var f: text; schet, max: integer; s: string; begin assign(f, '24 варианты 1-4.txt'); reset(f); max := 0; begin readln(f, s); schet := 1; for var i := 0 to length(s) - 1 do if ((s[i]…
1
vote
2 answers

Как ускорить работу исполнителя чертёжник в Pascal ABC

Осваиваем с ребенком Pascal ABC (школьный курс информатики - 6 класс). Написали программку, которая рисует некий орнамент из квадратиков. Рисование одного квадратика оформили как процедуру. Рисование повторяющихся фигурок из квадратиков также…
1
vote
1 answer

Не работает repeat...until

У меня в коде есть цикл repeat..until. Есть логическая переменная и переменная с ответом юзера. Проблема в том, что при введении любого ответа, кроме "да" (т.е. m := false), у меня происходит безобразие в консоли. А мне нужно просто "домучать"…
EvilBDSM
  • 111
1
vote
1 answer

не могу вычесть из счетчика 1

помогите, плиз. хочу написать простенькую "игру", где каждые 0.5 сек. с рандомными координатами появляется объект, пользователь должен его "удалить" с помощью ПКМ, но, если на экране 10 объектов, то игра прекращается. вопрос в том, что к счетчику…
ksilusm
  • 13
1
vote
1 answer

Как убрать изображение PascalABC.net

Допустим, я вывожу изображение так: uses GraphABC; begin (New Picture('Картинка.jpg')).Draw(0,0); end. Как его потом убрать? Или заменить?
0
votes
1 answer

Помогите решить простые палиндормы?

Не могу написать код, который успеет выполниться за время. код и скрины далее: program ex; var i,k,n,count: word; z,err:integer; function dec2bin(x:integer):string; var s:string; begin s:=''; while x>0 do begin s:=chr(ord('0')+x mod 2)+s; x:=x…
0
votes
1 answer

Ошибка "встречено 'else', а ожидался оператор"

Выдает ошибку, что поставить? Встречено 'else', а ожидался оператор (строка 19) var a, b, c, d, x1, x2: real; begin writeln ('ax2+bx+c=0'); write ('a='); readln (a); write ('b='); readln (b); write ('c='); readln (c); d :=…
Eloren
  • 295
0
votes
0 answers

Как правильно вычислить срок годности?

программирую на PascalABC.Подскажите в чем ошибка: есть Дата производства,срок годности,и сама дата до какого числа годен продукт. Мы вводим дни срока годности и программа высчитывает до какой даты годен продукт. При маленьких числах примерно до 350…
Osman
  • 25
0
votes
0 answers

Составить программу, позволяющую организовать в виде записей данные о товарах в магазине

Доброго времени суток! Каждая запись должна содержать название товара, проданное его количество, цену (вводятся из файла) и выручку с продажи (вычисляется в программе как произведение цены на количество) Программа должна: 1. Считать из файла…
0
votes
2 answers

Как удалить из предложения символы псевдографики?

Не понимаю как сделать условие проверки каждого символа на псевдографику (176-223 символы), удалить их, вывести исправленное предложение и посчитать разность исходного предложения и полученного. Вот мой код: program pr11; uses crt; procedure…
0
votes
1 answer

Можно ли в Pascal ABC заполнять сектора текстом?

Помогите пожалуйста сделать такую штуку как на фото, только с русским текстом. Секторы в паскале я могу нарисовать, но как заполнить их текстом? Возможно это можно сделать проще на других языках, просто с простыми модулями рисования я знаю только…
NTP
  • 3,199
1
2 3