|
|
#1
_Xsion_ @ 24.12.08 01:24 |
[пожаловаться]
|
|
Лабораторная работа № 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. Ваше задание заключается в том, чтобы разработать префиксный код, который позволяет закодировать любое неотрицательное целое число.
зы анал не предлагать, кто шарит пишите хотя бы идеи)))
|
|
|
#3
sluff - wtf @ 24.12.08 01:28 |
[пожаловаться]
|
|
типа каждому числу n сопоставить полседовательность из n единиц и одного нуля? бред какой то, тупые программеры
Вместо обычного разделителя используется 0
|
|
|
#4
_Xsion_ @ 24.12.08 01:28 |
[пожаловаться]
|
|
#2
хи-хи-хи , неплохая попытка но врядли это то! еще идеи?
|
|
|
#13
r1n @ 24.12.08 02:09 |
[пожаловаться]
|
|
#12 невротебательскийзнатокнаукособеннопунктуациирусскогоязыка
|
|
|
#14
Brand @ 24.12.08 02:17 |
[пожаловаться]
|
|
в условии чтото не сходитсО ( ИМХО )
0 1 2 и 3, префиксным кодом может быть следующий: S0 = 0, S1 = 10, S2 = 110, S3 = 111
число 3 в 2-ой будет 11 как ты его етими штуками представиш ?
а еще 0-лей спереди может быть сколько угодно они роли не играют
З.Ы. не ч0ткое условие
|
|
|
#16
SUPERSHAD @ 24.12.08 02:28 |
[пожаловаться]
|
|
почему S2 не 11?
несоответствие какое. афтар просто так придумывал числа?
З.Ы. не ч0ткое условие
|
|
|
#19
_Xsion_ @ 24.12.08 02:43 |
[пожаловаться]
|
|
#18 еще как есть, это получается самая простая. естественно движок сам придумываешь... а вот на это времени уже нету((
|
|
|
#20
Brand @ 24.12.08 03:17 |
[пожаловаться]
|
|
>>19
ето ты сам придумал что в С++ есть регулярные выражения? или помог кто ?
|
|
|
#21
Зубанадюроль @ 24.12.08 03:35 |
[пожаловаться]
|
|
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();
[NonSerialized()] public List array;
[NonSerialized()] public int firstX, firstY;
public MetaFigure()
: base(0, 0, 0, 0, 0, false, Color.Black, Color.Black)
{
}
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;
}
}
}
// определение фигур из заданного списка, попадающих в заданный прямоугольник
// метод 1 - использующий маски фигур
public int FillArrayWithMask(Point p)
{
bool fadded = false;
foreach (Figure f in array)
{
int oldpenSize = f.penSize;
if (f.penSize < 6) f.penSize = 6;
if ((p.X >= (f.X1 - f.penSize / 2)) && (p.Y >= (f.Y1 - f.penSize / 2))
&& (p.X = 0))
{
if ((X2 + offsetX < S.Width) && (Y2 + offsetY < S.Height))
DoMouseMove(g, offsetX, offsetY);
else if ((X2 + offsetX >= S.Width) && (Y2 + offsetY >= S.Height))
DoMouseMove(g, S.Width - X2 - 1, S.Height - Y2 - 1);
else if (X2 + offsetX >= S.Width)
DoMouseMove(g, S.Width - X2 - 1, offsetY);
else if (Y2 + offsetY >= S.Height)
DoMouseMove(g, offsetX, S.Height - Y2 - 1);
}
else if ((X1 + offsetX < 0) && (Y1 + offsetY < 0))
DoMouseMove(g, -X1, -Y1);
else if (X1 + offsetX < 0)
{
if (Y2 + offsetY < S.Height)
DoMouseMove(g, -X1, offsetY);
else
DoMouseMove(g, -X1, S.Height - Y2 - 1);
}
else if (Y1 + offsetY < 0)
{
if (X2 + offsetX < S.Width)
DoMouseMove(g, offsetX, -Y1);
else
DoMouseMove(g, S.Width - X2 - 1, -Y1);
}
}
// сдвиг массива фигур при движении мыши
public override void DoMouseMove(Graphics g, int X2, int Y2)
{
foreach (Figure f in figures)
{
f.offsetX = offsetX = X2;
f.offsetY = offsetY = Y2;
}
Draw(g);
}
public override void FixOffsets()
{
foreach (Figure f in array)
f.FixOffsets();
base.FixOffsets();
}
public override void AlignFigure(int offsetX, int offsetY)
{
offsetX = X1; X1 = 0; X2 -= offsetX;
offsetY = Y1; Y1 = 0; Y2 -= offsetY;
foreach (Figure f in figures)
f.AlignFigure(offsetX, offsetY);
}
public override void ReturnFigure(int offsetX, int offsetY)
{
foreach (Figure f in figures)
f.ReturnFigure(offsetX, offsetY);
X1 = offsetX; X2 += offsetX; offsetX = 0;
Y1 = offsetY; Y2 += offsetY; offsetY = 0;
}
public void ClearArray()
{
figures = new List();
}
public void DeleteSelected()
{
foreach (Figure f in figures)
array.Remove(f);
ClearArray();
}
public void CopyToBuff(IntPtr handle)
{
FixOffsets();
// устанавливаем все фигуры в 0
AlignFigure(offsetX,offsetY);
BinaryFormatter bf = new BinaryFormatter();
// собственный формат
MemoryStream ofms = new MemoryStream();
bf.Serialize(ofms, this);
// metafile
Graphics gr2 = Graphics.FromHwndInternal(IntPtr.Zero);
IntPtr dc = gr2.GetHdc();
Metafile mf = new Metafile(dc, EmfType.EmfOnly);
Graphics grm = Graphics.FromImage(mf);
foreach (Figure f in figures)
f.Draw(grm);
gr2.Dispose();
grm.Dispose();
// сбрасываем полученные данные в буфер
ClipboardMetafileHelper.PutEnhMetafileOnClipboard(handle, mf.GetHenhmetafile(), ofms);
// возвращаем фигуры на места
ReturnFigure(offsetX,offsetY);
}
}
}
|
|
|
#22
Brand @ 24.12.08 03:57 |
[пожаловаться]
|
|
>>21
А до-диез(С#) то тут при чом ?
З.Ы. не читал многа стр0чеГ
|
|
|
#23
АймДжастШедов @ 24.12.08 04:22 |
[пожаловаться]
|
|
еба как сессия на jопу давит начинается дурдом на формуе...учится надо уважаемые студенты,а не баб тискать и варку задрачивать.
хи-хи-хи
|
|
|
Reply | | | |
|
|
|