Что написано на делфи

Delphi (язык программирования)

Что написано на делфи. Смотреть фото Что написано на делфи. Смотреть картинку Что написано на делфи. Картинка про Что написано на делфи. Фото Что написано на делфи

Что написано на делфи. Смотреть фото Что написано на делфи. Смотреть картинку Что написано на делфи. Картинка про Что написано на делфи. Фото Что написано на делфи

Borland/Inprise/Codegear/Embarcadero Delphi; Borland Kylix; FreePascal

Содержание

Целевая платформа

Реализация среды разработки проектом Lazarus (Free Pascal, компиляция в режиме совместимости с Delphi) позволяет использовать его для создания приложений на Delphi для таких платформ, как Linux, Mac OS X и Windows CE.

Также предпринимались попытки использования языка в проектах GNU (например, Notepad GNU) и написания компилятора [источник не указан 1261 день] для GCC.

История языка

Object Pascal — результат развития языка Турбо Паскаль, который, в свою очередь, развился из языка Паскаль. Паскаль был полностью процедурным языком, Турбо Паскаль, начиная с версии 5.5, добавил в Паскаль объектно-ориентированные свойства, а в Object Pascal — динамическую идентификацию типа данных с возможностью доступа к метаданным классов (то есть к описанию классов и их членов) в компилируемом коде, также называемом интроспекцией — данная технология получила обозначение RTTI. Так как все классы наследуют функции базового класса TObject, то любой указатель на объект можно преобразовать к нему, после чего воспользоваться методом ClassType и функцией TypeInfo, которые и обеспечат интроспекцию.

Также отличительным свойством Object Pascal от С++ является то, что объекты по умолчанию располагаются в динамической памяти. Однако можно переопределить виртуальные методы NewInstance и FreeInstance класса TObject. Таким образом, абсолютно любой класс может осуществить «желание» «где хочу — там и буду лежать». Соответственно организуется и «многокучность».

Однако в ноябре того же года было принято решение отказаться от продажи IDE бизнеса. Тем не менее, разработкой IDE продуктов теперь будет заниматься новая компания — CodeGear, которая будет финансово полностью подконтрольна Borland.

В марте 2008 года было объявлено о прекращении развития этой линейки продуктов.

В марте 2007 года CodeGear порадовала пользователей обновленной линейкой продуктов Delphi 2007 for Win32 и выходом совершенно нового продукта Delphi 2007 for PHP.

Что написано на делфи. Смотреть фото Что написано на делфи. Смотреть картинку Что написано на делфи. Картинка про Что написано на делфи. Фото Что написано на делфи

Что написано на делфи. Смотреть фото Что написано на делфи. Смотреть картинку Что написано на делфи. Картинка про Что написано на делфи. Фото Что написано на делфи

Вышедшая в 2011 году версия Delphi XE2 добавила компилятор Win64 и кросс-компиляцию для операционных систем фирмы Apple.

Компиляторы

Синтаксис языка

Операторы

Список операторов через пробел: := + — * / div mod not and or with xor shl shr ^ = <> >= @ in is as

Что написано на делфи. Смотреть фото Что написано на делфи. Смотреть картинку Что написано на делфи. Картинка про Что написано на делфи. Фото Что написано на делфи

Выражения

Выражения в Object Pascal (Delphi) бывают арифметическими, логическими и строковыми.

Основные логические выражения:
Логические выражения в основном употребляются в условных операторах. К логическим выражениям относятся такие операции как:

Что написано на делфи. Смотреть фото Что написано на делфи. Смотреть картинку Что написано на делфи. Картинка про Что написано на делфи. Фото Что написано на делфи

Типы данных

Обрабатываемые в программе данные подразделяются на переменные, константы и литералы. Константы представляют собой данные, значения которых установлены в разделе объявления констант и не изменяются в процессе выполнения программы.

Объекты

Объекты как экземпляры класса объявляются в программе в разделе var как обычные переменные. Например:

Как и в случае записей, для обращения к конкретному элементу объекта (полю, свойству или методу) указывается имя объекта и имя элемента, разделенные точкой, то есть имя элемента является составным.

Классы

В языке Object Pascal классы — это специальные типы данных, используемые для описания объектов. Соответственно объект, имеющий тип какого-либо класса, является экземпляром (instance) этого класса или переменной этого типа.

Класс представляет собой особый тип, имеющий в своем составе такие элементы (члены, member), как поля, свойства и методы. Поля класса аналогичны полям записи и служат для хранения информации об объекте. Методами называются процедуры и функции, предназначенные как правило для обработки полей. Свойства занимают промежуточное положение между полями и методами.

Объектно-ориентированные особенности языка

Инкапсуляция

Объединение и скрытие объектных данных, а также обрабатывающих их методов внутри конкретного класса от пользователя называется инкапсуляцией.

Наследование

При создании новых объектов получить все свойства и методы от своих предков называют наследованием. Такие объекты наследуют после своего создания все поля, свойства, события, методы и прочее от своих предков. Наследование часто избавляет разработчиков от рутинной работы и позволяет не мешкая приступить к разработке чего-то нового.

Полиморфизм

Это методы различных объектов, которые могут иметь одинаковые имена, но по внутреннему содержимому отличаются друг от друга.

Примеры

Структура программы

Каждая написанная программа на языке Delphi состоит из заголовка программы (program NewApplication;), поля используемых модулей Uses (к примеру, Uses Windows, Messages, SysUtils и т. д.), который может не входить в саму структуру, а также блоков описания и исполнения (начинаются составным оператором begin и заканчиваются end.).

Пример № 1

Вывод сообщения «Hello, world!» в консольном приложении Delphi

Пример № 2

Вывод сообщения «Hello, world!» в 32-разрядном GUI приложении Delphi

Пример № 3

Динамическое создание списка строк и запись его в файл

Расширения файлов

Известное программное обеспечение, созданное на Delphi

Среди многих распространённых программных продуктов, написанных на Delphi, можно найти [9] :

Примечания

Литература

Ссылки

Clascal • Concurrent Pascal • Delphi • Pascal • Object Pascal • Oxygene • SuperPascal

C/AL • Delphi • Delphi Prism (Oxygene) • FrameworkPascal • HP Pascal • IP Pascal • PocketStudio • Prospero Pascal

Источник

Python, Delphi и C++ глазами учёного

Статья про использование Python в научных вычислениях подтолкнула меня написать эту статью. Это история, случившаяся со мной и с коллегами 6 лет назад. На тот момент я уже достаточно подразобрался с Delphi и Python, но только теперь я ощущаю что достаточно поработал с C/C++, чтобы здраво оценить время на «ремонт» сломанного кода и вообще — общее время разработки. Да, это статья про код, который был написан разными людьми на Delphi, Python и C++ для одной и той же задачи, внутри одной команды.

Что написано на делфи. Смотреть фото Что написано на делфи. Смотреть картинку Что написано на делфи. Картинка про Что написано на делфи. Фото Что написано на делфи

Перед описанием ситуации, хочу оставить вторую преамбулу для тех программистов, которые не сталкивались с программированием в науке, и не имеют базовых представлений об этом. Осторожно, далее будет несколько мини-инфарктов:
— В коде просто обязано иметь много переменных. И многие из них должны иметь названия типа mu_e, mu_m, E, T_f, T и так далее — просто потому, что в формулы эти величины входят именно так, и учёным, которые в этой области занимаются исследованиями, могут потратить много времени вспоминая как расшифровывается название коэффициента в полном виде, зато безошибочно узнают букву, которой он обозначается во всех статьях, и скажет — «Ага! Это наша мю. »
— Код никто не защищает от неправильного ввода и нет никакого UX. Код пишется для того чтобы с ним работали учёные, аспиранты, и специально обученные студенты, и никогда — типичные_пользователи и хакеры.
— Технического задания у вас нет. Вы ведёте исследование, значит вы пишете один код, смотрите на результат, который он выдал, анализируете, и в зависимости от результатов формируется следующая задача, под которую будет дописываться существующий проект.
— Большая часть кода будет использоваться один, или два раза. Один — если аспирант, или научный сотрудник делает некий расчёт. Два — если студент делает некий расчёт, а затем демонстрирует работу кода своему научному руководителю. Соответственно, код почти никогда не абстрактен, и в нём может повстречаться костыль любого вида и размера.

