powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / массивы в с++
22 сообщений из 47, страница 2 из 2
массивы в с++
    #38459474
unker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,

он считает верно только тогда, когда элементы по строке вводишь в порядке возрастания, из-за чего это может быть?
...
Рейтинг: 0 / 0
массивы в с++
    #38459505
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unker,

После некоторых исправлений получил след. результат:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 
09 06 -3 05   [9.00, -3.00]
16 -7 04 09   [16.00, -7.00]
08 03 09 15   [15.00, 3.00]
13 10 -2 -5   [13.00, -5.00]
d[0] = 0.50 * 9.00 + (1-0.50) * -3.00 = 3.00
d[1] = 0.50 * 16.00 + (1-0.50) * -7.00 = 4.50
d[2] = 0.50 * 15.00 + (1-0.50) * 3.00 = 9.00
d[3] = 0.50 * 13.00 + (1-0.50) * -5.00 = 4.00
Maximum is D[2] = 9.000000
 

В ответе получается не 6.
...
Рейтинг: 0 / 0
массивы в с++
    #38459509
unker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,
а можно исправленный вариант программы?
так все верно получилось, там просто -3 на 3 исправлено. Буду очень благодарен?
...
Рейтинг: 0 / 0
массивы в с++
    #38459517
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unker,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
#include <iostream>
using namespace std;

#define N 4
#define FLT_MAX         3.402823466e+38F
#define FLT_MIN         1.175494351e-38F

int main() {
	float a[N][N], b[N], c[N], d[N], e, max;
	int i, j, p;
	cout << "e = ";
	cin >> e;
	max = FLT_MIN;
	for (i = 0; i < N; i++) {
		b[i] = FLT_MAX;
		c[i] = FLT_MIN;
		for (j = 0; j < N; j++) {
			cout << "a[" << i + 1 << "][" << j + 1 << "] = ";
			cin >> a[i][j];
			if (a[i][j] > c[i]) {
				c[i] = a[i][j];
			}
			if (a[i][j] < b[i]) {
				b[i] = a[i][j];
			}
		}
	}
	for (int i = 0; i < N; i++) {
		d[i] = e * c[i] + (1 - e) * b[i];
		if (d[i] > max) {
			max = d[i];
			p = i;
		}
	}
	cout << "Maximum is D[" << p << "] = " << max << endl;
	return 0;
}
...
Рейтинг: 0 / 0
массивы в с++
    #38459533
unker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,

огромное спасибо))))
...
Рейтинг: 0 / 0
массивы в с++
    #38467806
unker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в связи с чем возникает ошибка Программа "C:\Users\SA\Desktop\4 семестр\х\х\obj\x86\Debug\х.exe" не содержит статического метода "Main", подходящего для точки входа((
как исправить?
вот текст программы:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class TreeCompare : IComparer<KeyValuePair<string, int>>
{
    public int Compare(KeyValuePair<string, int> kvp1, KeyValuePair<string, int> kvp2)
    {
        return kvp1.Value.CompareTo(kvp2.Value);
    }
}

class HaffmanTree
{
    private List<KeyValuePair<string, int>> tree;
    private List<KeyValuePair<string, bool>> listOfFreeNodes;
    public HaffmanTree(char[] arraOfFrequency, int[] countOfFrequency)
    {
        string[] strArrayOfFrequency = new string[arraOfFrequency.Length];
        for (int i = 0; i < strArrayOfFrequency.Length; i++)
        {
            strArrayOfFrequency[i] = Convert.ToString(arraOfFrequency[i]);
        }

        tree = new List<KeyValuePair<string, int>>();
        for (int i = 0; i < arraOfFrequency.Length; i++)
        {
            tree.Insert(i, new KeyValuePair<string, int>(strArrayOfFrequency[i], countOfFrequency[i]));
        }

        listOfFreeNodes = new List<KeyValuePair<string, bool>>();
    }

    private void BuildListOfFreeNodes()
    {
        foreach (KeyValuePair<string, int> node in tree)
        {
            listOfFreeNodes.Add(new KeyValuePair<string, bool>(node.Key, true));
        }
    }

    private bool IsFreeElement(string key)
    {
        return listOfFreeNodes.Any(node => key == node.Key && node.Value == true);
    }

    public void BuildTree()
    {
        IComparer<KeyValuePair<string, int>> comparer = new TreeCompare();
        tree.Sort(comparer);
        BuildListOfFreeNodes();
        int countTrueValue = 0;
        while (countTrueValue != 1)
        {
            int indMin1 = 0, indMin2 = 0;
            int min1 = int.MaxValue, min2 = int.MaxValue;
            string keyMin1 = string.Empty;
            string keyMin2 = string.Empty;
            foreach (KeyValuePair<string, int> kvp in tree.Where(kvp => kvp.Value < min1 && IsFreeElement(kvp.Key)))
            {
                keyMin1 = kvp.Key;
                indMin1 = tree.IndexOf(kvp);
                min1 = kvp.Value;
                listOfFreeNodes[indMin1] = new KeyValuePair<string, bool>(keyMin1, false);
                foreach (KeyValuePair<string, int> kvp2 in tree.Where(kvp2 => kvp2.Value < min2 && (kvp2.Value == min1 || kvp2.Value > min1) && kvp2.Key != keyMin1 && IsFreeElement(kvp2.Key)))
                {
                    indMin2 = tree.IndexOf(kvp2);
                    min2 = kvp2.Value;
                    keyMin2 = kvp2.Key;
                }
                listOfFreeNodes[indMin2] = new KeyValuePair<string, bool>(keyMin2, false);
            }
            string result = keyMin1 + keyMin2;
            tree.Add(new KeyValuePair<string, int>(result, min1 + min2));
            listOfFreeNodes.Add(new KeyValuePair<string, bool>(result, true));
            countTrueValue = listOfFreeNodes.Count(kvp => kvp.Value == true);
        }
    }

    public void ShowHaffmanTree()
    {
        Console.WriteLine("Tree");
        foreach (KeyValuePair<string, int> node in tree)
        {
            Console.WriteLine("{0} {1}", node.Key, node.Value);
        }
        Console.WriteLine();
        Console.WriteLine("List of free nodes");
        foreach (KeyValuePair<string, bool> node in listOfFreeNodes)
        {
            Console.WriteLine("{0} {1}", node.Key, node.Value);
        }
    }
}
...
Рейтинг: 0 / 0
массивы в с++
    #38467826
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unkerкак исправить?
Код: plaintext
1.
2.
3.
void main() {
...
}
...
Рейтинг: 0 / 0
массивы в с++
    #38467842
unker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,

а где это добавить перед class TreeCompare : IComparer<KeyValuePair<string, int>>
...
Рейтинг: 0 / 0
массивы в с++
    #38467846
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unker,

Эт ж C#-код! тынц
...
Рейтинг: 0 / 0
массивы в с++
    #38467849
unker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,

да я знаю что это С шарп, можешь помочь исправить программу эту? очень нужно(
...
Рейтинг: 0 / 0
массивы в с++
    #38467862
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unker,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
//.h file code:

#include <string>
#include <vector>
#include <iostream>
#include "stringconverter.h"

//C# TO C++ CONVERTER TODO TASK: The .NET System namespace is not available from native C++:
//using namespace System;
//C# TO C++ CONVERTER TODO TASK: The .NET System namespace is not available from native C++:
//using namespace System::Collections::Generic;
//C# TO C++ CONVERTER TODO TASK: The .NET System namespace is not available from native C++:
//using namespace System::Linq;
//C# TO C++ CONVERTER TODO TASK: The .NET System namespace is not available from native C++:
//using namespace System::Text;
class TreeCompare : public IComparer<KeyValuePair<std::wstring, int>*>
{
public:
int Compare(KeyValuePair<std::wstring, int> kvp1, KeyValuePair<std::wstring, int> kvp2);
};

class HaffmanTree
{
private:
std::vector<KeyValuePair<std::wstring, int>*> tree;
std::vector<KeyValuePair<std::wstring, bool>*> listOfFreeNodes;
public:
HaffmanTree(wchar_t arraOfFrequency[], int countOfFrequency[]);

private:
void BuildListOfFreeNodes();

bool IsFreeElement(const std::wstring &key);

public:
void BuildTree();

void ShowHaffmanTree();
};

//----------------------------------------------------------------------------------------
//	Copyright © 2004 - 2013 Tangible Software Solutions Inc.
//	This class can be used by anyone provided that the copyright notice remains intact.
//
//	This class is used to replace some conversions to or from strings.
//----------------------------------------------------------------------------------------
#include <sstream>

class StringConverterHelper
{
public:
	template<typename T>
	static std::wstring toString(const T &subject)
	{
		std::wostringstream ss;
		ss << subject;
		return ss.str();
	}

	template<typename T>
	static T fromString(const std::wstring &subject)
	{
		std::wistringstream ss(subject);
		T target;
		ss >> target;
		return target;
	}
};

//.cpp file code:

//C# TO C++ CONVERTER TODO TASK: The .NET System namespace is not available from native C++:
//using namespace System;
//C# TO C++ CONVERTER TODO TASK: The .NET System namespace is not available from native C++:
//using namespace System::Collections::Generic;
//C# TO C++ CONVERTER TODO TASK: The .NET System namespace is not available from native C++:
//using namespace System::Linq;
//C# TO C++ CONVERTER TODO TASK: The .NET System namespace is not available from native C++:
//using namespace System::Text;

int TreeCompare::Compare(KeyValuePair<std::wstring, int> kvp1, KeyValuePair<std::wstring, int> kvp2)
{
return kvp1.Value->compare(kvp2.Value);
}

HaffmanTree::HaffmanTree(wchar_t arraOfFrequency[], int countOfFrequency[])
{
std::wstring strArrayOfFrequency[sizeof(arraOfFrequency) / sizeof(arraOfFrequency[0])];
for (int i = 0; i < sizeof(strArrayOfFrequency) / sizeof(strArrayOfFrequency[0]); i++)
{
strArrayOfFrequency[i] = StringConverterHelper::toString(arraOfFrequency[i]);
}

tree = std::vector<KeyValuePair<std::wstring, int>*>();
for (int i = 0; i < sizeof(arraOfFrequency) / sizeof(arraOfFrequency[0]); i++)
{
tree.Insert(i, KeyValuePair<std::wstring, int>(strArrayOfFrequency[i], countOfFrequency[i]));
}

listOfFreeNodes = std::vector<KeyValuePair<std::wstring, bool>*>();
}

void HaffmanTree::BuildListOfFreeNodes()
{
for (auto node : tree)
{
listOfFreeNodes.push_back(KeyValuePair<std::wstring, bool>(node.first, true));
}
}

bool HaffmanTree::IsFreeElement(const std::wstring &key)
{
return listOfFreeNodes.Any([&] (void *node)
{
	key == node::Key && node->Value == true;
});
}

void HaffmanTree::BuildTree()
{
IComparer<KeyValuePair<std::wstring, int>*> *comparer = new TreeCompare();
tree.Sort(comparer);
BuildListOfFreeNodes();
int countTrueValue = 0;
while (countTrueValue != 1)
{
int indMin1 = 0, indMin2 = 0;
int min1 = int::MaxValue, min2 = int::MaxValue;
std::wstring keyMin1 = L"";
std::wstring keyMin2 = L"";
//C# TO C++ CONVERTER TODO TASK: The following line could not be converted:
foreach (KeyValuePair<string, int> kvp in tree.Where([&] (void *kvp)
{
	kvp->Value < min1 && IsFreeElement(kvp::Key);
}))
{
keyMin1 = kvp::Key;
indMin1 = tree.find(kvp);
min1 = kvp->Value;
listOfFreeNodes[indMin1] = KeyValuePair<std::wstring, bool>(keyMin1, false);
//C# TO C++ CONVERTER TODO TASK: The following line could not be converted:
foreach (KeyValuePair<string, int> kvp2 in tree.Where([&] (void *kvp2)
{
	kvp2->Value < min2 && (kvp2->Value == min1 || kvp2->Value > min1) && kvp2::Key != keyMin1 && IsFreeElement(kvp2::Key);
}))
{
indMin2 = tree.find(kvp2);
min2 = kvp2->Value;
keyMin2 = kvp2::Key;
}
listOfFreeNodes[indMin2] = KeyValuePair<std::wstring, bool>(keyMin2, false);
}
std::wstring result = keyMin1 + keyMin2;
tree.push_back(KeyValuePair<std::wstring, int>(result, min1 + min2));
listOfFreeNodes.push_back(KeyValuePair<std::wstring, bool>(result, true));
countTrueValue = listOfFreeNodes.size()([&] (void *kvp)
{
	kvp->Value == true;
});
}
}

void HaffmanTree::ShowHaffmanTree()
{
std::cout << std::wstring(L"Tree") << std::endl;
for (auto node : tree)
{
std::cout << node.first << std::wstring(L" ") << node.second << std::endl;
}
std::cout << std::endl;
std::cout << std::wstring(L"List of free nodes") << std::endl;
for (auto node : listOfFreeNodes)
{
std::cout << node.first << std::wstring(L" ") << node.second << std::endl;
}
}

P.S.
За правильность кода не ручаюсь, т.к. преобразовал при помощи этой утилиты

P.P.S.
Правильнее будет, если задать этот вопрос в этом форуме
...
Рейтинг: 0 / 0
массивы в с++
    #38467871
unker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо) а вот этот код на с++, он должен работать?
...
Рейтинг: 0 / 0
массивы в с++
    #38467885
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unker,

По-идее - да.
...
Рейтинг: 0 / 0
массивы в с++
    #38467887
unker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,

fatal error C1083: Не удается открыть файл включение: stringconverter.h: No such file or directory
как от этого избавится не подскажешь?
...
Рейтинг: 0 / 0
массивы в с++
    #38467897
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unker,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
//.h file code:

#include <string>
#include <vector>
#include <iostream>
#include <sstream>

using namespace System;
using namespace System::Collections::Generic;
using namespace System::Linq;
using namespace System::Text;

class TreeCompare : public IComparer<KeyValuePair<std::wstring, int>*>
{
public:
int Compare(KeyValuePair<std::wstring, int> kvp1, KeyValuePair<std::wstring, int> kvp2);
};

class HaffmanTree
{
private:
std::vector<KeyValuePair<std::wstring, int>*> tree;
std::vector<KeyValuePair<std::wstring, bool>*> listOfFreeNodes;
public:
HaffmanTree(wchar_t arraOfFrequency[], int countOfFrequency[]);

private:
void BuildListOfFreeNodes();

bool IsFreeElement(const std::wstring &key);

public:
void BuildTree();

void ShowHaffmanTree();
};

class StringConverterHelper
{
public:
	template<typename T>
	static std::wstring toString(const T &subject)
	{
		std::wostringstream ss;
		ss << subject;
		return ss.str();
	}

	template<typename T>
	static T fromString(const std::wstring &subject)
	{
		std::wistringstream ss(subject);
		T target;
		ss >> target;
		return target;
	}
};

int TreeCompare::Compare(KeyValuePair<std::wstring, int> kvp1, KeyValuePair<std::wstring, int> kvp2)
{
return kvp1.Value->compare(kvp2.Value);
}

HaffmanTree::HaffmanTree(wchar_t arraOfFrequency[], int countOfFrequency[])
{
std::wstring strArrayOfFrequency[sizeof(arraOfFrequency) / sizeof(arraOfFrequency[0])];
for (int i = 0; i < sizeof(strArrayOfFrequency) / sizeof(strArrayOfFrequency[0]); i++)
{
strArrayOfFrequency[i] = StringConverterHelper::toString(arraOfFrequency[i]);
}

tree = std::vector<KeyValuePair<std::wstring, int>*>();
for (int i = 0; i < sizeof(arraOfFrequency) / sizeof(arraOfFrequency[0]); i++)
{
tree.Insert(i, KeyValuePair<std::wstring, int>(strArrayOfFrequency[i], countOfFrequency[i]));
}

listOfFreeNodes = std::vector<KeyValuePair<std::wstring, bool>*>();
}

void HaffmanTree::BuildListOfFreeNodes()
{
for (auto node : tree)
{
listOfFreeNodes.push_back(KeyValuePair<std::wstring, bool>(node.first, true));
}
}

bool HaffmanTree::IsFreeElement(const std::wstring &key)
{
return listOfFreeNodes.Any([&] (void *node)
{
	key == node::Key && node->Value == true;
});
}

void HaffmanTree::BuildTree()
{
IComparer<KeyValuePair<std::wstring, int>*> *comparer = new TreeCompare();
tree.Sort(comparer);
BuildListOfFreeNodes();
int countTrueValue = 0;
while (countTrueValue != 1)
{
int indMin1 = 0, indMin2 = 0;
int min1 = int::MaxValue, min2 = int::MaxValue;
std::wstring keyMin1 = L"";
std::wstring keyMin2 = L"";
//C# TO C++ CONVERTER TODO TASK: The following line could not be converted:
foreach (KeyValuePair<string, int> kvp in tree.Where([&] (void *kvp)
{
	kvp->Value < min1 && IsFreeElement(kvp::Key);
}))
{
keyMin1 = kvp::Key;
indMin1 = tree.find(kvp);
min1 = kvp->Value;
listOfFreeNodes[indMin1] = KeyValuePair<std::wstring, bool>(keyMin1, false);
//C# TO C++ CONVERTER TODO TASK: The following line could not be converted:
foreach (KeyValuePair<string, int> kvp2 in tree.Where([&] (void *kvp2)
{
	kvp2->Value < min2 && (kvp2->Value == min1 || kvp2->Value > min1) && kvp2::Key != keyMin1 && IsFreeElement(kvp2::Key);
}))
{
indMin2 = tree.find(kvp2);
min2 = kvp2->Value;
keyMin2 = kvp2::Key;
}
listOfFreeNodes[indMin2] = KeyValuePair<std::wstring, bool>(keyMin2, false);
}
std::wstring result = keyMin1 + keyMin2;
tree.push_back(KeyValuePair<std::wstring, int>(result, min1 + min2));
listOfFreeNodes.push_back(KeyValuePair<std::wstring, bool>(result, true));
countTrueValue = listOfFreeNodes.size()([&] (void *kvp)
{
	kvp->Value == true;
});
}
}

void HaffmanTree::ShowHaffmanTree()
{
std::cout << std::wstring(L"Tree") << std::endl;
for (auto node : tree)
{
std::cout << node.first << std::wstring(L" ") << node.second << std::endl;
}
std::cout << std::endl;
std::cout << std::wstring(L"List of free nodes") << std::endl;
for (auto node : listOfFreeNodes)
{
std::cout << node.first << std::wstring(L" ") << node.second << std::endl;
}
}

void main() {
}

...
Рейтинг: 0 / 0
массивы в с++
    #38467898
unker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,
так ему не нравится(
System не нравится,
уйма ошибок подобного рода
...
Рейтинг: 0 / 0
массивы в с++
    #38467910
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unker,

Криво сконвертировалось (((
...
Рейтинг: 0 / 0
массивы в с++
    #38467911
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
using namespace System;
using namespace System::Collections::Generic;
using namespace System::Linq;
using namespace System::Text;

private ref class TreeCompare : IComparer<KeyValuePair<String^, int>^>
{
public:
	virtual int Compare(KeyValuePair<String^, int> kvp1, KeyValuePair<String^, int> kvp2) sealed;
};

private ref class HaffmanTree
{
private:
	List<KeyValuePair<String^, int>^> ^tree;
	List<KeyValuePair<String^, bool>^> ^listOfFreeNodes;
public:
	HaffmanTree(array<Char> ^arraOfFrequency, array<int> ^countOfFrequency);

private:
	void BuildListOfFreeNodes();

	bool IsFreeElement(String ^key);

public:
	void BuildTree();

private:
void AnonymousMethod1(Object ^kvp);

public:
	void ShowHaffmanTree();
};

int TreeCompare::Compare(KeyValuePair<String^, int> kvp1, KeyValuePair<String^, int> kvp2)
{
	return kvp1.Value->CompareTo(kvp2.Value);
}

HaffmanTree::HaffmanTree(array<Char> ^arraOfFrequency, array<int> ^countOfFrequency)
{
	array<String^> ^strArrayOfFrequency = gcnew array<String^>(arraOfFrequency->Length);
	for (int i = 0; i < strArrayOfFrequency->Length; i++)
	{
		strArrayOfFrequency[i] = Convert::ToString(arraOfFrequency[i]);
	}

	tree = gcnew List<KeyValuePair<String^, int>^>();
	for (int i = 0; i < arraOfFrequency->Length; i++)
	{
		tree->Insert(i, KeyValuePair<String^, int>(strArrayOfFrequency[i], countOfFrequency[i]));
	}

	listOfFreeNodes = gcnew List<KeyValuePair<String^, bool>^>();
}

void HaffmanTree::BuildListOfFreeNodes()
{
	for each (KeyValuePair<String^, int> ^node in tree)
	{
		listOfFreeNodes->Add(KeyValuePair<String^, bool>(node.Key, true));
	}
}

bool HaffmanTree::IsFreeElement(String ^key)
{
	return listOfFreeNodes->Any(delegate(Object^ node));
	{
		key == node::Key && node->Value == true;
	}
}

void HaffmanTree::BuildTree()
{
	IComparer<KeyValuePair<String^, int>^> ^comparer = gcnew TreeCompare();
	tree->Sort(comparer);
	BuildListOfFreeNodes();
	int countTrueValue = 0;
	while (countTrueValue != 1)
	{
		int indMin1 = 0, indMin2 = 0;
		int min1 = int::MaxValue, min2 = int::MaxValue;
		String ^keyMin1 = String::Empty;
		String ^keyMin2 = String::Empty;
		for each (KeyValuePair<String^, int> ^kvp in tree->Where(delegate(Object^ kvp)))
		{
			kvp.Value < min1 && IsFreeElement(kvp.Key);
		}
		{
			keyMin1 = kvp::Key;
			indMin1 = tree->IndexOf(kvp);
			min1 = kvp->Value;
			listOfFreeNodes[indMin1] = KeyValuePair<String^, bool>(keyMin1, false);
			for each (KeyValuePair<String^, int> ^kvp2 in tree->Where(delegate(Object^ kvp2)))
			{
				kvp2.Value < min2 && (kvp2.Value == min1 || kvp2.Value > min1) && kvp2.Key != keyMin1 && IsFreeElement(kvp2.Key);
			}
			{
				indMin2 = tree->IndexOf(kvp2);
				min2 = kvp2->Value;
				keyMin2 = kvp2::Key;
			}
			listOfFreeNodes[indMin2] = KeyValuePair<String^, bool>(keyMin2, false);
		}
		String ^result = keyMin1 + keyMin2;
		tree->Add(KeyValuePair<String^, int>(result, min1 + min2));
		listOfFreeNodes->Add(KeyValuePair<String^, bool>(result, true));
		countTrueValue = listOfFreeNodes->Count(AnonymousMethod1);
	}
}

void HaffmanTree::AnonymousMethod1(Object ^kvp)
{
		kvp->Value == true;
}

void HaffmanTree::ShowHaffmanTree()
{
	Console::WriteLine("Tree");
	for each (KeyValuePair<String^, int> ^node in tree)
	{
		Console::WriteLine("{0} {1}", node.Key, node.Value);
	}
	Console::WriteLine();
	Console::WriteLine("List of free nodes");
	for each (KeyValuePair<String^, bool> ^node in listOfFreeNodes)
	{
		Console::WriteLine("{0} {1}", node.Key, node.Value);
	}
}

int main(array<System::String ^> ^args)
{
	Console::WriteLine(L"Hello World");
	return 0;
}

...
Рейтинг: 0 / 0
массивы в с++
    #38467914
unker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,

а можешь в ворде кинуть, просто может там косяки из-за того что меняет что-то этот форум
...
Рейтинг: 0 / 0
массивы в с++
    #38467922
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего - ошибка в компиляторе.
Программа-то 100% без ошибок
...
Рейтинг: 0 / 0
массивы в с++
    #38468079
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyСкорее всего - ошибка в компиляторе.+1000


unker,

Здесь нужна как минимум 2008-я студия (.NET 3/3.5), где присутствует System.Linq
...
Рейтинг: 0 / 0
массивы в с++
    #38468080
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unker,
...
Рейтинг: 0 / 0
22 сообщений из 47, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / массивы в с++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]