Редактирование и вычитка книги

Книга адресована школьникам средних и старших классов, желающим испытать себя в «олимпийских схватках». Может быть полезна студентам-первокурсникам и преподавателям информатики.

Модераторы: Oleg_D, Модераторы

Oleg_D
постоялец
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Сообщение Oleg_D »

Смотря где ударение поставить:
Но, господа, позволено ль
С вином равнять do-re-mi-sol?

Впрочем, в данном конкретном случае я не настаиваю на своём, тут дело вкуса.
Герман
новенький
Сообщения: 26
Зарегистрирован: 27.10.2016 10:11:41

Сообщение Герман »

В главе по установке FPC, было бы хорошо, если был совет набирать текст программ в текстовых редакторах (Блокнот, NotePad и т.д..), а после компилировать и запускать в FPC. Просидел в АЗС два месяца и глаза болят. Расцветка в нем- " вырви глаз ".
tema
постоялец
Сообщения: 376
Зарегистрирован: 24.03.2011 19:19:27

Сообщение tema »

Герман писал(а):В главе по установке FPC, было бы хорошо, если был совет набирать текст программ в текстовых редакторах (Блокнот, NotePad и т.д..), а после компилировать и запускать в FPC. Просидел в АЗС два месяца и глаза болят. Расцветка в нем- " вырви глаз ".
Можно вообще использовать Lazarus, а не блокнот
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Герман писал(а):В главе по установке FPC, было бы хорошо, если был совет набирать текст программ в текстовых редакторах (Блокнот, NotePad и т.д..), а после компилировать и запускать в FPC. Просидел в АЗС два месяца и глаза болят. Расцветка в нем- " вырви глаз ".

поверь, настройки оформления меняются практически всегда достаточно легко... а вот поиск ошибок после набора вне среды превращается в нетривиальную задачу. Не говоря уже о том, что более-менее нормальная RAD (даже стандартная турбопаскалевская), очень сильно ускоряет работу.
Ну и не стоит забывать, что есть:
1) проблема с кодировками исходного текста.
2) проблема с ассоциациями расширений.
3) наличие цикла написание {->отладка->}добавление функционала->отладка->добавление функционала.

можно, конечно, использовать блокноты для программистов (geany, notepad++), но они не решают всех проблем.
Герман
новенький
Сообщения: 26
Зарегистрирован: 27.10.2016 10:11:41

Сообщение Герман »

В книге про Лазарус не сказано. Олег написал, что не стоит новичку сразу лезть в него. А уж как потренировавшись на " кошках " можно и в лазарус.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Герман писал(а): Олег написал, что не стоит новичку сразу лезть в него. А уж как потренировавшись на " кошках " можно и в лазарус.

В корне не согласен. Визуальное программирование сильно отличается от консольного, так что лучше сразу, по возможности, привыкать. Хелловолды и прочие примеры бывают достаточно простыми. Тем более, что среда разработки, может отсутствовать в стандартной сборке на данном конкретном дистрибутиве OS(не забываем, что fpc консольный редактор и не требует наличие идущего в комплекте редактора), а транком пользуются не все, тем более новички.
Oleg_D
постоялец
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Сообщение Oleg_D »

Герман писал(а):В книге про Лазарус не сказано. Олег написал, что не стоит новичку сразу лезть в него.

Тут придётся в исторический экскурс пуститься. Работа над книгой начата 10 лет тому, когда старый добрый Borland Pascal ещё царствовал в школах. В этой IDE существует средство настройки цветов в редакторе и прочих окнах, и в «песнях» была даже глава с описанием всех этих волшебных манипуляций. Затем я эту главу изъял, поскольку во Free не нашёл аналогичного инструмента (может быть, плохо искал? Подскажите, люди добрые!). Там я настраивал цвета так: тёмные буквы на светло-сером (белом) фоне. Это оптимально для глаз, не зря эта палитра используется в большинстве профессиональных программ. Существующая ныне палитра Free Pascal мне тоже – увы! - не нравится, она утомительна.
Надо сказать, что Lazarus в те времена только-только появлялся, и первая версия мне ни разу не понравилась. Сейчас Лазарус изменился в лучшую сторону, и потому, если новичок способен одолеть ужас от огромного количества ненужных ему менюшек и панелей, то ради бога: Лазарус ему в руки. Или даже Дельфи. :)