На первое время хватит, начну свой рассказ. Я был слегка моложе, голова моя была чистой, сердце — горячим, а руки были холодными и чесались что-то делать. И так случилось, что одним из первых заданий в новой исследовательской группе (после смены руководителя), для меня стал разбор чужого кода, который по неясным его создателю причинам — не работал. Далее последуют три истории отладки и настройки программы. Одна из них слегка уходит в сторону размышлений, две другие про реально предпринятые действия, и столь же достоверно описывают среднестатистический опыт работы учёного с соответствующим языком программирования.

Задача была одна на всех — решение дифференциального уравнения (у которого не существует аналитического решения) с разными начальными условиями. Уравнение было большим и пёстрым — f(x) и x, описывающие состояние системы в некоем нестационарном процессе, входили в нём и в производные, и в производные их частного, и в экспоненты, и в логарифмы, и в разнообразные степенные функции. Некоторые коэффициенты при степенях неявно также зависели от них, и их необходимо было пересчитывать на каждом шаге. В дипломах и диссертациях такие уравнения встречаются довольно часто, и обычно в таких выражениях вводят замены, чтобы уместить в одну строку, но часто и замены не помогают — тогда уже расписывают на весь лист. Предсказать вид такой функции (он же — поведение системы) просто по виду задающего её уравнения — задача абсолютно неподъёмная для человека, пусть даже и человека с самыми развитыми способностями к анализу функций и самыми благими намерениями. Соответственно задача программы — тут же вывести этот самый вид, начертив график.
Решаются такие задачи просто: есть одна приблизительно известная точка, которая берётся за исходные данные. Затем от неё на каждой итерации цикла делается шаг в сторону, с расчётом новых значений из старых. В случае метода Эйлера величина шага пропорциональна производной в исходной точке. В случае метода Рунге-Кутты зависимость несколько сложнее, чтобы быть слегка точнее. Есть и другие методы, когда точка, строго говоря, вам неизвестна. Но вам известна y координата одной точки, и x координата другой. Тогда применяются слегка более извращённые методы, но сводятся они всегда к перебору всех возможных вариантов и множественному использованию Эйлера, или РК. Ну а найдя точки — надо тут же отправлять их на интерфейс в график. Звучит несложно, приступим.

Начнём с С++
После проверки всего кода, с множеством переменных с одно- и двухбуквенными названиями, вы приходите к выводу, что программа должна правильно рассчитать все коэффициенты, правильно найти значения для следующего шага, правильно перейти на следующий шаг, и правильно вывести данные на график. Следовательно, программа в целом должна отработать правильно, решаете вы, и запускаете.
Компьютер зависает и происходит какая-то очень нехорошая ошибка каким-то непонятным образом связанна с памятью.
Вы остаётесь с задачкой как это всё отладить. Очевидный путь — включить дебаггер и пройтись по потоку вычислений — в данном случае пока не подходит. Ведь вы не знаете сколько раз успел отработать цикл, вдруг миллион, два? Выходит, чтобы начать отладку, вам нужно найти точку вылета. То есть намечается целых четыре новых этапа: переписать код так, чтобы он выводил в лог номер цикла, чтобы заметить последний номер итерации, где происходит вылет, затем переписать код ещё раз, чтобы остановиться на этой итерации и выставить красную точечку в дебаггере, и пройтись по последней итерации дебаггером, надеясь на то что ошибка станет ясной. При этом
а) у вас нет гарантий что лог сохранится, в связи с падением ОС. Возможно придётся проводить работу визуально, разбив первый этап на на два: сначала выводить номер цикла в консоль и пытаться запомнить последнее число примерно, затем переписать код чтобы включить в цикл искусственный замедлитель после этой запомненной итерации — тогда на следующем тесте можно будет увидеть как числа перед падением начинают поступать медленнее, и успеть прочитать последнюю итерацию (скажем, 6524-ая), значит количество падений будет не 3, а 4.
б) у вас нет гарантий, что вы поймёте, или даже найдёте ошибку с первого раза. Скорее всего где-то перед самой ошибкой код начнёт уводить вас вглубь кроличьей норы — по извилистым лабиринтам стандартных библиотек, и хоть вы пройдётесь всего по одной ветке, вам потребуется изучить значительную часть дерева возможностей вокруг этой ветки, чтобы понять что вообще произошло, ведь функции в ней зачастую просто перебрасывают какие-то ошмётки данных от одних проверок к другим, для понимания многих из них вам понадобиться ещё и разбираться в физическом устройстве машинных операций, а понимание значения иных приходит к человеку только после попытки написать свою ОС. Более того, после того как вы решите что нашли в чём проблема, нет никаких гарантий, что вы правы. Начался длительный процесс отладки, и вам предстоит ещё много тестов… Вместо четырёх падений мы получаем n, где n>3.
в) необходимые для тестов падения, вообще говоря, вещь довольно стрёмная. Мало ли что произойдёт? А тем более, когда предстоит сделать это много раз.

