C#   Уроки программирования с нуля. Си-шарп для чайников   C#

Здравствуйте, гость!
Вход
Регистрация


Значение Null. Nullable-типы. Оператор ??
Ссылочные типы и типы значений, которые рассматривались в предыдущем уроке, имеют еще одно отличие. Ссылочные типы могут принимать значение null, типы значений – нет.

Null указывает на то, что значение неизвестно, или, другими словами, значения нет.

Значение null вы уже встречали, думаю, не раз. Например, когда объявляли массив и пытались работать с ним, не создав его при помощи оператора new. Такая ссылка (имя) имела значение null, и выбрасывалось исключение NullReferenceException.

Иногда новички в программировании могут воспринимать null как число 0 (ноль), но это совсем не так. Число ноль вполне информативное значение, null же говорит нам о том, что значения нет.

Ниже в примере показано, что для ссылочного типа мы можем задать null, а для типа значений нет:

static void Main(string[] args)
{
   Object a = null; // нормально
   int b = null; // ошибка, int не nullable тип
}


Nullable-типы

Иногда бывают ситуации, когда необходимо чтобы тип значений мог принимать null, и это можно сделать, указав знак вопроса (?) после имени типа, при объявлении переменной:

static void Main(string[] args)
{
   int? a = null;
   double? b = null;
   bool? c = null;
}

Nullable-типы могут пригодиться при работе с базой данных. Некоторые поля таблицы базы данных могут принимать значение null. Например, значение булевого поля любит ли человек кошек может оставаться неизвестным. Или более практический пример. На главной странице этого сайта есть лента с уроками, и в ней несколько последних, остальные на страницах 2,3,…Номер страницы передается аргументом в http запросе ("…?page=2"), но для первого захода на сайт страницу 1 указывать в запросе не очень красиво, используя nullable-тип, переменная int, которая отвечает за номер страницы, в таком случае принимает значение null.

Оператор ?? (null-объединение)

Оператор null-объединения ?? немного похож на тернарный оператор. Он имеет следующую структуру:

[операнд1] ?? [операнд2];


?? возвращает операнд1 в случае если тот не равен значению null, иначе возвращает операнд2.

static void Main(string[] args)
{
   int? a = 1;
   int? b = null;
   Console.WriteLine(a ?? 3); // 1
   Console.WriteLine(b ?? 3); // 3
   Console.ReadLine();
}

Левый операнд, который сравнивается со значением null, обязательно должен быть nullable-типа, иначе получим ошибку "Operator '??' cannot be applied to operands of type 'int' and 'int'".

Домашнее задание

Создайте метод, который будет выводить информацию о количестве детей у человека. Метод принимает имя человека и количество (nullable). Метод должен выводить: неизвестно, нет детей и сообщение о количестве детей.
Понравилась статья? Подпишись на рассылку и узнавай первым о новых уроках по почте!


Поделиться с друзьями:
30 сен 2014 22:08
DeweyReX 03 июл 2017 16:30
If you have a desire to learn how to earn from $ 500 per day and work only for yourself, then write to us at email: admin@makemoneyonline.universalxyzdom.xyz

Vita12345 19 окт 2016 13:57
public class Human
{
private string Name;
public void ShowCountOfChildren(string name, int? children)
{
Name = name;
if (children > 0)
{
Console.WriteLine("Name " + name + " has " + children + " children");
}

if (children == 0)
{
Console.WriteLine("Name " + name + " hasn't children");
}
if (children == null)
{
Console.WriteLine("Name " + name +" didn't give info about children");
}

}
}

class Program
{
static void Main(string[] args)
{
Human human = new Human();
Human human1 = new Human();
Human human2 = new Human();
human.ShowCountOfChildren("Vasya", 44);
human1.ShowCountOfChildren("Petya", 0);
human2.ShowCountOfChildren("Tolyan", null);
}
}

Flamingo 17 сен 2016 00:25

class Program
{
static void ShowInf(string Name, int? children)
{
if (children == null)
Console.WriteLine("{0} не сообщил нам о количестве своих детей.", Name);
else
Console.WriteLine("{0} имеет {1} детей", Name, children);
}
static void Main(string[] args)
{
string Name;
int? children;

Console.WriteLine("Введите имя человека:");
Name = Console.ReadLine();
try
{
Console.WriteLine("Введите количество детей {0}а", Name);
children = Convert.ToInt32(Console.ReadLine());
}
catch
{
children = null;
}

ShowInf(Name, children);
}
}

