OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 27 Ноябрь, 2021 04:54

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




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
СообщениеДобавлено: Воскресенье, 10 Октябрь, 2021 23:29 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 239
Откуда: г. Рига, Латвийская ССР
Сегодня в Риге начались курсы по программированию на Обероне. Два занятия в неделю по 3 часа (1 ч — лекция, 2 ч — практика). Используется язык Оберон-07 в среде Free Oberon. Занятие прошло успешно. На лекции была краткая история языков программирования (мнемокод, Фортран, линия Алгол—Оберон), краткое введение в программирование, пара слов о тестировании и верификации, о вычислительных процессах и алгоритмах. На практике решали простейшие задачи построения линейных программ:

(Используется только тип INTEGER, процедуры In.Int, Out.String, Out.Int, Out.Ln)

1. Вводятся длины сторон коробки, вывести её объём и площадь её поверхности.
2. Перевести км/ч в м/с и м/мин.
3. По диаметру круга рассчитать длину окружности и площадь круга.
4. Вывести квадрат, куб, четвёртую и пятую степень введённого числа.
5. Перевод температуры из градусов Цельсия (C) в гр. Реомюра (R), гр. Фаренгейта (F) и гр. Кельвина (K). R = 0,8C. F = 1,8C + 32. K = 273 + C.
6. Вводятся два числа. Построить квадратное уравнение, корнями которого являются эти числа.
7. То же самое, но — три числа.
8. Найти максимум двух чисел, не используя IF. Использовать ABS.
9. То же самое, но — минимум.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 12 Октябрь, 2021 01:13 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 239
Откуда: г. Рига, Латвийская ССР
На второй лекции (11 октября) проходили оператор IF. Понятие ветвления, оператора, последовательности операторов, условия, логического типа данных (BOOLEAN), согласования типов, структурной вложенности операторов, приоритета операций, ключевого слова, встроенной процедуры. Шесть операции сравнения (= # < > <= >=). Три логические операции & OR ~. Встроенные процедуры ABS и ODD. Деление нацело и взятие остатка (DIV, MOD). Составные логические условия со скобками. На практике переводили математические и словесные условия на язык Оберон, программировали простейшее меню, решали задачи на ветвление.

Задачи на практику
1. Пользователь выбирает из списка единицу измерения (м/с, км/ч, м/мин) и указывает величину скорости. Перевести скорость в две другие единицы измерения.
2. Вводится школьная оценка. Вывести характеристику этой оценки (хорошая, плохая и т. д.).
3. Даны два числа. Вывести первое, если оно больше второго, или второе, если оно больше первого. Если они равны, вывести 0.
Вариант: использовать вызов Out.Int только один раз, обойтись двумя переменными.
4. Существует ли треугольник с данными длинами сторон. Если да, то вывести величину квадрата его площади (по формуле Герона).
Примечание: уменьшить погрешность, возникающую из-за того, что квадрат площади вычисляется в целых числах.
5. Даны длины трёх сторон треугольника. Определить вид треугольника: равнобедренный, равносторонний, прямоугольный, общего вида (ни тот ни другой).
6. Дан размер кирпича (три числа) и размер прямоугольного отверстия (два числа). Пролезет ли кирпич в отверстие? Кирпич распологается параллельно краям отверстия.
7. Даны размеры письма и конверта. Поместится ли письмо в конверт? Письмо должно быть расположено параллельно краям конверта.
8. То же самое, но письмо разрешается согнуть пополам один раз.
9. Даны a и b. Решить неравенство ax + b > 0.
10. Даны четыре числа. Сколько среди них различных?
11. Даны пять чисел. Найти среди них наименьшее, наибольшее и третье по величине (медианное).
12. Расставить по возрастанию три числа.
13. Расставить по возрастанию четыре числа.
14. Дано число n. Вывести фразу «У вас n рублей», написав «рублей» с правильным окончанием: рубль, рубля, рублей.
15. Даны размеры ящика в форме прямоугольного параллелепипеда: a, b, c. Имеются коробки размером WxHxD, которые надо поместить в ящик. Все коробки должны быть ориентированы одинаково, но ориентацию коробок можно выбирать. Какое максимальное количество коробок поместится в ящик?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 18 Октябрь, 2021 05:22 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 239
Откуда: г. Рига, Латвийская ССР
На третьей лекции (17 октября) проходили циклы WHILE и REPEAT, встроенные процедуры INC и DEC, упомянули цикл Дейкстры и инвариант цикла, поговорили о различиях между операторами и выражениями. WHILE как оператор, задача которого — сделать данное условие ложным. Постусловие. Логические преобразования при отрицании условия (раскрытие скобок, перед которыми стоит оператором «не»). Итерация (шаг) цикла. «Подготовка к циклу» как подготовка к первой итерации цикла, условие продолжения цикла, условие окончания цикла, тело цикла, полезное действие, подготовка к следующей итерации цикла, счётчик цикла. Метод половинного деления.

Поговорили также о рекомендации Э. В. Дейкстры писать более слабые условия продолжения цикла. Например, в следующем примере не i < 11, а i # 11:
Код:
i := 1; WHILE i # 11 DO Out.Int(i, 3); INC(i) END

Это для того, чтобы ошибки в программировании приводили к краху программы и, таким образом, были бы видны. И для того, чтобы получались сильные постусловия цикла (в данном примере i = 11 — сильнее, чем i >= 11).

Цитата:
Как работает цикл WHILE
-----------------------
1) Проверяется условие.
2) Если оно истинное, то выполняется тело цикла,
затем переходим на пункт 1.
3) Если условие ложное, то цикл заканчивается
(то есть программа продолжает выполняться
со следующего оператора после всего WHILE).


