Помощь новичкам


#1650

Или так! (с)


#1651

Насколько я понял в CRT/консоли нет понятия текстового режима 25/40/80 не работает Window и нет абсолютного/прямого доступа к портам/памяти. А можно ли без лишнего дублирования экранной области узнать цветовые атрибуты в указанных координатах вроде ATTR(const x,y:byte): byte?

Спс


#1652

Вроде нет, обычно если такое нужно - делают свой врапер для консоли.


#1654

Как передать аргументы из списка (args) в лямбду, если заранее не известно, сколько в списке окажется элементов (зависит от ввода)? Вот такой код:

begin
  var lambda1: real-> real := x -> x * x * 3.14;
  var lambda2: (real,real)-> real := (x, y)-> x * y;
  
  var s := ((1, lambda1), (2, lambda2));
  
  var f := Dict(
    kv('круг', 1),
    kv('прямоугольник', 2));
  
  var args := new list<real>;
  
  foreach var x in range(f[ReadlnString()]) do
    args.Add(ReadlnReal());
  
  var Square := s[args.Count - 1][1](...???); // <---
  Print(Square)
end.

#1655

Передавайте в лямбду не отдельные элементы а массив, ну или в вашем случае список.


#1656

Ну а если вдуматься в то что вы делаете - сделайте абстрактный класс фигуры, а в его наследниках - описывайте методы чтения и обсчёта чего угодно, типа площади.


#1658

aaa… не получается

var Square := s[(args.Count-1)][1](args); // <-- индекс кортежа должен быть константным выражением

#1659

Зарработало!

begin
  var lambda1: List<real>-> real := x -> x[0] ** 2 * 3.14;
  var lambda2: List<real>-> real := x -> x[0] * x[1];
  
  var s := Dict(kv(1, lambda1), kv(2, lambda2));
  
  var f := Dict(
    kv('круг', 1),
    kv('прямоугольник', 2));
  
  var args := new list<real>;
    
  foreach var x in range(1, f[ReadlnString()]) do
    args.Add(ReadlnReal());
  
  var Square := s[(args.Count)](args);
  Print(Square)
end.

#1660

В файле помощи даже в “Раздел uses” не нашёл описание и нюансы структуры вида

Uses TreeConverterUnit in 'TreeConverter.dll';

Также в файле Middle_End_Compiler_PascalABC.NET.ppt на третьем слайде презентации компилятора параллельно с PABC.NEТ упоминается продолжение работы Вирта – компилятор Oberon2, что существенно расширяет ценность PABC.NEТ даже в сфере обучения. На какой стадии разработки и где можно узнать о планах?

Благодарю


#1661

Это недокументированные возможности.

Middle_End_Compiler_PascalABC.NET.ppt наверное очень старый. Лет 10 ему… Честно сказать, я не понял, как может расширяться полезность PascalABC.NET в связи с другим языком программирования, который сильно устарел к тому же и не развивается.


#1662
  1. недокументированные потому что есть сложности, не полностью реализованы или другие причины не указывать в Справке?

  2. согласно wiki, развитие Паскаля в Модула-2 и дальнейшая оптимизация привели к появлению Оберона (“Компонентный Паскаль”), и уже есть и наш компилятор языка Оберон-2 в байт-код виртуальной машины JVM, разработанный С. Свердловым (Вологда, ВГПУ) ещё в 1998 году. (Это немного смешно, ведь сам Никлас и его ученики часто описывали JAVA как поверхностно переработанную концепцию исходников Pascal-P/Oberon, искажённую С-подобной лексикой, маркетингом и непониманием сути “разумной достаточности”, куда прикрутили многопоточность и исключения, значительно усложняя язык – что фактически повторили и в .NET)

ИМО

Начиная с 2000х, мало кто даже из бывалых программистов пересекался с Lisp, Ada, Fortran и другими языками ниже первого десятка рейтинга TOIBE, однако ещё меньше тех, кто вообще задумывается о множестве и узкопрофильности ЯП или о высказываниях самого Никласа Вирта, что нет универсальности, лишь сфера применения и разная простота - для машины, для человека и для компилятора, или что, к сожалению, вместо изучения науки программирования во многих современных школах (и вузах) изучают конкретный язык, зацикливаясь на сиюминутных, преходящих и никому не нужных мелких особенностях конкретных реализаций. Да, особенности знать нужно, но это не самоцель, особенно если мощный и гибкий компилятор поддерживает несколько ЯП.


#1663

Приятно было узнать, что мы с Н.Виртом в этой части думаем совершенно одинаково: чуть иными словами, но эту же мысль я высказывал неоднократно. Нужно знание алгоритмов и технологий программирования, умение при наличии альтернатив выбрать наиболее подходящий для конкретной реализации алгоритм. Алгоритмический язык - он по определению что? Правильно, лишь один из способов записи алгоритма, понятный соответствующему компилятору. Так нужно учить все же дисциплинам программирования или лишь умению угождать конкретному, выбранному кем-то “сверху” компилятору, безмерно тратить дорогое учебное время на то, чтобы создать очередную волну как можно в большей степени покорных программе рабов? А потом мы начинаем вместо аргументации выслушивать нечто в стиле "А потому что вот так это сделано в Си [C++, C#, Pithon, Delphi … непринципиально тут, на что ссылаются].

Именно поэтому, считаю PascalABC.NЕТ, являющийся мультипарадигменным языком, почти идеально (идеала же не существует, верно?, Есть лишь Lim (Идеал) при устремленных в бесконечность желаниях) подходящим именно для обучения дисциплине программирования.

Да, “хотелок” у каждого - на миллион. Предлагайте, но не сетуйте на отказ и не требуйте от разработчиков мотивировки размером с “Войну и Мир”. У них тривиально не хватит на это времени.

И последнее. Не пишу про “IMHO”, поскольку я никого кроме себя тут не представляю, а следовательно, все мои посты всегда выражают лишь мое мнение.