Обсуждение книги Осипова А.В. «PascalABC.NET: Введение в современное программирование»

Да, здесь действительно y должно стоять, это описка. Вот только номер страницы 93, а не 95. Возможно, у Вас версия книги скачана очень давно, мы ее перевыкладывали в связи с исправлением замеченных ошибок и опечаток.

А вот насчет добавления +1 Вы ошибаетесь, потому что отсчет идет с нуля в цикле, а не с единицы. Запустите программу и убедитесь, что значения y формируются верно.

Спасибо.

2 лайка

Прочитал первую книгу из серии “выбор школьника”! Это отличная книга, которая оказалась невероятно полезной для такого “чайника” как я. Очень хорошая подача материала. Присутствует здоровый сарказм автора, что делает чтение книги интересным. Предыдущие книги слишком академичны и больше похожи на справочники, а тут иногда появляется литература :slight_smile: Очень мне понравилась первая часть. Приступаю ко второй.

3 лайка

Сообщение было перемещено в эту тему: Помощь новичкам

4 сообщения было перемещено в эту тему: Замечания и предложения

Книга: Осипов_PascalABC.NET выбор школьника ч2_2020_09.pdf стр.17

    if k<min then
      min:=k
    else if k>max then {в книге ошибка}
      max:=k

при малых значениях N приводит к неверным результатам. Может так:

    if k<min then
      min:=k;
    if k>max then
      max:=k

Он делает ровно то что вы ему приказали. Проблема только в логике программиста.

else правильно, это оптимизация, но чтоб она работала - надо исправить инициализацию: Изначальные значения min и max должны быть первым сгенерированным числом.
Это изменение, кроме всего прочего, избавит код от 2 магических чисел: -100 и +100.

Спасибо, в исходниках поправил. В PDF исправление будут видно позднее (после перевыкладывания).

Осипов_PascalABC.NET Введение в современное программирование_2019.pdf стр. 75 Напечатано:

if not P then B;
If A then else B;

Надо :

if not P then B;
If P then else B;

Да, спасибо, это я еще раньше поправил - известная описка, - но перевыкладывать по каждой ошибке слишком трудоемко, если учесть, что в PDF нужно конвертировать из Word, а там криво конвертируется оглавление и каждый раз надо рубрикацию и иерархию руками делать.

Осипов_PascalABC.NET выбор школьника ч1_2020_09.pdf

Стр.15 книги

В последнем абзаце:

После школы на работу в нормальное место не возьмут, даже если если выпускник будет знать двадцать языков.

стр.20 книги

пример кода:

// и так тоже пишут комментарии,
// когда они не помещаются в строке

Может лучше оформить многострочным комментарием (и/или посвятить комментариям больше места):

begin
  оператор 1;
  оператор 2; // а вот так пишут комментарии
…
  оператор n;
  { и так тоже пишут комментарии,
  когда они не помещаются в строке }
end.

стр.23 книги

Может рассмотреть и такой вариант:

begin
  writeln('          *       ');
  writeln('         ***      ');
  writeln('          *       ');
  writeln('         ***      ');
  writeln('        *****     ');
  writeln('       *******    ');
  writeln('          *       ');
  writeln('         ***      ');
  writeln('        *****     ');
  writeln('       *******    ');
  writeln('      *********   ');
  writeln('     ***********  ');
  writeln('          *       ');
  writeln('          *       ');
end.

Здесь читаемость кода зашкаливает… И детям нравится. И ошибку трудно допустить. И копирование вставка закрепляется.

стр.37 книги

Напечатано:

Имеется также кортежное присваивание . Список в скобках – это

есть и кортеж, но это материал второй части книги.

Должно быть:

Имеется также кортежное присваивание . Список в скобках – это

и есть кортеж, но это материал второй части книги.

стр.40 книги

image

стр. 52 книги

Напечатано:

var S :=Sqrt(p * (p - a) * (p - b) * (p - c));

(и результат: )

Введите координаты первой вершины: -5 -3

Введите координаты второй вершины: 0 -6.1

Введите координаты третьей вершины: 11 5

Периметр треугольника равен 39.3988, площадь 821.7082

Радиуc описанной окружности 0.5004

Радиуc вписанной окружности 41.7124

Должно быть:

var S :=Sqrt(p1 * (p1 - a) * (p1 - b) * (p1 - c));

Введите координаты первой вершины: -5 -3

Введите координаты второй вершины: 0 -6.1

Введите координаты третьей вершины: 11 5

Периметр треугольника равен 39.3988, площадь 44.8000

Радиуc описанной окружности 9.1774

Радиуc вписанной окружности 2.2742

Похоже, Вы повторили все замечания, которые однажды были сделаны и уже учтены в Word-варианте. А здесь они были утеряны во время сбоя.

Только начал читать книгу и наткнулся на вот такое:

Современный PascalABC.NET нацелен на создание небольших и средних программ-ных проектов, выигрывая у своего «старшего брата» – языка C# – по лаконичности записи программ и компактности инфраструктуры, создаваемой в процессе ком-пиляции. Так, при написании простой консольной программы на C# в Visual Studio 2017 создаётся 11 папок и 10 файлов, а в PascalABC.NET– 1 файл.

Но ведь это же принципиально разные вещи! Среда разработки VS — это одно. Для упомянутых небольших и средних программ она не нужна, достаточно любого нормального текстового редактора и консольного компилятора csc, который ставится вместе с .NET и mono. А сам язык C# — это совершенно другое:

