5 подписчиков

На Землю упал огромный астероида! Остались ли цифры после этого?

Здравствуйте, дорогие друзья! От души приветствую вас в это тяжелое постапокалиптическое время. Благодарю за интерес к моему каналу - далеко не всякий после падения астероида во тьме астероидной зимы хочет учиться программировать и развиватся. Рад, что вы нашли, чем зарядить поврежденную батарею вашего ноутбука, и в свободное от расчистки завалов время решили создать свою программу на языке программирования C#. К сожалению, облачные сервера Microsoft уничтожены электромагнитной волной и всеохватывающей радиацией, поэтому будем работать на Visual Studio, если вы её установили до катастрофы...

Эх, 2012...
Эх, 2012...

Шучу конечно. Не было (по крайней мере на момент написания данной статьи) никакого падения астероида, никакой катастрофы. А был... 2012 год (тоже ожидалось что-то страшное согласно предсказаний майя). Я тогда проходил курсы по php, и преподаватель сказал такую вещь: "Вот представьте. Упал на Землю огромный метеорит... и не знаю каким образом сжег у php все функции библиотечки, инклюды и классы. И, чтобы наши программы работали, мы напишем функции заново, используя только простые операторы." И мы стали писать функции, используя только for, foreach, if...else и тому подобное.

И сейчас возникла мысль использовать данный принцип на C#.

Что будем писать?

Разбирал я как-то вопрос, как проверить на C#, есть ли в переменной типа string цифры, и наткнулся на функцию IsDigit(), которая работает следующим образом (судя по мануалам C#):

char ch = '8';
Console.WriteLine(Char.IsDigit(ch)); // Output: "True"
ch = 'р';
Console.WriteLine(Char.IsDigit(ch)); // Output: "False"


То есть, если в переменной типа char у нас с вами цифра, то вернется
true, а если не цифра - false. Штука хорошая, ничего лишнего, но работает для символьных переменных типа char. Для типа string есть функция TryParse() но будем считать, что данная функция погибла в результате повреждений серверов Microsoft при падении астероида. Как раз то, что надо для нашего примера! Создадим в visual studio консольное приложение и наваяем свою функцию:

 Здравствуйте, дорогие друзья! От души приветствую вас в это тяжелое постапокалиптическое время.-2

Как работает данная функция. Мы передаем в нее переменную типа string, в самой функции определяем логическую переменную result, и сразу ей присваиваем значение false. Потом каждый из символов переданной строки преобразуем в char и проверяем: если хоть один из символов - цифра, result=true. В конце result просто возвращаем.

Пишем код проверки данной функции обычным выводом результата в консоль:


 Здравствуйте, дорогие друзья! От души приветствую вас в это тяжелое постапокалиптическое время.-3

запустим нашу программу:

 Здравствуйте, дорогие друзья! От души приветствую вас в это тяжелое постапокалиптическое время.-4

Отлично, программа для нашей переменной, содержащей цифры, выдала True. Проверим для случая, когда в проверяем переменной цифр нет:

 Здравствуйте, дорогие друзья! От души приветствую вас в это тяжелое постапокалиптическое время.-5

Если цифр нет, программа вернула false. Отлично работает. Вот так-то, уважаемые программисты. На этом всё!

Как - всё! У нас же АПОКАЛИПСИС!


Прочитав последнее предложение предыдущего абзаца, читатели возмущенно воскликнут: "Да Вы что?!!! Как так всё? Автор, ты забыл, у нас же АПОКАЛИПСИС! Ты же сам сказал, что погибли функции, но при этом используешь
IsDigit()! Если уж пользоваться только простыми операторами, то только ими! " Что же, согласен, давайте использовать только операторы. Можно ли нашу функцию переписать таким образом? Можно, если вспомнить, чем является тип char. Возьмем описание типа char для языка Си, по синтаксису которого и сделан C#.

В языке Си существует тип данных - char. Тип char является числом (от -127 до 128; код символа) которое соответствует определённому символу в кодовой таблице. Так, например букве (символу) Y соответствует код 89 (десятичное) или 0x59 в шестнадцатеричной нотации. К символам относятся также все цифры, знаки и управляющие клавиши, такие как Enter, Esc и так далее.


То есть char, хоть и отображает символы, является числом, и каждой букве, каждому символу (в том числе и цифрам) char соответствует свой цифровой код. Для решения нашей задачи нам необходимо выяснить, какие коды у цифр от 0 до 9. Можем ли мы это выяснить? Да легко:

 Здравствуйте, дорогие друзья! От души приветствую вас в это тяжелое постапокалиптическое время.-6

Мы создали новую переменную chars типа string, заполнили её цифрами от 0 до 9, а потом вывели числовой код каждого символа методом (int)c. За потерю данных при крушении серверов Microsoft мы можем не беспокоиться, цифровой код как и приравнивание к числу (int) не пропадет - если такое случится, это уже гибель операторов C# и базовых принципов создания символов вообще на компьютерах.

В результате мы видим, что цифры имеют числовой код от 48 до 57. Перепишем нашу функцию IssetNumber так, что каждый символ c в цикле foreach будет проверяться на принадлежность диапазону от 48 до 57:

 Здравствуйте, дорогие друзья! От души приветствую вас в это тяжелое постапокалиптическое время.-7

Проверяем на наличие цифр существующее слово word:

 Здравствуйте, дорогие друзья! От души приветствую вас в это тяжелое постапокалиптическое время.-8

Программа вывела false - цифры в слове "Владивосток" отсутствуют. Добавим циферок в значение проверяемой переменной и снова её проверим:

 Здравствуйте, дорогие друзья! От души приветствую вас в это тяжелое постапокалиптическое время.-9

Готово. В данной строке цифры есть, и программа их обнаружила.

Вот таким образом мы можем создать свою функцию, которая будет проверять, есть ли числа в нашей строке или нет.
На этом всё... или не всё... будет зависеть от ваших лайков и комментариев. Если захотите продолжить восстановление работы C# после апокалипсиса и написать еще какие-нибудь функции "своим способом", используя лишь простейшие операторы, пишите. Пишите также примеры своих наработок в этой сфере. А за сим пока с вами прощаюсь, и жду обратной связи. Программируйте, подписывайтесь, пишите

#csharp #апокалипсис #функции #цифры