courses:programming:extra_tasks

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
courses:programming:extra_tasks [2017/04/07 09:47]
pro100kot
courses:programming:extra_tasks [2021/09/27 11:07]
pro100kot
Line 1: Line 1:
 ====== Дополнительные задачи по программированию ====== ====== Дополнительные задачи по программированию ======
 +
 +===== Легенда =====
 +
 +  * <color green>​3</​color>​ -- простые задачи
 +  * <color blue>​4</​color>​ -- задачи средней сложности
 +  * <color red>​5</​color>​ -- более сложные задачи
 + 
 +===== Задачи =====
  
   * <color green>​3</​color>​ Написать программу,​ которая выводит строку "HELLO WORLD!"​ на консоль.   * <color green>​3</​color>​ Написать программу,​ которая выводит строку "HELLO WORLD!"​ на консоль.
    * На вход подаются два целых числа    * На вход подаются два целых числа
-     * если они > 0 вывести их сумму+     * если ​первое больше второго, ​вывести их сумму
      * если они равны, вывести 0      * если они равны, вывести 0
-     * если они < 0 вывести их произведение.+     * если ​второе больше первого, ​вывести их произведение.
   *  <color green>​3</​color>​ Найти и вывести максимальное число из трех целых чисел (числа вводятся с консоли).   *  <color green>​3</​color>​ Найти и вывести максимальное число из трех целых чисел (числа вводятся с консоли).
   *  <color green>​3</​color>​ Заполнить значениями,​ введенными с клавиатуры,​ одномерный массив целых чисел длиной 15 и вывести эти значения на консоль.   *  <color green>​3</​color>​ Заполнить значениями,​ введенными с клавиатуры,​ одномерный массив целых чисел длиной 15 и вывести эти значения на консоль.
Line 30: Line 38:
  
  
-Задачи на массивы (в задачах следует полагать,​ что на вход программе сначала подается количество элементов N, а после - N чисел. Массив создавать ​динамически.)+Задачи на массивы (в задачах следует полагать,​ что на вход программе сначала подается количество элементов N<=100, а после - N чисел. Массив создавать ​статически.)
   * <color green>​3</​color>​ Найти разницу между максимальным и минимальным числом в этом массиве.   * <color green>​3</​color>​ Найти разницу между максимальным и минимальным числом в этом массиве.
   * <color green>​3</​color>​ Найти сумму элементов массива,​ расположенных до минимального элемента   * <color green>​3</​color>​ Найти сумму элементов массива,​ расположенных до минимального элемента
Line 41: Line 49:
  
 Строки:​ Строки:​
-  * Определить длину строки,​ введенной пользователем. +  * <color green>​3</​color> ​Определить длину строки,​ введенной пользователем. 
-  * Найти разницу между числом строчных и прописных (заглавных) букв в строке. +  * <color blue>​4</​color> ​Найти разницу между числом строчных и прописных (заглавных) букв в строке. 
-  * Дана строка состоящая из букв и цифр (считается,​ что больше одной цифры подряд идти не может). Требуется посчитать сумму этих цифр. +  * <color blue>​4</​color> ​Дана строка состоящая из букв и цифр (считается,​ что больше одной цифры подряд идти не может). Требуется посчитать сумму этих цифр. 
-  * Дана строка состоящая из букв и цифр Требуется сформировать и вывести новую строку,​ состоящую только из этих цифр, разделенных пробелами. +  * <color blue>​4</​color> ​Дана строка состоящая из букв и цифр Требуется сформировать и вывести новую строку,​ состоящую только из этих цифр, разделенных пробелами. 
-  * Поменять местами слова в строке,​ состоящей из двух слов. +  * <color blue>​4</​color> ​Поменять местами слова в строке,​ состоящей из двух слов. 
-  * Вводится строка,​ представляющая собой ​некоторое слово. Требуется определить,​ является ли это слово ​палиндромом ​одинаково читающимся в обоих направлениях. ​(Saippuakivikauppias - слово палиндром) +  * <color blue>​4</​color>​ На вход программе подается строка,​ представляющая собой ​последовательность латинских букв. Требуется определить,​ является ли строка палиндромом ​(одинаково читающееся в обоих направлениях ​(A roza upala na lapu Azora))Вывести "​Yes"​ или "​No"​. 
-  * Добавить в строку пробелы после знаков препинания,​ если они там отсутствуют. +  * <color blue>​4</​color> ​Добавить в строку пробелы после знаков препинания,​ если они там отсутствуют. 
-  * Требуется в произвольной строке удалить последнее слово, т.е. все символы после последнего пробела в строке. +  * <color blue>​4</​color> ​Требуется в произвольной строке удалить последнее слово, т.е. все символы после последнего пробела в строке. 
-  * Найти слово, стоящее в тексте под определенным номером,​ и вывести его первую букву. +  * <color blue>​4</​color> ​Найти слово, стоящее в тексте под определенным номером,​ и вывести его первую букву. 
-  * Подсчитать количество слов во введенной пользователем строке. Для упрощения задачи считать,​ что слова разделяются исключительно одним пробелом,​ а первый и последний символы строки не являются пробелами. +  * <color blue>​4</​color> ​Подсчитать количество слов во введенной пользователем строке. Для упрощения задачи считать,​ что слова разделяются исключительно одним пробелом,​ а первый и последний символы строки не являются пробелами. 
-  * Во введенной строке удалить все символы между первым и вторым вопросительным знаком. Сами знаки в троке оставить +  * <color blue>​4</​color> ​Во введенной строке удалить все символы между первым и вторым вопросительным знаком. Сами знаки в троке оставить 
-  * Дана строка. Определите процентное отношение строчных и прописных букв к общему числу символов в ней. +  * <color blue>​4</​color> ​Дана строка. Определите процентное отношение строчных и прописных букв к общему числу символов в ней. 
-  * Написать функцию int mystrlen(char *); вычисляющую длину переданной ей строки+  * <color blue>​4</​color> ​Написать функцию int mystrlen(char *); вычисляющую длину переданной ей строки
  