using System;
 
namespace HelloWorld {
    class Hello {         
        static void Main(string[] args)  {
            Console.WriteLine("Hello World!");
        }
    }
}

По идее достаточно это всё сохранить в файл hello.cs и скомпилировать csc. Код конечно чуток длиннее, чем на pABC, но незначительно.

Дальше странности не кончаются:

Вызывает удивление, что при наличии такой мощной современной системы программирования на базе языка Pascal, в учебных заведениях продолжают преподаваться устаревшие FreePascal …

Каким образом FreePascal устаревший? Стабильная версия 3.2.2 вышла в мае этого года, у pABC последняя версия вышла в апреле.

Вы сами-то станете заниматься вызовами csc? Здесь речь идёт об удобности, экономии времени и места при написании программ, паскальные программы легко передавать как файлы, а в C# придётся делать архив всего проекта или отсылая файл оставлять создание проекта на другого человека. Это не всем удобно. Конечно, можно вообще использовать C# Interactive и скрипты .csx, если вы знаете что это такое.

Фрипаскаль — устаревший (к слову, последняя версия PascalABC.NET вышла вчера) по своим возможностям древний диалект паскаля. И меня дико бесило в школе то, что мы изучаем это устаревшее говно, работая в современной среде PascalABC.NET, и совсем не изучаем возможности этого современного диалекта, приходилось самому лазить по всяким киберфорумам, выискивая людей, которые могут что-то подсказать. У меня это получилось и за пару лет я успешно вкатился как в C#, так и во весь .NET, за что благодарен разработчикам этой среды и самому себе, но никак не тем людям, которые отвечали за наши образовательные программы, оставляя в них это чудище FreePascal.

2 лайка

Для упомянутых небольших и средних программ она не нужна, достаточно любого нормального текстового редактора и консольного компилятора

И какой категории пользователей Вы предлагаете набирать коды программ в текстовом редакторе? Авторам языка C# ? Кто это назубок знает все необходимые для работы библиотеки, свойства и методы? Ерунду пишете, право же…

Каким образом FreePascal устаревший?

Очень простым. Компилятор можно перевыпускать и для Algol-60. Но вот как-то не пользуются сейчас им. FPC устарел не как компилятор, а как язык: в нем невозможно писать программы, отвечающие современным технологиям программирования.

17 сообщений было перемещено в эту тему: Болталка PascalABC.NET

Осипов_PascalABC.NET Введение в современное программирование_2019.pdf

стр. 450

Напечатано:

Writeln(a.Out, NewLine, b.Out, NewLine, c.Out, NewLine, c.Out)

Надо:

Writeln(a.Out, NewLine, b.Out, NewLine, c.Out, NewLine, d.Out)

В общем, что я хотел сказать: Говорить, что Free Pascal устаревший — это фактическая ошибка и в книге её необходимо исправить. Я так понимаю, вы и являетесь автором книги, верно? Кроме того, это, как минимум, неуважительно, к разработчикам этой платформы, которые тоже могут сюда зайти и захотеть почитать книгу.

Вот сказать так про Turbo Pascal можно, поскольку так, в общем-то, и сами разработчики думали ещё в 90-е годы, когда перестали выпускать новые версии.

FPC устарел не как компилятор, а как язык: в нем невозможно писать программы, отвечающие современным технологиям программирования.

С этим нельзя согласиться. Что важно в современном программировании:

  1. Поддержка работы с 32 и 64-битными процессорами, включая ARM, для чего требуется наличие соответствующих типов данных и способность на них запускаться без эмулятора.
  2. Поддержка различных операционных систем, поскольку Windows на настоящий момент стремительно теряет актуальность.
  3. Поддержка параллельного программирования.
  4. Поддержка объекто-ориентированного программирования.

Всё это в Free Pascal есть и поддерживается. А вот в pABCn со вторым пунктом плохо, например. IDE не запускается под линуксом, только компилятор. Да и будут ли полноценно работать программы, активно использующие графику и подобное в нём — это ещё вопрос.

Что касается различных расширений .NET имеющихся в pABCn, то из-за их отсутствия называть язык устаревшим нельзя, поскольку он имеет важнейшее преимущество в том, что не завязан на .NET и способен работать с нативным кодом.

Синтаксический сахар вроде объявления переменных внутри блоков, PrintLn и так далее — это синтаксический сахар. Из-за его отсутствия называть что-то устаревшим нельзя. Локальные для функций/процедур переменные в FPC есть и этого достаточно.

Стандартная библиотека, содержащая всякие там переводы систем счисления, списки, деревья и тд — это не является возможностью собственно языка как такового, а написать юниты со всем этим для FPC вполне возможно, и даже скорее всего оно где-то уже есть.

Элементы функционального программирования может и полезны в некоторых случаях, но требовать их наличия везде тоже как-то странно.

1 лайк

Это лишь Ваше мнение. У меня - другое. А еще у моей книги два рецензента, в знаниях которых я не сомневаюсь и мнению которых доверяю. И мы относимся к той части людей, которые придерживаются мнения, что FPC Устарел и не должен использоваться в обучении информатике. Нравится Вам это или нет.

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

Вот когда это все будет в стандартной поставке FPC, можем вернуться и к этой теме. А пока что это “бла-бла”.