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

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


Структуры в Си-шарп
В этом небольшом уроке мы поговорим об альтернативе классам - структурах.

Структура – это более простая версия классов. Все структуры наследуются от базового класса System.ValueType и являются типами значений, тогда как классы - ссылочные типы. Структуры отличаются от классов следующими вещами:

- Структура не может иметь конструктора без параметров (конструктора по умолчанию);
- Поля структуры нельзя инициализировать, кроме случаев, когда поля статические.
private int x = 0; // в структуре недопустимо;
- Экземпляры структуры можно создавать без ключевого слова new;
- Структуры не могут наследоваться от других структур или классов. Классы не могут наследоваться от структур. Структуры могут реализовывать интерфейсы;
- Так как структуры это типы значений, они обладают всеми свойствами подобных типов (передача в метод по значению и т.д.), в отличии от ссылочных типов;
- Структура может быть nullable типом.

Структуры объявляются при помощи ключевого слова struct:

public struct Book
{
   public string Name;
   public string Year;
   public string Author;
}


Экземпляр структуры можно создавать без ключевого слова new:

static void Main(string[] args)
{
  Book b;
  b. Name = "BookName";
}


Структуры подходят для создания несложных типов, таких как точка, цвет, окружность. Если необходимо создать множество экземпляров подобного типа, используя структуры, мы экономим память, которая могла бы выделяться под ссылки в случае с классами.

Примерами структур в стандартной библиотеке классов .Net являются такие типы как int, float, double, bool и другие. Также DateTime, Point (точка), Color.

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

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


Поделиться с друзьями:
21 дек 2014 22:43
Владимир 22 фев 2017 08:09

class Program
{
static void Main(string[] args)
{

double[] radius = new double[] { 2.3, 2.1, 2,7, 2.9, 1.8 };
var nearestBYlinq = radius.OrderBy(x => Math.Abs((double)x - (from ord in radius select ord).Average())).First();


Console.WriteLine("The nearest member of the array found by LINQ to the average array is " + nearestBYlinq);

}
}



Статья побудила поразбираться с линкью :)