Задания на практику

(Используются только циклы WHILE и REPEAT и только тип INTEGER.)

1) Вывести числа от 1 до 100 с шагом 3: 1, 4, 7…
2) Даны два числа: A и B. Вывести все числа между A и B включительно. Учесть, что A может быть больше, чем B.
3) Даны две последовательности: 1, 4, 7, 10,… и 10, 12, 14,… Выводить их до тех пор, пока первая не перегонит вторую.
4) Старая задача с переводом единиц измерения, но зациклить её (спрашивать в конце: «Повторить?»)
5) Найти все числа Фибоначчи, не превосходящие 1 млн.
Два первых члена последовательности равны единице, а все остальные равны сумме двух предыдущих. 1, 1, 2, 3, 5, 8, 13…
6) Игра «Угадайка» в диапазоне от 1 до 100. Программа не более чем за 7 шагов определяет загаданное пользователем число, задавая вопросы вида: «Ваше число больше чем X?».
7) Игра «Спички». На столе лежит N спичек. Каждый игрок по очереди берёт 1, 2 или 3 спички. Кто взял последнюю — проиграл.
8) Найти сумму и количество цифр данного натурального числа.
9) Перевернуть заданное натуральное число задом наперёд.
10) Найти три наибольших из введённых положительных чисел. Признак конца ввода — ноль.
11) Вывести в порядке возрастания все трёхзначные числа, сумма цифр которых равна заданному числу S.
12) Имеется последовательность: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4,… Какое число находится на N-ом месте?
13) Вводятся числа. Каждое следующее число не меньше предыдущего. Как только введено число, меньшее предыдущего, ввод прекращается (это число не считаем членом введённой последовательности). Вывести: а) сколько всего чисел введено, б) сколько различных чисел введено, в) каково максимальное количество повторов одного числа.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 18 Октябрь, 2021 06:40 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3164
Спасибо за методические рекомендации.
Очень полезно смотреть на опыт по преподаванию более опытных товарищей.
У меня тоже начался кружок в школе со встроенным экспресс-курсом по программированию: https://vk.com/mcuoberon


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Октябрь, 2021 03:00 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 239
Откуда: г. Рига, Латвийская ССР
На четвёртой лекции (18 октября) вместе написали «Угадайку», решили задачу о нахождении суммы и количества цифр натурального числа и задачу о переворачивании числа. Говорили о логическом разбиении программы на подзадачи. Проходили обычные и функциональные процедуры. Объявление и вызов. Тип возвращаемого значения. Сигнатура. Формальные и фактические параметры. Глобальные и локальные переменные. Возврат из процедуры и оператор RETURN. Булевы процедуры. Коснулись понятия экспорта и разбиения программы на модули.

Задания на практику
Все задачи решаются с помощью написания процедур. В каждой задаче процедура Do организует ввод и вывод.
1) Написать процедуру, возвращающую знак числа (-1, 0 или 1).
PROCEDURE Sign(n: INTEGER): INTEGER;
2) Какая степень двойки? Если никакая, то возвращать -1.
PROCEDURE Power2(n: INTEGER): INTEGER;
3) Какая степень числа K?
PROCEDURE PowerK(n: INTEGER; K: INTEGER): INTEGER;
4) Простое ли число? Простое число — это натуральное число, которое делится только на себя и на единицу и не является единицей.
PROCEDURE Prime(n: INTEGER): BOOLEAN;
5) Точным квадратом какого числа является данное число? Если никакого, возвращать -1.
PROCEDURE PerfectSquare(n: INTEGER): INTEGER;
Пример: PerfectSquare(9) = 3, PerfectSquare(8) = -1
6) Правда ли, что все цифры в числе чётные?
7) Правда ли, что все цифры в числе имеют одинаковую чётность?
8) а) Сколько натуральных чисел, не превосходящих A, делится на C. б) Пользуясь написанной в (а) процедурой, написать процедуру, которая определяет, сколько целых чисел из отрезка [A; B] делится на C.
9) Процедура принимает 4 числа от 1 до 8 (вариант: до 1 млн) — координаты двух клеток на шахматной доске. Если это одна и та же клетка, возвратить -1, иначе если они соединены ходом короля, возвратить 1, ладьи — 2 слона — 3, коня — 4. Если клетки не соединены ходом ни одной из этих фигур, возвратить 0. Разбить задачу на несколько подзадач и оформить каждую из них в виде булевой процедуры.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Октябрь, 2021 21:34 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 239
Откуда: г. Рига, Латвийская ССР
На пятой лекции (24 октября) написали в трёх вариантах процедуру, которая возвращает знак числа. Повторили логическое раскрытие скобок, перед которыми стоит оператор «не». Проходили схему программирования «линейный поиск». Говорили о программировании как целенаправленной деятельности. Органическое разбиение задачи на подзадачи против механического её разбиения. Процедура как момент программы, выполняющая некоторое законченное действие. Побочные эффект функциональной процедуры. Применяя идею структуризации в форме процедур, написали программу, представляющую данное число в виде суммы двух простых чисел десятью различными способами.

