OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 20:00

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 161 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 9  След.
Автор Сообщение
СообщениеДобавлено: Вторник, 23 Октябрь, 2007 20:20 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Примеры с массивами - представьте себя какуют ошибку на уровне опечатки при работе с ними. Например, сложил ребёнок массив с числом. И тут же Вам придётся ему заговаривать зубы: "понимаешь, это мы ещё не проходим, это так и должно быть, хотя с твоей точки зрения и глупость".

В итоге, даже если Вы пообойдёте все подводные камни, Вы только вытесните их на дальнейший путь человеку... В самом простом случае любознательный ученик захочет дома что-нибудь наваять. После провала экспериментов с неясными для него ошибками на следующий день он Вас засыпет вопросами - и Вам уже не миновать подробных объяснений. А в худшем случае после выпуска из школы у него возникнет желание сваять какую-то программульку (что-то посчитать, например) - и спросить ему уже будет не у кого... Т.е. весь вводный курс не дал человеку никакого, даже самого простого инструмента для решения задач, на таком уровне, чтобы ему не понадобилось лезть куда-то и упорно самообразовываться.

Так что даже с сугубо практичной точки зрения идея базового курса на Си терпит фиаско. Поскольку не даёт школьнику ровным счётом ни-че-го.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 23 Октябрь, 2007 21:10 

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 162
Илья Ермаков писал(а):
Например, сложил ребёнок массив с числом.

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

Илья Ермаков писал(а):
И тут же Вам придётся ему заговаривать зубы: "понимаешь, это мы ещё не проходим, это так и должно быть, хотя с твоей точки зрения и глупость".

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

Насчёт указателей - в неявном виде они появятся очень рано, т.к. их потребует функция scanf. Но всю теорию здесь показывать не надо, достаточно сказать, что амперсанд возвращает адрес (ссылку).

P.S. В части урока про if я не стал обходить "подводный камень", а добавил упражнение, в котором приведена заведомо некорректная программа и дал задание проследить поведение проги.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 23 Октябрь, 2007 23:29 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
info21 писал(а):
...(лично я бы кроме английского латынью бы их грузил...).

Это шо ещё за массссссссссссонские штучки?! :evil:

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 24 Октябрь, 2007 08:59 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
ScrollLock писал(а):
Илья Ермаков писал(а):
И тут же Вам придётся ему заговаривать зубы: "понимаешь, это мы ещё не проходим, это так и должно быть, хотя с твоей точки зрения и глупость".

Можно и не заговаривать зубы, а просто сказать, что начало массива "поехало" и что арифметика здесь относится именно к тому, откуда начинается массив.
Можно, можно. И вот Вы пришли прямо к арифметике указателей. Не знаю, что получится у Вас, но я на собственном опыте убедился - если 1-2 студента из группы усваивают, то хорошо.

ScrollLock писал(а):
P.S. В части урока про if я не стал обходить "подводный камень", а добавил упражнение, в котором приведена заведомо некорректная программа и дал задание проследить поведение проги.
Зачем же тратить время на обучение составлению алгоритмов? Лучше его тратить на нюансы реализации конкретного языка. Если ученик выучил синтаксис Си - значит он уже программист.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 24 Октябрь, 2007 09:12 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
ScrollLock писал(а):
Илья Ермаков писал(а):
Например, сложил ребёнок массив с числом.

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

Подумайте заодно, как, например, объяснить, что
Код:
float f;
double x;
// программа не работает - с ней что-то происходит.???
scanf("%f", f);
scanf("%d", &x);

// а что это программа печатает не понятно что?
printf("%f");
printf("%f", &f);
printf("%d", x);

// а почему
scanf("%f", &x); //так писать нельзя
printf("%f", x); //а так можно?

// у каждого символа есть код....
// как вывести код символа?
char c;
printf("%i", c); //так
// а если я хочу ввести код символа и получить символ
scanf("%i", &c); // не, так нельзя - надо по другому


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 24 Октябрь, 2007 10:44 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
ScrollLock писал(а):
...арифметику указателей...