Stavr 25 ноя 2016 12:52
Ну как так можно. Я мучился кучу воды в толстенных талмуда прочитал, а тут буквально в двух словах описано чем отличаются классы и структуры и для чего нужно :(
ЗЫЖ ПЕЙСАТЕЛИ блин >:(

ro26 01 окт 2016 19:27
class Program
{
static void Main(string[] args)
{
double[] myradiuses = new double[] { 10, 20, 30, 40, 50 };
GetCircle cir1 = new GetCircle();
cir1.radius = 26;
cir1.Calculate(myradiuses);
Console.ReadKey();
}
}

public struct GetCircle
{
public double radius;


public void Calculate(double[] myradius)
{

double param = myradius[0];

for (int i = 1; i < myradius.Length; i++)
{
if (Math.Abs(radius - myradius[i]) < Math.Abs(radius - param))
{
param = myradius[i];
}
}
double circle = 2 * Math.PI * radius;
Console.WriteLine(param);
Console.WriteLine(circle);
}
}

bas-tion.ru 13 май 2016 23:03

//Создаём структуру
public struct RadiusFinder
{
// Метод внутри структуры и принадлежит структуре(static)
public static void toFindRadius(int[] arrayRadius)
{
// Перебираем массив длинн радиусов и вычисляем среднюю длинну радиуса
int average = 0;
foreach (int element in arrayRadius)
{
average += element;
}
average = average / arrayRadius.Length; // Получаем среднюю длинну радиуса

// Создаём переменную - индекс близости к среднему радиусу.
int closeToAverage = (Math.Abs(arrayRadius[0] - average)); // Записываем в переменную индекс близости первого элемента массива

// Перебираем массив радиусов. Радиус более близкий к середине(наименьший индекс близости) заносится в переменну position
int position = 0;//
int count = 0; //
for (int i = 0; i < arrayRadius.Length; i++)
{
if (closeToAverage > Math.Abs(arrayRadius[i] - average))
{
closeToAverage = Math.Abs(arrayRadius[i] - average);
position = count;
}
count++;
}
// выводим сообщение о среднем радиусе и наиболее близком рабиусе к среднему
Console.WriteLine("Наиболее близкий радиус {0} к среднему радиусу {1}", arrayRadius[position], average);
}
}
static void Main(string[] args)
{

int[] radius = {1, 30, 40, 17, 100, 5, 60, 200 };

RadiusFinder.toFindRadius(radius);



}

neronovs 21 янв 2016 06:17
The home work:

public struct Circle
{
public void Circumference(double[] radius)
{
//Getting the nearest member of the array - begin
double nearest = 0;
double mindif = radius.Max();
double avrRad = radius.Average();

foreach (var element in radius)
{
if (Math.Abs(avrRad - element) < mindif)
{
mindif = Math.Abs(avrRad - element);
nearest = element;
}
}
Console.WriteLine("The nearest member of the array to the average array is " + nearest);
//Getting the nearest member of the array - end
//-------------------------------
//The circumferencing calculation
double circumference = nearest * 2 * Math.PI;
Console.WriteLine("The circumference (C=2*R*Pi) is " + circumference);
}
}

class Program
{
static void Main(string[] args)
{
double[] radius = new double[5];
radius[0] = 2.3;
radius[1] = 2.1;
radius[2] = 2.7;
radius[3] = 2.9;
radius[4] = 1.8;

Circle circle = new Circle();
circle.Circumference(radius);

Console.ReadKey();
}
}

Denis 19 янв 2016 11:30
Мой вариант. Критика приветствуется

private struct cyrcleStructure {

public int rad { get; set; }

public cyrcleStructure(int radC) {
rad = radC;
}

public static void doIt() {
while (true) {

#region Инициализация
List<cyrcleStructure> cList = new List<cyrcleStructure>();
Random rnd = new Random();

for (int i = 0; i < 10; i++) {
cList.Add(new cyrcleStructure(rnd.Next(1, 100)));
}
#endregion

#region Вычисление среднего радиуса всех окружностей
int middleCyrcle = 0;

foreach (var item in cList) {
middleCyrcle += item.rad;
Console.Write(item.rad + " ");
}
middleCyrcle = Convert.ToInt32((double)middleCyrcle / cList.Count);
Console.WriteLine("\nСредний радиус окружностей: " + middleCyrcle);
#endregion

#region Вычисление ближайших к среднему радиусу радиусов
List<int> closestRadList = new List<int>();

int tempDiff = Math.Abs(middleCyrcle - cList[0].rad);
int currDiff = Math.Abs(middleCyrcle - cList[0].rad);

foreach (var item in cList) {
currDiff = Math.Abs(middleCyrcle - item.rad);
if (tempDiff > currDiff) {
tempDiff = currDiff;
}
}
foreach (var item in cList) {
if (tempDiff == Math.Abs(middleCyrcle - item.rad) && !closestRadList.Contains(item.rad)) {
closestRadList.Add(item.rad);
}
}

if (closestRadList.Count == 1)
Console.WriteLine("Ближайший к среднему радиус: " + closestRadList[0]);
else {
Console.Write("Ближайшие к среднему радиусы: ");
foreach (var item in closestRadList) {
Console.Write(item + " ");
}
Console.WriteLine();
}
#endregion

Console.WriteLine("Выйти?");
if ("y".Equals(Console.ReadLine()))
break;
}
}

Kolsky 17 янв 2016 13:45

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

namespace q
{
struct Circle//Площадь круга ср. радиуса
{
public double area;
public void CirAreaOfMidR(double[] RadS)//Аргумент - радиусы
{
double midR=0;
int i;
for (i = 0; i < RadS.Length; i++) midR+=RadS[i];
midR/=i;
area = midR * Math.PI;
}
}
class Program
{
public static void Main(string[] args)
{
Circle C1;
C1.area=0;
double[] RadS = {1.12,1.16,4,7.8};
C1.CirAreaOfMidR(RadS);
Console.Write(C1.area);
Console.ReadKey(true);
}
}
}

Алексей 21 окт 2015 16:07
почему в структурах нельзя использовать десктруктор?

Vitalia 07 окт 2015 21:16

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

namespace ConsoleApplication4
{
struct okr
{

public int radiys;
public int suma1;
public okr(int radiys, int suma1)
{

this.radiys = radiys;
this.suma1 = suma1;
}
}
class Program
{
static void Main(string[] args)
{
okr okr1;
List<int> radiysu = new List<int>();
Random ran = new Random();
// Робим цикил для рандомного заповнення списку radiysu 5-ма елементами.
int suma = 0;
Console.Write("Радiуси наших кiл =");
for (int i = 0; i < 5; i++)
{

int rand = ran.Next(0, 30);
radiysu.Add(rand);
Console.Write(radiysu[i] + " ");

}

Console.WriteLine(" ");
for (int i = 0; i < radiysu.Count; i++)
{
suma = suma + radiysu[i];

}
okr1.suma1 = suma / radiysu.Count;
Console.WriteLine("Середнє значення = " + okr1.suma1);
okr1.radiys=0;
int min=0;
for (int i = 0; i < radiysu.Count; i++)
{
if (min==0)
min = Math.Abs(okr1.suma1 - radiysu[i]);
if ( Math.Abs(okr1.suma1 - radiysu[i])<min)
{
min=Math.Abs(okr1.suma1 - radiysu[i]);

okr1.radiys = radiysu[i];
}

}
Console.WriteLine("Найбільш наближене значення до "+okr1.suma1+" = "+okr1.radiys);
}
}
}


Сергей 29 авг 2015 17:18
получилось, спасибо за уроки еще бы уроков по windows form

Александр_Бугай 23 май 2015 21:30
struct Circle
{
public int numberOfCircle;
public double circleAverage;
public void GetRadius(double circleAverage)
{
double circleResult = circleAverage * 2 * 3.14;
Console.WriteLine(circleResult);
}
}
class Program
{

public static void Main(string[] args)
{
List<double> circles = new List<double>();
Circle myCircle;
Console.WriteLine("Input number of circles:");
myCircle.numberOfCircle = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i<myCircle.numberOfCircle; i++)
{
Console.WriteLine("Input circle:" + i);
circles.Add(Convert.ToDouble(Console.ReadLine()));
}
myCircle.circleAverage = circles.Average();
myCircle.GetRadius(myCircle.circleAverage);
Console.ReadLine();
}
}

Максим 20 май 2015 20:10
Азиз
---
Всё отлично

Азиз 20 май 2015 09:57
Вот, пожалуйста оцените ! :)

class Program
{
public static void Main(string[] args)
{
Circle a = new Circle(10);
Circle b = new Circle(15);
Circle c = new Circle(30);
Circle d = new Circle(30);
Circle closest = new Circle(0);


var list = new List<Circle>();
list.Add(a);
list.Add(b);
list.Add(c);
list.Add(d);

double approxR = 0; // Общее кратное

foreach (var element in list) {
approxR += element.Radius;
}
approxR = approxR / list.Count;

double diff = 0; //разница между Средним значением и опр. радиусом

foreach (var item in list) {
if (diff == 0) {
diff = Math.Abs(approxR - item.Radius);
}
if(Math.Abs(approxR - item.Radius) < diff)
{
diff = Math.Abs(approxR - item.Radius);
closest.Radius = item.Radius;
}
}
Console.WriteLine("The closest Radius is: {0}", closest.Radius.ToString());
Console.ReadLine();


}
}
struct Circle
{
public double Radius;
public Circle(double radius)
{
this.Radius = Math.Abs(radius);
}
}

dfhdf 16 апр 2015 15:06

private struct Circle
{
internal double radius;
}
static void Main(string[] args)
{
Console.WriteLine("Enter a quantity of circles:");
int q = Convert.ToInt32(Console.ReadLine());
if (q <= 1)
do
{
Console.WriteLine("You must enter a quantity above 1.");
q = Convert.ToInt32(Console.ReadLine());
}
while (q <= 1);
Circle[] c = new Circle[q];
double[] radiuses = new double[q];
for (int i = 0; i < q; i++)
{
Console.WriteLine("Enter a radius value of circle # " + (i + 1) + ':');
radiuses[i] = Convert.ToDouble(Console.ReadLine());
}
for (int i = 0; i < radiuses.Length; i++)
c[i].radius = radiuses[i];
double m = 0, n;
near(c, ref m, out n);
Console.WriteLine("Average radius is: {0}.\nThe nearest is: {1}.", m, n);
Console.ReadKey();
}
static void near(Circle[] circles, ref double m, out double n)
{
double sum = 0;
for (int i = 0; i < circles.Length; i++)
sum = sum + circles[i].radius;
double average = sum / circles.Length;
double min = Math.Abs(circles[0].radius - average); int b = 0;
for (int i = 0; i < circles.Length; i++)
if (Math.Abs(circles[i].radius - average) < min)
{
min = Math.Abs(circles[i].radius - average);
b = i;
}
m = average; n = circles[b].radius;
}
}

