Задачи по программированию

Друзья, всем добрый день. Я вижу, что эта страница пользуется популярностью. Мне приятно это видеть.
Однако отмечу, что эти задачи по программированию я писал для себя (я работаю репетитором), чтобы решать их вместе с учениками. Решать их самостоятельно может быть не очень удобно.
Я приглашаю вас в группу ВК «Бесплатные уроки по программированию (Python)» http://vk.com/club73284245: задавайте вопросы, я постараюсь на все ответить.
Так же обращу внимание на новый учебник «Программирование — это интересно!» http://progras.ru/uchebnik-programmirovaniya-programmirovanie-eto-interesno/

Жду ваших пожеланий и вопросов.

Задания, начиная с п. 8 (одномерные массивы) выполнять в процедурах и функциях

  1. ПЕРЕМЕННЫЕ
    1. вывести значение переменных на экран (различные способы)
    2. получить значения переменных (ввод с клавиатуры, различные способы)

 

  1. АРИФМЕТИЧЕСКИЕ ФУНКЦИИ, ПРЕОБРАЗОВАНИЕ ТИПА, ОКРУГЛЕНИЕ
    1. разделить два числа
    2. разделить два числа и сохранить результат в целочисленной переменной
    3. найти остаток от деления первого числа на второе
    4. найти последнюю цифру числа
    5. посчитать сумму цифр в двузначном числе
    6. посчитать сумму цифр в четырехзначном числе
    7. округлить число до целого
    8. округлить число до двух знаков после запятой
    9. округление до ближайшего четного
    10. вывести на экран модуль числа

 

  1. ВЕТВЛЕНИЕ (if)
    1. найти большее из 2 чисел
    2. найти большее из 3 чисел
    3. найти большее из 10 чисел
    4. получить число, определить, четное ли оно
    5. получить число и определить, попадает ли оно в диапазон (10,20)
    6. получить число и определить, попадает ли оно в диапазон (10,20) или в диапазон (30,40)
    7. Даны координаты точки. Определить, попадает ли точка в окружность (0,0,10)
    8. Даны координаты точки, определить, попадает ли точка в квадрат (0,0 — 4,0 — 4,4 — 0,4)

 

  1. ЦИКЛ for
    1. вывести на экран числа от 0 до 9
    2. вывести на экран числа от 0 до 10
    3. вывести на экран числа 1,3,5,7,…21
    4. вывести на экран числа 2,4,6,8,…22
    5. вывести на экран числа 10, 9, 8, … 1
    6. вывести на экран числа 100, 90, 80, … 10
    7. найти сумму чисел от 1 до 10
    8. найти произведение чисел от 1 до 5
    9. найти сумму модулей от -5 до 5
    10. вывести буквы от ‘A’ до  ‘Z’ (использование for для работы с перечисляемыми нечисловыми типами)

 

  1. ЦИКЛ while
    1. вывести на экран числа 2,4,8,16,32,…,1024 (*2)
    2. вывести на экран числа 1,3,6,10,15,21,28,…210
    3. выводит на экран числа 1, 2, 3 …, пока сумма не достигнет 100

 

  1. СЛУЧАЙНЫЕ ЧИСЛА (random)
    1. получить и вывести на экран случайное число
    2. получить целое случайное число от 1 до 10
    3. получить случайное число от -10 до +10
    4. получить чётное случайное число от 0 до 100
    5. получить нечётное случайное число от 1 до 99

 

  1. for + random
    1. вывести случайное количество случайных чисел
    2. вывести на экран 10 случайных чисел
    3. вывести на экран 10 случайных чисел, значение которых лежит в отрезке [0,10]
    4. вывести на экран 10 случайных чисел, значение которых лежит в отрезке [0,9]
    5. вывести на экран 10 случайных чисел в [10,20]
    6. вывести на экран 10 случайных чисел в [97,122]
    7. найти сумму чисел 10 случайных чисел в [0,10]

 

  1. while + random
    1. выводить на экран случайные числа [0,10] до тех пор, пока не будет получено 5
    2. выводить на экран случайные числа [0,10] до тех пор, пока их сумма не превысит 50
    3. выводить на экран случайные числа [0,10] до тех пор, пока их сумма не превысит 50 или их количество не превысит 10
    4. выводить на экран случайные числа [0,10] до тех пор, пока количество нулей не превысит 3 или количество всех — 30
    5. выводить случайные числа, пока сумма четных не окажется равной сумме нечетных или количество не превысит 1000

 

  1. Обработка исключений
    1. получить два числа, разделить одно на другое. Перехватить и обработать ошибку “деление на ноль”

 

  1. ОДНОМЕРНЫЕ МАССИВЫ (выполнять в функциях / методах класса)
    1. создать массив из 10 элементов
    2. создать массив из 11 элементов
    3. заполнить массив порядковыми номерами в прямом порядке
    4. заполнить массив порядковыми номерами в обратном порядке
    5. заполнить массив случайными числами в [0,10]
    6. заполнить массив случайными числами в [0,9]
    7. заполнить массив случайными числами в [-10,10]
    8. заполнить массив случайными числами в [-5,5]
    9. case … of

заполнить массив случайными числами с различной вероятностью:
50% — 0
25% — 1
25% — случайное число [0,10]

 

    1. на массиве, заполненном случайными числами в [0,10] найти
      1. сумму всех элементов
      2. среднее арифметическое (сумма/количество)
      3. сумму четных элементов
      4. количество четных элементов
      5. количество элементов = 0
      6. количество элементов = первому
      7. количество элементов = среднему арифметическому всех элементов
      8. на массиве, заполненном случайными дробными числами найти количество элементов приблизительно равных среднему (+-0.4)
      9. сумму элементов, стоящих на четных местах
      10. сумму четных элементов, стоящих на четных местах
      11. позиции(координаты, номера) всех элементов = 0
      12. позиции(координаты, номера) всех элементов = 3
      13. позиции всех четных, если их сумма больше, чем сумма позиций нечетных, иначе — позиции всех нечетных
      14. значение максимального элемента
      15. позицию максимального элемента
      16. позиции всех элементов = максимальному
      17. позицию первого максимального (for, while)
      18. позицию последнего максимального (for, while)
      19. сумму всех элементов, стоящих между первым минимальным и последним максимальным
      20. позицию первого 0 (for, while)
      21. позицию последнего 0 (for, while)

 

    1. даны два массива (10 элементов)
      1. получить третий массив, содержащий поэлементную сумму
      2. получить третий массив, содержащий повторение элементов 1-го во втором
      3. получить третий массив, содержащий элементы первого, отсутствующие во втором
      4. получить третий, содержащий уникальные элементы первого и второго массива
      5. получить третий, содержащий общие элементы (присутствующие в обоих массивах)
    2. сдвиг  влево
    3. сдвиг  вправо
    4. циклический сдвиг влево
    5. циклический сдвиг вправо
    6. переворот
    7. обмен половинок местами
    8. перемешивание в случайном порядке (качественно — ни одного элемента на прежнем месте)
    9. перемешивание в случайном порядке (быстро — нарушение общего порядка)
    10. поменять стоящие на четных местах со стоящими на нечетных местах
    11. заменить нули средним значением соседних элементов, крайние не обрабатывать
    12. заменить нули средним значением соседних элементов, крайние обрабатывать так, как-будто массив замкнут в кольцо
    13. найти количество чередований знака (перехода с — на +) (0 на чередование не влияет)
    14. в массиве из 0 и 1 найти самую длинную цепочку 0
    15. в массиве найти самую длинную цепочку, состоящую из одинаковых элементов
    16. найти три самых больших элемента (возможны повторы)
    17. найти три самых больших неодинаковых элемента
    18. задача Иосифа: по кругу располагаются n человек; ведущий считает по кругу и «казнит» каждого m-го, после чего счет возобновляется.
      найти номер оставшегося в живых при заданных n,m
      найти такое m, при данном n, чтобы в живых остался первый
    19. переместить все положительные в начало, отрицательные — в конец
    20. поменять максимальный и первый элемент
    21. сортировать массив (разными методами: выбором, пузырьком, быстрой сортировкой…)

 

  1. ДВУМЕРНЫЕ МАССИВЫ
    1. заполнение
      1. заполнить номерами строк / столбцов
      2. заполнить порядковыми номерами по строкам
      3. заполнить порядковыми номерами по столбцам
      4. заполнить номерами диагоналей от главной / побочной
      5. заполнить в шахматном порядке 1 и 0
      6. заполнить таблицей умножения (1-10)
      7. заполнить таблицей умножения для восьмеричной системы (1-10)
      8. заполнить спиралью внутрь
      9. заполнить спиралью наружу
      10. заполнить по сегментам: 1, 2, 3, 4. Диагонали = 0
      11. заполнить кольцами из центра (+1)
      12. заполнить кольцами из случайного места (rx,cx). Допустить, что rx,cx находятся за пределами массива (заполнить и в этом случае)
      13. заполнить случайными уникальными значениями
      14. сформировать двумерный массив из одномерного (два способа)
      15. сапер: в массиве 10*9, заполненном 0-ми разместить 10 бомб (цифра 9) случайным образом

 

    1. анализ
      1. найти сумму, максимальный, минимальный, среднее ар-е всех элементов
      2. найти сумму, максимальный, минимальный, среднее для каждого столбца
      3. найти сумму, максимальный, минимальный, среднее для каждой строки
      4. найти сумму элементов главной диагонали, побочной диагонали
      5. найти максимальный среди четных, отрицательных (с проверкой на существование)
      6. найти координаты всех максимальных (сформировать массив записей, двумерный массив, массив строк или список)
      7. найти три элемента с макс. значением (могут быть одинаковые)
      8. найти три неодинаковых максимальных
      9. получить координаты ферзя и вывести все клетки, находящиеся под боем.
      10. получить координаты белого ферзя и черного короля. Определить, находится ли король под ударом.
      11. получить координаты коня. Определить все клетки, находящиеся под боем
      12. найти максимальный из уникальных (т.е. максимальных из тех, значения которых не повторяются в массиве)
      13. найти максимальный из тех, которые встречаются больше одного раза
      14. найти максимальный из тех, которые встречаются только два раз
      15. найти в массиве самый большой участок, состоящий из одинаковых элементов, соседствующих по горизонтали или вертикали (рекурсия)
      16. частотный словарь: найти количество повторений каждого элементов (получить двум. массив,  или массив строк)
      17. найти числа, которые встречаются в каждой строке массива
      18. медиана: найти число (может отсутствовать в массиве),  больше которого столько же элементов, сколь и меньше.
      19. найти строки, не содержащие нулей
      20. найти элементы, если такие есть, которые стоят на пересечении строк и столбцов, сумма элементов которых одинакова. Вывести номер строки и столбца
      21. касса: в первой строке – достоинства купюр, во второй – их количество. Набрать указанную сумму минимальным количеством купюр
      22. латинский квадрат: проверить, является ли массив N*N лат.-м кв.-м (строки и столбцы содержат все цифры от 0 до N)
      23. магический квадрат: проверить, является ли массив N*N маг.-м. кв.-м (неповт.-ся Числа от 1 до N сумма по строкам, столбца, двум диагоналям равны)
      24. сапер: в массиве 10*9, заполненном 0-ми размещено 10 бомб (цифра 9) случайным образом. Заменить 0 на количество бомб в соседних ячейках
      25. найти все локальные минимумы (если есть) – элементы, меньшие всех соседей.
      26. на сеть уронили тяжелый предмет, который продавил ее. В массиве задана высота каждой ячейки. “уронить” тяжелый предмет в указанную ячейку и рассчитать изменения высот в соседних ячейках
    1. перестановки
      1. в указанный элемент поместить сумму элементов его строки и его столбца
      2. обменять две строки / столбца местами
      3. в квадратной матрице обменять столбец со строкой
      4. отразить через средний столбец / строку
      5. повернуть относительно центрального элемента (по час. стрелке)
      6. транспонировать (отразить через диагональ)
      7. циклический сдвиг вправо, влево, вниз, вверх (столбцы и строки)
      8. циклический сдвиг кольцами
    2. преобразование
      1. разделить поэлементно на 2
      2. разделить поэлементно на среднее
      3. заменить 0 на среднее арифметическое соседних
      4. сближение: заменить каждый на среднее между ним и средним
      5. приближение к х: заменить каждый на среднее между ним и х
      6. влияние: заменить каждый на среднее между ним и соседним (начиная указанного)
      7. сглаживание каждый элемент заменить на (s+16x)/24, где s – сумма соседних, x – текущий элемент
      8. заменить каждый элемент на среднее в подсегменте массива от левого верхнего до текущего
    3. поиск пути, волновой алгоритм, обход
      1. в массиве — стоимость перехода в клетку. Найти самый дешевый выход из массива (волновой)
      2. лабиринт задан массивом: 0 – проход, 1 – нет прохода. Найти кратчайший путь из указанной точки до выхода из лабиринта (любая сторона), если такой есть.
      3. дан массив высот. Найти все точки, не видные наблюдателю находящемуся в указанной точке. (волновой)
      4. путь шарика: начиная центра пройти по массиву, выбирая самый меньший из соседних элементов. Указать сторону, куда выкатиться шарик или точку, в которой он застрянет.
      5. дан массив высот. проложить путь (вывести координаты ячеек) с минимальными подъемами-спусками. Переходить можно только во вертикали или горизонтали (не по диагонали)
      6. сапер: в массиве 10*9 содержаться цифры 9 (бомба) и 0-8 (количество бомб в соседних ячейках). Выбрана случайная ячейка. Вывести количество бомб в ней. Если 0 – вывести координаты всех соседних ячеек. Если среди соседних есть 0 – открыть их соседние (см. игру winmine)
      7. массив заполнен цифрами от 0 до 5. «Удалить» все элементы, равные элементу [rx.cx] и примыкающие к нему по горизонтали или вертикали. На место удаленных сдвинуть стоящие выше. На место сдвинутых — 0 (игра не помню как называется).
      8. массив заполнен 0 и 1 (прозрачный и непрозрачный кубик). Найти все столбцы, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева.
      9. массив заполнен 0 и 1 (прозрачный и непрозрачный кубик). Удалить (сделать прозрачными) все кубики видимые с одной из четырех сторон (анализировать видимость до удаления кубика).

