Лабораторная работа № 4. Шаблоны классов и операторные функции.
Рассмотрим множество неотрицательных целых чисел. Двоичным кодом называется сопоставление каждому числу последовательности из нулей и единиц. При этом длины кодовых последовательностей для различных чисел могут быть разными. Рассмотрим какой-либо двоичный код. Обозначим строку из нулей и единиц, сопоставленную числу i за Si. Код называется префиксным, если для любых двух различных чисел i и j последовательность Si не является префиксом Sj (префиксом строки называется строка, получаемая из данной откидыванием любого количества (в том числе и 0) последних символов, например 0, 01 или 0110 являются префиксами строки 0110). Преимуществом префиксного кода является то, что он позволяет при передаче последовательности чисел записывать коды последовательно без разделителей. Например, если ограничиться числами 0 1 2 и 3, префиксным кодом может быть следующий: S0 = 0, S1 = 10, S2 = 110, S3 = 111. Тогда, например, получив последовательность 01101000111, мы однозначно декодируем ее как последовательность 0, 2, 1, 0, 0, 3. Ваше задание заключается в том, чтобы разработать префиксный код, который позволяет закодировать любое неотрицательное целое число.
зы анал не предлагать, кто шарит пишите хотя бы идеи)))
в условии чтото не сходитсО ( ИМХО )
0 1 2 и 3, префиксным кодом может быть следующий: S0 = 0, S1 = 10, S2 = 110, S3 = 111
число 3 в 2-ой будет 11 как ты его етими штуками представиш ?
а еще 0-лей спереди может быть сколько угодно они роли не играют
З.Ы. не ч0ткое условие
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
namespace proj1
{
[Serializable()]
public class MetaFigure : Figure
{
public List figures = new List();
public void MetaFigureSet(int firstX, int firstY, Point ScrP)
{
this.firstX = firstX;
this.firstY = firstY;
this.ScrP = ScrP;
}
// отрисовка остальных фигур
public override void Draw(Graphics g)
{
foreach (Figure f in array)
{
f.ScrP = ScrP;
if (!figures.Contains(f)) f.Draw(g);
}
DrawDash(g);
}
// отрисовка пунктиром
public override void DrawDash(Graphics g)
{
Pen P = new Pen(Color.Black, 1);
P.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
if (figures.Count != 0)
{
g.DrawRectangle(P, getrect());
foreach (Figure f in figures)
f.DrawDash(g);
}
}
// формирование прямоугольника, описывающего данные фигуры
public void InitRectangle()
{
FixOffsets();
if (figures.Count > 0)
{
X1 = figures[0].X1; X2 = figures[0].X2;
Y1 = figures[0].Y1; Y2 = figures[0].Y2;
foreach (Figure f in figures)
{
if (f.X1 < X1) X1 = f.X1; if (f.X2 > X2) X2 = f.X2;
if (f.Y1 < Y1) Y1 = f.Y1; if (f.Y2 > Y2) Y2 = f.Y2;
}
}
}