Дядя Коля 01 апр 2015 15:33
Насколько я понял условие:
1) Засунуть в метод массив с радиусами
2) Найти среднее значение массива
3) Сравнить это среднее с каждым элементом(например, модуль от разницы)
4) Вывести индекс минимального элемента
Алгоритм простой.

Максим 23 мар 2015 10:30
Andriy
---
Понятно, что так просто для списка элементов пользовательского типа метод Average искать среднее не будет. Как он должен понять, что нужно считать по радиусу, а не по любому другому полю.

Для числовых типов данных (int, double...) метод используется просто, без аргументов:

array.Average();

Для других типов нужно пользоваться Linq, который мы еще не рассматривали. Для начала нужно подключить директиву
using System.Linq;
А потом уже, конкретно для этого случая, это будет работать так:

AvgRadius = K.Average(k => k.Radius);

Andriy 22 мар 2015 14:07
Насилу осилил ДЗ.
Возник вопрос: можно ли в списке List искать средние, максимальные, минимальные значения? У меня не получилось это сделать((.

namespace ConsoleApplication1
{
class Program
{
public struct Circle
{
public int Number;
public double Radius;
public double? Length;

public Circle(int number, double radius, double? length)
{
Number = number;
Radius = radius;
Length = length;
}
}

public static void Main()
{
int n;
double SumOfRadiuses = 0, AvgRadius, middle, MidRadius;
Console.WriteLine("Введите количество кругов");
n = Convert.ToInt32(Console.ReadLine());

Random Rnd = new Random();
List<Circle> K = new List<Circle>();

for (int i=0; i<n; i++ )
{
K.Add(new Circle(i, Rnd.Next(1, 1000), null));
}

Console.WriteLine();
foreach (Circle Kolo in K)
{
Console.WriteLine(Kolo.Radius);
SumOfRadiuses += Kolo.Radius;
}
AvgRadius = SumOfRadiuses / K.Count; //AvgRadius = K.Average() - не работало;

middle = 1000;
MidRadius = 0;
foreach (Circle Kolo in K)
{
if ((Math.Abs(AvgRadius - Kolo.Radius)) < middle)
{
middle = Math.Abs(AvgRadius - Kolo.Radius);
MidRadius = Kolo.Radius;
}
}

Console.WriteLine();
Console.WriteLine("Средний радиус: " + AvgRadius + "\nНаиболее близкий к нему радиус: " + MidRadius);
Console.ReadLine();
}
}
}

Максим 06 мар 2015 09:57
AlexWolf
---
Модификатор protected нельзя использовать, так как структуры не могут наследоваться от других структур/классов. Модификатор private можно использовать, но тогда поле с этим модификатором может быть проинициализировано только вызовом конструктора (используя new).
Вот переделал ваш код без new:

public struct Krug
{
public int Rad;
public Krug(int rad)
{
Rad = rad;
}
}
class Program
{
static void Main(string[] args)
{
Random rnd = new Random();
int[] radius = new int[5];
List<Krug> rings = new List<Krug>();
Krug k;
for (int i = 0; i < radius.Length; i++)
{
k.Rad = rnd.Next(100);
radius [i] = k.Rad;
rings.Add(k);
}
Console.WriteLine("Созданы окружности радиусом: \n");
double mid = radius.Average();
int middle = radius [0];
foreach (Krug radiuss in rings)
{
Console.WriteLine(radiuss.Rad + " мм. \n");
middle = Math.Abs(radiuss.Rad - mid) < Math.Abs(middle - mid) ? radiuss.Rad : middle;
}
Console.WriteLine("Средне арифметический радиус = " + mid + " мм. \n");
Console.WriteLine("Наиболее близкая к средне арифметическому окружность с радиусом " + middle + " мм.");
Console.ReadKey();
}
}

AlexWolf 05 мар 2015 16:33
Здравствуйте Максим. Вот моя домашка. Не понимаю, почему многие пишут, что задание не поняли... я вроде сделал все по вашим условиям... или я тоже что-то не понял? И как обычно пара вопросов по уроку:
1 - Вы писали, что экземпляры структуры можно создавать без слова new, но у меня не получается, начинает ругаться. В чем же дело?
2 - Я правильно понимаю, что данные в структуре, в отличии от класса, нельзя защитить с помощью private или protected? Получается данные в структурах остаются уязвимыми?


namespace ConsoleApplication1
{
public struct Krug
{
public int Rad;
public Krug(int rad)
{
Rad = rad;
}
}
class Program
{
static void Main(string[] args)
{
Random rnd = new Random();
int[] radius = new int[5];
List<Krug> rings = new List<Krug>();
for (int i = 0; i < radius.Length; i++)
{
rings.Add(new Krug(radius[i]=rnd.Next(100)));
}
Console.WriteLine("Созданы окружности радиусом: \n");
double mid = radius.Average();
int middle = 0;
foreach (Krug radiuss in rings)
{
Console.WriteLine(radiuss.Rad + " мм. \n");
middle = Math.Abs(radiuss.Rad - mid) < Math.Abs(middle - mid) ? radiuss.Rad : middle;
}
Console.WriteLine("Средне арифметический радиус = " + mid + " мм. \n");
Console.WriteLine("Наиболее близкая к средне арифметическому окружность с радиусом "+ middle + " мм.");
Console.ReadKey();
}
}
}


Максим 27 фев 2015 18:34
Виталий
---
Новый урок почти неделю назад написал, правда он теоретический. Может завтра выложу

Виталий 27 фев 2015 14:34
Если честно учиться по книге совсем скучно. Сделайте пожалуйста новые уроки! У вас так классно объясняется! Кстати, мне 11 лет.

Виталий 25 фев 2015 14:31
Знаете, я, как и все, не понял задание. Но сделать попытался. По крайней мере структуры реализованы.

public struct Circle
{
public int radius;
public Circle(int radius)
{
this.radius = radius;
}
}
class Program
{
static void Main(string[] args)
{
Circle circle1;
circle1.radius = 10;
Circle circle2;
circle2.radius = 15;
Console.WriteLine(circle1.radius);
Console.WriteLine(circle2.radius);
Console.ReadKey();
}
}

Максим 19 фев 2015 21:03
Rostyslav
---
Мы не можем использовать поля, свойства, структуры, которым не присвоено значение. Это как и с другими структурами/типами значений (int, bool...)

static void Main(string[] args)
{
int p;
Console.WriteLine(p); // ошибка Use of unassigned local variable 'p
}

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

Рекомендуется создавать структуры всегда с конструктором, который инициализирует все поля.

Rostyslav 19 фев 2015 17:28
Единственное, что пришлось ломать голову с свойствами. Получается, что без конструктора свойства работать не будут?
Например:

truct Circle
{
private double r;
public double Rad
{
get { return r; }
set { r = value; }
}
static void Main(string[] args)
{
Circle c;
c.Rad = 10;//error
}

Если добавить конструктор, то проблемы не возникает
Circle c=new Cirlce();

Rostyslav 19 фев 2015 17:19
Мое решение:


namespace @struct
{
struct Round
{
public double Radius;
public Round(double r)
{
this.Radius = r;
}
//Circumference() and Square() are not being in this example
public double Circumference()
{
return 2 * Math.PI * Radius;
}
public double Square()
{
return Math.PI * Radius * Radius;
}

}
class Program
{
static void Main(string[] args)
{
Random rng = new Random();
double sum = 0, avrg, min=double.MaxValue;
List<Round> Circles = new List<Round>();
Console.WriteLine("Значення радiусiв в списку: ");
for (int i = 0; i < 10; i++)
{
Circles.Add(new Round(rng.Next(1,100)));
Console.WriteLine(Circles[i].Radius);
sum += Circles[i].Radius;
}

avrg=sum/Circles.Count;
Console.WriteLine("Середнє значення з масиву: "+avrg);
foreach (Round r in Circles)
{
min = (Math.Abs(r.Radius - avrg) < Math.Abs(min-avrg)) ? r.Radius : min;
}
Console.WriteLine("Найближчим до середнього значення радiусу в масивi є коло з радiусом " + min);
}
}
}

Tony 19 янв 2015 16:52
Добил таки имеющийся на данный момент курс. Выкладываю, что вышло в последнем уроке и с нетерпением жду продолжения. Огромное спасибо авторам.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication10
{
struct Circle
{
private uint Radius;

public Circle (uint Radiuss)
{
this.Radius = Radiuss;
}

public uint CircleRadius()
{
return this.Radius;
}
}

class Program
{
static void Main(string[] args)
{
List<uint> Radiuses = new List<uint>();
for (int i = 0; i < 5; i++)
{
Circle NewCircle = new Circle(Convert.ToUInt16(Console.ReadLine()));
Radiuses.Add(NewCircle.CircleRadius());
}
double middle = 0;
foreach (uint a in Radiuses)
{
middle += a;
}
middle = middle / Radiuses.Count;
uint near = 0;
foreach(uint el in Radiuses)
{
if (Math.Pow((middle - el),2) < Math.Pow((middle - near),2))
near = el;

}
Console.WriteLine("Nearest to the middle is element with radius " + near);
Console.ReadKey();
}

}
}


Влад 16 янв 2015 12:07
Сделайте урок про Асинхронные делегаты.

pinguin-linuxoid 29 дек 2014 16:04
Попытка 2 - теперь можно оперировать методом структуры только будячи ее обьектом


namespace Lesson_32_struct
{
public struct Circle
{

private static uint Squere = 0;

public uint GetSquere(uint[] a)
{

foreach (uint b in a)
{
Squere += b;
}

Squere /= (uint)a.Length;

Squere = (uint)(Math.PI) * (Squere * Squere);

return Squere;
}

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

uint[] list = { 2, 3, 4 };
uint[] b = { 23, 18, 24 };

Circle type;
Circle type2;

Console.WriteLine("Squere of type is " + type.GetSquere(list));
Console.WriteLine("Squere of type2 is " + type2.GetSquere(b));



Console.ReadKey();

}
}
}

pinguin-linuxoid 29 дек 2014 15:11
ДОброго времени суток уважаемый Админ. Я совершенно не понял задание, но сделать попытался.
1 скажите - сделал ли я то что надо?
2 Что нужно было б подправить.

Благодарю.



namespace Lesson_32_struct
{
struct Circle
{
private static uint Radius = 0;
public static uint Squere;


public static uint GetSquere(uint[] a)
{


foreach (uint b in a)
{
Radius += b;
}

Radius /= (uint)a.Length;

Squere = (uint)(Math.PI) * (Radius * Radius);

return Radius;
}

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

uint[] list = { 2, 3, 4 };


Console.WriteLine("Radius is " + Circle.GetSquere(list));
Console.WriteLine("Squere is " + Circle.Squere);


Console.ReadKey();

}
}
}

Максим 22 дек 2014 19:14
Nurdaulet
---
Предпочтительно использовать классы, но для простых типов, например Person (человек), экземпляров которых в программе будет много, лучше будет использовать структуры для лучшей производительности. Если вам трудно сделать выбор между классом и структурой, выбирайте класс.

Nurdaulet 22 дек 2014 01:31
Здравствуйте! Спасибо за ваши уроки!
А можете примерно сказать, где именно использует структуры? Интересует все области программирования.


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

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


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

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

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

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

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

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

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