Бывает "адресная арифметика" потому что адрес - это целое число (арифметика - для чисел), а "арифметики указателей" не бывает потому, что указатель - это не число, а абстракция, новый тип данных. В Си-образных языках между указателями и адресами работает неявное приведение типов поэтому и возникает такая путаница как "арифметика указателей": сначала указатель неявно преобразуется в адрес, потом над адресом выполняются арифметические действия -- адресная арифметика, затем адрес неявно преобразуется обратно в указатель. В Обероне адресы и указатели существуют раздельно и неявно друг в друга не преобразуются.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 24 Октябрь, 2007 13:59 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
В тему обсуждения - презентация от выступления Ф.В. Ткачёва на летнем семинаре Информатики-21 в Томске:
http://www.inr.ac.ru/~info21/pdf/tomsk2007fvt.pdf


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 24 Октябрь, 2007 16:01 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Сергей Губанов писал(а):
В Обероне адресы и указатели существуют раздельно и неявно друг в друга не преобразуются.


Впрочем как и явно тоже не преобразуются...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 24 Октябрь, 2007 16:31 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Явно на уровне SYSTEM преобразуется даже ёжик к лепесину :-)
Оберон не Жаба...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 24 Октябрь, 2007 16:43 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
Впрочем как и явно тоже не преобразуются...

Хочешь плохому научу?
Во, смотри:
Код:
PROCEDURE GetGarbagePointer (): ANYPTR;
  VAR someGarbageOnTheStack: INTEGER;
BEGIN
  RETURN SYSTEM.VAL(ANYPTR, someGarbageOnTheStack)
END GetGarbagePointer;

Потом остаётся только дождаться когда сборщик мусора в процессе своей работы попытается разыменовать полученный указатель, и тут БА-БАХ!!! :D :D :D


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 24 Октябрь, 2007 19:06 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Явно на уровне SYSTEM преобразуется даже ёжик к лепесину :-)
Оберон не Жаба...


SYSTEM - внеязыковое средство, специально для грязных хаков.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 24 Октябрь, 2007 19:25 

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 162
Евгений Темиргалеев писал(а):
Подумайте заодно, как, например, объяснить, что

Это весьма просто объяснить: scanf требует адреса переменных (т.е. указатели на них), чтобы писать куда надо, а printf - значения переменных. Единственное исключение будет в случае спецификатора %s. И другое правило - каждому спецификатору обязательно должен соответствовать "свой" тип данных (т.е. подсунули другой тип данных - вот и печатает чушь).
А вот последний пример - весьма "весёлый" - ошибка может и не проявиться, но "затереть" соседние по стеку переменные (эффект будет зависеть от конкретного компилятора).

Зато передача переменных по ссылке и по значению видна невооружённым глазом :)

Сергей Губанов писал(а):
потому, что указатель - это не число, а абстракция, новый тип данных.

У K&R дано такое определение - "Указатель - переменная, которая содержит адрес переменной". Поэтому вполне можно не говорить про абстракции, а использовать низкоуровневые возможности Си для лучшего понимания указателей (печать адресов, "гуляние" по массивам, для продвинутых - дамп памяти и искусственное создание аварийной остановки программы).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 24 Октябрь, 2007 19:38 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Vlad писал(а):
SYSTEM - внеязыковое средство, специально для грязных хаков.

Всё верно, а преобразование между адресами и указателями, с точки зрения современного языка и есть грязный хак :-)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 24 Октябрь, 2007 22:36 

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 162
Цитата:
В тему обсуждения - презентация от выступления Ф.В. Ткачёва на летнем семинаре Информатики-21 в Томске:

На сколько минут был рассчитан доклад? Часть слайдов презентации перегружена текстом (вполне можно было бы заменить вводные и связующие слова на схемы, списки, структуры). Вряд ли аудитория будет читать много текста со слайдов (да и последние ряды тоже должны увидеть текст).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 25 Октябрь, 2007 08:42 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
ScrollLock писал(а):
На сколько минут был рассчитан доклад? Часть слайдов презентации перегружена ...