Касательно отдельного редактора и консольного компилятора. В своё время ныне забытая система MS-DOS оставляла в распоряжение пользователя всего-навсего 640K памяти. Как говорится, вот тебе три копейки, и ни в чём себе не отказывай. Это что! В более ранних системах работали с памятью 256K и даже 64K. Конечно, помещая IDE в эти 640K, мы отбирали от своей программы огромный кусок памяти. Потому для создания крупных программ имела смысл пакетная обработка: сначала редактор, потом компилятор, линкер, а затем отладчик. В ныне существующих условиях я не вижу смысла новичку (!) привыкать к этому мазохизму. А к тому времени, когда он созреет для очень крупных проектов, всё опять поменяется. Возможно, пакетная обработка будет окончательно забыта :)
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Расцветка среды turbo а затем и ide-fpc оптимальна для людей с нарушением зрения (дальтонизм). Ну а то, что в fpc нет настроек внешнего вида никто не мешает перекомпилировать ее с новым оформлением, благо исходные коды открыты.
enot777
новенький
Сообщения: 24
Зарегистрирован: 24.11.2016 14:20:58

Сообщение enot777 »

>> Oleg_D
Глава 46 стр.352 Листинг p_46_1
1.

Код: Выделить всё

for i:=1 to CSize-1 do BN[i]:= Char(Random(100) mod 10 + Ord('0'));

В цикле используется константа CSize со значением 500.
CSize так же задаёт размерность используемого массива.
Внимание вопрос, почему цикл ограничен диапазоном 1..499, т.е. игнорируется 500-ый элемент массива BN?
В BN[500] всегда будет '7' из-за:

Код: Выделить всё

FillChar(BN, SizeOf(BN), '7');

2.

Код: Выделить всё

i:= SizeOf(aNum);

В результате в i будет 500, потому что sizeof(aNum) вернул размер массива в байтах (writeln(sizeof(char)); вернёт 1, у нас массив 1..500 char, размер 500 байт).
Т.е. если размер элемента массива был бы больше 1 байта, то и sizeof() вернул бы 2..n*500.
Лучше использовать length() для определения количества элементов массива.

Код: Выделить всё

i:= length(aNum);
Oleg_D
постоялец
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Сообщение Oleg_D »

Спасибо за полезные замечания!
Честно говоря, я не помню, почему поставил

Код: Выделить всё

for i:=1 to CSize-1

Возможно, в каком-то варианте программы у меня массив индексировался с нуля. А может, захотел оставить семёрку в старшем разряде (в вашем нике их аж три). В конце концов, здесь это ни на что не влияет, это просто демо-пример, не более.
Что касается i:= Lenght(aNum), то в старом добром Borland Pascal эта штука для массива не проходит. А я стремился к универсальности примеров. Повторюсь: я работал над учебником программирования, а не руководством по конкретному диалекту Паскаля. Но ваш совет, несомненно, полезен, спасибо.
enot777
новенький
Сообщения: 24
Зарегистрирован: 24.11.2016 14:20:58

Сообщение enot777 »

>> Oleg_D

Из примера P_46_2 становится понятно почему было применено такое решение (CSize-1).
500-тый элемент массива используется в случае переполнения: bn1[499]+bn2[499]=13, то в bn1[499]=3, а bn1[500]=1.

По sizeof(), так это придирки.
Но можно обойтись и без length(): writeln(sizeof(bn) div sizeof(bn[low(bn)]));

Хотя в книге нет описания low() и high().
Oleg_D
постоялец
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Сообщение Oleg_D »

enot777 писал(а):Из примера P_46_2 становится понятно почему было применено такое решение (CSize-1)

Точно! Давно это было, сам уже подзабываю свою писанину... спасибо за напоминание!
enot777 писал(а):Хотя в книге нет описания low() и high().

Нет, потому что не было их в Борланде, а книга ориентировалась на школьника и под Борланд (изначально).
enot777
новенький
Сообщения: 24
Зарегистрирован: 24.11.2016 14:20:58

Сообщение enot777 »

>> Oleg_D
Специально установил DosBox.
Запустил BTP 7.0

Код: Выделить всё

type TA = array [0..1] of integer;
var a: TA;
begin
  writeln('size of elements: ',sizeof(a[low(a)]));
  readln;
end.

В справке от BTP7 присутствуют и low() и high().
Oleg_D
постоялец
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Сообщение Oleg_D »

enot777 писал(а):В справке от BTP7 присутствуют и low() и high().

Да, вы правы, недооценил я старика Борланда, там уже было это. В своё время мне это не требовалось на практике, а потом перешёл на Дельфак и "всё смешалось". :)
enot777
новенький
Сообщения: 24
Зарегистрирован: 24.11.2016 14:20:58

Сообщение enot777 »

>> Oleg_D
Глава 56. стр.449
А слабо?
А) В Паскале есть встроенная функция по имени MemAvail (от Memory —
«память», Available — «доступный»). Функция возвращает свободный на текущий
момент объем памяти в куче.
В FPC начиная со 2-ой версии MemAvail и MaxAvail отсутствуют (даже в {$mode tp} FPC пишет: не знаю я memavail).
Следовательно этот код:

Код: Выделить всё

Writeln(’Push :’, MemAvail);

не приемлем в FP.
Спасибо за внимание.
С наступившим.
Ответить