bas-tion.ru 13 май 2016 00:43

class FamilyStatus
{
public static void toShowChildrens(string name ,int? amount)
{

switch (amount)
{
case null:Console.WriteLine( "{0} Неизвестно количество детей",name); break;
case 0 :Console.WriteLine( "{0} Детей нет",name);break;
default: Console.WriteLine("{0} Количество детей {1}",name,amount);break;
}

}
}
static void Main(string[] args)
{


FamilyStatus.toShowChildrens("Сергей",null);
FamilyStatus.toShowChildrens("Лена", 1);
FamilyStatus.toShowChildrens("Рамиль", 0);

}

Zuzundra 12 фев 2016 13:32
using System;
using System.Collections;
using System.Collections.Generic;

namespace homeWork
{


class Human
{
private string Name;
private int? Children;
public Human (string name, int? children)
{
Name = name;
Children = children;
}

public void GetInfo ()
{

string child = Convert.ToString (Children);
if (Children == null)
child = null;

if (Children != 0)
Console.WriteLine(Name + " " + (child ?? "Неизвестно"));
else
Console.WriteLine (Name + " " + "Without children");
}
}


class Program
{
public static void Main (string[] args)
{
Human newHuman1 = new Human ("Oleg", 3);
Human newHuman2 = new Human ("Yaroslav", 0);
Human newHuman3 = new Human ("Kirill", null);
List<Human> newList = new List<Human> ();
newList.Add (newHuman1);
newList.Add (newHuman2);
newList.Add (newHuman3);

foreach (Human i in newList) {
i.GetInfo();
}



Console.ReadKey ();

}
}
}