Теперь вы сидите и думаете, а стоит ли вообще приступать к реализации такого плана? Он выглядит громоздко, и неизвестность вас слегка пугает — мало ли где зарылась ошибка.

Pascal/Delphi
Проверка кода. Вообще говоря она может занимать больше времени, но в данном конкретном случае вам нравится, что все 66 коэффициентов объявлены и заданы в начале, а не в любом месте кода, например перед использованием. Вы сверили коэффициентики, отбросили табличку и теперь просто сверили все формулы. Опять таки, всё хорошо. Запускаете программу, и — о чудо, график рисуется. График рисуется, доходит до конца оставленного для него участка числовой оси и останавливается. Программа не вылетела, ничего страшного с ОС не произошло. Но произошло с данными. Он плавно доходит до координаты 6524, а затем вдруг его кусает бешеная блоха. Он скачет вверх и вниз абсолютно случайно и заполняет всё оставшееся полупространство справа кромешной тьмой.
На этом этапе вы удручены неудачей. Но всё же находитесь в выигрышной позицией по сравнению с си, ведь:
а) система не упала
б) вы уже локализовали итерацию, где возникает ошибка
в) вы можете пробовать новые исправления, не боясь что система вдруг упадёт

и г) — вы видите одно выведенное значение. Оно неверно. И возможно, уже на этом этапе предполагаете что это может быть, скажем, переполнение, либо ошибка чисел с плавающей точкой. Осталось понять где именно, чтобы не создавать тысячи экстендедов. Вы дописываете строчку кода чтобы остановить на номере 6524. Проходитесь дебаггером и замечаете подозрительную операцию очень маленького числа на очень большое, начиная с которой тянется ошибка, которая приводит к расходимости. Есть оказывается, в вашей функции такая особая точка, крохотный участок, где состояние имеет локальный минимум, но за пределами небольшого ограждения в потенциале начинается крутой спуск, приводящий к расходимости всего решения, и уводящий значения за пределы и дальше — в переполнение их типов. И естественно, численный метод немного промахивается на этом шаге мимо нужного локального минимума, из-за банальной нехватки точности для всего двух коэффициентов. И заметно это становится только здесь — в том узком месте, где даже незначительно отклонение отправляет итерации по дурной дорожке расходимости. Значит надо ещё разок переписать код, ввернув пару экстендед вариэйблс… Но опять какой-то косяк происходит, хотя график выглядит уже немного по другому. Я имею ввиду, конечно же, чёрную его часть. Брыкающуюся. Сколько ещё надо колдовать над кодом? Ну, поработать над реализацией работы с длинными числами. И обнаружить (после исправления этих двух) ещё один «протекающий»* коэффициент.
*протекающий — это потому что выход за пределы типа должен приводить к изменению бита слева от места его физического хранения, т. е. Нам нужен ещё один, либо несколько бит, которые не содержаться по нашей ссылке на объект такого типа. Ок, это заняло не так уж много времени.

перепишем на Python
Проверяем код, запускаем. Проблема не наблюдается. График чертится полностью, на всей области. Никаких скачков и черноты, никаких вылетов.
Волшебство интерпретатора помогает доброму питону увидеть, сколько памяти требует моё число, и выделить ровно столько, сколько ему будет достаточно.

Что написано на делфи. Смотреть фото Что написано на делфи. Смотреть картинку Что написано на делфи. Картинка про Что написано на делфи. Фото Что написано на делфи

Так что я с тех самых пор пользуюсь именно Python’ом почти для всех научных работ (одну я всё-таки сделал в спец пакете, и только ради красивой визуализации под случай), и даже разобрался в некоторых его тонкостях. Чего и вам желаю.
Используйте Python. Двигайте науку. Лучей добра.

Источник

Почему Delphi «умирает» или «программист – не читатель, программист – писатель»

Здравствуйте, уважаемые хабражители! С наступившим Новым годом! Желаю вам удачного кодинга, безбажного кода, понимающих руководителей, понятливых подчиненных и терпения при разборе кода, написанного предшественником.

Хочу поделиться некоторыми мыслями по поводу уменьшения популярности горячо любимого мною языка программирования — Delphi. Итак, не будем тянуть кота за яйца, а возьмем быка за рога.

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

Объектный Delphi, выросший из процедурного Pascal-я, имеет очень низкий порог вхождения, обеспечивает минимальную зависимость от сторонних библиотек и предоставляет доступ к данным, хранящихся в различных СУБД.

Если при проектировании системы взаимосвязь между железом и Delphi слабо прослеживается, то следующие три условия профита связаны с Delphi очень сильно.

Софтовая составляющая, иными словами операционная система. Delphi позволяет писать программы, работающие в MS Windows, которая набирала популярность бешеными темпами — поставить пиратскую Windows не проблема. Как оно там… J3QQ4…

Обучение операторов Если оператор знает основы работы в Windows, то можно обойтись простой инструкцией, на которой указано, какую кнопку для чего нажимать.

Разработка информационной системы Низкий порог вхождения действительно за полгода позволял студенту или группе студентов написать ИС, соответствующую скромным требованиям заказчика.

Если эти причины в совокупности проявляются у другого языка/технологии, то можно говорить о том, что у него так же есть/будут проблемы. Возьмем к примеру Silverlight. У него тоже низкий порог вхождения, но зато по остальным пунктам у них все тип-топ. Надеюсь никто не будет спорить, что MS это не крупный вендор или вендор не поддерживающий свое детище всеми мыслимыми и немыслимыми способами.

