LINUX.ORG.RU

Книжка о Free Pascal и Lazarus под открытой лицензией

 , , ,


1

1

23 декабря на сайте компании «Альт Линукс» появилась новость о выходе книги «Free Pascal и Lazarus: Учебник по программированию» под лицензией GNU FDL.

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

Страница с ссылкой на книгу.

>>> Подробности



Проверено: anonymous_incognito ()
Последнее исправление: post-factum (всего исправлений: 3)
Ответ на: комментарий от Macil

>ML. Там тоже алгоритмы и структуры данных описываются. Очень понятно и очень просто. Только ориентирует мозг _сразу_ в правильную сторону.

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

grigoreo
()
Ответ на: комментарий от Led

>А теперь - держись крепче: ассемблер, фактически, - вовсе не язык программирования, а мнемоническое представление машинных кодов.

это отменяет возможность изучения ассемблера?

lazyklimm ★★★★★
()
Ответ на: комментарий от sjinks
> Может выглядеть и так:

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

При чём тут типы операндов? Во первых: не важно какие типы, всё зависит от реализации и компилятора. Во вторых пример был показан не для того что бы потягаться в словоблудии, а просто показать что бибилиотека от языка не зависит. В третьих она не только может так выглядеть, а и выглядела. Нормальная такая функция, int pow(int,int), я её сам писал.

> Впрочем для тебя похоже нет разницы между языком программирования и его библиотекой.

Речь шла об отсутствии операции возведения в степень. Я указал, что в стандартном C это операция реализована. Что непонятно? 

Дык давай, функцию возвращающую результат возведения в степень ты уже указал (вернее я до тебя). Ты мне встроенную операцию языка С возведения в степень покажи. Не функцию а именно операцию.

ladserg
()
Ответ на: комментарий от grigoreo

>и сколько процентов программистов его юзают реально для реальных задач

так, 100-95=5

порядка 5%, думается мне

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

>это отменяет возможность изучения ассемблера?

Это не имеет никакого отношения к обучению программирования.

Led ★★★☆☆
()
Ответ на: комментарий от alx_me

То есть наши real и ваши строго математически совершенно не одно и тоже

Это называется «предсказуемая потеря точности» и абсолютно не меняет того факта, что оператор деления возвращает рациональное, с точностью до погрешностей представления в соответствующем типе. int/int=>real может привести к потере точности, но это меньшее зло чем int/int=>int, поскольку программист явно задекларировал, что он понял и знает, что вот тут должно быть вещественное, и случайного отстрела ноги не случится. Смотрим три примера кода:

int f(int a, int x, int y) { if (y==0) raise(..); return a*(x/y); }

function f(a,x,y: Integer):integer; begin if y=0 then raise(..); f := a*(x/y); end;

function f(a,x,y: Integer):Float; begin if y=0 then raise(..); f:=a*(x/y); end;

В первом и втором случаях ногу отстрелили, поскольку хотя с точки рения формальной логики все нормально, достаточно просто вызвать f(1,1,2) как программа свалится по ошибке.

Паскаль во втором случае страхует от такого поведения, явно говоря что «деление возвращает Real, п...й на...й переделывать декларацию!!!» Третий пример скомпилируется и будет полностью работоспособен. А теперь вынесем X и Y в глобальные переменные в другой модуль, и чем это закончится? А жопой закончится - чтобы понять, почему конструкция падает, надо будет поднимать весь код. А если X и Y это вообще объекты, и оператор выглядит как A.Value*(X.Value/Y.Value)??? Поменяли типа значения Value в декларации класса с Float на Integer, и программа нормально скомпилировалась но вдруг начала падать. Почему??? Паскалевский компилятор к ошибкам нетерпим, и поэтому такую ошибку отловит на этапе компиляции.

no-dashi ★★★★★
()
Ответ на: комментарий от Macil

ваша точка зрения понятна но если уже брать по поводу что нужно что нет, то тогда нужен C++ и Java, во всяком случае эти языки имеют большинство поклоников, ну это так в сравнении с полтора калеками ML, все таки надо обучать широковостребованым языкам а не малочисленым меньшинствам... несмотря на все плюсы и хвалы одиночных фанатиков...