-**Линейный односвязный список**+ 
 +  ​<color blue>​4</​color>​ На вход программе подается число n, х, а после - n целых чисел, являющиеся коэффициентами многочлена степени n. Коэффициенты заданы по убыванию степеней. Треуется вычислить и вывести на экран значение многочлена в точке х. 
 + 
 +**<color red>​5</​color>​ Встреча с Римлянами** 
 + 
 +Попав в 500 год до нашей эры, вы столкнулись с необходимостью перевести число, записанное арабскими цифрами в число, записанное [[https://​ru.wikipedia.org/​wiki/​%D0%A0%D0%B8%D0%BC%D1%81%D0%BA%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D1%8B|римскими цифрами]] 
 + 
 +Напишите программу,​ которая переводит число (<=3000) из арабской записи в римскую. 
 + 
 +Примеры
 + 
 +1994 -> MCMXCIV 
 + 
 +123 -> CXXIII 
 + 
 + 
 + 
 +**<color red>​5</​color>​ Часы** 
 + 
 +Представьте обычные цифровые часы, время на которых отображается на 7-ми сегментных индикаторах с учетом ведущего нуля. Например,​ 9:30 на таких часах отображается так: 
 +{{courses:​programming:​screenshot_from_2017-03-07_11-03-10.png?​150|}} 
 + 
 +Числа отображатся следующим образом:​ 
 + 
 +{{courses:​programming:​screenshot_from_2017-03-07_11-03-22.png?​400|}} 
 + 
 +Требуется написать программу,​ на вход которой подается целое число n, обозначающее количество зажженных сегментов в отображении некого времени. Програма должна по этому числу востановить время, которое отображается на часах. Время должно быть корректным (подразумевается 24 формат представления времени). Если это невозможно,​ программа должна вывести "​Impossible"​. Если может быть несколько вариантов корректного времени,​ вывести любой
 + 
 +Примеры:​ 
 + 
 + ​Вход:​ 23 
 + 
 + ​Выход:​ 09:30 
 + 
 + ​Вход:​ 28 
 + 
 + ​Выход:​ Impossible 
 + 
 + ​Вход:​ 2 
 + 
 + ​Выход:​ Impossible 
 + 
 +**<color red>​5</​color>​ Могила** 
 + 
 +Территория некоторого кладбища имеет ровную прямоугольную форму. На нем (не выходя за его границы) расположена прямоугольная церковь. Требуется определить, хватит ли на кладбище места для прямоугольной могилы?​ могила может ​касаться границы кладбища и/или церкви,​ но не должна перекрывать их. 
 + 
 +На вход программе подаются 10 чисел:​ 
 + 
 +сначала ​**x1**, **y1**, **x2**, **y2** - координаты левого нижнего и правого верхнего углов гладбища  
 + 
 +после **x1**, **y1**, **x2**, **y2** - координаты левого нижнего и правого верхнего углов церкви 
 + 
 +а потом **w** и **h** - ширина и высота могилы. Сторона длины **w** должна располагаться вдоль оси OX, а сторона длины **h** - вдоль оси OY 
 + 
 +Программа должна вывести "​Yes",​ если место имеется и "​No"​ в проиивном случае. 
 + 
 +Пример:​ 
 + 
 +{{courses:​programming:​screenshot_from_2017-03-07_11-37-39.png?​400|}} 
 + 
 +Вход: 
 + 
 +1 1 11 8 
 + 
 +2 3 8 6 
 + 
 +3 2 
 + 
 +Выход:​ 
 + 
 +Yes 
 + 
 +Вход: 
 + 
 +1 1 11 8 
 + 
 +2 3 8 6 
 + 
 +4 3 
 + 
 +Выход:​ 
 + 
 +No 
 + 
 +**<color red>​5</​color>​ Углы углы углы** 
 + 
 +Даны **n** попарно различных точек на плоскости с целыми координатами до 10^6 по абсолютной величине. Требуется найти среди этих точек две точки **A** и **B** такие, что угол **AOB** минимальный. **O** – центр координат. 
 + 
 +**<color red>​5</​color>​ Делим пространство** 
 + 
 +Дан набор прямых линий на плоскости (прямая может задаваться уравнением прямой или с помощью двух точек - на ваш выбор),​ которые могут пересекаться. Найти количество областей,​ на которые они разбивают плоскость. 
 + 
 +**<color red>​4</​color>​ Задачи на структуры** 
 +В задачах подразумевается,​ что хранения связных данных (данных об одном логическом объекте) будет осуществляться с помощью типа struct. 
 +  * На вход программе подается число n, а после - n пар <​Название журнала>​ <​цена>​. Следует полагать,​ что название не содержит пробельные символы. Требуется сохранить данные в массив и вывести информацию о журналах с ценой выше 100. 
 +  * На вход программе подается число n, а после - n пар <​Название журнала>​ <​цена>​. Следует полагать,​ что название не содержит пробельные символы. Требуется создать и заполнить еще один массив теми журналами,​ стоимость которых меньше 30 
 + 
 + 
 +===== Линейный односвязный список =====
  
 **Структуры:​ ** **Структуры:​ **
Line 83: Line 189:
   * Подумать как можно реализовать удаление n-го элемента списка. ​ (int remove(struct node *root, int n);)   * Подумать как можно реализовать удаление n-го элемента списка. ​ (int remove(struct node *root, int n);)
  
-**Бинарное дерево поиска**+===== Бинарное дерево поиска ​=====
  
 Подробнее,​ например,​ [[https://​en.wikipedia.org/​wiki/​Binary_search_tree|тут]] Подробнее,​ например,​ [[https://​en.wikipedia.org/​wiki/​Binary_search_tree|тут]]
Line 120: Line 226:
 } }
 </​code>​ </​code>​
 +
 +===== Пример на обзор txt файлов во вложенных папках =====
 +
 +
 +<code c dir-list.c>​
 +#include <​stdio.h>​
 +#include <​string.h>​
 +
 +#include <​sys/​types.h>​
 +#include <​dirent.h>​
 +
 +void printFile(const char *path, const int lvl);
 +
 +void dirTraveler(const char *startDir, const int lvl);
 +
 +int main()
 +{
 + dirTraveler("​.",​0);​
 + return 0;
 +}
 +
 +void dirTraveler(const char *startDir, const int lvl)
 +{
 +    char path[1000];
 +    strcpy(path,​ startDir);
 +
 +    DIR *dir=opendir(path);​
 +    if(dir)
 +    {
 + struct dirent *de = readdir(dir);​
 +        while(de)
 +        {
 + if(de->​d_type == DT_REG && strstr(de->​d_name,"​.txt"​))
 + {
 + int path_len = strlen(path);​
 +                strcat(path,​ "/"​);​
 +                strcat(path,​ de->​d_name);​
 + printFile(path,​ lvl);
 +                path[path_len] = '​\0';​
 + }
 +            if(de->​d_type == DT_DIR && 0!=strcmp("​.",​ de->​d_name) && 0!=strcmp("​..",​ de->​d_name))
 +            {
 +                int path_len = strlen(path);​
 +                strcat(path,​ "/"​);​
 +                strcat(path,​ de->​d_name);​
 +                dirTraveler(path,​ lvl+1);
 +                path[path_len] = '​\0';​
 +            }
 +           de = readdir(dir);​
 +        }
 +    }
 +    closedir(dir);​
 +}
 +
 +void printFile(const char *path, const int lvl)
 +{
 + int i;
 + char s[100];
 + for(i=0;​i<​lvl;​i++)
 + printf("​\t"​);​
 + printf("​%s[\n",​ path);
 +
 + FILE *f = fopen(path, "​r"​);​
 + if(f)
 + {
 + while(fgets(s,​sizeof(s)/​sizeof(char),​f))
 + {
 + for(i=0;​i<​lvl+1;​i++)
 + printf("​\t"​);​
 + printf("​%s",​s);​
 + }
 + fclose(f);​
 + }
 +
 + for(i=0;​i<​lvl;​i++)
 + printf("​\t"​);​
 + printf("​]\n"​);​
 +}
 +</​code>​
 +
  
courses/programming/extra_tasks.txt · Last modified: 2022/12/10 09:08 (external edit)