neronovs 19 янв 2016 16:01
Ребзя, объясните мне, пжл, почему при вводе null значения, переменная передает 13? При вводе 0 - переменная выводит 48, при вводе других чисел - вообще не понятно выводит разные числа :-(


class Program
{
private static void Print(string persone, int? children)
{
string kids = "";

if (children == null)
kids = "unknown about";
else if (children == 0)
kids = "no";
else if (children > 0)
kids = Convert.ToString(children);

Console.WriteLine("You are " + persone + " and you have " + kids + " kids");
Console.ReadKey();
}

static void Main(string[] args)
{
string persone;
int? children = null;

Console.WriteLine("children is " + children);

Console.WriteLine("Insert your name: ");
persone = Console.ReadLine();
Console.WriteLine("How many children do you have? ");
children = Console.Read();

Console.WriteLine(children);
Print(persone, children);
}
}

Kolsky 17 янв 2016 13:09

/*
* Сделано в SharpDevelop.
* Пользователь: Kolsky
* Дата: Недавно
* Время: Только что
*/
using System;

namespace p
{
class Program
{
public static void Child_Count(string name,int? cv)//cv - child value
{
string @value=(cv==0?"не имеет":"имеет "+cv);
if(cv!=null) Console.WriteLine("{0} {1} детей.", name, @value);
if(cv==null) Console.WriteLine("Неизвестно о детях человека по имени "+name+".");
}
public static void Main(string[] args)
{
Child_Count("Коля",3);
Child_Count("Алекс",null);
Child_Count("Вова",0);
Console.ReadKey(true);
}
}
}

Олег 16 янв 2016 10:10
static void Main(string[] args)
{
string name = "";
int? quantity;

try
{
Console.Write("Как вас зовут? : ");
name = Console.ReadLine();

Console.Write("Сколько у вас детей? : ");
quantity = int.Parse(Console.ReadLine());
}
catch
{
Console.WriteLine("Сколько детей у {0}а неизвестно.", name);
Console.ReadLine();
return;
}

Method(name, quantity);
Console.ReadLine();
}

static void Method(string name, int? quantity)
{
if (quantity == 0)
Console.WriteLine("У {0}а нет детей.", name);
else
Console.WriteLine("У {0}а {1} детей.", name, quantity);
}



Marakesh 07 ноя 2015 08:52


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication9
{
class Human
{
string A;
int ? B;
public Human(string a, int? b)
{
A = a;
B = b;
}
public void Chil()
{
if (B == 0) Console.WriteLine("{0} не имеет детей", A);
else if (B == null) Console.WriteLine("Количество детей у {0} не известно", A);
else Console.WriteLine("{0} имеет {1} детей", A, B);
}
}
class Program
{

static void Main(string[] args)
{
Human h1 = new Human("Вася", 1);
Human h2 = new Human("Алексей", 0);
Human h3 = new Human("Мага", 5);

h3.Chil();
Console.ReadKey();
}
}
}


Roma 09 окт 2015 00:53
namespace lesson31
{
class Program
{
static void Main(string[] args)
{
People people = new People("Roma",null);
People people2 = new People("Roma", 3);
People people3 = new People("Roma", 0);
people3.Dety();
people.Dety();
people2.Dety();

Console.ReadLine();
}
}

public class People
{
public string Name { get; set; }
public int? Kol { get; set; }

public People(string name, int? kol)
{
Name = name;
Kol = kol;
}

public void Dety()
{
if (Kol==0)
{
Console.WriteLine("Нет детей");
}
else if (Kol==null)
{
Console.WriteLine("Неизвестно");
}
else
{
Console.WriteLine("детей " + Kol);
}
}

}
}

Vitalia 06 окт 2015 21:50

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication4
{
class nova
{



public void infa(string name, int? a)
{

Console.Write("Введіть імя чоловіка - ");

if (a == null)
{
Console.WriteLine("У {0} невідомо про наявність дітей ",name);
}
else if (a==0)
{
Console.WriteLine("У {0} немає дітей ",name);
}
else
{
Console.WriteLine("У {0} є {1} дітей ", name,a);
}
}
}
class Program
{
static void Main(string[] args)
{

nova nov = new nova();
nov.infa("Папік",null);
nova nov1 = new nova();
nov1.infa("Андрій", 0);
nova nov2 = new nova();
nov2.infa("Тарас", 5);

}
}
}


Александр_Бугай 23 май 2015 20:16
class Program
{
private static void GetChildren(int number, string []names, int?[]children)
{
for (int i = 0; i < number; i++)
{
if (children[i] == null) Console.WriteLine("We don't know how many children has " + names[i]);
else Console.WriteLine(names[i] + " has " + children[i] + " children.");
}
}
public static void Main(string[] args)
{
Console.WriteLine("Input number of people:");
int number = Convert.ToInt32(Console.ReadLine());
string []names = new string[number];
int? []children = new int?[number];
for (int i = 0; i < number; i++)
{
Console.WriteLine("Input Name:");
names[i] = Convert.ToString(Console.ReadLine());
Console.WriteLine("Input number of children:");
try
{
children[i] = Convert.ToInt32(Console.ReadLine());
}
catch (Exception)
{
children[i] = null;
}
}
GetChildren(number, names, children);
Console.ReadLine();
}
}

Азиз 19 май 2015 15:09
Вот, все как в задании:

public static void Main(string[] args)
{
SomeVoid(null,null);
SomeVoid(null,5);
SomeVoid("James",null);
SomeVoid("Nick",2);
Console.ReadLine();
}
public static void SomeVoid(string name, int? children)
{
string Name;
int? child;

if (name == null) {
Name = "Unknown";
}
else
{
Name = name;
}

if (children == null) {
child = 0;
}
else
{
child = children;
}

Console.WriteLine("Name: {0}, Children: {1}",Name,child);

}

Andriy 21 мар 2015 23:48
Спасибо за уроки!!!
Вот моя программка:

namespace ConsoleApplication1
{

class Program
{
public static void NumberOfChildren(string name, int? number)
{
if (number == null)
Console.WriteLine(name+": неизвестно сколько детей");
else if (number == 0)
Console.WriteLine(name + ": нет детей");
else
Console.WriteLine(name + ":" + number + ": детей");
}

public static void Main()
{
string nm, n1;
int? n2 = null;
Console.WriteLine("Введите имя и количество детей. Если неизвестно сколько детей - напишите ?.");
nm = Console.ReadLine();
n1 = Console.ReadLine();
if (n1 == "?")
n2 = null;
else
n2 = Convert.ToInt32(n1);

NumberOfChildren(nm, n2);

Console.ReadLine();
}
}
}

Максим 02 мар 2015 18:44
AlexWolf
---
Да

AlexWolf 02 мар 2015 18:08
Все верно?


namespace ConsoleApplication1
{

class Program
{
public static void Chld(string a, int? b)
{
if (b == null) { Console.WriteLine("Имя: " + a + " - детей: " + b + " Не известно!"); }
else { Console.WriteLine("Имя: " + a + " - детей: " + b); }
}
static void Main(string[] args)
{
string[] names = new string[4]{"Миша", "Толя", "Дима", "Илья"};
int?[] children = new int?[4] {1, 0, null, 2 };
for (int i = 0; i < names.Length; i++)
{ Chld(names[i], children[i]); }
Console.ReadKey();
}
}
}

Виталий 25 фев 2015 14:14
Получилось!

public class Man
{
public string Name;
public int? children;
public string Childrenkolvo;
public Man(string name, int? children)
{
this.Name = Name;
this.children = children;
}
public void childrenkol()
{
if (children == null)
Childrenkolvo = string.Format("{0} Имееет детей : неизвестно.", Name);
else
Childrenkolvo = string.Format("{0} Имеет детей : {1}", Name, children);
}
}
class Program
{
static void Main(string[] args)
{
Man Man1 = new Man("Алексей", null);
Man Man2 = new Man("Николай", 0);
Man Man3 = new Man("Максим", 4);
Man1.childrenkol();
Man2.childrenkol();
Man3.childrenkol();
while (true)
{
string pult = Console.ReadLine();
if (pult == "Алексей")
Console.WriteLine(Man1.Childrenkolvo);
if (pult == "Николай")
Console.WriteLine(Man2.Childrenkolvo);
if (pult == "Максим")
Console.WriteLine(Man3.Childrenkolvo);
}
}
}

Виталий 25 фев 2015 10:35
Скажите пожалуйста, где проблема?

public class Man
{
public string Name;
public int? children;
public string Childrenkolvo;
public Man(string name, int? children)
{
this.Name = Name;
this.children = children;
}
public void childrenkol()
{
if (children == null)
Childrenkolvo = string.Format("{0} Имееет детей : неизвестно.", Name);
else
Childrenkolvo = string.Format("{0} Имеет детей : {1}", Name, children);
}
}
class Program
{
static void Main(string[] args)
{
Man Man1 = new Man("Алексей", null);
Man Man2 = new Man("Николай", 0);
Man Man3 = new Man("Максим", 4);
string pult = Console.ReadLine();
if (pult == "Алексей")
Console.WriteLine(Man1.childrenkol);
Console.ReadKey();
}
}

Максим 25 фев 2015 00:02
Здесь должен быть тоже int?

public Man(string name, int children)

Виталий 24 фев 2015 18:09
Ещё не доделал, а ошибки уже на этом этапе. Подскажите пожалуйста, где ошибка?

public class Man
{
public string Name;
public int? children;
public Man(string name, int children)
{
this.Name = Name;
this.children = children;
}
}
class Program
{
static void Main(string[] args)
{
Man Man1 = new Man("Алексей", null);
Man Man2 = new Man("Николай", 0);
}
}

Максим 13 дек 2014 14:06
Ромик
---
public override string ToString()
{
//code
}

Вы так переопределяли ToString?

Или пытались передать ему string (name, int? child)? Тогда конечно не получится, нет метода ToString в классе Object с такими параметрами.

А в цикле foreach вы, вероятно, забыли int?:
foreach (int? c in child) // нормально работает для ForString

Ромик 12 дек 2014 09:19
А еще через foreach отказывалось вызывать мой метод ForString , когда доходило до элемента со значением null

Ромик 12 дек 2014 09:17
class Program
{
static void Main(string[] args)
{
Human human = new Human();
int?[] child = new int?[6];
for (int i = 0; i < 6; i++)
{
if (i == 3)
child[i] = null;
else
child[i] = i;
}
for (int i = 0; i < child.Length; i++)
Console.WriteLine(human.ForString("Света", child[i]));
Console.Read();
}
}
class Human
{
public string ForString(string name, int? child)
{
if (child == null)
return name + " не указала кол-во детей.";
if ((child % 10) == 1)
return "У " + name + " 1 ребенок.";
if ((child % 10) == 2 || (child % 10) == 3 || (child % 10) == 4)
return "У " + name + " " + child + " ребенка.";
else
return "У " + name + " " + child + " детей.";
}
}
Пытался с начала просто переопределить метод ToString(), пишет "Не найдено подходящего метода для переопределения. Хотя я его 100 раз уже переопределял для своих учебных приложений.

Диманиак 10 дек 2014 20:55
Попробовал сделать без классов - работает, но, почему-то, мне не очень нравится как получилось. В процессе написания убедился, что Nullable-типы нельзя преобразовать из/в строку, т.к. типы значений (куда входит string) не могут принимать значение null.

Интересны Вашим комментарии относительно решения этого задания.

namespace ConsoleApplication1
{
class Program
{
static void HumanInfo(string name, int? childrencount=null)
{
if (childrencount == null)
Console.WriteLine("{0} have childrens: unknown", name);
else
Console.WriteLine("{0} have childrens: {1}", name, childrencount);
}
static void Main(string[] args)
{
HumanInfo("Anna");
HumanInfo("Maria",0);
HumanInfo("Helena",2);
HumanInfo("Olga", null);
Console.ReadKey();
}
}
}

scrinn 09 дек 2014 11:10
Понятные уроки, но неплохо было бы,чтобы в домашние задания были построены так,чтобы в них было необходимо применять как ново-приобретенные навыки по новой теме так и решать их с использованием знаний пройденных тем.А то пока доходишь до 25 урока,например, уже забываешь про работу со строками/массивами,в чем отличие конструктора от метода/свойства.
И еще,например, взять с сайта вакансия требования C# junior и сделать уроки по требуемым знаниям

Иван 17 ноя 2014 08:15
namespace ConsoleApplication1
{
class man
{
int? child;
public man(int? _child )
{
child = _child;
}
public void prntChld()
{

Console.WriteLine(child == null ? "no info" : (child == 0 ? "no child" : String.Format("detei {0}", child)));
}
}
class Program
{

static void Main(string[] args)
{
man test = new man(null);
test.prntChld();
test = new man(0);
test.prntChld();
test = new man(3);
test.prntChld();

Console.ReadKey();
}
}
}

Максим 30 окт 2014 19:14
Aslan
---
Ниже в комментариях второй вариант решения пользователя Firik хорошо сделан, посмотрите

Aslan 30 окт 2014 05:41
Admin
---
Покажите пожалуйста как должен в конечном счете выглядеть код?

Максим 29 окт 2014 19:11
Aslan
---
Метод должен был быть статическим, здесь нет смысла создавать объекты Person

Aslan 29 окт 2014 11:39
Есть что то лишнее ? Есть замечания?
namespace ConsoleApplication2
{
class Person
{
public void InfoAboutPerson(string name, int? childrencount)
{
Console.WriteLine("Имя:");
if (childrencount==0) Console.WriteLine(name+" Нет детей");
else if (childrencount > 0) Console.WriteLine(name + " Количество детей: " + childrencount);
else if (childrencount == null) Console.WriteLine(name+" Неизвестно");

}
}
class Program
{
static void Main(string[] args)
{
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();

p1.InfoAboutPerson("Вася", 0);
p2.InfoAboutPerson("Иван", 3);
p3.InfoAboutPerson("",null);
Console.ReadKey();
}
}
}

Максим 21 окт 2014 19:16
beronny
---
Я так понял, что удалил ваш код когда чистил спам в комментариях.

Как написал Fkf, и как предпологалось мной, метод вывода информации будет статическим, здесь нет смысла создавать объекты. Это важно, а если говорить о части кода, которая соответствует теме урока - то нормально всё

beronny 21 окт 2014 09:40
Админ, так я не понял - это не правильно?

class NPeopleInf
{
int? children;
string name;

public string Information(string Name, int? Children)
{
string x;
this.children = Children;
this.name = Name;

if (Children == null)
{
x = Name + " имеет неизвестное кол-во детей.";
}
else if (Children < 0)
{
x = Name + " не имеет детей.";
}
else x = Name + " имеет " + Children + " детей.";

return x;
}
}
class Program
{
static void Main(string[] args)
{
NPeopleInf people = new NPeopleInf();
Console.WriteLine(people.Information("Vasya", 5));
Console.WriteLine(people.Information("Alex", null));
Console.WriteLine(people.Information("Jorj", -3));

Console.ReadKey();
}
}

Fkf 20 окт 2014 20:33
Beronny, у вас в коде есть одна некрасивая деталь
x = Name + " имеет " + Children + " детей.";
при Children>5 все хорошо. Но
1 - 4 - ребенка.

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

Максим 19 окт 2014 16:16
Firik
---
Структуры возможно следующим, делегады и лямбда пока рано

Firik 18 окт 2014 22:30
а через сколько примерно уроков будет про делегаты, лямбда-выражения и структуры?

Максим 14 окт 2014 20:50
Алексей
---
Рад помочь)

