Болталка PascalABC.NET

Вот репетиторы по информатике в один голос говорят, что следует именно на компьютере и приводят варианты решения. Но Ваше мнение, конечно, важнее, да? Не гвоздь я предложил забить Вам, а показать, как школьник в условиях экзамена, когда важно сэкономить каждую минуту, может использовать компьютер и быстро получить надежный результат, если у него там 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.

Я так и не понял, причём тут паскаль. Консоль не смогла отобразить, блокнот тоже. Ничего из этого к паскалю отношения не имеет. Скорее даже наоборот, IDE не ударила в грязь лицом - вывела на встроенную консоль всё точно так, как и должно выглядеть

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

Насколько я помню, именно так и работает ключевое слово unsafe в шарпе - запрещает перемещать объекты в памяти в некоторой области кода. Как с этим в паскале - не в курсе

Потому вам и говорят - хотите забивать гвозди - положите микроскоп на место. Не предназначены ЯП высокого уровня для работы с указателями

Вы знаете какой-то другой способ создания экземпляра типа? :neutral_face:

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

Одна только фраза “Должен по идее отключать GC для структур, созданных с помощью new.” показывает, что человек намеренно чушь городит. Вызов конструктора должен запрещать сбор мусора для создаваемого объекта - это как и зачем? Точнее даже, а для чего тогда вообще сборщик мусора, если практически для всего вызывается конструктор, пусть даже неявно?

Дорожки у дома подметать

1 лайк

Странно, что вы этого не поняли. Консоль-то прекрасно отображает юникод в принципе (наберите команду dir, увидите имена файлов на любых языках), но программа, скомпилированная ABC этого не делает — значит или не выполняет chcp 65001 (кстати попробуйте выполнить эту команду, а потом из той же консоли вызвать программу на ABC, может тогда сработает) или криво компилирует как-то. Хотя консоль в виндовс действительно реализована кривовато и с ней сложно работать правильно.

А с блокнотом — ну попробуйте открыть полученный файл той же ABC IDE, тогда или нормальным редактором вроде Notepad++. Проблема в том, что файл сформирован криво, скорее всего, а это опять же, баг компилятора PascalABC. Но чтобы убедиться точно, можете приложить файл к сообщению, я скачаю и проанализирую, что с ним не так.

Что вы понимаете под ЯП высокого уровня? Насколько я знаю, общепринятое определение включает в их число всё кроме ассемблера и автокодов. И в паскале указатели есть, а значит для работы с ними он предназначен.

В общем, я имею ввиду процедуру new, вызываемую для указателя. Естественно, что созданная таким образом переменная должна быть освобождена с помощью dispose.

В смысле?

http://pascalabc.net/downloads/pabcnethelp/index.htm?page=LangGuide/MemoryManagement/index_memory.html

Вообще-то можно почитать справку по языку. Там написано, цитирую:

Отметим, что динамическая память, выделяемая процедурой New и контролируемая указателями, не находится под управлением сборщика мусора, поэтому нуждается в явном освобождении вызовом процедуры Dispose.

Что я и говорил. В выделенную явно процедурой New сборщик мусора лезть не должен. Если на самом деле лезет, вопреки описанному в справке — это очень серьёзный дефект.

И правда, зачем? В нормальном паскале как-то без него обходятся, да и в C тоже.

Нет image

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

Да, чепуху ляпнул. Они не для языков с автоматической сборкой мусора

Можно. Тогда выяснится, почему не рекомендуется работать с указателями, что GC не трогает объекты, к которым отсылаются указатели, и многое другое

Да ладно вам, раньше и на ассемблере писали…

Странно. Это после команды chcp 65001 (выставляет кодировку UTF-8 в текущей консоли) или до? Вроде

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

Запускал в линуксе через Free Pascal — да, всё отлично и в консоли и в файле и в его имени. А в винде как видите — облом-с…

Если нет - то всё нормально выводится

Где именно?

Тогда выяснится, почему не рекомендуется работать с указателями, что GC не трогает объекты, к которым отсылаются указатели, и многое другое

Ну так это так и должно быть. В чём проблема?

Да ладно вам, раньше и на ассемблере писали…

Почему раньше? И сейчас пишут и новые версии ассемблеров продолжают выходить.

Они не для языков с автоматической сборкой мусора

Ну так тогда вообще не понятно зачем её прилепили к паскалю АБЦ.

На скриншоте показано всё взаимодействие с консолью. Никаких посторонних команд, как можно заметить, нету

В IDE. И в её консоли, и в пространстве для кода

Ну так это так и есть. В чём проблема?

Крупные проекты целиком на ассемблере не пишут. Думаю мне не надо объяснять, почему так

Это паскаль к ней прилепился, а если точнее - к платформе .NET

Шрифт в настойках консоли нужно поменять, может у вас там какой-то не юникодный

Блокнот в юникоде показывает то же

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