Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Вывод элементов
Console.WriteLine(" \n " + j + " " + iArray[j]); } } }
Для организации ввода необходимо объявить строковую переменную, которой присваивается очередное введенное с клавиатуры число. Следующий оператор iArray[j] = Convert.ToInt32(strValue); преобразует строковую переменную strValue в целое 32-разрядное число. Ввод и преобразование происходит в цикле, после завершения которого массив iArray содержит исходные данные. Каждый объект (переменная), каждый операнд при вычислении выражения, в том числе и само выражение характеризуется парой (значение, тип), задающей значение выражения и его тип. В процессе вычислений зачастую возникает необходимость преобразования типов - необходимость преобразовать пару (значение1, тип1) к паре (значение2, тип2).
Исходная пара называется источником преобразования, заключительная - целью преобразования. Некоторые преобразования типов выполняются автоматически. Такие преобразования называются неявными, и они часто встречаются при вычислении выражений. Все остальные преобразования называются явными и для них существуют разные способы таких преобразований - операция кастинга (приведение к типу), методы специального класса Convert, специальные методы ToString, Parse. Все скалярные типы (арифметический, логический, символьный) имеют статический метод Parse, аргументом которого является строка, а возвращаемым результатом - объект соответствующего типа. Метод явно выполняет преобразование текстового представления в тот тип данных, который был целью вызова статического метода. Для преобразований внутри арифметического типа можно использовать кастинг - приведение типа. Для преобразований строкового типа в скалярный тип можно применять метод Parse, а в обратную сторону - метод ToString. Однако, во всех ситуациях, когда требуется выполнить преобразование из одного базового встроенного типа в другой базовый тип, можно использовать методы универсального класса Convert, встроенного в пространство имен System. Методы класса Convert поддерживают общий способ выполнения преобразований между типами. Класс Convert содержит 15 статических методов вида (ToInt16(), ToInt32(), ToInt64(),..., ToDouble, ToDecimal,...,). Единственным исключением является тип object - метода ToObject нет по понятным причинам, поскольку для всех типов существует неявное преобразование к типу object. Каждый из этих 15 методов перегружен, и его аргумент может принадлежать к любому из упомянутых типов. С учетом перегрузки с помощью методов этого класса можно осуществить любое из возможных преобразований одного типа в другой. Пример 3. // Заполнение массива с помощью генератора случайных // чисел using System; namespace Example5 { class Example5_3 { static void Main() { int j, num1, num2; string str; double db1, db2; Random rnd = new Random(); int[ ] iArray1 = new int[10]; int[ ] iArray2 = new int[10]; double[ ] dArray1 = new double[10]; double[ ] dArray2 = new double[10]; for (j = 0; j < 10; j++) { iArray1[j] = rnd.Next(1, 101); iArray2[j] = 50 - rnd.Next(1, 101); } for (j = 0; j < 10; j++) { num1 = rnd.Next(1, 101); db1 = Convert.ToDouble(num1); dArray1[j] = db1 + Convert.ToDouble(rnd.Next(1, 101)) / 100; num2 = 50 - rnd.Next(1, 101); db2 = Convert.ToDouble(num2); dArray2[j] = db2 - Convert.ToDouble(rnd.Next(1, 101)) / 100; } Console.WriteLine(" \n ---------------------------------------- -------------------------- -------"); Console.WriteLine(" \n Массивы типа int Массивы типа double"); Console.WriteLine(" \n ---------------------------------------- ----------------------------------"); for (j = 0; j < 10; j++) { str = string.Format(" \n {0, 4: D} {1, 6: D} {2, 6: D} {3, 8: D} {4, 8: F2} {5, 8: F2}", j, iArray1[j], iArray2[j], j, dArray1[j], dArray2[j], ]; Console.WniteLine(str); Console.WriteLine(" \n ---------------------------------------- ----------------------------------"); Console.WniteLine(); } } }
В данном примере для заполнения массива используется генератор случайных чисел. Для генерирования последовательного ряда случайных чисел служит класс Random. Такие последовательности чисел оказываются полезными в самых разных ситуациях включая имитационное моделирование. Начало последовательности случайных чисел определяется некоторым начальным числом, которое может задаваться автоматически или указываться явным образом.
В классе Random определяются два конструктора: public Random () public Random(int seed)
Первый конструктор создает объект типа Random, использующий системное время определения начального числа. А во втором конструкторе используется начальное значение seed, задаваемое явным образом. В первом цикле заполняются массивы iArray1 и iArray2, причем массив iArray1 заполняется числами от 0 до 100, массив iArray2 заполняется числами от -50 до 50. В этих же интервалах находятся и числа num1 и num2, которые в следующих строках преобразуются к типу double. Оператор Convert.ToDouble(rnd.Next(1, 101)) / 100; генерирует случайные числа, находящиеся в интервале от 0.0 до 1.0. Таким образом, массивы dArray1 и dArray2 будут содержать числа типа double. Основные методы класса Random представлены в таблице:
Пример 4. // Ввод массива в файл и вывод массива из файла using System; using System.IO; namespace Example5 { class Example5_4 { static void Main() { int j; string strValue; int[ ] iArray1 = new int[10]; int[ ]iArray2 = new int[10]; StreamReader sRead = new StreamReader(" C: \\dat.txt"); StreamWriter sWrite = new StreamWriter (" C: \\res.txt"); for (j = 0; j < 10; j++) { strValue = sRead.ReadLine(); iArray1 [j] = Conveгt.ToInt32(stгValue); iArray2[j] = 10 * iArray1 [j]; stгValue = stгing.Foгmat(" \n {0, 4: D} {1, 6: D} {2, 6: D}", j, iArray1[j], iArray2 [j]); Console.WriteLine(strValue); Console.WгiteLine(); sWгite.WгiteLine(iArray2[j]); } sRead.Close(); sWгite.Close(); } } }
В этом примере происходит считывание из файла и запись в файл. Имя файла включает полный путь и, следовательно, содержит служебный знак \ (обратный слеш). Если используемые символы являются служебными, то на экран они не выводятся. Однако, в случае необходимости использовать эти символы в выводимом тексте, следует перед каждым таким символом поставить дополнительный символ \. Все действия, т. е. считывание из файла и запись в файл, а также вывод на экран организованы в одном цикле. В переменной strValue формируется текстовая строка вывода на экран, содержащая форматы, заключенные в фигурные скобки " \n {0, 4: D} {1, 6: D} {2, 6: D}", где в первой позиции расположены цифры 0, 1 и 2, которые являются соответственно указателями на j, iArray1, iArray2. Код форматирования 4: D определяет число позиций (4), отведенных в строке вывода для данного целого числа (D - формат типа decimal).
Пример 5.
|