Доклад был расчитан на *** минут.
((Виноват, не 20, скорее, ближе к часу. -- прим. info21))

Насчет остальных советов:

"There are more things in heaven and earth, Horatio, than are dreamt of in your philosophy." (С) W.Shakespear

-----
Раз уж начал исправлять: постоянная методологическая ошибка ScrollLock'а -- дисбаланс между силой и общностью суждений и недостаточностью оснований, причем с некоторым даже упорством.
Напоминает, кстати, участника другого форума (М... Г...).
Это не намек (хотя кто его знает),
просто где-то недавно мне приходилось объяснять, что ошибки молодежи удивительно трафаретны, хотя сама молодежь склонна считать свои суждения оригинальностью ровно на основании неиспорченности чрезмерными знаниями.

А получается в точности наоборот: чем меньше знаешь, тем банальнее ошибки.


Последний раз редактировалось Info21 Четверг, 25 Октябрь, 2007 09:46, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 25 Октябрь, 2007 08:57 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
ScrollLock писал(а):
А вот последний пример - весьма "весёлый" - ошибка может и не проявиться, но "затереть" соседние по стеку переменные (эффект будет зависеть от конкретного компилятора).

Вы не упомянули как быть с тем же весёлым эффектом в
Код:
double x; scanf("%f", &x);

ScrollLock писал(а):
Зато передача переменных по ссылке и по значению видна невооружённым глазом :)

Невооруженным глазом она видна в Обероне. В на счёт Си я бы так утверждать не стал:
Код:
PROCEDURE P (VAR x: T);
PROCEDURE P (x: POINTER TO T);

void P (T *x);
void P (T *x);

ScrollLock писал(а):
Поэтому вполне можно не говорить про абстракции, а использовать низкоуровневые возможности Си для лучшего понимания указателей (печать адресов, "гуляние" по массивам, для продвинутых - дамп памяти и искусственное создание аварийной остановки программы).
Поэтому мой Вам совет - если Вы хотите изучать низкоуровщину - изучайте ассемблер. А если программирование (как умение составить алгоритм - не зависящее от ЯП) - то не следует отвлекаться на низкоуровщину и выбрать соотв. язык.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 25 Октябрь, 2007 10:08 

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 162
Евгений Темиргалеев писал(а):
Вы не упомянули как быть с тем же весёлым эффектом в

Нужен спецификатор %lf для типа double. Полагаю, что в вводном курсе тип float не нужен - нечего память машины жалеть; да и к тому же он редко нужен на практике.

Евгений Темиргалеев писал(а):
Невооруженным глазом она видна в Обероне. В на счёт Си я бы так утверждать не стал:

В Си тоже всё понятно (и для меня даже привычнее) - звёздочка, значит указатель. На этом примере хорошо видна "болтливость" Оберона:
PROCEDURE - void
POINTER TO - *
VAR - не имеет аналога в Си (это лишнее слово)

info21 писал(а):
Раз уж начал исправлять: постоянная методологическая ошибка ScrollLock'а -- дисбаланс между силой и общностью суждений и недостаточностью оснований, причем с некоторым даже упорством.

Вполне возможно. Но какое это имеет отношение к тому, что я сказал про презентацию, где я на общность суждений вообще не претендую? Мне время от времени приходится делать презентации и изучать презентации других. Тогда около 10 слайдов на 1 час доклада (без учёта вопросов)- это даже мало. Привычнее видеть меньшие по информационной насыщенности слайды, но с большим числом рисунков и схем (всё равно вчитываться в объёмный слайд аудитория не будет).

Конкретный пример по одному из слайдов, где рассказывается про уровни мышления. Зачем писать список, когда можно нарисовать пирамиду и диаграмму?

