Кому порешать задачи - пишите сюда

quant

yeah
может кому пригодится прожки для решения задач с ОДЗ по Теории информации (Тулякова, СумДУ)
программы на С++, подставляйте свои данные и выполняйте
вторую модифицировать будет сложнее, но считать вручную всяко напряжнее

1. Дискретна випадкова величина X задана таким розподілом ймовірностей: P(X=A)=1/3, P(X=B)=1/2, P(X=C)=1/6. Побудувати код Хаффмена.
Код:
#include <cstdio>

int gcd(const int& a, const int& b) { return b ? gcd(b, a % b) : a; }

struct frac {
	int up, lo;
	bool operator< (const frac& to) const { return up * to.lo < to.up * lo; }
	frac(const int& a, const int& b) : up(a), lo(b) {}
	frac& operator+= (const frac& plus) {
		up = up * plus.lo + plus.up * lo;
		lo *= plus.lo;
		int temp = gcd(lo, up);
		up /= temp;
		lo /= temp;
		return *this; }
	frac operator+ (const frac& plus) const {
		frac temp = *this;
		return temp += plus; }
	void print (const char& end) { printf ("%d/%d%c", up, lo, end); } }
maj[] = { frac(1, 9), frac(1, 6), frac(1, 18), frac(1, 6), frac(1, 4), frac(1, 12), frac(1, 18), frac(1, 12) , frac(1, 36) };
int i, j, co, a, b, N;
bool us[100], first;

int main () {
	for(i = 0, N = sizeof(maj) / sizeof(frac); i < N; us[i++] = false);
	for(co = 1; co < N; ++co) {
		first = true;
		for(i = 1; i < N; ++i) {
			for(j = 0; !us[i] && j < i; ++j) {
				if(!us[j] && (first || maj[i] + maj[j] < maj[a] + maj[b])) {
					a = i, b = j;
					first = false; } } }
		maj[a].print('+');
		maj[b].print('=');
		(maj[a] += maj[b]).print('\n');
		us[b] = true; }
	return 0; }
2. Розпакувати повідомлення довжиною 6 символів, закодоване за арифметичним алгоритмом. Код повідомлення 101000001. Таблиця кодера така: A є [2/3; 1), B є [1/5; 2/3), C[0, 1/5)
Код:
#include <cstdio>

int i;
double a = 0., b = .2, c = 2./3., d = 1., x = 321./512.;

int main () {
	for(i = 0; i < 6; ++i) {
		printf ("C: %lf - %lf\nB: %lf - %lf\nA: %lf - %lf\n", a, b, b, c, c, d);
		if(x >= a && x < b) {
			puts("vibrali C\n");
			d = b;
		} else if(x >= b && x < c) {
			puts("vibrali B\n");
			a = b;
			d = c;
		} else if(x >= c && x < d) {
			puts("vibrali A\n");
			a = c; }
		b = a + (d - a) * .2;
		c = a + (d - a) * (2./3.); }
	return 0; }
 

Cris

Member
может кому пригодится прожки для решения задач с ОДЗ по Теории информации (Тулякова, СумДУ)
программы на С++, подставляйте свои данные и выполняйте
вторую модифицировать будет сложнее, но считать вручную всяко напряжнее

1. Дискретна випадкова величина X задана таким розподілом ймовірностей: P(X=A)=1/3, P(X=B)=1/2, P(X=C)=1/6. Побудувати код Хаффмена.
Код:
#include <cstdio>

int gcd(const int& a, const int& b) { return b ? gcd(b, a % b) : a; }

struct frac {
	int up, lo;
	bool operator< (const frac& to) const { return up * to.lo < to.up * lo; }
	frac(const int& a, const int& b) : up(a), lo(b) {}
	frac& operator+= (const frac& plus) {
		up = up * plus.lo + plus.up * lo;
		lo *= plus.lo;
		int temp = gcd(lo, up);
		up /= temp;
		lo /= temp;
		return *this; }
	frac operator+ (const frac& plus) const {
		frac temp = *this;
		return temp += plus; }
	void print (const char& end) { printf ("%d/%d%c", up, lo, end); } }
maj[] = { frac(1, 9), frac(1, 6), frac(1, 18), frac(1, 6), frac(1, 4), frac(1, 12), frac(1, 18), frac(1, 12) , frac(1, 36) };
int i, j, co, a, b, N;
bool us[100], first;

int main () {
	for(i = 0, N = sizeof(maj) / sizeof(frac); i < N; us[i++] = false);
	for(co = 1; co < N; ++co) {
		first = true;
		for(i = 1; i < N; ++i) {
			for(j = 0; !us[i] && j < i; ++j) {
				if(!us[j] && (first || maj[i] + maj[j] < maj[a] + maj[b])) {
					a = i, b = j;
					first = false; } } }
		maj[a].print('+');
		maj[b].print('=');
		(maj[a] += maj[b]).print('\n');
		us[b] = true; }
	return 0; }
а тебе не кажеться что 4 вложеных цикла могут творить чудеса например зависание компа) или они не оч большые?)
 
W

White_Power

Guest
Кто знает Turbo Pascal,помогите!Желательно до утра,что б я уже знал это:)

begin

GraphDriver :=VGA;
GraphMode := VGAHi;
InitGraph(GraphDriver, GraphMode,'d:\bp\bgi');

line(20,440,640,440);
line(630,435,640,440);
line(630,445,640,440);

for i:=0 to 10 do
line(20+i*60,440,20+i*60,445);

for i:=0 to 5 do
begin
str(i*20, st);
OutTextxy(320+i*60,447,st);
end;

Кому не трудно,обьясните мне каждую строчку в кратце.Заранее благодарен!
 

UnFeeLing

Member
Кто знает Turbo Pascal,помогите!Желательно до утра,что б я уже знал это:)

begin

GraphDriver :=VGA;
GraphMode := VGAHi;
InitGraph(GraphDriver, GraphMode,'d:\bp\bgi');

line(20,440,640,440);
line(630,435,640,440);
line(630,445,640,440);

for i:=0 to 10 do
line(20+i*60,440,20+i*60,445);

for i:=0 to 5 do
begin
str(i*20, st);
OutTextxy(320+i*60,447,st);
end;

Кому не трудно,обьясните мне каждую строчку в кратце.Заранее благодарен!
{begin

GraphDriver :=VGA;// параметр GraphDriver задает драйвер (его код или имя)
GraphMode := VGAHi;//параметр GraphMode задает режим работы адаптера)
InitGraph(GraphDriver, GraphMode,'d:\bp\bgi');//Процедура InitGraph
определяет графическое аппаратное обеспечение,
загружает и инициализирует соответствующий графический драйвер,
переводит систему в графический режим
и передает управление вызванной программе.}

//кароче гаваря, инициализируем графику :)

line(20,440,640,440);
line(630,435,640,440);
line(630,445,640,440);

//проводит линию текущего цвета из точки (x1, y1) в точку (x2, y2). Значение текущего указателя не меняется

for i:=0 to 10 do //цикл
line(20+i*60,440,20+i*60,445);

for i:=0 to 5 do //цикл
begin
str(i*20, st);//процедура преобразует выражение i*20 в его строковое представление и помещает результат в st
OutTextxy(320+i*60,447,st);//процедура OutText используется для вывода текста в месте расположения текущего указателя, процедура OutTextXY используется для вывода текста в любом заданном месте экрана.
end;
 

Evgen2591

New Member
Помогите пожалуйста написать программу в Delphi!!!
Условие задачи такое:на шахматной доске стоит конь , нужно рассчитать за какое минимальное количество ходов конь доберётся до указанного поля,и прорисовать маршрут по которому он передвигался.
 

Cris

Member
Помогите пожалуйста написать программу в Delphi!!!
Условие задачи такое:на шахматной доске стоит конь , нужно рассчитать за какое минимальное количество ходов конь доберётся до указанного поля,и прорисовать маршрут по которому он передвигался.
на шахматной доске хорошо будет работать рекурсия - запускаем функцию с первой точки где стоит конь, дальше из нее запускаем еше все возможные ходы с этой точки(возможно 8 ходов) и на новых точках проверяем опять, когда приходим в новую точку записиваем в нее глубину рекурсии - за сколько ходов можно дойти, если число уже записано то смотрим если оно меньше чем есть шас, на эту точку не запускаем рекурсию, если больше то запускаем и так дальше... чтобы нарисовать маршрут - ити по числам записаным в масиве доски только так чтоб конь не летал фиг знает куда)
 

BarT

New Member
Народ помогите, мне надо нариовать траекторию а я без рамы как!
язик: делфи

задание: написать програму чтобы вышитывала траекторию предмета, и рисовала траекторию его полёта!

как выщитать ето пол биды а как её нарисовать хз, подскажите кто знает где можно взять програму, или хотябы как нарисовать траекторию!

Зарание спс!
 

dreamer

Member
Народ помогите, мне надо нариовать траекторию а я без рамы как!
язик: делфи

задание: написать програму чтобы вышитывала траекторию предмета, и рисовала траекторию его полёта!

как выщитать ето пол биды а как её нарисовать хз, подскажите кто знает где можно взять програму, или хотябы как нарисовать траекторию!

Зарание спс!
Есть компонент PaintBox, у него есть событие OnRepaint (если не ошибаюсь).
Там используешь его свойство Canvas и методы MoveTo, LineTo.
 
Зверху