Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2016, 19:02   #1
Pistoletka
Пользователь
 
Регистрация: 18.09.2016
Сообщений: 13
По умолчанию Алгоритм Хаффмана PascalABC

Здравствуйте, я сейчас пишу программу по алгоритму Хаффмана и столкнулась с проблемой: при кодировании, если ввожу такую строку "kkkkkkk", то по идее должно выдавать ошибку о том, что дерево не может быть создано. Подскажите, пожалуйста, как сделать проверку на такой случай, когда мы вводим только одну букву несколько раз?
Pistoletka вне форума Ответить с цитированием
Старый 05.11.2016, 20:08   #2
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

Код:
var s: string;
begin
  readln(s);
  var k := False;
  for var i := 1 to length(s)-1 do
    if s[i]<>s[i+1] then
      k := True;
  writeln(k);
end.
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 05.11.2016, 21:29   #3
Pistoletka
Пользователь
 
Регистрация: 18.09.2016
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Plague Посмотреть сообщение
Код:
var s: string;
begin
  readln(s);
  var k := False;
  for var i := 1 to length(s)-1 do
    if s[i]<>s[i+1] then
      k := True;
  writeln(k);
end.
Я извиняюсь, но я уже всяко пыталась ваш код куда-нибудь впихнуть, ошибки вылезают.
Вот моя процедура
Код:
Procedure shifr();
 var i, n:integer;
 begin
  writeln('Введите текст: ');
  readln(s);
  for i := 0 to 255 do  //Инициализация  массива(счетчика)
    mass[i] := 0;
  for i := 1 to length(s) do //подсчет числа символов
    inc(mass[ord(s[i])]);//выдает код i-того символа
  n := 0;
  for i := 0 to 255 do
    if mass[i] <> 0 then begin//Формируем листья дерева
      inc(n);
      new(TMass[n]);
      TMass[n]^.N := Mass[i];
      TMass[n]^.symbol := chr(i);
      TMass[n]^.Left := nil;
      TMass[n]^.Right := nil;
    end;      
  Sort(TMass, N);
  
  //Формируем само дерево
  while n > 1 do 
  begin
    new(p);
    p^.n := TMass[n]^.N + TMass[n - 1]^.N;
    p^.left := TMass[n - 1];
    p^.right := TMass[n];
    TMass[n - 1] := p;
    Dec(n); //Уменьшает значение n на 1
    Sort(TMass, N);
  end;
  
  //Подсчитываем число бит для закодированного текста
  n:=0;
  for i:=0 to 255 do
    if mass[i]<>0 then
      n:=n+mass[i]*length(GetCode(p, chr(i), ''));
  Writeln('Число бит закодированного текста: ',n);    
  
  g := '';  //Кодируем строку
  for i := 1 to length(s) do
  begin
  g:=g+GetCode(p, s[i], '');  
  end; 
Writeln('Закодированный текст: ', g);
end;
Pistoletka вне форума Ответить с цитированием
Старый 06.11.2016, 00:19   #4
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

А почему не может быть создано дерево?
FPaul вне форума Ответить с цитированием
Старый 06.11.2016, 12:27   #5
Pistoletka
Пользователь
 
Регистрация: 18.09.2016
Сообщений: 13
По умолчанию

Цитата:
Сообщение от FPaul Посмотреть сообщение
А почему не может быть создано дерево?
Так один символ, ему двигаться же некуда.
Pistoletka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм Хаффмана Bared Общие вопросы по Java, Java SE, Kotlin 0 22.06.2015 11:25
Алгоритм Хаффмана [BeNdeR] Мультимедиа в Delphi 12 02.03.2012 20:34
алгоритм хаффмана. chuvakner Помощь студентам 4 30.10.2010 23:33
Алгоритм Хаффмана 0479 Помощь студентам 1 15.09.2010 11:53
Алгоритм Хаффмана. Vetal115 Общие вопросы по Java, Java SE, Kotlin 0 22.04.2010 22:23