courses:programming:extra_tasks

Differences

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

Link to this comparison view

courses:programming:extra_tasks [2017/04/07 09:08]
pro100kot
courses:programming:extra_tasks [2022/12/10 09:08]
Line 1: Line 1:
-====== Дополнительные задачи по программированию ====== 
- 
-  * <color green>​3</​color>​ Написать программу,​ которая выводит строку "HELLO WORLD!"​ на консоль. 
-   * На вход подаются два целых числа 
-     * если они > 0 вывести их сумму 
-     * если они равны, вывести 0 
-     * если они < 0 вывести их произведение. 
-  *  <color green>​3</​color>​ Найти и вывести максимальное число из трех целых чисел (числа вводятся с консоли). 
-  *  <color green>​3</​color>​ Заполнить значениями,​ введенными с клавиатуры,​ одномерный массив целых чисел длиной 15 и вывести эти значения на консоль. 
-  *  <color green>​3</​color>​ Заполнить значениями,​ введенными с клавиатуры,​ одномерный массив целых чисел длиной 15 и вывести эти значения на консоль в обратном порядке. 
-  *  <color green>​3</​color>​ Найти и вывести максимальное число из 15 целых чисел (числа вводятся с консоли). 
-  *  <color green>​3</​color>​ Найти и вывести первое отрицательное число из 3 введенных целых чисел. 
-  *  <color green>​3</​color>​ Найти и вывести первое отрицательное число из 15 введенных целых чисел. 
-  *  <color green>​3</​color>​ Найти и вывести последнее отрицательное число из 15 введенных целых чисел. 
-  *  <color green>​3</​color>​ Найти и вывести среднее арифметическое 3 введенных целых чисел. 
-  *  <color green>​3</​color>​ Найти и вывести среднее арифметическое 15 введенных целых чисел. 
-  *  <color green>​3</​color>​ Найти и вывести индекс первого символа пробела из 3 введенных символов (пробел вводится обязательно). 
-  *  <color green>​3</​color>​ Найти и вывести индекс первого символа пробела из 15 введенных символов (пробел вводится обязательно). 
-  *  <color green>​3</​color>​ Посчитать и вывести ​ количество пробелов в 15 введенных символах. 
-  *  <color green>​3</​color>​ Посчитать и вывести количество пробелов и восклицательных знаков в 15 введенных символах 
-  *  <color green>​3</​color>​ Вывести индексы пробелов в 15 введенных символах,​ если пробелов в символах не было, вывести символ “-”. 
-  *  <color green>​3</​color>​ Используйте оператор switch. На вход программе подается один из трех символов:​ -, +, * и два целых числа. Выведите результат операции для первого и второго числа. (Например,​ на вход поступило '​-',​ 30, 10. Программа должна вывести 20.) 
-  * <color green>​3</​color>​ На вход программе подается сначала число n, а после - n целых чисел. Требуется определить,​ упорядоченны ли числа по неубыванию. Вывести "​Yes"​ или "​No"​. Числа для обработки сохранить в массив. 
-  * <color green>​3</​color>​ На вход программе подается строка,​ представляющая собой одно слово из латинских букв. Требуется определить,​ является ли слово палиндромом (одинаково читающееся в обоих направлениях (anna)). Вывести "​Yes"​ или "​No"​. 
-  *  <color green>​3</​color>​ Используйте оператор switch. На вход программе подается целое число меньше 10. Программа должна вывести слово "​корова"​ в правильном падеже. ​ 
-  * <color green>​3</​color>​ Заполнить двумерный массив нулями и вывести его на консоль. 
-      * размера 10x10 
-      * размера 5x10 
-      * размера 10x5 
- 
- 
-Задачи на массивы (в задачах следует полагать,​ что на вход программе сначала подается количество элементов N, а после - N чисел. Массив создавать динамически.) 
-  * <color green>​3</​color>​ Найти разницу между максимальным и минимальным числом в этом массиве. 
-  * <color green>​3</​color>​ Найти сумму элементов массива,​ расположенных до минимального элемента 
-  * <color green>​3</​color>​ Найти сумму элементов массива,​ расположенных после последнего элемента,​ равного нулю 
-  * <color green>​3</​color>​ Найти сумму модулей элементов массива,​ расположенных после максимального о модулю элемента 
-  * <color green>​3</​color>​ Найти сумму модулей элементов массива,​ расположенных после первого элемента,​ равного нулю 
-  * <color green>​3</​color>​ Найти произведение элементов массива,​ расположенных между первым и вторых нулевыми элементами 
-  * <color green>​3</​color>​ Найти сумму элементов массива,​ расположенных между первым и последним отрицательными элементами 
-  * <color green>​3</​color>​ Найти произведение элементов массива,​ расположенных между максимальным по модулю и минимальным по модулю элементами 
- 
-Строки:​ 
-  * Определить длину строки,​ введенной пользователем. 
-  * Найти разницу между числом строчных и прописных (заглавных) букв в строке. 
-  * Дана строка состоящая из букв и цифр (считается,​ что больше одной цифры подряд идти не может). Требуется посчитать сумму этих цифр. 
-  * Дана строка состоящая из букв и цифр Требуется сформировать и вывести новую строку,​ состоящую только из этих цифр, разделенных пробелами. 
-  * Поменять местами слова в строке,​ состоящей из двух слов. 
-  * Вводится строка,​ представляющая собой некоторое слово. Требуется определить,​ является ли это слово палиндромом - одинаково читающимся в обоих направлениях. (Saippuakivikauppias - слово палиндром) 
-  * Добавить в строку пробелы после знаков препинания,​ если они там отсутствуют. 
-  * Требуется в произвольной строке удалить последнее слово, т.е. все символы после последнего пробела в строке. 
-  * Найти слово, стоящее в тексте под определенным номером,​ и вывести его первую букву. 
-  * Подсчитать количество слов во введенной пользователем строке. Для упрощения задачи считать,​ что слова разделяются исключительно одним пробелом,​ а первый и последний символы строки не являются пробелами. 
-  * Во введенной строке удалить все символы между первым и вторым вопросительным знаком. Сами знаки в троке оставить 
-  * Дана строка. Определите процентное отношение строчных и прописных букв к общему числу символов в ней. 
-  * Написать функцию int mystrlen(char *); вычисляющую длину переданной ей строки 
- 
-**Линейный односвязный список** 
- 
-**Структуры:​ ** 
-Способ представления данных инкапсулирующий в себя данные различных типов. Кратко можно почитать [[https://​en.wikipedia.org/​wiki/​Struct_(C_programming_language)|тут]] либо в какой-нибудь книге в духе "​Руководство для начинающих (Шилдт)"​. Важно понимать,​ что данные-поля структуры в памяти представляются подряд,​ в порядке их объявления. 
- 
-**Идея:​** 
-Идеологически - линейный односвязный список это структура данных,​ представляющая собой список узлов, каждый их которого хранит какие-то данные и указатель на следующий элемент. Это некая альтернатива массиву,​ но куда более гибкая:​ порядок элементов в списке не связан с их расположением в памяти. Это порождает,​ например,​ то, что такие операции как поиск и удаление не связаны со сдвигами остальных элементов,​ однако все операции со списком являются исключительно последовательными - прямой доступ к элементам списка невозможен. Кратко можно почитать [[https://​en.wikipedia.org/​wiki/​Linked_list|тут]]. Либо в какой-нибудь книге по структурам данных. 
- 
-**Реализация** 
-Каждый узел линейного односвязного списка хранит в себе данные (которые подразумеваются под фразой "​хранится в списке"​) и указатель на следующий элемент списка. Таким образом,​ узел списка может иметь вид: 
-<code c node.h> 
-struct node 
-{ 
-  int data; //​полезные данные 
-  struct node *next; //​указатель на следующий элемент 
-}; 
-</​code>​ 
-Из этого следует то, что для всех операций со списком (в том числе и хранения его) достаточно знать только указатель на его первый элемент. 
- 
-**Функции:​ ** 
-вам предлагается реализовать список и следующий набор функций (не обязательно все) для работы со списком (в списке хранятся целые числа). Не забывайте,​ что качество превыше количества,​ поэтому если сложно,​ то реализовать сколько сможете. Функции приведены в порядке возрастания сложности. В этом же порядке и реализовывать : 
-  * Добавление элемента в конец списка (void addTail(struct node *root, int data);) 
-  * Посчитать длину списка (int length(struct node *root);) 
-  * Получить n-й элемент списка (int getN(struct node *root, int n);) 
-  * Добавление элемента после n-го элемента списка (элементы нумеровать с нуля) (int addN(struct node *root, int n, int data); функция должна возвращать номер вставленного элемента и отрицательное число в случае ошибки) 
-  * Добавление элемента в начало списка (void addHead(struct node *root, int data);) (сложнее,​ чем вам кажется) 
-  * Подумать как можно реализовать удаление n-го элемента списка. ​ (int remove(struct node *root, int n);) 
- 
-**Бинарное дерево поиска** 
- 
-Подробнее,​ например,​ [[https://​en.wikipedia.org/​wiki/​Binary_search_tree|тут]] 
- 
-<code c treeNode.h>​ 
-struct node 
-{ 
-  int data; //​полезные данные 
-  struct node *left; //​указатель на левого потомка 
-  struct node *right; //​указатель на правого потомка 
-}; 
-</​code>​ 
- 
- 
- 
-**Функции:​ ** 
- 
-Реализуйте следующие функции:​ 
-  * Вставка элемента в дерево 
-  * Поиск элемента в дереве 
-  * Определение высоты дерева 
-  * Вывод элементов дерева в порядке их возрастания (ЛКП обход дерева) 
-  * Вывод элементов дерева с отображением структуры. Например:​ ((5) 10 (15)) 20 ((25) 30 (35)) 
-  * Удаление всех элементов дерева 
-  * ? 
- 
-Для удобства,​ рекомендуется использовать отдельную функцию для создания узла: 
-<code c createNode.h>​ 
-struct node* createNode(int n, struct node *left, struct node *right) 
-{ 
- struct node *cur = malloc(sizeof(struct node)); 
- cur->​left = left; 
- cur->​right = right; 
- cur->​data = n; 
- return cur; 
-} 
-</​code>​ 
  
courses/programming/extra_tasks.txt · Last modified: 2022/12/10 09:08 (external edit)