Болталка PascalABC.NET

Возможно, в “вашем любимом Паскале” LINQ иметь и не нужно. Потому что упомянутый Паскаль сегодня фактически мертв, ведь для обучения он малопригоден, являясь балластом при изучении современных концепций и технологий, а в “промышленном программировании” Паскаль практически не используется. Но вот отсылать с LINQ к функциональным языкам не стоило бы: с ним можно работать и в языках с более привычными парадигмами. Даже к С++ написаны библиотеки для реализации LINQ.

Да, с этим никто и не спорит. Кроме, видимо, ФИПИ и МинОбра. Потому что задачи из ЕГЭ думать как раз и не заставляют. Они заставляют или использовать один из готовых шаблонов для решения класса конкретных задач, или использовать брутфорс на компьютере. В любом случае, если школьник получает возможность свое решение проверить - это отлично, а не должно подвергаться гонениям.

Вы не школьник, знаете наверняка больше - осильте, пожалуйста, на своем любимом FPC в его стандартной поставке.

Для этого нужно минимум иметь персональное хранилище модулей и вообще уметь их оформлять. А еще - структуры от задачи к задаче меняться будут. Или Вы имеете в виду каких-то вундеркиндов, которые родились с клавиатурой в руках?

Давайте в обсуждении считать PascalABC.NET не версией Паскаля, а новым языком. Это на самом деле так. И так нам будет проще всё это обсуждать.

Вы будете учить школьников старому паскалю и указателям (если вы конечно учите школьников), мы будем учить их по-новому. Все будут счастливы. И профессия программиста не пострадает, поскольку любой вменяемый программист понимает, что если это - новый язык, то его надо вначале изучить. Ну или не изучать и не писать на нем.

4 лайка

И где такие учителя? А кто тогда проверяет работы ОГЭ и ЕГЭ на разных языках? И как они такие закостенелые перешли массово на Python, а не PascalABC.NET не смотря на ваши потуги (ведь это проще)?

Большинство так и сделало. А жаль…

Уже никто не проверяет.

Как по мне, не жалко терять ЦА, которая ни во что ставит достоинства твоего продукта, а переубеждение гиков почти всегда напрасная потеря времени. Касательно школьников — тут информационный барьер, почти никто не знает на что на самом деле способен PascalABC.NET.

ОГЭ проверяют…

Теперь учителя вздохнут и начнут углубляться в дебри языка который преподают…

Без справки так и не узнают…

А книги устаревают.

1 лайк

Вы не школьник, знаете наверняка больше - осильте, пожалуйста, на своем любимом FPC в его стандартной поставке.

Но зачем?! Я же сказал, что эту задачу правильней всего решать вообще без компьютера. Ну если уж вы так настаиваете…

Program count_base_digits;

Uses
	BaseUnix;
	
Const
	shell_path = '/bin/sh'#0;
	shell_opts = '-c'#0;
	shell_cmdl = 'bc <<< "obase=7;49^7+7^21-7" | tr -cd 6 | wc -c'#0;
	
Var
	status: Integer;
	argv: array[0..2] of pchar;

Begin
	argv[0]:= @shell_path[1];
	argv[1]:= @shell_opts[1];
	argv[2]:= @shell_cmdl[1];
	status := FpExecv(@shell_path[1], @argv);
	if (status <> 0) then
		WriteLn(stderr, 'Error: ', status);
End.

Если ваш тезис в том, что написать такой код дольше, чем тот код на pABCn (при условии знания нужных методов заранее), то это и так было понятно. Но вот что вы хотели этим доказать — не ясно.

Не согласен. Если бы это был новый язык, то и назывался бы он не PascalSomething, а например P# или Oxygene. А раз в имени есть слово Pascal, значит язык должен быть совместим с паскалем.

Вы будете учить школьников старому паскалю и указателям (если вы конечно учите школьников),

Вот пример. Если бы вы действительно верили тому что пишете, вы бы написали “паскалю”, а не “старому паскалю”. А раз вы говорите “старый”, значит предполагается, что есть и “новый”. Но “новый паскаль” — это всё равно паскаль.

Для этого нужно минимум иметь персональное хранилище модулей и вообще уметь их оформлять.

Да, надо! И вот именно это гораздо важнее для начинающего программиста, чем использование всяких фишек .Net, которые потом нигде не пригодятся, кроме этого .Net.

Кроме, видимо, ФИПИ и МинОбра. Потому что задачи из ЕГЭ думать как раз и не заставляют. Они заставляют или использовать один из готовых шаблонов для решения класса конкретных задач, или использовать брутфорс на компьютере.

Вообще-то нет. Вот как я например решаю задачи из ЕГЭ по информатике, не зная ни одного готового шаблона? Дело не в ЕГЭ как таковом, а в том, что на него учеников натаскивают, вместо того что бы прививать глубокое понимание необходимых для него концепций. И если учеников учат запускать “калькулятор” (встроенный в pABCn), что бы получить готовый ответ, вместо того, что бы подумать — не вижу ничего в этом хорошего. Из задачи отчётливо видно, что её составители не предполагали использование калькуляторов.

В любом случае, если школьник получает возможность свое решение проверить - это отлично, а не должно подвергаться гонениям.

При подготовке к экзамену — да, эта возможность полезна, но, как видим, пихать это в компилятор паскаля совершенно незачем, поскольку это имеется в стандартной поставке современной операционной системы.

Да, А если есть - оставляет за собой право переместить участок занятой памяти в другое место. Но указтели он править не будет при этом.

Так это же дырища размером с Марс. Вам нужно или как-то костылить возможность создания области памяти, которая гарантированно не будет перемешиваться и разрешать указатели только на неё, или сделать так что бы код с указателями не компилировался без специальной директивы типа {$mode UnsafeBrokenPointersDoNotUse}

2048 — игру с такими правилами хоть на PDP-7 можно было бы написать, но появилась она сравнительно недавно.

Не только дольше. Как считаете, какой процент школьников Ваш код сможет понять, не говоря о том, чтобы такое написать? Пока что в школах все же больше Windows используюется, чем клоны *nix, так что Ваш пример, увы, массовым не является. Это первое. И второе - в Вашем решении FPC используется фактически как оболочка, просто создавая некую видимость своего использования. А предлагалось иное - показать как реализовать решение задачи средствами FPC в его стандартной поставке. А так - устроить внешний вызов - с таким же успехом можно загрузить Photoshop какой-нибудь и объявить, что FPC работает с растровой графикой.

2 лайка

Как считаете, какой процент школьников Ваш код сможет понять, не говоря о том, чтобы такое написать?

Ещё раз и медленно: школьнику эту задачу не следует решать с помощью компьютера. А проверить себя, после решения её нормальным способом, будет проще всего на калькуляторе.

А предлагалось иное - показать как реализовать решение задачи средствами FPC в его стандартной поставке.

Вы мне предложили забить микроскопом гвоздь. Я привязал к микроскопу молоток. Теперь вы говорите “нет, забейте гвоздь именно самим микроскопом”.

Вначале я хочу получить ответ на вопрос: какая мне будет польза, если я это сделаю? Цель-то какая?

Вот репетиторы по информатике в один голос говорят, что следует именно на компьютере и приводят варианты решения. Но Ваше мнение, конечно, важнее, да? Не гвоздь я предложил забить Вам, а показать, как школьник в условиях экзамена, когда важно сэкономить каждую минуту, может использовать компьютер и быстро получить надежный результат, если у него там FPC. Потому что на Пайтоне он это решит именно так, одной-двумя строками, а если в Паскале не будет аналогичного средства, учебные заведения отвернутся от него и вот тогда язык действительно умрет. Сейчас PascalАВС.NЕТ успешно конкурирует с Пайтоном. Вы предлагаете ограничиться FPC? Ну поинтересуйтесь, что о нем говорят учителя и дети.

Я мог бы точно так же взять любую другую задачу из ЕГЭ и точно так же Вы бы развели демагогию про “это надо головой”, “это нужно самому”, “это нужно на FPC решать” и прочее.

2 лайка

Что считать стандартной поставкой? Ядро ОС считать? А без него FPC не запустится. А если ядро считать, значит можно считать и утилиты, входящие в базовую поставку ОС, в том числе shell и bc.

uses
	math;
var
	expr: int64;
	dig6: int64;
begin
	expr := 49 ** 7 + 7 ** 21 - 7;
	dig6 := 0;
	while expr > 0 do begin
		if expr mod 7 = 6 then
			inc(dig6);  
		expr := expr div 7;
	end;
	writeln(dig6); 
end.

Ну, пожалуйста. Только смысл? Всё равно в уме/на бумаге подобные задачи решить проще, чем написать код, что на FPC, что на ABC, что на Python. Вы это никак не опровергли.

На ЕГЭ по информатике среды программирования даются школьникам именно для решения задач, где программирование предусмотрено заданием, а таких там 2-4 штуки, где-то в конце. Это те, где надо прочитать текствые файлы и подобные.

Стандартная поставка ОС - то, что будет в ней после ее установки.с дистрибутива. Стандартная поставка FPC - все, что будет в нем после инсталляции.

А что тут опровергать? Код сам за себя скажет.

## uses School;
ToBase(49bi ** 7 + 7bi ** 21 - 7, 7).CountOf('6').Print

Если человек утверждает, что решать задачу в уме/на бумаге для школьника быстрее, чем набрать пару строк приведенного выше кода - он совершенно не представляет себе нынешних школьников. Да и не только школьников. К тому же, такое решение - гарантия того, что ответ верный. В отличие от того, что он там вручную нарешает…

Это домыслы Ваши. Компьютер дается на период всего экзамена и как им будет пользоваться школьник - его личное дело. Об этом ясно и открыто говорили представители ФИПИ.

Стандартная поставка ОС - то, что будет в ней после ее установки.с дистрибутива. Стандартная поставка FPC - все, что будет в нем после инсталляции.

Но в FPC ничего не будет если его пытаться установить на компьютер без ОС. Вы просто не сможете его установить. Следовательно, всё что есть в стандартной поставке ОС, плюс зависимости самого FPC входит в ожидаемые после установки компоненты. То есть, использовать в коде компоненты системы, входящие в её стандартную поставку (включая, но не ограничиваясь, bc, wc и tr) — можно.

А что тут опровергать? Код сам за себя скажет.

Я этот код уже видел. Ничего он не говорит. В школе преподают именно сам язык Паскаль как таковой. А этот код написан не на паскале. В нём собственно ничего общего с языком Паскаль нету, даже слов begin и end.

чем набрать пару строк приведенного выше кода

Чтобы его набрать, нужно быть экспертом ABC как такового. Вот вы, как постоянный посетитель этого форума и автор книг по ABC, такое набрать можете, а средний школьник — не сможет.

Это домыслы Ваши. Компьютер дается на период всего экзамена и как им будет пользоваться школьник - его личное дело. Об этом ясно и открыто говорили представители ФИПИ.

Одно никак не противоречит другому. Компьютер даётся именно для решения нескольких конкретных задач ближе к концу экзамена. Но использовать его для решения и остальных задач тоже — не запрещено. Просто бессмысленно, поскольку в уме проще.

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

1 лайк

Очевидное кому? То, что кажется очевидным вам, может оказаться совсем не очевидным и даже вовсе неверным кому-то другому.

Если у вас нет аргументов в защиту своей точки зрения, так и скажите это честно, а не переходите на личности.

Кстати, форум что-то сдох, но я от вас так и не дождался проверки именно этого кода в Pascal ABC:

Program file_io_test;
Const
	s: String = 'Unicode — ελληνικά, русский, 中国文字 Zhōngguó wénzì.';
Var
	f: Text;
begin
	assign(f,s+'txt');
	rewrite(f);
	writeln(f,s);
	writeln(s);
	close(f);
end.
  1. Отображается ли вывод правильно в консоли по Shift-F9, то есть не встроенной в ABC .net IDE, а системной?
  2. Отображается ли вывод правильно в содержимом созданного текстового файла?

Только пожалуйста не увиливайте от ответа в этот раз. Ничего сложного в том чтобы взять уже готовый код, скопировать в IDE и запустить нету.

А можно, кстати, пояснить, что имелось ввиду подробнее? Да, при ручном создании списка в виде последовательности структур с указателями друг на друга, после того как они станут не нужны, следует пройти по списку и освободить память с помощью dispose.

Какие конкретно проблемы с памятью могут/должны возникнуть при таком использовании? Если можно, сразу с примером кода.

Можно. А нужно?

Я вам так скажу, сейчас преподают питон :frowning:

Тогда пусть решает на бумажке\в уме\полным прописыванием логики с begin и end (нужное подчеркнуть)

Тогда пусть в уме решают

Ага. @RAlex, что было-то?

image

Открыт в юникоде. В ANSI вывод аналогичен консоли image

Предположу, что утечка в связи с оставлением мусора, потому что

неудобно. А если ещё и вспомнить, что мы говорим о школьниках… А, и да, чуть не забыл - указатель легко может сбиться (с почти абсолютной вероятностью собьётся) в результате работы GC

Было. Серьезно вышел из строя сервер, на котором находится ПО, поддерживающее форум.

Ну вон, видишь — как раз на тех тестах, которые ты не стал проводить, ABC и фейлится.

Жесткие диски тоже накрылись? Сообщения-то некоторые пропали.

А я что и говорю. А RAlex почему-то не согласен.

Если он сбивается — значит компилятор кривой и ни для какой серьёзной работы не пригоден. Должен по идее отключать GC для структур, созданных с помощью new.