Задания на практику
1) Дано число N. Вывести фигуры:

Код:
а)       б)       в)       г)        д)

1        1        1111      1        1111
22       22       222      222       2222
333      333      33      33333      3333
4444     22       4        222       4444
55555    1                  1

N = 5   N = 3    N = 4    N = 3     N = 4


2) Дано число N. Вывести фигуры:

Код:
а)       б)
xxxx        x
xxxx       x x
xxxx      x   x
           x x
            x

N = 1     N = 3

Код:
в)       г)
xxxxxx   xxxxxx
x    x   x++++x
x    x   x++++x
xxxxxx   xxxxxx

N = 2    N = 2


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Октябрь, 2021 21:53 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 239
Откуда: г. Рига, Латвийская ССР
Видеозапись шестого занятия на Ютубе

На шестой лекции (25 октября) повторили схему программирования «линейный поиск», проходили массивы, константные выражения, постоянные, открытые массивы, оператор LEN. Говорили о «магических» числах в исходных кодах программ, о делении на ноль. Логически вывели необходимость массивов. Написали программу, выводящую последовательность вводимых чисел в обратном порядке.

Задания на практику

Написать функциональную процедуру, которая возвращает:
1) сумму элементов массива;
PROCEDURE Sum(m: ARRAY OF INTEGER): INTEGER;
2) минимальное значение в массиве;
3) встречается ли среди элементов массива число X;
PROCEDURE Sum(m: ARRAY OF INTEGER; x: INTEGER): BOOLEAN;
4) сколько раз число X встречается среди элементов массива;
5) количество положительных чисел в массиве;
6) индекс элемента с максимальным значением в массиве (любого);
PROCEDURE MaxI(m: ARRAY OF INTEGER): INTEGER;
7) индекс последнего ненулевого элемента, или -1, если таких нет;
8) истину, если два массива равны (по значениям элементов);
PROCEDURE Equal(a, b: ARRAY OF INTEGER): BOOLEAN;
9) количество различий в двух массивах (различие — на одинаковой
позиции стоят различные числа);
PROCEDURE Diff(a, b: ARRAY OF INTEGER): INTEGER;
10) Написать процедуру, которая выводит на экран значения
элементов массива в два столбца. Слева отрицательные числа,
справа — неотрицательные. Два варианта: а) оставлять пустые
места, б) честно выводить в два столбца.
Код:
а)          б)
   -5          -5  2
   -2          -2  3
       2       -1  0
       3
   -1
       0

11) Написать функциональную процедуру, которая возвращает
количество различных элементов массива.
PROCEDURE Unique(m: ARRAY OF INTEGER): INTEGER;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 08 Ноябрь, 2021 10:17 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3260
Откуда: Астрахань
Очень полезное упражнение:
написать одну и ту же процедуру (функцию)
а) итеративно
б) рекурсивно
в) итеративно с явным использованием стека


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 13 Ноябрь, 2021 23:59 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1678
Валерий Лаптев писал(а):
Очень полезное упражнение:
написать одну и ту же процедуру (функцию)
а) итеративно
б) рекурсивно
в) итеративно с явным использованием стека
Зачем в)?
Понимание механизма и принципов?
Так это - пока стековое размещение контекста дешевле и быстрее "связносписочной".
А, вообще, главное в формализмах - не то, что МОЖНО на них записать, а то, что писать в них НЕ ОБЯЗАТЕЛЬНО. То есть, не ТРЕБОВАНИЕ ЯВНОСТИ, а - УМОЛЧАНИЯ.
К тому же, Вирт говорил, что основной принцип ЯП - СОКРЫТИЕ подробностей механизма исполнения, получение независимости от него, наиболее общего вида решений.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 18 Ноябрь, 2021 08:19 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3260
Откуда: Астрахань
Для начинающих - ПОЛЕЗНО!
Понимать будут лучше - проверено.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 19 Ноябрь, 2021 00:52 

Зарегистрирован: Пятница, 13 Март, 2015 16:40
Сообщения: 509
Валерий Лаптев писал(а):
Цитата:
в) итеративно с явным использованием стека

Для начинающих - ПОЛЕЗНО!
Понимать будут лучше - проверено.

Но ведь нет никаких средств (и в инструментарии автора темы, и в фильмах не просматривается) уведеть "стек-не стек", "перым зашёл - последним выйдешь", "сколько занял - столько же и в обратном порядке освободи"?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

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


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

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


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

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