Алексей 14 окт 2014 20:22
Мужик, огромное спасибо тебе! Твои уроки дали мощный толчок к пониманию языка. За изучение взялся для реализации конкретной задачи. Прошло всего уже полгода после начала чтения твоих уроков, но у меня уже есть свое мини-приложение на wpf которое почти выполняет все поставленные задачи. Ты очень круто все раскладываешь по полочкам, в отличие от книг, за что тебе еще раз спасибо)

Максим 13 окт 2014 21:03
Scrinn
---
Ну база уже есть, за 31 урок. Конечного количества нет, можно еще очень много писать о языке, но я уже думаю над тем, чтобы начать уроки по более прикладном использовании языка, например windows forms

Scrinn 13 окт 2014 09:26
Отличные уроки.Вот только есть вопрос,это уже 31ый урок,сколько это процентов от количества всего задуманных уроков? Какой эти 31 урок дают уровень знаний?Набросайте план изучения материала или напишите что еще нужно рассмотреть,чтобы перейти к самостоятельным небольшим проектам или считать, что я, например, изучил базу по C#

Иван 06 окт 2014 15:14
Доброго времени суток.
Благодарю за серию уроков, с удовольствием начал изучения данного языка по вашим урокам.

ЗЫ: было бы здорово почитать уроки о приложениях WindowsForms, Browser Application и т.д. О создании и подключении dll библиотек для больших и не очень проектов :)