Думаю таже кодеров на делфи гораздо больше чем на вашем примере....

grigoreo
()
Ответ на: комментарий от Led

> А вот учился бы в школе - такой вопрос даже не возник бы:)

Окрестности на первом курсе проходят. По крайней мере в стандартной школьной программе я лично такого не помню.

alx_me ★★☆
()
Ответ на: комментарий от alx_me

при определённых ограничениях вообще не теряющие точность

Именно что «при определенны ограничениях».

исключения выбрасывается только тогда когда это не запрещает разработчик, я про try/catch

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

no-dashi ★★★★★
()
Ответ на: комментарий от alx_me

По секрету скажу: у любого long double число значений _конечно_, а счетное множество по определению бесконечно.

anonymous
()
Ответ на: комментарий от X-Pilot

а вот теперь вопрос, раз все так как вы говорите и ваша точка зрения самая правильная. Сколько должна быть зарплата учителя информатики до Мкада и за Мкадом?

grigoreo
()
Ответ на: комментарий от su

ну по поводу Фри , думаю вы его и в глаза не видели , а значит все что вы говорите это Тролинг...

grigoreo
()
Ответ на: комментарий от no-dashi

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

alx_me ★★☆
()
Ответ на: комментарий от BlackV

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

Не смешите мои тапочки сударь. При нынешней системе образования и ЕГЭ ученик не должен думать, он должен отвечать на поставленный вопрос на уровне рефлексов. Кстати, это признают большинство учителей. Ученик, который пытается обдумать вопрос на ЕГЭ обречен на провал. Тоже, кстати, доказано детскими психологами и педагогами.

Так что, что ПАСкаль, что АССемблер, все едино.

Milker
()
Ответ на: комментарий от Led

>Какому? Открою тебе тайну: ассемблеров много, и они слабо похожи друг на друга. А теперь - держись крепче: ассемблер, фактически, - вовсе не язык программирования, а мнемоническое представление машинных кодов.
Да ну? Не может такого быть! Ну да ладно, все поправляемо. Ведь предлагается учить устройство машины конкретной. Значит можно смело учить ассемблер под эту конкретную машину. То есть, если, скажем в школе учеников учат устройству PDP-11 значит и ассемблер нужно учить от pdp-11. Вуаля, проблема решена!

eugene2k
()
Ответ на: комментарий от grigoreo

>все таки надо обучать широковостребованым языкам

С школе не стоит задача обучать языкам, а стоит задача дать основы алгоритмизации. И ML, в какой-то из своих форм, SML, OCaml или F# для этой задачи подойдет намного лучше.

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

Macil ★★★★★
()
Ответ на: комментарий от Macil

какой же ты умный? и все то ты можешь, самое главное не один ты, учился в продвинутых школах, но повышеное ЧСВ с тебя прям звездит...

Изучение иностранных языков — из той же оперы

так поделись с нами сколько языков то ты знаешь на некорявом уровне?...(ничего так на секундочку что есть профессия переводчик?)

grigoreo
()
Ответ на: комментарий от Macil

это все понятно , только если спустится на землю с ваших высот(ну это когда мат анализ проходят до 9го класса) то для российских школ удобнее все таки Паскаль.

теперь все таки ответе , про предметную область вашего ML и не в обозримом будущем а вот на текущий момент , что он может для автоматизации производства например....

grigoreo
()
Ответ на: комментарий от eugene2k

Например 1/3. Отлично выражается Паскалевским Real.

Ну назови хоть один язык, в котором эта конструкция корректно выражается в простом типе :-)

no-dashi ★★★★★
()
Ответ на: комментарий от Milker

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

BlackV
()

Хорошая и годная книжка, для школьников может сложновато будет, а вот для студентов/преводавателей - самое то!

frame ★★★
()
Ответ на: комментарий от su

Книжек, хотя и не распространяемых под GPL, а лежащих в книжных магазинах, полно. Не для холивора: Структура инструкции Паскаля похожа на структуру английского предложения. Школьники, хоть как-то знающие английский уже имеют какие-то интуитивные ориентиры. Кроме того, сравните: Write('Hello!');

и printf(«%s»,«Hello!»); или cout << «Hello!»;