Конечно для Delphi все не так плохо. Сейчас у языка есть адекватный хозяин, язык не шатко, не валко развивается. Но вот доверие заказчиков/руководителей вернуть тяжело. Правде те, кто все же остался верен языку, более осторожны. Например, при наборе в команду более тщательно пытаются выявить уровень подготовки, не гонятся за новыми релизами языка. Delphi 7.0 многих устраивает (как и Windows XP 🙂 Говорят, Гислер с Total Commander-ом до сих пор на второй версии сидит.

Для примера, попробую описать текущее состояние дел в моем городе. Небольшая кучка контор, которые знают о друг-друге если не всё, то давно. Все, без исключения, кормятся из бездонной государственной казны — тендеров для создания электронного правительства проводится множество. В рамках этого, проекты разрабатываются в основном на C# и Java. Зоопарк СУБД прилагается: IBM DB2, MS SQL, Oracle, FireBird. В команде: один-два гуру-работяги, 3-4 студента или свежеиспеченных выпускников, два-три мертвого груза. При чем это не всегда разные люди. Команда это от 2 до 10 человек на 2-4 проектах. В среднем из пяти проектов: один — новый, два — доработка старого, два непонятное что-то с чем-то, как правило делопроизводство (SAP, DocsVision) или пуско-наладочно-железячные работы.

Так вот, почти всегда новый проект пишется либо на C#, либо на Java. Доработка старого — это почти всегда мелкая доделка/переделка/ремонт написанного на Delphi.

Смотришь на все это и грустно становится на сердце. Но прочтешь обещания разработчиков Delphi и воспрянешь духом. А чтобы помочь им в их нелегком деле, убедил свою контору закупить пару лицензии, да начать один проект на свеженькой редакции Delphi.

Имхо, не может такой замечательный язык просто так пропасть. Обязательно найдутся энтузиасты своего дела. Столько замечательных программ написано на нем. Хочется верить, что еще больше будет написано.

Я же в свою очередь, призываю фанатов Delphi не сидеть сложа руки, а пробовать популяризовывать его в своих кругах. Поможем немного менеджерам Embarcadero исправить их ошибки и поддержим наш любимый язык.

Источник

Примеры и исходники на DELPHI со всего Мира

На сайте Delphi Sources Вы найдете большое количество примеров исходников, компонентов и программ, написанных на языке программирования Delphi (Object Pascal).

Все люди разные, поэтому кому-то программирование дается легко, а кому-то не очень. Но в любом случае бывают моменты, когда сколько не бейся над проблемой, она почему-то с непонятным упорством никак не хочет решаться. В этом случае будет полезно посмотреть на решение проблемы с точки зрения других программистов. Поэтому, если вы ищите ответ на конкретный вопрос, для начала не лишним будет воспользоваться поиском по сайту, а уже потом искать ответ в остальных его разделах:

Примеры кода, размещенные на сайте, будут полезны как начинающим программистам для обучения программированию на Borland Delphi (теперь Embarcadero), так и опытным разработчикам, уже освоившим Дельфи / Паскаль и желающим расширить свои знания и возможности проектирования профессиональных программ.

Обо всех примерах известных программ, написанных на Delphi, можно узнать в данной статье (на нем же написан и популярный у SEO-специалистов веб-краулер SiteAnalyzer, предназначенный для технического аудита сайтов).

Надеюсь, исходники программ, примеры и решения, а также советы пользователей, размещенные на сайте, окажутся для Вас небесполезными в таком не простом, но интересном деле, как программирование на языке Делфи.

При желании Вы можете добавить в наш каталог собственный исходник или статью, воспользовавшись данной формой.

Источник

Что написано на делфи

Что написано на делфи. Смотреть фото Что написано на делфи. Смотреть картинку Что написано на делфи. Картинка про Что написано на делфи. Фото Что написано на делфи

Недавно добавленные исходники

Что написано на делфи. Смотреть фото Что написано на делфи. Смотреть картинку Что написано на делфи. Картинка про Что написано на делфи. Фото Что написано на делфиБазы данных Что написано на делфи. Смотреть фото Что написано на делфи. Смотреть картинку Что написано на делфи. Картинка про Что написано на делфи. Фото Что написано на делфиГрафика & Мультимедиа Что написано на делфи. Смотреть фото Что написано на делфи. Смотреть картинку Что написано на делфи. Картинка про Что написано на делфи. Фото Что написано на делфиСети & Интернет Что написано на делфи. Смотреть фото Что написано на делфи. Смотреть картинку Что написано на делфи. Картинка про Что написано на делфи. Фото Что написано на делфиСистема Что написано на делфи. Смотреть фото Что написано на делфи. Смотреть картинку Что написано на делфи. Картинка про Что написано на делфи. Фото Что написано на делфиРазноеЧто написано на делфи. Смотреть фото Что написано на делфи. Смотреть картинку Что написано на делфи. Картинка про Что написано на делфи. Фото Что написано на делфи

ИСХОДНИКИ

На этой странице собраны как мои, так и исходные коды других пользователей на Delphi.
Вы также можете стать автором и добавить свой исходник, воспользовавшись данной формой.
При этом рядом с исходником будет добавлена ссылка на Ваш почтовый адрес,
а также его краткое описание со скриншотом.

Разделы

Добавить исходник
в нашу коллекцию примеров на Delphi
(всего исходников на сайте: 1 357).

ТОП-20 наиболее скачиваемых исходников

НазваниеАвторСкачиваний
Easy Web ParserD0cker689
Mini Archiver (архиватор)BRaen676
Передача удаленного экрана по сетиAdmin672
Mini WebBrowser (браузер)Thomas Stutz664
Address Book (адресная книга)Udjin666652
Big StructAdmin650
Repertoire (телефонный справочник)Philauto2003650
ASProtect Crypt SharewareAdmin642
ElectronsМакаров М.М.631
Экспорт баз данных в ExcelDell3r604
Bakery DB (Хлебопекарня)Aristarh Dark603
БД без BDE[неизвестный]603
Hooks SamplesAdmin603
Video GestPepitto592
БД Коммунальные услугиkims592
Services, Users Groups, Remote InstallAdmin591
БД ЕжедневникAl Ar589
The Matrix Screen SaverAndy Kern586
Нейросеть для распознавания образовЕвгений Г. Маннанников582
БильярдJEUX582
Скачиваний за все время: 354 632

20 недавно добавленных исходников

Источник

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

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