Еще раз спасибо за базу!

Максим 04 окт 2014 20:19
Firik
---
Да, правда можно было обойтись без поля stroka )

Firik 03 окт 2014 19:35
ну наверно так?

class Human
{
private static string stroka;

public static string NumOfChild(string Name, int? Numb)
{
if (Numb == 0)
{
stroka = String.Format("У {0} нет детей", Name);
}
else if (Numb == null)
{
stroka = String.Format("Количество детей у {0} неизвестно", Name);
}
else if (Numb > 0)
{
stroka = String.Format("У {0} {1} детей", Name, Numb);
}
return stroka;
}
}
class Program
{
static void Main(string[] args)
{
Human human = new Human();
Console.WriteLine(Human.NumOfChild("Vasya", null));
Console.WriteLine(Human.NumOfChild("Dima", 0));
Console.WriteLine(Human.NumOfChild("Serega", 5));
Console.ReadKey();
}
}

Максим 03 окт 2014 18:39
Firik
---
Всё правильно, только метод должен был быть статическим. Как это, объект Human, но его метод выводит информацию о других людях

Firik 03 окт 2014 14:31
мне кажется что я не очень понял задание...

class Human
{
public void NumOfChild(string Name, int? Numb)
{
if (Numb == 0)
{
Console.WriteLine("У {0} нет детей", Name);
}
else if (Numb == null)
{
Console.WriteLine("Количество детей у {0} неизвестно", Name);
}
else if (Numb > 0)
{
Console.WriteLine("У {0} {1} детей", Name, Numb);
}
}
}
class Program
{
static void Main(string[] args)
{
Human human = new Human();
human.NumOfChild("Vasya", null);
human.NumOfChild("Dima", 0);
human.NumOfChild("Serega", 5);
Console.ReadKey();
}
}


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

Имя (обязат.)
E-mail (обязат., не публикуется)


Для вставки ваших программ пользуйтесь кнопкой "исходный код"
Вёрстка сайта с нуля

Уникальный Видеокурс!

"Научись верстать сайты и заработай на этом!"

Получить видеокурс

Подпишись на курс по программированию, и узнавай первым о новых уроках!

RSS подписка Страничка Вконтакте Мы в Twitter

Ошибка в тексте? Выделите ее мышкой и нажмите Ctrl+Enter
Поблагодарить автора: Номер карты (ПриватБанк)
5168 7572 4170 8660
WebMoney
R372544961915 U685637142028 Z999792764387
Наверх
Система Orphus