Школьник, хоть как-нибудь знающий английский поймёт, что делает первая инструкция. Со вторым такое уже не выйдет. Да ещё и объяснять надо будет, что такое «%s». Для первых уроков малополезная информация. baverman высказал хорошую мысль, что на первых этапах обучения важна минимизация понятий. А паскаль с этим справляется. Напишите на паскале hello world. А теперь, напишите его на Си. Придется прибегнуть к понятию функций и параметров, объяснять, что такое include, что такое stdio.h

В последних классах школы, ученики имеют представление о множестве целых чисел, множестве рациональных чисел, множестве натуральных чисел, и т. д. Фактически, уже имеют минимальное представление о типах данных. Типы данных паскаля позволяют при объяснении «зацепиться» за это представление. Вообще типы данных, отдельная тема, о которой потом. Для первых уроков актуально вот что: в системе типов Си нет строкового типа, приходится на первых же занятиях объяснять, что такое массив.

Отдельная тема - указатели и всё, что с ними связано. В Си они применяются на каждом углу. Попробуйте считать с клавиатуры (для простоты пока файлы не рассматриваю) число. В паскале: Read(a); В Си тут же придется объяснять, что такое адреса, указатели и т. д. Я не утверждаю,что этого знать не надо. Я обращаю внимание на то, что это явно не для первых уроков. В Си даже простые операции сопряжены с большим объёмом теории, разные элементы которой так переплетаются друг с другом, что невозможно рассказывать по мере необходимости. Это так, на вскидку.

AlexGret
()
Ответ на: комментарий от ladserg

Ушёл листать Фихтенгольца...

Какой еще Фихтенгольц в школе?!

Не знаю, о чем там Led, а в школьной математике никаких +0/-0 нет.

unsigned ★★★★
()
Ответ на: комментарий от no-dashi

> Ну назови хоть один язык, в котором эта конструкция корректно выражается в простом типе :-)

Если я правильно понял, то это есть в Meta, то бишь в MetaPost, ну и в METAFONT соответственно.

Evgueni ★★★★★
()
Ответ на: комментарий от Macil

>Процедурное программирование _кончилось_

Не используется оно больше нигде в чистом виде.


Какое уточнение!!! :-D

yaws
()
Ответ на: комментарий от no-dashi

>Ну назови хоть один язык, в котором эта конструкция корректно выражается в простом типе :-)

Вообще-то я сейчас проверил, потому что показалось подозрительным паскалевское название типа - в Паскале выражается :)
То есть 1/3*3 = 1, а не ожидаемому мной приближенному значению. Так что в этом паскаль все же преуспел. Хотя с другой стороны нет ничего сложного в том чтобы на Си++ класс Real, как и класс String, с которыми ученик мог бы работать как и с паскалевскими базовыми типами.

eugene2k
()
Ответ на: комментарий от Milker

> Ученик, который пытается обдумать вопрос на ЕГЭ обречен на провал. Тоже, кстати, доказано детскими психологами и педагогами.

Там всё проще. Никакой психологии. В заданиях по физике примерно 10% задач сформулировано некорректно, по сему они чисто формально имеют не предусмотренные перечислением ответы.

Evgueni ★★★★★
()
Ответ на: комментарий от alx_me

>>Кто не в курсе, в мире тенденция к увеличению доли бесплатного высшего образования, а у нас наоборот.

Мне кажется вы ошибаетесь. Посмотрите, что делается в Европе(Германии, Италии и т.д.) Студенческая молодёжь «волнуется» из-за повышения стоимости обучения и сокращения бесплатных мест. Это мировая тенденция «дебилизации» населения.Воплощение идеи «золотого миллиарда»

anonymous
()
Ответ на: комментарий от Macil

>Изучение иностранных языков — из той же оперы

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

AlexGret
()
Ответ на: комментарий от su

>осталась неизменной со времен Турбо-Пасквиля: размерность типа string >всё так же 255

http://wiki.freepascal.org/String Compiler switch {$H} is usually on {$H+} then String is AnsiString type. The length of an AnsiString is only limited by available memory.

AlexGret
()

Есть структура с полем char f[MAX]. Вчера я увидел, что закоренелый паскалист пишет вместо «t->f». Пишет он вот так:

(char *) & ((*t).f)

Причём POSIX API и всякие make этот товарищ понимает вроде вполне нормально, и программа у него даже работает.

sv75 ★★★★★
()
Ответ на: комментарий от eugene2k

Хотя с другой стороны нет ничего сложного в том чтобы на Си++ класс Real, как и класс String, с которыми ученик мог бы работать как и с паскалевскими базовыми типами.

А теперь, как любителю C++ , маленькое задание: не прибегая к makefile, скомпилировать и слинковать из командной строки программу, состаящую из 10 модулей (файлов). Не, я тоже знаю про { for i in *.cpp ; do if [ $i != main.cpp ] ; then g++ -c $i ; fi; done ; g++ -o main main.cpp *.o; } - но простым и разумным это не назвать, поскольку сначала придется рассказать про компилятор, линкер, разницу между объектником и бинарником и про много чего еще. C/C++ пригодны к использованию уже после того как обучающиеся пообвыклись с базовыми понятиями, но никак не на начальном уровне.

no-dashi ★★★★★
()
Ответ на: комментарий от Macil

>Ну почему, если ML, то сразу функциональное программирование! Он проще паскаля, как синтаксически, так и семантически.

А Forth проще ML как синтаксически, так и семантически. :D Даешь Forth в школы? :)

yaws
()
Ответ на: комментарий от unsigned

>Не знаю, о чем там Led, а в школьной математике никаких +0/-0 нет.

20 лет назад было. Не знаю, может сейчас дифференциалы и интегралы только на аспирантуре осваивают:)

Led ★★★☆☆
()
Ответ на: комментарий от eugene2k

> Хотя с другой стороны нет ничего сложного в том чтобы на Си++ класс Real, как и класс String, с которыми ученик мог бы работать как и с паскалевскими базовыми типами.

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

На паскале шаг влево или вправо - расстрел на месте. Имеется неоднозначность - или определяй ее явно, или ПНХ без вариантов. Захочешь чтобы заработало - напишешь код без неоднозначностей, иначе просто не компилируется.

Я в свое время наелся на одном из полумертвых ныне но очень ынтырпрайзных языков фокусов, где a==1, b==0, а a+b может не равняться b+a, оно может равняться как 1, так и 10, 0 и в некоторых случаях true и false в зависимости от контекста, при этом контекст этот определен мало того что в рантайме, так еще и хер знамо в каком месте. Любая шпионско-детективная история меркнет по сравнению с отладкой такого кода.

И весь кайф в обучении программированию на паскале именно в том, что паскаль прививает ДИСЦИПЛИНУ программирования.

В принципе можно учить программизму на любом строго типизированном языке. Просто паскаль еще и достаточно логичный и простой для понимания язык.

anonymous
()
Ответ на: комментарий от eugene2k

>То есть 1/3*3 = 1, а не ожидаемому мной приближенному значению.

Специально для твоих ожиданий был разработан PASCAL-XSC.
Есть и учебник на русском языке.

quickquest ★★★★★
()
Ответ на: комментарий от Nxx

> А чем Си-подобный язык лучше Паскаля?

Си не магичен. Write а паскале магичен, насколько я знаю, даже сейчас, при добавленной перегрузке функций и переменном числе их аргументов.

Для школьников наверное это всё равно, да.

sv75 ★★★★★
()
Ответ на: комментарий от no-dashi

+100000 Система типов - вообще отдельный разговор.

В паскале типизация такова, что результат деления не будет целым, что логично. А ещё, нельзя целому присвоить вещественное, type mismatch. Паскаль на этапе компиляции таким образом отлавливает огромное количество ошибок.

Когда в Си мы написали: float f = 1.4; int a = f; что произойдет? С точки зрения типов одно другому присвоить нельзя. Фактически, будет выполнено автоматическое преобразование типов. Беда в том, что после обучения на Си половина вообще не понимает, что происходит преобразование типов и каким образом оно происходит.

AlexGret
()
Ответ на: комментарий от anonymous

> На паскале шаг влево или вправо - расстрел на месте.

На паскале уже запрещают сравнивать через = два числа типа double? Если не запрещают, то gcc может быть даже строже.

sv75 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.