На примере этой презентации и оформления сайта "Информатика-21" я понимаю, почему пиар BlackBox может идти не очень успешно - "обёртка" в нашем мире - довольно важная вещь. И когда юзер видит жёлто-зелёный сайт с весьма странной системой навигации и философией на главной странице, то он может и не проникнуться идеей.

Берите пример с M$ - она из не очень качественного продукта "конфетку" умеет сделать, а тут такая хорошая вещь, как Оберон... Ну или в случае с сайтом хотя бы с OberonCore.ru - дизайн вполне приличный.

P.S. Также выглядит спорным утверждение, что BlackBox хорош для матстатистики и физпрака - для этих целей достаточно Excel, в особо тяжёлых случаях - StatGraphics или Origin (меня учили - прежде чем программировать, попробуй обойтись тем, что уже есть). Программировать статистику мне пришлось только для дипломной работы, где "смешивались" несколько сот точек с разными весами, но на MATLAB.

P.P.S. Другие презентации на сайте Информатика-21 выполнены качественнее (хотя бы МГУ-2005)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 25 Октябрь, 2007 11:53 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
ScrollLock писал(а):
Евгений Темиргалеев писал(а):
Невооруженным глазом она видна в Обероне. В на счёт Си я бы так утверждать не стал:

В Си тоже всё понятно (и для меня даже привычнее) - звёздочка, значит указатель. На этом примере хорошо видна "болтливость" Оберона:
PROCEDURE - void
POINTER TO - *
VAR - не имеет аналога в Си (это лишнее слово)

Однако, по прототипу процедуры в Обероне я вижу, что в первом случае у меня параметр T по ссылке, а во втором - указатель на T по значению. А в Си - нет.
А на счёт болтливости - я бы с удовольствием посмотрел бы, как Вы будете объяснять ученикам такие, интуитивно понятные :lol: для начинающего, вещи:
Код:
int *p[10];
int (*p)[10];
int *f();
int (*f)();
и это только комбинации с одной звёздочкой...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 25 Октябрь, 2007 19:23 

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 162
Евгений Темиргалеев писал(а):
А на счёт болтливости - я бы с удовольствием посмотрел бы, как Вы будете объяснять ученикам такие, интуитивно понятные :lol: для начинающего, вещи:

Это надо не объяснять, а просто запоминать.
1) Массив указателей (в аргументах командной строки функции main)
2) Указатель на массив (особенно удобно в качестве аргумента функции)
3) Функция возвращает указатель
4) Указатель на функцию
Моё ИМХО - указатели нужно вводить в курсе Си постепенно, от простого к сложному. Да и ничего не случится, если познакомить школьников только с самыми основами, а "закавыки" оставить для продвинутых.

Цитата:
Однако, по прототипу процедуры в Обероне я вижу, что в первом случае у меня параметр T по ссылке, а во втором - указатель на T по значению.

Может быть, оно и удобно, но я полагаю, что это сложнее, чем просто указатели. И непонятно, почему именно VAR, неужели нельзя было сделать BYREF и BYVAL как в VB :)?

P.S. Мне одно непонятно - если по размеру формализованной записи синтаксиса Оберон проще Си от силы на 20%, то откуда тогда заявления, что Си непригоден как базовый язык? Да, там есть несколько "заморочек" с указателями (которые можно не разбирать все сразу), но зато синтаксис просто чудесный :).
P.P.S. Далеко не во всех школьных курсах Паскаля разбирают, что такое указатели. Поэтому я тоже не вижу "лезть" в их дебри при преподавании Си.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 25 Октябрь, 2007 19:30 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
ScrollLock писал(а):
P.S. Мне одно непонятно - если по размеру формализованной записи синтаксиса Оберон проще Си от силы на 20%, то откуда тогда заявления, что Си непригоден как базовый язык?

Ну, непонятно, не убедили - ну шо ж теперь :-) Не с чем сравнивать, видимо. Я тоже знаю, как можно научить на С (и хорошо научить). Но и знаю, как можно на Обероне. И потому выбираю последний, вследствие опытного сравнения и выбора.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 161 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 9  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB