Друзья, всем добрый день. Я вижу, что эта страница пользуется популярностью. Мне приятно это видеть.
Однако отмечу, что эти задачи по программированию я писал для себя (я работаю репетитором), чтобы решать их вместе с учениками. Решать их самостоятельно может быть не очень удобно.
Я приглашаю вас в группу ВК «Бесплатные уроки по программированию (Python)» http://vk.com/club73284245: задавайте вопросы, я постараюсь на все ответить.
Так же обращу внимание на новый учебник «Программирование — это интересно!» https://progras.ru/uchebnik-programmirovaniya-programmirovanie-eto-interesno/
Жду ваших пожеланий и вопросов.
Задания, начиная с п. 8 (одномерные массивы) выполнять в процедурах и функциях
- ПЕРЕМЕННЫЕ
- вывести значение переменных на экран (различные способы)
- получить значения переменных (ввод с клавиатуры, различные способы)
- АРИФМЕТИЧЕСКИЕ ФУНКЦИИ, ПРЕОБРАЗОВАНИЕ ТИПА, ОКРУГЛЕНИЕ
- разделить два числа
- разделить два числа и сохранить результат в целочисленной переменной
- найти остаток от деления первого числа на второе
- найти последнюю цифру числа
- посчитать сумму цифр в двузначном числе
- посчитать сумму цифр в четырехзначном числе
- округлить число до целого
- округлить число до двух знаков после запятой
- округление до ближайшего четного
- вывести на экран модуль числа
- ВЕТВЛЕНИЕ (if)
- найти большее из 2 чисел
- найти большее из 3 чисел
- найти большее из 10 чисел
- получить число, определить, четное ли оно
- получить число и определить, попадает ли оно в диапазон (10,20)
- получить число и определить, попадает ли оно в диапазон (10,20) или в диапазон (30,40)
- Даны координаты точки. Определить, попадает ли точка в окружность (0,0,10)
- Даны координаты точки, определить, попадает ли точка в квадрат (0,0 — 4,0 — 4,4 — 0,4)
- ЦИКЛ for
- вывести на экран числа от 0 до 9
- вывести на экран числа от 0 до 10
- вывести на экран числа 1,3,5,7,…21
- вывести на экран числа 2,4,6,8,…22
- вывести на экран числа 10, 9, 8, … 1
- вывести на экран числа 100, 90, 80, … 10
- найти сумму чисел от 1 до 10
- найти произведение чисел от 1 до 5
- найти сумму модулей от -5 до 5
- вывести буквы от ‘A’ до ‘Z’ (использование for для работы с перечисляемыми нечисловыми типами)
- ЦИКЛ while
- вывести на экран числа 2,4,8,16,32,…,1024 (*2)
- вывести на экран числа 1,3,6,10,15,21,28,…210
- выводит на экран числа 1, 2, 3 …, пока сумма не достигнет 100
- СЛУЧАЙНЫЕ ЧИСЛА (random)
- получить и вывести на экран случайное число
- получить целое случайное число от 1 до 10
- получить случайное число от -10 до +10
- получить чётное случайное число от 0 до 100
- получить нечётное случайное число от 1 до 99
- for + random
- вывести случайное количество случайных чисел
- вывести на экран 10 случайных чисел
- вывести на экран 10 случайных чисел, значение которых лежит в отрезке [0,10]
- вывести на экран 10 случайных чисел, значение которых лежит в отрезке [0,9]
- вывести на экран 10 случайных чисел в [10,20]
- вывести на экран 10 случайных чисел в [97,122]
- найти сумму чисел 10 случайных чисел в [0,10]
- while + random
- выводить на экран случайные числа [0,10] до тех пор, пока не будет получено 5
- выводить на экран случайные числа [0,10] до тех пор, пока их сумма не превысит 50
- выводить на экран случайные числа [0,10] до тех пор, пока их сумма не превысит 50 или их количество не превысит 10
- выводить на экран случайные числа [0,10] до тех пор, пока количество нулей не превысит 3 или количество всех — 30
- выводить случайные числа, пока сумма четных не окажется равной сумме нечетных или количество не превысит 1000
- Обработка исключений
- получить два числа, разделить одно на другое. Перехватить и обработать ошибку “деление на ноль”
- ОДНОМЕРНЫЕ МАССИВЫ (выполнять в функциях / методах класса)
- создать массив из 10 элементов
- создать массив из 11 элементов
- заполнить массив порядковыми номерами в прямом порядке
- заполнить массив порядковыми номерами в обратном порядке
- заполнить массив случайными числами в [0,10]
- заполнить массив случайными числами в [0,9]
- заполнить массив случайными числами в [-10,10]
- заполнить массив случайными числами в [-5,5]
- case … of
заполнить массив случайными числами с различной вероятностью:
50% — 0
25% — 1
25% — случайное число [0,10]
- на массиве, заполненном случайными числами в [0,10] найти
- сумму всех элементов
- среднее арифметическое (сумма/количество)
- сумму четных элементов
- количество четных элементов
- количество элементов = 0
- количество элементов = первому
- количество элементов = среднему арифметическому всех элементов
- на массиве, заполненном случайными дробными числами найти количество элементов приблизительно равных среднему (+-0.4)
- сумму элементов, стоящих на четных местах
- сумму четных элементов, стоящих на четных местах
- позиции(координаты, номера) всех элементов = 0
- позиции(координаты, номера) всех элементов = 3
- позиции всех четных, если их сумма больше, чем сумма позиций нечетных, иначе — позиции всех нечетных
- значение максимального элемента
- позицию максимального элемента
- позиции всех элементов = максимальному
- позицию первого максимального (for, while)
- позицию последнего максимального (for, while)
- сумму всех элементов, стоящих между первым минимальным и последним максимальным
- позицию первого 0 (for, while)
- позицию последнего 0 (for, while)
- даны два массива (10 элементов)
- получить третий массив, содержащий поэлементную сумму
- получить третий массив, содержащий повторение элементов 1-го во втором
- получить третий массив, содержащий элементы первого, отсутствующие во втором
- получить третий, содержащий уникальные элементы первого и второго массива
- получить третий, содержащий общие элементы (присутствующие в обоих массивах)
- сдвиг влево
- сдвиг вправо
- циклический сдвиг влево
- циклический сдвиг вправо
- переворот
- обмен половинок местами
- перемешивание в случайном порядке (качественно — ни одного элемента на прежнем месте)
- перемешивание в случайном порядке (быстро — нарушение общего порядка)
- поменять стоящие на четных местах со стоящими на нечетных местах
- заменить нули средним значением соседних элементов, крайние не обрабатывать
- заменить нули средним значением соседних элементов, крайние обрабатывать так, как-будто массив замкнут в кольцо
- найти количество чередований знака (перехода с — на +) (0 на чередование не влияет)
- в массиве из 0 и 1 найти самую длинную цепочку 0
- в массиве найти самую длинную цепочку, состоящую из одинаковых элементов
- найти три самых больших элемента (возможны повторы)
- найти три самых больших неодинаковых элемента
- задача Иосифа: по кругу располагаются n человек; ведущий считает по кругу и «казнит» каждого m-го, после чего счет возобновляется.
найти номер оставшегося в живых при заданных n,m
найти такое m, при данном n, чтобы в живых остался первый - переместить все положительные в начало, отрицательные — в конец
- поменять максимальный и первый элемент
- сортировать массив (разными методами: выбором, пузырьком, быстрой сортировкой…)
- ДВУМЕРНЫЕ МАССИВЫ
- заполнение
- заполнить номерами строк / столбцов
- заполнить порядковыми номерами по строкам
- заполнить порядковыми номерами по столбцам
- заполнить номерами диагоналей от главной / побочной
- заполнить в шахматном порядке 1 и 0
- заполнить таблицей умножения (1-10)
- заполнить таблицей умножения для восьмеричной системы (1-10)
- заполнить спиралью внутрь
- заполнить спиралью наружу
- заполнить по сегментам: 1, 2, 3, 4. Диагонали = 0
- заполнить кольцами из центра (+1)
- заполнить кольцами из случайного места (rx,cx). Допустить, что rx,cx находятся за пределами массива (заполнить и в этом случае)
- заполнить случайными уникальными значениями
- сформировать двумерный массив из одномерного (два способа)
- сапер: в массиве 10*9, заполненном 0-ми разместить 10 бомб (цифра 9) случайным образом
- заполнение
- анализ
- найти сумму, максимальный, минимальный, среднее ар-е всех элементов
- найти сумму, максимальный, минимальный, среднее для каждого столбца
- найти сумму, максимальный, минимальный, среднее для каждой строки
- найти сумму элементов главной диагонали, побочной диагонали
- найти максимальный среди четных, отрицательных (с проверкой на существование)
- найти координаты всех максимальных (сформировать массив записей, двумерный массив, массив строк или список)
- найти три элемента с макс. значением (могут быть одинаковые)
- найти три неодинаковых максимальных
- получить координаты ферзя и вывести все клетки, находящиеся под боем.
- получить координаты белого ферзя и черного короля. Определить, находится ли король под ударом.
- получить координаты коня. Определить все клетки, находящиеся под боем
- найти максимальный из уникальных (т.е. максимальных из тех, значения которых не повторяются в массиве)
- найти максимальный из тех, которые встречаются больше одного раза
- найти максимальный из тех, которые встречаются только два раз
- найти в массиве самый большой участок, состоящий из одинаковых элементов, соседствующих по горизонтали или вертикали (рекурсия)
- частотный словарь: найти количество повторений каждого элементов (получить двум. массив, или массив строк)
- найти числа, которые встречаются в каждой строке массива
- медиана: найти число (может отсутствовать в массиве), больше которого столько же элементов, сколь и меньше.
- найти строки, не содержащие нулей
- найти элементы, если такие есть, которые стоят на пересечении строк и столбцов, сумма элементов которых одинакова. Вывести номер строки и столбца
- касса: в первой строке – достоинства купюр, во второй – их количество. Набрать указанную сумму минимальным количеством купюр
- латинский квадрат: проверить, является ли массив N*N лат.-м кв.-м (строки и столбцы содержат все цифры от 0 до N)
- магический квадрат: проверить, является ли массив N*N маг.-м. кв.-м (неповт.-ся Числа от 1 до N сумма по строкам, столбца, двум диагоналям равны)
- сапер: в массиве 10*9, заполненном 0-ми размещено 10 бомб (цифра 9) случайным образом. Заменить 0 на количество бомб в соседних ячейках
- найти все локальные минимумы (если есть) – элементы, меньшие всех соседей.
- на сеть уронили тяжелый предмет, который продавил ее. В массиве задана высота каждой ячейки. “уронить” тяжелый предмет в указанную ячейку и рассчитать изменения высот в соседних ячейках
- перестановки
- в указанный элемент поместить сумму элементов его строки и его столбца
- обменять две строки / столбца местами
- в квадратной матрице обменять столбец со строкой
- отразить через средний столбец / строку
- повернуть относительно центрального элемента (по час. стрелке)
- транспонировать (отразить через диагональ)
- циклический сдвиг вправо, влево, вниз, вверх (столбцы и строки)
- циклический сдвиг кольцами
- преобразование
- разделить поэлементно на 2
- разделить поэлементно на среднее
- заменить 0 на среднее арифметическое соседних
- сближение: заменить каждый на среднее между ним и средним
- приближение к х: заменить каждый на среднее между ним и х
- влияние: заменить каждый на среднее между ним и соседним (начиная указанного)
- сглаживание каждый элемент заменить на (s+16x)/24, где s – сумма соседних, x – текущий элемент
- заменить каждый элемент на среднее в подсегменте массива от левого верхнего до текущего
- поиск пути, волновой алгоритм, обход
- в массиве — стоимость перехода в клетку. Найти самый дешевый выход из массива (волновой)
- лабиринт задан массивом: 0 – проход, 1 – нет прохода. Найти кратчайший путь из указанной точки до выхода из лабиринта (любая сторона), если такой есть.
- дан массив высот. Найти все точки, не видные наблюдателю находящемуся в указанной точке. (волновой)
- путь шарика: начиная центра пройти по массиву, выбирая самый меньший из соседних элементов. Указать сторону, куда выкатиться шарик или точку, в которой он застрянет.
- дан массив высот. проложить путь (вывести координаты ячеек) с минимальными подъемами-спусками. Переходить можно только во вертикали или горизонтали (не по диагонали)
- сапер: в массиве 10*9 содержаться цифры 9 (бомба) и 0-8 (количество бомб в соседних ячейках). Выбрана случайная ячейка. Вывести количество бомб в ней. Если 0 – вывести координаты всех соседних ячеек. Если среди соседних есть 0 – открыть их соседние (см. игру winmine)
- массив заполнен цифрами от 0 до 5. «Удалить» все элементы, равные элементу [rx.cx] и примыкающие к нему по горизонтали или вертикали. На место удаленных сдвинуть стоящие выше. На место сдвинутых — 0 (игра не помню как называется).
- массив заполнен 0 и 1 (прозрачный и непрозрачный кубик). Найти все столбцы, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева.
- массив заполнен 0 и 1 (прозрачный и непрозрачный кубик). Удалить (сделать прозрачными) все кубики видимые с одной из четырех сторон (анализировать видимость до удаления кубика).
По этой теме можно посмотреть примеры кода.
- заполнение (усложненное)
- заполнить случайными элементами так, чтобы строках и столбцах не было повторяющихся элементов
- заполнить случайными неповторяющимися так, чтобы сумма по столбцам была одинаковой
- заполнить случайными неповторяющимися так, чтобы сумма по столбцам и строкам была одинаковой
- сгенерировать латинский квадрат
- сгенерировать магический квадрат
- создать динамический массив с неравномерным (случайным) количеством элементов (дерево. Другой пример : многоуровневый список). Заполнить соответственно уровню и номеру элемента
- СТРОКИ
- посчитать количество пробелов в строке
- посчитать количество слов в строке, слова разделены одним или несколькими пробелами
- вывести список букв и их количество в тексте
- проверить, является ли текст анаграммой
- все неодинарные пробелы заменить на одинарные
- сделать заглавными все буквы в начале предложения
- сумма прописью — по заданному числу сформировать строковое представление
- определить пол по ФИО
- дата прописью
- дописать “день, дня, дней” по количеству (1 день, 2 дня, 6 дней)
- по спискам слов формировать словосочетания*
- получить предложение, вывести подлежащее и сказуемое
- сформировать строку, состоящую из случайных символов и знаков препинания.
Строка должна быть похожа на осмысленный текст по длине слов, частоте пробела, расстановке знаков препинания - сформировать строку, состоящую из случайного текста, составленного из подготовленного набора существительных, глаголов и прилагательных
- получить строку вида: “var1=50+3”, вывести значение переменной.
Условия: длина имени переменной неизвестна, количество пробелов может быть любым, в правой части два целых числа, мат.операция сложение, вычитание, умножение или деление. - получить текст вида “a := 4 * 2; b:= 3+8; c := a+10; b := a+c ”, где в правой части могут встречаться имена переменных. Вывести значения всех переменных (в алфавитном порядке). Использовать метод конечного автомата.
- ТЕКСТОВЫЕ ФАЙЛЫ (и строки)
- создать текстовый файл и вывести туда любой текст
- создать текстовый файл, если такой файл существует — удалить и создать.
- создать текстовый файл, если такой уже существует — попробовать создать с именем, дописав 1. Если и такой файл — дописав 2 и т.д.
- создать текстовый файл с именем по дате. Если такой файл есть, добавить в имя файла _. Если и такой есть, то __ и т.д.
- получить имя файла, открыть и прочитать (вывести на экран) файл
- получить имя файла, открыть и прочитать файл. Если такого файла нет — сообщить.
- получить имя файла, дописать в конец дату и время (любой текст). Если такого файла нет — создать.
- получить имя файла, посчитать количество слов в файле.
- в html документе найти в вывести все ссылки
- в html документе найти ссылки и вывести список сайтов и количество ссылок на них
- в html документе есть изображения — вывести адреса изображений
- в html документе есть изображения — сформировать новый html документ, содержащий список адресов изображений и уменьшенное изображение
- ЗАПИСИ (record)
- создать тип для хранения ФИО, возраста (целое), роста, веса (дробное), пола
- создать массив элементов типа из предыдущей задачи
- даны три файла: с именами, фамилиями, отчествами. Заполнить массив случайно сформированными данными. Числовые данные генерировать правдоподобно (вес должен соответствовать полу и возрасту)
- найти средний вес среди мужчин
- найти средний рост для девушек в возрасте от 15 до 18
- найти среднюю длину фамилий для всех, выше среднего
- создать структуру для хранения двоичного дерева (значение узла, адреса(названия, ссылки) двух дочерних узлов. Заполнить дерево по правилу: от каждого элемента образуется два новых — один действием “+2”, другой действием “*2”. Дерево должно содержать 5 уровней.
- К предыдущей задаче: дерево должно быть заполнено до уровня, в котором появится “150”
- ДЕРЕВЬЯ, ОЧЕРЕДИ, СТЕКИ (ДИНАМИЧЕСКИЕ СТРУКТУРЫ, УКАЗАТЕЛИ)
- Однонаправленный список
- Двунаправленный список
- Стек, очередь, дерево
- ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ (ООП)
- Создать объект “машина” (для будущей игры), у которой есть свойства: координаты, скорость, ускорение, направление, запас энергии, масса (сила трения). (x,y,v,a,dir,en,m) и методы: поворот вправо, поворот влево, торможение, ускорение, резкий поворот влево/вправо, получение энергии. Методы должны определять изменение свойств.
- ГРАФИКА
- графические примитивы
- построить прямоугольник, эллипс, треугольник по заданным параметрам
- построить правильный восьмиугольник, n-угольник по заданным параметрам
- для n построить все звезды с n лучами
- нарисовать лист дерева или воздушный шарик или сердце или цифру 3, используя кривую Безье
- нарисовать оси ox,oy в центре, подписав значения, нарисовать деления
- построение графиков и диаграмм
- фигуры Лиссажу
- декартовы координаты — оси, расчет масштаба и положения осей (исследование функций)
- построить график sin(x), sin (2*x), 2*sin(x) (белый фон, красный цвет графика, линия жирная, синяя сетка)
- анимированное построение семейства n*sin(k*x), где изменение k, n управляется с клавиатуры
- преобразование на плоскости (поворот, отражение)
- полярные координаты
- трохоида
- циклоида и др.
- кардиоида
- улитка паскаля
- спираль логарифмическая
- диаграммы
- столбчатая
- столбчатая с нормированием
- круговая
- построение объемных фигур и графиков
- преобразования в пространстве
- нарисовать куб
- нарисовать вращающийся куб
- построить волнообразную поверхность
- построение узоров
- вывод изображений (спрайты)
- копирование, наложение, режимы, удаление, сохранение
- анимация и физ. Моделирование
- способы вывода на экран. Промежуточный буфер, перерисовка
- прыгающий мячик: резиновый мячик падает с высоты
- на плоскости случайные точки. Переместить их ближе к центру тяжести. Ц.т. должен остаться неизменным.
- две точки случайной массы начинают сближение согласно разнице в массе и объединяются в одну
- на плоскости несколько точек случайной массы начинают сближение согласно гравитационной силе
- графический редактор
- резиновая линия
- резиновый прямоугольник
- построение с alt– относительно центра, shift – квадрат
- построение окружности по углам, центр – окружность, по трем точкам
- построение кривой Безье
- построение ломаной
- геометрические задачи
- взаимоположение
- пересечение двух отрезков на прямой
- пересечение точки и отрезка на прямой
- пересечение точки и отрезка (пар-го одной из осей) на плоскости
- пересечение двух отрезков (пар-ных любой из осей) на плоскости
- пересечение двух отрезков, не пар-х осям, на плоскости
- пересечение двух прямоугольников, стороны кот-х пар-ы осям, на плоскости
- пересечение двух кругов на плоскости
- пересечение двух объектов неправильной формы
- многоугольник задан координатами вершин в порядке обхода по часовой стрелке. Определить, выпуклый ли он.
- выпуклый многоугольник задан координатами вершин в порядке обхода по ч.с. определить, лежит ли заданная точка внутри многоугольника
- найти центр тяжести пластины многоугольной формы
- разные задачи
- резиновая нить
- резиновая сетка
- рой
- игра Жизнь
- фонтан (анимация)
- брызги (анимация)
- круги на воде
- дождь
- 15. ПОТОКИ
- 16. DirectX, OpenGL
игры
1. управление с клавиатуры
2. управление с мыши
3. простое перемещение объекта
4. ускорение
5. “захват флага”
6. “борьба роботов”
Функциональное программирование (Питон)
генераторы и последовательности (Питон)
Темы:
- логические задачи (весь поток курса, продумать, что еще давать: топологию, интересные факты «материал для чтения». см Гарнер: мат. досуг)
- консоль
- переменные, простые типы, ввод, вывод
- циклы
- отладка
- одномерные массивы1 (простые задачи)
- создание типа, процедуры, функции
- условия, множественный выбор
- обработка ошибок
- другие типы: перечислимый тип, множества, записи, списки
- текстовые и типизированные файлы
- двумерные массивы1 (простые задачи)
- форма
- ввод, вывод. memo1, showmessage, canvas.textOut
- графика1 (создание примитивов, анимация) понимание растра, цвета
- графика2 (геометрические задачи: пересечение объектов, … ???)
- кривые: циклоида, трохоида и др. декартновы и полярные координаты
- графика3 (исп. массивов)
- сложные задачи (массивы2, массивы записей)
- GUI: основные элементы
- объект, свойства и методы. Наследование, иерархия.
- текст (поле, мемо), списки, диалоги …. (расписать GUI)
- …
- события. Работа с мышью и клавиатурой.
- создание простых приложений и игр
- текстовый редактор
- игра Сапер (создание в runtime)
- графический редактор (с эффектами)
- игра Морской бой, диггер и др.
- игра Жизнь
- программа для каталогизации HDD, составление описаний (mp3, теги)
- … ????
- windows (копии экрана, сообщения, управление окнами, трей)
- создание компонентов
- сеть
- базы данных
- …
- деревья, алгоритмы, комбинаторика, арифметика, графы,