Про нативную IDE надо забыть - пакость редкостная. Столько глюков - перед учениками в школе было стыдно.
Ставим Geany - и спокойно работаем незагаживая себе мозги ненужными проблемами.
угумс.. не хорошо ..
а у нас собирались его в учебный процесс вводить.. с сентября.
а какие еще глюки кроме кодировки?
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
у нас собирались его в учебный процесс вводить.. с сентября.
а какие еще глюки кроме кодировки?
Школьный класс на Edubuntu 7.10 AMD64. Deb-пакеты с FreePascal скачивал с оффсайта. С этой их IDE работать так и не смогли. Терминал может закрыться самопроизвольно, имена сохраняемых файлов - только числами, в текст программы могут вставиться посторонние символы.... Пока линейные программы в текстовом режиме проходили - исплевались все. Самая востребованная клавиша - F2.
Geany - совсем другое дело! После установки потребовалось только поправить в настройках путь к терминалу - и все. С кодировкой - нет проблем. Вопиющих глюков - не замечено. Приятные мелкие бонусы - типа предлагаемой при создании файла простой заготовки pascal- программы и автоматизированного ввода имен команд. Школьники довольны. Другие IDE и пробовать не буду. Для преподавания в среднеобразовательной школе основ программирования - fpc+Geany это самое оно. IMHO конешно
Уважаемый Jasha! вы посмотрите, когда тема создана. Сейчас все уже в IDE лазарус. А там проблема с кодировкой исправлена. И вообще библиотека LConvEncoding позволяет выполнять любое перекодирование.
Пессимист видит темный туннель, оптимист видит свет в конце туннеля, реалист видит свет, туннель и поезд.
И только машинист видит этих трех идиотов, сидящих на рельсах.
Зачем этого монстра для пары консольных примеров? С кодировками в FP проблема не исправлена до сих пор - русский язык в UTF8 IDE коряво идет - попробуйте сделать в Geany пару примеров.
akdengi, ну не знаю, не знаю, когда мы использовали delphi для консольных примеров (когда только начали его изучать в универе на первом курсе), я не спрашивал, зачем такого монстра. Надо, значит, надо.
akdengi, ну не знаю, не знаю, когда мы использовали delphi для консольных примеров (когда только начали его изучать в универе на первом курсе), я не спрашивал, зачем такого монстра. Надо, значит, надо.
Попробуйте на "слабой" конфигурации запустить тот-же Geany, а потом Lazarus и это ради того, чтобы вывести простой Hello World. То же самое, что микроскопом гвозди забивать. И это очень вредно сразу на RAD IDE сажать
Я, в образовании давно не работаю, но лазарус не такой уже и монстр. С кодировками в нем проблем нет. Он поддерживает и консольные программы. А разве оконные программы Вы с учениками не будете делать? Тогда все равно надо будет лазарус. Т.е. вся разница в том когда Вы не нем станете писать: с самого начала или ближе к концу. Я понимаю, что для очень древних машин лазарус просто не завести или работать будет с тормозами. Но вроде бы основной парк машин в школах 3 пни, данные еще по какой-то программе. Или я ошибаюсь? На 3 пентиумах все будет вполне пристойно.
Пессимист видит темный туннель, оптимист видит свет в конце туннеля, реалист видит свет, туннель и поезд.
И только машинист видит этих трех идиотов, сидящих на рельсах.
Как вариант можно использовать какой-то обычный текстовый редактор: kedit, gedit, mousepad, leafpad, и пр. для набора текста программы, а компилировать всё в отдельном окне в консоли:
Я, в образовании давно не работаю, но лазарус не такой уже и монстр. С кодировками в нем проблем нет. Он поддерживает и консольные программы. А разве оконные программы Вы с учениками не будете делать? Тогда все равно надо будет лазарус. Т.е. вся разница в том когда Вы не нем станете писать: с самого начала или ближе к концу. Я понимаю, что для очень древних машин лазарус просто не завести или работать будет с тормозами. Но вроде бы основной парк машин в школах 3 пни, данные еще по какой-то программе. Или я ошибаюсь? На 3 пентиумах все будет вполне пристойно.
В школе вообще-то Окна проходят только если есть время - а так только алгоритмика (в ЕГЭ окошек нету).
Коллеги, начато-то было с кодировки. Я вот проверил. Извините, родной фрипаскалевской IDE у меня сейчас под рукой нет, но я набрал Hello World (вывод по русски "привет, мир") в текстовом редакторе и компильнул в командной строке. То же самое, набор вопросительных знаков. Т.е. дело не в IDE, а в самом фрипаскале. И попытка подсунуть ученикам ви приведет только к большому человеческому спасибо с их стороны. А в IDE отображаются кириллические символы корректно? Если дело только в выводе на экран, то смотрите:
Программа выводит кириллицу корректно. Ну может быть соврал в каком-то символе, простите уж и переправьте. Эту функцию нет смысла переписывать каждый раз. Сделайте Unit и отправьте в папку к другим, родным. Все - проблемы нет. А вот если и в IDE нет кириллицы, то дело уже сложнее. Тогда только любой редактор с подсветкой синтаксиса+компиляция в командной строке, но все про исправление кодировки остается в силе.
Пессимист видит темный туннель, оптимист видит свет в конце туннеля, реалист видит свет, туннель и поезд.
И только машинист видит этих трех идиотов, сидящих на рельсах.
Проблема достаточно банальна - чтобы без проблем работали примеры из учебников по FreePascal. Такие же траблы с работой с русскими символами в консольном FreePascal (по типу "сколько букв ю в слове"). Вот что тут делать?
я набрал Hello World (вывод по русски "привет, мир") в текстовом редакторе и компильнул в командной строке. То же самое, набор вопросительных знаков.
У меня выводит русские буквы правильно. Кодировка, как в исходнике, так и в консоли — UTF-8. Если кодировка в исходнике не совпадает с кодировкой консоли, компилятор не виноват.
чтобы без проблем работали примеры из учебников по FreePascal
Из учебников по FreePascal? Или все-таки по Turbo? Если второе, то совсем без проблем они будут работать, только в соответствующей среде (с единственной однобайтной кодировкой).
И у меня тоже русские буквы выводятся нормально.
Главное, чтобы они были написаны в той же кодировке, что и консолька...
Вывод и будет нормально. Вопрос как раз в строковых операциях (например поиск подстроки в строке). Есть ли тут способ верной работы без явного задания 8 битной кодировки. Еще раз повторюсь, что основная проблема в наличии кучи примеров для Turbo и их адаптации под FreePascal. Как только начнется учебный год я могу взять все "проблемные" задачи у коллег и можно наконец-то написать грамотное Howto.
Вывод и будет нормально. Вопрос как раз в строковых операциях (например поиск подстроки в строке). Есть ли тут способ верной работы без явного задания 8 битной кодировки.
В чём проблема использовать в школьных примерах только ASCII символы?
Операторы, переменные пишут и ничего, кроме того проще будет код писать, т.к. раскладку переключать не надо будет.
Как только начнется учебный год я могу взять все "проблемные" задачи у коллег и можно наконец-то написать грамотное Howto.
Я думаю, модераторы разрешат кидать эти задачи сюда, а не в программирование. Так что на свободном времени и я бы поломал голову. Все-таки это не специфические девелоперские задачи, а более образованческие.
Пессимист видит темный туннель, оптимист видит свет в конце туннеля, реалист видит свет, туннель и поезд.
И только машинист видит этих трех идиотов, сидящих на рельсах.
Вывод и будет нормально. Вопрос как раз в строковых операциях (например поиск подстроки в строке). Есть ли тут способ верной работы без явного задания 8 битной кодировки.
В чём проблема использовать в школьных примерах только ASCII символы?
Операторы, переменные пишут и ничего, кроме того проще будет код писать, т.к. раскладку переключать не надо будет.
Да пока что так и делается - только транскрипт. Но это же ненормально - в задаче стоит например "сколько букв ы в "Мама мыла раму", и как это транслитом?
Скомпилировал пример Ali1, смотрю опять вопросительные знаки. И тут до меня дошло. У меня KWrite настроен на кодировку CP1251. Когда сохранил HelloWorld в юникоде, то все пошло без самопальных функций. Т.е. вывод на консоль в нормальной кодировке будет при записи текста программы в юникоде+компиляция в командной строке. Причем переменные могут быть типа string. Но использование UTF8String все равно оправдано. При вставке подстроки в строку при типе String по краям подстроки появляются лишние символы (это из-за размера символа в юникоде). "Мама мыла раму" можно реализовать только таким путем (или недодумал).
program in_literal;
uses crt;
var l,l1:UTF8string;
i,s: integer;
begin
l:='Мама мыла раму';
l1:='ы';
s:=0;
for i:=1 to length(l) do
begin
if (l[i]=l1[2]) and (l[i-1]=l1[1]) then s:=s+1;
end;
writeln;
writeln('Количество букв "ы" равно=',s);
end.
Но это работает только если строка на кириллице. Если что-то из набора Latin1, то нужна куча проверок и задача из школьной плавно перетекает в весьма нетривиальную. А я понял у akdengi, что сейчас часы на информатику урезаны. Так что проблемы с выводом нет. Но есть другая. Посмотрите в пример Ali1, что там с размером строки и номером вхождения подстроки? Правильно - не то (юникод же). А вот это без сильных телодвижений не исправить. Остается все же лазарус. Процедура
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
i:=length(Utf8ToCP1251(Edit1.Text));
Edit2.Text:=IntToStr(i);
end;
выводит нужное число. Только применяем библиотеку LconvEncoding. Неужели у Вас такие старые машины, что не тянут лазарус даже i386.
Пессимист видит темный туннель, оптимист видит свет в конце туннеля, реалист видит свет, туннель и поезд.
И только машинист видит этих трех идиотов, сидящих на рельсах.
begin2009
Интересно. А если только линковать с lazarus`ом. Можно в fpc.cfg добавить опцию -Fu, которая указывает компилятору, где искать модули. Возможно и -Fi .
Но есть другая. Посмотрите в пример Ali1, что там с размером строки и номером вхождения подстроки? Правильно - не то (юникод же). А вот это без сильных телодвижений не исправить.
Так это и есть основная проблема. Можно пользоваться строковыми функциями, можно мудрить с преобразованиями. Можно подменить простой процедурный паскаль, объект-паскалем ....
Но, я почти уверен, проблемы будут вылезать в самых неожиданных местах. Т.е. гарантировать работу примера из книжки по TP6 нельзя.
begin2009
Интересно. А если только линковать с lazarus`ом. Можно в fpc.cfg добавить опцию -Fu, которая указывает компилятору, где искать модули. Возможно и -Fi .
Но есть другая. Посмотрите в пример Ali1, что там с размером строки и номером вхождения подстроки? Правильно - не то (юникод же). А вот это без сильных телодвижений не исправить.
Так это и есть основная проблема. Можно пользоваться строковыми функциями, можно мудрить с преобразованиями. Можно подменить простой процедурный паскаль, объект-паскалем ....
Но, я почти уверен, проблемы будут вылезать в самых неожиданных местах. Т.е. гарантировать работу примера из книжки по TP6 нельзя.
Вот тут это +
Неужели у Вас такие старые машины, что не тянут лазарус даже i386.
Подкрепляется учителями, которые банально не захотят/не смогут осилить данную задачу. Вот в чем проблема. Если честно документации по Lazarus-у и FP не хватает, я сам Вики перерывал сверху-донизу и форумы, чтобы разрешить некоторые проблемы.
Документации действительно не очень. То что идет вместе с лазарусом на английском. Но это пол беды. Самое главное, что в этих документах еще надо знать в каком модуле искать что-то. Т.е. это не каждому по плечу.
Но все-таки, если в лазарусе ввод и вывод юникодом, а внутри преобразовать в другую кодировку, и обрабатывать ее, то проблем по-моему не будет. Все проблемы из-за юникода. Сам лазарус вполне зрелая вещь (если не из школьного альта а последний с сайта разработчиков). Я на нем уже небольшую базу под линукс написал которой в организации пользуемся. То есть, коллеги, если Вы будете применять лазарус проблема будет одна - нехватка часов. А у среды проблем уже не очень.
PS лазарус еще и кроссплатформенный. У меня еще стоит и версия под виндовс.
Пессимист видит темный туннель, оптимист видит свет в конце туннеля, реалист видит свет, туннель и поезд.
И только машинист видит этих трех идиотов, сидящих на рельсах.
Документации действительно не очень. То что идет вместе с лазарусом на английском. Но это пол беды. Самое главное, что в этих документах еще надо знать в каком модуле искать что-то. Т.е. это не каждому по плечу.
Но все-таки, если в лазарусе ввод и вывод юникодом, а внутри преобразовать в другую кодировку, и обрабатывать ее, то проблем по-моему не будет. Все проблемы из-за юникода. Сам лазарус вполне зрелая вещь (если не из школьного альта а последний с сайта разработчиков). Я на нем уже небольшую базу под линукс написал которой в организации пользуемся. То есть, коллеги, если Вы будете применять лазарус проблема будет одна - нехватка часов. А у среды проблем уже не очень.
PS лазарус еще и кроссплатформенный. У меня еще стоит и версия под виндовс.
У меня на Lazarus инсталяторы написаны, как под Линукс, так и для диска с Win СПО. Просто вопрос об использовании Geany + FreePascal. Решение с другим типом строковых данных пока оптимально, надо его просто донести до учителей.
до них надо донести, что кроме Unicode и UTF8 ничего использовать нельзя, что 8 битные кодировки ушли в прошлое и не вернутся.
Это не только для fpc важно, но и при web-разработках ("а почему linux выводит закорючки, вместо сделанного дома сайта?"), и прочих вещах.
до них надо донести, что кроме Unicode и UTF8 ничего использовать нельзя, что 8 битные кодировки ушли в прошлое и не вернутся.
Это не только для fpc важно, но и при web-разработках ("а почему linux выводит закорючки, вместо сделанного дома сайта?"), и прочих вещах.
Я с этим всем согласен, просто я понимаю проблема в том, что не идут школьные стандартные задачи. Паскалевские функции устарели и не корректно работают с юникодом. Тот же length(), к примеру.
Пессимист видит темный туннель, оптимист видит свет в конце туннеля, реалист видит свет, туннель и поезд.
И только машинист видит этих трех идиотов, сидящих на рельсах.