Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 2

Работа добавлена на сайт samzan.net:


  Лабораторная работа №2.

«Преобразование информации в семибитный код».

 

Выполненные работы необходимо присылать тьютору по адресу michnick@aspu.ru. Студенту необходимо выбрать себе один вариант и реализовать программу на любом языке компилируемом языке программирования. Тьютору предоставлять откомпилированный вариант и полные исходные тексты.

 

Долгое время компьютерные сети были способны передавать только семибитные данные (значения байтов меньше 128). Это было связано как с тем, что таблица ASCII содержит только 128 значений (0-127), так и с тем, что восьмой бит использовался для контроля четности.

На одном из конкурсов для программистов была предложена следующая задача:

Написать программу, преобразующую поданный ей на вход файл, в вид, пригодный для передачи по подобной сети. Поскольку на другом конце сети должно производиться восстановление исходного вида файла, а наличие на компьютере-получателе программы кодирования/декодирования неизвестно, то программа передается вместе с файлом. В силу этого, сама программа должна содержать лишь байты, меньшие 128.

 

2.1  Задание на лабораторную работу.

 

В качестве параметра командной строки задается имя файла произвольного вида. Программа должна рассматривать переданный ей файл как бинарный. В ходе работы программы осуществляется преобразование файла к семибитному виду. Преобразование должно быть обратимым. В качестве дополнительного задания возможна реализация второй части: сама программа должна быть семибитной.

Предлагается использовать следующий метод: читаем семь байт из файла и формируем из их старших битов восьмой.

 

program Code;

begin

read(f,a1..a7);

sum:=0;

for i:=1 to 7 do

 s:=ai and 10000000b;

 s:=s shr 7;

 sum:=sum shl 1;

 sum:=sum or s;

endfor

write(f,a1..a7,sum);

end;

 

program decode;

begin

read(f,a1..a7,sum);

for i:=1 to 7 do

 s:=sum mod 2;

 sum:=sum div 2;

 s:=s shl 7;

 ai:=ai or s;

endfor

write(f,a1..a7);

end;

Решение.

  1.  program lr2;
  2.  const n=16;
  3.  var bin,bin1:file of integer;
  4.  i,j:byte;
  5.  a1:array[1..n] of integer;
  6.  b:array[1..n] of string;
  7.  str1,str:string;
  8.  function per1 (s:string):integer;
  9.  var a,i,k,code,n:integer;
  10.  begin
  11.    for i:=1 to 7 do
  12.      begin
  13.      val(s[i],k,code);
  14.      a:=a+trunc(k*power(2,7-i));
  15.      end;
  16.    result:=a;
  17.    end;
  18.  function per (a:integer):string;
  19.  var s : string;
  20.  m,i,k,code,n:integer;
  21.  begin
  22.   m:=1;
  23.   if a<0 then m:=0;
  24.   s:='';
  25.   while a<>0 do
  26.   begin
  27.     if  (abs(a) mod 2)<>0 then s:='1'+s
  28.      else s:='0'+s;
  29.     a:=abs(a) div 2;
  30.   end;
  31.   if m=0 then
  32.   begin
  33.   for i:=1 to 8 do
  34.      if s[i]='0' then s[i]:='1' else s[i]:='0';
  35.   for i:=1 to length(s) do
  36.      begin
  37.      val(s[i],k,code);
  38.      a:=a+trunc(k*power(2,length(s)-i));
  39.      end;
  40.   a:=a+1;
  41.   s:='';
  42.   end;
  43.   if m=0 then
  44.    while a<>0 do
  45.    begin
  46.     if  (abs(a) mod 2)<>0 then s:='1'+s
  47.      else s:='0'+s;
  48.      a:=abs(a) div 2;
  49.    end;
  50.    for i:=1 to 8 do
  51.        if length(s)<8 then s:='0'+s;
  52.    result:=s;
  53.  end;
  54.  begin
  55.  Assign(bin,'bin.dat');
  56.  Assign(bin1,'bin1.dat');
  57.  Rewrite(bin);
  58.  Rewrite(bin1);
  59.  for i:=1 to n do
  60.  write(bin,random(256));
  61.  Reset(bin);
  62.  i:=1;
  63.  while not eof(bin) do
  64.  begin
  65.        read(bin,a1[i]);
  66.        i:=i+1;
  67.  end;
  68.  writeln;
  69.  for i:=1 to n do
  70.          write (a1[i],' ');
  71.  close(bin);
  72.  for i:=1 to n do
  73.  b[i]:=per(a1[i]);
  74.  writeln;
  75.  str:='';
  76.  for i:=1 to n do
  77.      str:=str + b[i];
  78.  writeln (str);
  79.  for i:=1 to n do
  80.  begin
  81.        if length(str) mod 7 <>0 then str:='0' + str;
  82.        i:=i+1;
  83.  end;
  84.  writeln (str);
  85.  for i:=1 to length(str) do
  86.      begin
  87.           str1:=copy(str,i,7);
  88.           write(bin1,per1(str));
  89.           i:=i+6;
  90.      end;
  91.  close(bin1);
  92.  end.
  93.  

  1.  




1. 3 ЗАДАНИЕ
2. МОЛОДАЯ ГВАРДИЯ 1971 OCR и вычитка ~ Александр Продан lexpro@enteh
3. е к инфляции Однако этим понятие инфляции не ограничивается
4. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата економічних наук Київ ~
5. . Україна в період ldquo;Руїниrdquo;Визначне місце в історії України належить Богдану Хмельницькому котрий очол
6. Мрачное семилетие 1
7. сады специализированные детские сады санаторные отделения
8. ТОПМИР Геращенко Евгения Андреевича Уважаемый руководитель внимательно изучив различные п
9. Humble Pie.html
10. Тема 17 3виды переменных Экспериментальные переменныеПостроение гипотезы и планирование ее проверки преж
11. Александр Суэтин
12. Topic 1 The min concepts bout stte lw nd stte legl phenomen Purpose- to cquint with the min concepts of the theory of the stte nd lw
13. теория государства и права1
14. Наследование по закону согласно римскому частному праву
15. приводит к хронической сердечной недостаточности не развиваются внелегочные осложнения чаще осложняет
16. На тему- Атомная энергетика Выполнила- стка гр
17.  Зміна характеристик абіотичного середовища при зарегулюванні стоку
18. МЫСЛЬ Москва 1975 ГЛАВНАЯ РЕДАКЦИЯ СОЦИАЛЬНОЭКОНОМИЧЕСКОЙ ЛИТЕРАТУРЫ Мееровский Борис Вла
19. темах сайт журнала Гастроном по всем темам список литературы в конце а также осуществляйте поиск самостоя
20. Определение части речи по грамматическим признакам