@@ -15,7 +15,7 @@ public partial class MainWindow : Window
1515 {
1616 List < string > ArrayNameOfAlgorithm = new List < string > ( ) { "Кодирование Хаффмана" , "Коды Фано-Шеннона" ,
1717 "Арифметическое кодирование" , "Алгоритм RLE и преобразование Барроуза-Уилера" ,
18- "Словарный метод сжатия LZ77" , "Код Хемминга" , "Линейный код тима (5,2)" } ;
18+ "Словарный метод сжатия LZ77" , "Код Хемминга" , "Линейный код тима (5,2)" , "Словарный метод сжатия LZ78" } ;
1919 int IndexOfCurrentAlgorithm = 0 ;
2020 List < Border > Borders = new List < Border > ( ) ;
2121 public MainWindow ( )
@@ -76,6 +76,16 @@ private void LZ77ClicButton(object sender, RoutedEventArgs e)
7676 RLE_LZ77_Border . Visibility = Visibility . Visible ;
7777 }
7878
79+ private void LZ78ClicButton ( object sender , RoutedEventArgs e )
80+ {
81+ IndexOfCurrentAlgorithm = 7 ;
82+ foreach ( var item in Borders )
83+ item . Visibility = Visibility . Hidden ;
84+ NameOfAlgorithm . Text = ArrayNameOfAlgorithm [ 7 ] ;
85+ ClearRLE_LZ77_Border ( ) ;
86+ RLE_LZ77_Border . Visibility = Visibility . Visible ;
87+ }
88+
7989 private void HammingClicButton ( object sender , RoutedEventArgs e )
8090 {
8191 IndexOfCurrentAlgorithm = 5 ;
@@ -164,6 +174,16 @@ private void EncodeClicButton(object sender, RoutedEventArgs e)
164174 break ;
165175 case 6 :
166176 break ;
177+ case 7 :
178+ Text1AfterDecoding . Text = string . Empty ;
179+ if ( Text1ForEncoding . Text . Length == 0 ) { NoTextForEncoding = true ; break ; }
180+
181+ var Lz78 = LZ78Algm . Encode ( Text1ForEncoding . Text ) ;
182+ foreach ( var i in Lz78 . GetAnswer ( ) )
183+ str += i . ToString ( ) ;
184+ Encoded1Text . Text = str ;
185+ CompressionRatio1 . Text = Lz78 . GetCompressionRatio ( ) . ToString ( ) ;
186+ break ;
167187 }
168188 if ( NoTextForEncoding )
169189 {
@@ -222,6 +242,12 @@ private void DecodeClicButton(object sender, RoutedEventArgs e)
222242 break ;
223243 case 6 :
224244 break ;
245+ case 7 :
246+ if ( Encoded1Text . Text . Length == 0 ) { NoTextForDecoding = true ; break ; }
247+
248+ var Lz78 = LZ78Algm . Decode ( Encoded1Text . Text ) ;
249+ Text1AfterDecoding . Text = Lz78 . GetAnswer ( ) ;
250+ break ;
225251 }
226252 if ( NoTextForDecoding )
227253 {
@@ -249,7 +275,7 @@ private void EncodeFromFileClicButton(object sender, RoutedEventArgs e)
249275 using ( StreamReader sr = new StreamReader ( filename ) )
250276 TextForEncoding . Text = sr . ReadToEnd ( ) ;
251277 }
252- if ( new List < int > ( ) { 3 , 4 } . Contains ( IndexOfCurrentAlgorithm ) )
278+ if ( new List < int > ( ) { 3 , 4 , 7 } . Contains ( IndexOfCurrentAlgorithm ) )
253279 {
254280 ClearRLE_LZ77_Border ( ) ;
255281 using ( StreamReader sr = new StreamReader ( filename ) )
@@ -277,7 +303,7 @@ private void DecodeFromFileClicButton(object sender, RoutedEventArgs e)
277303 {
278304 string filename = dlg . FileName ;
279305
280- // НУЖНО ОПРЕДЕЛИТЬСЯ С ФОРМАТОМ ВХОДНОГО ФАЙКА ( КАКОЙ РАЗДЕЛИТЕЛЬ МЕЖДУ ДАННЫМИ)
306+ // НУЖНО ОПРЕДЕЛИТЬСЯ С ФОРМАТОМ ВХОДНОГО ФАЙЛА ( КАКОЙ РАЗДЕЛИТЕЛЬ МЕЖДУ ДАННЫМИ)
281307
282308 //if (new List<int>() { 0, 1, 2 }.Contains(IndexOfCurrentAlgorithm))
283309 //{
@@ -305,7 +331,7 @@ private void ClearAllClicButton(object sender, RoutedEventArgs e)
305331 {
306332 if ( new List < int > ( ) { 0 , 1 , 2 } . Contains ( IndexOfCurrentAlgorithm ) )
307333 ClearHuf_Fano_Arith_Border ( ) ;
308- if ( new List < int > ( ) { 3 , 4 } . Contains ( IndexOfCurrentAlgorithm ) )
334+ if ( new List < int > ( ) { 3 , 4 , 7 } . Contains ( IndexOfCurrentAlgorithm ) )
309335 ClearRLE_LZ77_Border ( ) ;
310336 if ( new List < int > ( ) { 5 } . Contains ( IndexOfCurrentAlgorithm ) )
311337 ClearHam_Border ( ) ;
0 commit comments