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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2011, 13:16   #1
stas45rus
Пользователь
 
Регистрация: 26.08.2011
Сообщений: 46
По умолчанию Присвоение буквам из сообщения двоичного кода в Паскаль.

Напишите программу построения помехозащитного кода для сообщения из символов заданного алфавита (алфавит англ.) с использованием бита четности. Программа должна разбивать сообщение на блоки по 7 бит и добавлять 8 бит четности.
Т.е. элементов в англ.алф. 27. Первые 27 цифр, начиная с нуля, перевести в двоичную систему счисления,но выводится должно семизначное число,т.е. с переди дописываем не достающие нули. Потом подсчитываем кол-во единиц в двоичном числе, и если их кол-во нечётно,то сзади дописываем единицу,а если чётно,то ноль. И нужно каждое число отнести к букве алфавита,а потом при вводе сообщения выводить двоичный код для каждой буквы из этого сообщения.
помогите пжл,буду очень благодарен.
Вот примерный код:
Код:
Program PomehKod;
Uses Crt;
Var
 st:string;
 b:array[1..255] of integer;
 ed,ost:byte;
 des,i,n,s:integer;
Begin
 ClrScr;
  write('Введите строку: ');
  readln(st);
  for i:=0 to 27 do {перевожу буквы в двоичную систему счисления      27   вместе с пробелом}
   begin
     des:=i;
     ed:=0;
     n:=0;
     while des>0 do
      begin
        n:=n+1;
        ost:=des mod 2;
         if ost=1 then ed:=ed+1;
        b[n]:=ost;
        des:=des div 2;
      end;
     if odd(ed) then b[8]:=1 else b[8]:=0;{присваиваем 1 если odd(ed)}
   for s:=8 downto 1 do
    write (b[s],' ');
    writeln;
   end;
  writeln(st);
 readln;
End.
А вот как присвоить буквам каждое двоичное число незнаю. А ещё нужно ввести сообщение и каждой букве из этого сообщения вывести соответствующий двоичный код.



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 26.08.2011 в 15:57.
stas45rus вне форума Ответить с цитированием
Старый 26.08.2011, 15:25   #2
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

Эмм. Код оформите по правилам, а то читать совсем невозможно.
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Старый 26.08.2011, 15:59   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Для "затравки"...

для "перевода" буквы (точнее любого символа) используйте функцию
Код:
xxxx := ORD(символ);
Эта функция вернёт Вам код символа (в таблице ASCII, если быть точным).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.08.2011, 16:22   #4
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

Вообще подскажу, что в таблице ASCII английский умещается в значение 127 (7F), где как раз и остаётся свободный бит, те можно сделать всё горазд проще.

Код:
Program PomehKod;
Uses Crt;
Var
	stringBuffer : string;
	charOrd : byte;
	codeTable:array[0..127] of integer;
	parity, ost : byte;
	codeSymbol, index, number, dest, mask :integer;
Begin
 ClrScr;
 Write('Введите строку: ');
 Readln(stringBuffer);
{здесь считаем таблицу символов-кодов}
 for index := 0 to 127 do {в таблице ASCII 128 англ. яз. кодов}
	begin
	dest := index;
	parity := 0;
	number := 0;
	while dest > 0 do
	begin
		ost := dest mod 2;
		if ost > 0 then parity := parity + 1;
		codeTable[index] := codeTable[index] or (ost shl number); {сдвигаем текущий бит и добавляем к символу}
		dest := dest div 2;
		number := number + 1;
	end;
    if odd(parity) then 
		codeSymbol[index] := codeSymbol[index] or $70  {если чётная то выставляем старший бит закодированного символа в 1}
	else 
		codeSymbol[index] := codeSymbol[index] and $7F; {если нет то просто очищаем старший бит}
	end;
{а здесь выводим соответствия символа вводимой строки и кодируемого символа}
	for index := 1 to lenght(stringBuffer) do
	begin
		write(stringBuffer[index] + ' : ');
		codeSymbol := codeTable[ord(stringBuffer[index])];
		mask := 1;
		for number := 6 downto 0 do {выводим кодируемый символ и старший бит не учитываем. или же 7, если учитывать и выводить}
		begin
			{Здесь берём бит, далее сдвигаем его (получаем маску), затем с помощью этого бита очищаем все биты символа кроме нужного и сдвигаем обратно}
			write(chr((codeSymbol and (mask shl number)) shr number)); {mask нужна только для большего понимания}
		end;
		writeln;
	end;
 readln;
End.
Как-то так. Коментариев мало, но понять можно. Хотя нагородил конечно да... Спрашивай, если будут вопросы.

ЗЫ: Компилятора под рукой нет. Могут быть ошибки.
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.

Последний раз редактировалось notHaker; 26.08.2011 в 18:38.
notHaker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Список с поиском по первым буквам. Паразит Microsoft Office Excel 17 05.09.2013 00:31
прграмма для построения прямого, обратного и дополнительног кода двоичного числа Grey64 Помощь студентам 2 26.11.2010 16:52
Автозаполнение по начальным буквам konistra Microsoft Office Excel 5 04.06.2010 00:52
Фильтр по первым буквам MiK_on SQL, базы данных 5 02.06.2010 16:50
Запрос поиск по первым буквам Zbeats Microsoft Office Access 4 13.01.2010 12:19