По этой теме можно посмотреть примеры кода.

    1. заполнение (усложненное)
      1. заполнить случайными элементами так, чтобы строках и столбцах не было повторяющихся  элементов
      2. заполнить случайными неповторяющимися так, чтобы сумма по столбцам была одинаковой
      3. заполнить случайными неповторяющимися так, чтобы сумма по столбцам и строкам была одинаковой
      4. сгенерировать латинский квадрат
      5. сгенерировать магический квадрат
      6. создать динамический массив с неравномерным (случайным) количеством элементов (дерево. Другой пример : многоуровневый список). Заполнить соответственно уровню и номеру элемента
  1. СТРОКИ
    1. посчитать количество пробелов в строке
    2. посчитать количество слов в строке, слова разделены одним или несколькими пробелами
    3. вывести список букв и их количество в тексте
    4. проверить, является ли текст анаграммой
    5. все неодинарные пробелы заменить на одинарные
    6. сделать заглавными все буквы в начале предложения
    7. сумма прописью — по заданному числу сформировать строковое представление
    8. определить пол по ФИО
    9. дата прописью
    10. дописать “день, дня, дней” по количеству (1 день, 2 дня, 6 дней)
    11. по спискам слов формировать словосочетания*
    12. получить предложение, вывести подлежащее и сказуемое
    13. сформировать строку, состоящую из случайных символов и знаков препинания.
      Строка должна быть похожа на осмысленный текст по длине слов, частоте пробела, расстановке знаков препинания
    14. сформировать строку, состоящую из случайного текста, составленного из подготовленного набора существительных, глаголов и прилагательных
    15. получить строку вида: “var1=50+3”, вывести значение переменной.
      Условия: длина имени переменной неизвестна, количество пробелов может быть любым, в правой части два целых числа, мат.операция сложение, вычитание, умножение или деление.
    16. получить текст вида “a := 4 * 2; b:= 3+8; c := a+10; b := a+c ”, где в правой части могут встречаться имена переменных. Вывести значения всех переменных (в алфавитном порядке). Использовать метод конечного автомата.

 

  1. ТЕКСТОВЫЕ ФАЙЛЫ (и строки)
    1. создать текстовый файл и вывести туда любой текст
    2. создать текстовый файл, если такой файл существует — удалить и создать.
    3. создать текстовый файл, если такой уже существует — попробовать создать с именем, дописав 1. Если и такой файл — дописав 2 и т.д.
    4. создать текстовый файл с именем по дате. Если такой файл есть, добавить в имя файла _. Если и такой есть, то __ и т.д.
    5. получить имя файла, открыть и прочитать (вывести на экран) файл
    6. получить имя файла, открыть и прочитать файл. Если такого файла нет — сообщить.
    7. получить имя файла, дописать в конец дату и время (любой текст). Если такого файла нет — создать.
    8. получить имя файла, посчитать количество слов в файле.
    9. в html документе найти в вывести все ссылки
    10. в html документе найти ссылки и вывести список сайтов и количество ссылок на них
    11. в html документе есть изображения — вывести адреса изображений
    12. в html документе есть изображения — сформировать новый html документ, содержащий список адресов изображений и уменьшенное изображение
  2. ЗАПИСИ (record)
    1. создать тип для хранения ФИО, возраста (целое), роста, веса (дробное), пола
    2. создать массив элементов типа из предыдущей задачи
      1. даны три файла: с именами, фамилиями, отчествами. Заполнить массив случайно сформированными данными. Числовые данные генерировать правдоподобно (вес должен соответствовать полу и возрасту)
      2. найти средний вес среди мужчин
      3. найти средний рост для девушек в возрасте от 15 до 18
      4. найти среднюю длину фамилий для всех, выше среднего
    3. создать структуру для хранения двоичного дерева (значение узла, адреса(названия, ссылки) двух дочерних узлов. Заполнить дерево по правилу: от каждого элемента образуется два новых — один действием “+2”, другой действием “*2”. Дерево должно содержать 5 уровней.
    4. К предыдущей задаче: дерево должно быть заполнено до уровня, в котором появится “150”
  3. ДЕРЕВЬЯ, ОЧЕРЕДИ, СТЕКИ (ДИНАМИЧЕСКИЕ СТРУКТУРЫ, УКАЗАТЕЛИ)
    1. Однонаправленный список
    2. Двунаправленный список
    3. Стек, очередь, дерево
  4. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ (ООП)
    1. Создать объект “машина” (для будущей игры), у которой есть свойства: координаты, скорость, ускорение, направление, запас энергии, масса (сила трения). (x,y,v,a,dir,en,m) и методы: поворот вправо, поворот влево, торможение, ускорение, резкий поворот влево/вправо, получение энергии. Методы должны определять изменение свойств.

 

  1. ГРАФИКА
    1. графические примитивы
    2. построить прямоугольник, эллипс, треугольник по заданным параметрам
    3. построить правильный восьмиугольник, n-угольник по заданным параметрам
    4. для n построить все звезды с n лучами
    5. нарисовать лист дерева или воздушный шарик или сердце или цифру 3, используя кривую Безье
    6. нарисовать оси ox,oy в центре, подписав значения, нарисовать деления
    7. построение графиков и диаграмм
    8. фигуры Лиссажу
    9. декартовы координаты —  оси, расчет масштаба и положения осей (исследование функций)
    10. построить график sin(x), sin (2*x), 2*sin(x) (белый фон, красный цвет графика, линия жирная, синяя сетка)
    11. анимированное построение семейства n*sin(k*x), где изменение k, n управляется с клавиатуры
  2. преобразование  на плоскости (поворот, отражение)
  3. полярные координаты
  4. трохоида
  5. циклоида и др.
  6. кардиоида
  7. улитка паскаля
  8. спираль логарифмическая
  9. диаграммы
  10. столбчатая
  11. столбчатая с нормированием
  12. круговая
  13. построение объемных фигур и графиков
  14. преобразования в пространстве
  15. нарисовать куб
  16. нарисовать вращающийся куб
  17. построить волнообразную поверхность
  18. построение узоров

 

  1. вывод изображений (спрайты)
  2. копирование, наложение, режимы, удаление, сохранение

 

  1. анимация и физ. Моделирование
  2. способы вывода на экран. Промежуточный буфер, перерисовка

 

  1. прыгающий мячик: резиновый мячик падает с высоты
  2. на плоскости случайные точки. Переместить их ближе к центру тяжести. Ц.т. должен остаться неизменным.
  3. две точки случайной массы начинают сближение согласно разнице в массе и объединяются в одну
  4. на плоскости несколько точек случайной массы начинают сближение согласно гравитационной силе

 

  1. графический редактор
  2. резиновая линия
  3. резиновый прямоугольник
  4. построение с alt– относительно центра, shift – квадрат
  5. построение окружности по углам, центр – окружность, по трем точкам
  6. построение кривой Безье
  7. построение ломаной
  8. геометрические задачи
  9. взаимоположение
  10. пересечение двух отрезков на прямой
  11. пересечение точки и отрезка на прямой
  12. пересечение точки и отрезка (пар-го одной из осей) на плоскости
  13. пересечение двух отрезков (пар-ных любой из осей) на плоскости
  14. пересечение двух отрезков, не пар-х осям, на плоскости
  15. пересечение двух прямоугольников, стороны кот-х пар-ы осям, на плоскости
  16. пересечение двух кругов на плоскости
  17. пересечение двух объектов неправильной формы
  18. многоугольник задан координатами вершин в порядке обхода по часовой стрелке. Определить, выпуклый ли он.
  19. выпуклый многоугольник задан координатами вершин в порядке обхода по ч.с. определить, лежит ли заданная точка внутри многоугольника
  20. найти центр тяжести пластины многоугольной формы
  21. разные задачи
  22. резиновая нить
  23. резиновая сетка
  24. рой
  25. игра Жизнь
  26. фонтан (анимация)
  27. брызги (анимация)
  28. круги на воде
  29. дождь

 

  1. 15. ПОТОКИ
  2. 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 (копии экрана, сообщения, управление окнами, трей)
  • создание компонентов
  • сеть
  • базы данных
  • деревья, алгоритмы, комбинаторика, арифметика, графы,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *