Мини-конкурс 1

ВНИМАНИЕ!
1)При показе решений использовать только "красивый код" (см. введение для первокурсника).
2)Не предлагать за раз решение нескольких задач (дать возможность поучаствовать и другим, сразу не увидевшим список задач)
3) При публикации решения обязательно указывать номер и условие задачи.
4) Не использовать условных, циклических и иных специальных конструкций. Все задачи решаются ЛИНЕЙНЫМ кодом с применением операторов ввода/вывода/присваивания, типа Byte и арифметических операций над ним (+,-,*, div, mod, or,xor,and,not,shl,shr).

Задачи будут оцениваться баллами. Балл зависит от приоритета публикации правильного решения, рациональности и правильности оформления решения.
Оцениваются не только решения конкретных задач, но и активность участников - комментируйте чужие решения, указывайте на ошибки, предлагайте улучшения и другие варианты. Разные способы решения можно предлагать без ограничения их количества.
Удачи!

Вот сами задачи:
Задача 1. Переменной A типа Byte присваивается некоторое допустимое значение, после чего выводится значение not A. Написать программу, которая корректно выполняет указанные действия, но при этом не использует операции not.
Задача 2. Переменной A типа Byte присваивается некоторое допустимое значение. Написать программу, которая обменивает внутреннее двоичное содержимое полубайтов, образующих это значение. Например, внутренний двоичный код 1001 0111 заданного значения эта программа превратит в код 0111 1001.
Задача 3. Написать программу, которая вычисляет сумму 2-го, 5-го и 8-го битов числа, присвоенного переменной типа Byte (биты пронумерованы в байте слева направо начиная с 1).
Задача 4. Написать программу, которая выводит двоичное и восьмеричное представление однозначной 16-ричной константы (например, $D ), которая в начале работы, должна быть присвоена некоторой переменной в этой программе.
Задача 5. В переменную типа Byte "упаковано" 4 маленьких неотрицательных целых значения, каждое из которых занимает по 2 соседних бита. Вывести все эти значения в десятичном виде через запятую, в порядке их размещения внутри байта справа налево.

АНАЛИЗ РЕШЕНИЙ:

Задача 1. Переменной A типа Byte присваивается некоторое допустимое значение, после чего выводится значение not A. Написать программу, которая корректно выполняет указанные действия, но при этом не использует операции not.
Первым решил Тузаев Александр:

  1. program lz;
  2.   var a : byte;
  3. begin
  4.   read (a);
  5.   a:= 255 - a; // 255 - a = not a
  6.   writeln(a);
  7. end.

Повторил это же минутой позже: Тимур Хотов.

Алексей Ваулин предложил вместо вычитания:   a xor 255
Повторили эти решения Лукьянов Юрий и Тляшок Муртаз ( $FF-x )

Задача 2. Переменной A типа Byte присваивается некоторое допустимое значение. Написать программу, которая обменивает внутреннее двоичное содержимое полубайтов, образующих это значение. Например, внутренний двоичный код 1001 0111 заданного значения эта программа превратит в код 0111 1001.
Здесь первый - Береснев Никита:

  1. program pr2;
  2.  var a,b,c,d:byte;
  3. begin
  4.   readln(a);
  5.   b:=a shr 4;
  6.   c:=a shl 4;
  7.   d:=b+c;
  8.   writeln(d);
  9. end.

Коротко и правильно.

Неудачная попытка другого решения - Лукьянов Юрий и чуть иной, но тоже правильный алгоритм вычислений у Тляшок Муртаза:

  1.      b:=x div 16; //левый полубайт
  2.   x:=(x shl 4) + b; //соединяем с правым

Задача 3. Написать программу, которая вычисляет сумму 2-го, 5-го и 8-го битов числа, присвоенного переменной типа Byte (биты пронумерованы в байте слева направо начиная с 1).
Эту задачу первая и практически, оптимально решила Харченко Екатерина:

  1. Program z3;
  2.   var n,b2,b5,b8,s:byte;
  3. begin
  4.   Readln(n);
  5. //высечение нужных трёх битов и их сложение:
  6.   b2:=(n and $40) shr 6;
  7.   b5:=(n and $08) shr 3;
  8.   b8:=(n and $01);
  9.   s:=b2+b5+b8;
  10.   Writeln(s);
  11. end.

А вот как это сделал только за счёт сдвигов Матросов Владислав:
  1.  Program mini_test;
  2.     var a, b, c, d, e: Byte;
  3.  Begin
  4.     Write('Введите число a: ');
  5.     Readln(a);
  6.     b:= a shl 1; b:= b shr 7;
  7.     c:= a shl 4; c:= c shr 7;
  8.     d:= a shl 7; d:= d shr 7;
  9.     e:= d + c + b;
  10.     Write('Сумма 2-го, 5-го и 8-го битов исходного числа a=',e);
  11.  End.

И ещё, принимается замечание Алексея Ваулина:
можно двигать вправо биты и отрезать нужный модом на 2. Например 2-ой бит нужно вырезать (нумерация с единицы, справа налево).
  1. b := (a shr 1) mod 2; // дальше также, только сдиг увеличиться

Вот как эту идею Алексея реализует Тимур Хотов:
  1.    readln(x);
  2.    x:=x and $49; //Все ненужные биты обнуляет. А нужно ли это?
  3.    y:=(x shr 6)mod 2; //здесь и далее действует как предложил Алексей
  4.    s:=(x shr 3)mod 2;
  5.    x:=x mod 2;
  6.    s:=x+y+s;
  7.    writeln(s);
  8.   end.

Примерно по тому же избыточному пути пошёл и Муртаз Тляшок.

Задача 4. Написать программу, которая выводит двоичное и восьмеричное представление однозначной 16-ричной константы (например, $D ), которая в начале работы, должна быть присвоена некоторой переменной в этой программе.
Вот три разумных подхода:
1. Береснев Никита

  1. Program pr4;
  2.  var y,y1,y2,y3,y4: Byte;
  3.  const a=$F;
  4. Begin
  5.  y:=a;
  6.  y1:=y mod 2;
  7.  y:=y shr 1;
  8.  y2:=y mod 2;
  9.  y:=y shr 1;
  10.  y3:=y mod 2;
  11.  y:=y shr 1;
  12.  y4:=y mod 2;
  13.  writeln(y div 8, y mod 8);
  14.  writeln(y4,y3,y2,y1);
  15. end.

Не учёл только, что в конце y изменённое. Поэтому 8-ричное не получится.
2. Ильюхов Александр.
  1. Program Konkusr_Zadacha4;
  2.   var c:byte;
  3. begin
  4.   c:=$A;
  5.   WriteLn(  
  6.   (c and $08) shr 3,
  7.   (c and $04) shr 2,
  8.   (c and $02) shr 1,
  9.   (c and $01));
  10.   WriteLn(
  11.   (c and $08) shr 3,
  12.   (c and $07));    
  13. end.

Здесь всё верно, только с 8-ричным можно бы проще: write(c div 8, c mod 8)).

3. Тлешок Муртаз.
У Муртаза, хотя идея решения как и у Никиты, но концовка программы просто замечательна (кстати, и за счёт текста тоже!):

  1. program z1;
  2.  var x,a,b,b1,b2,b3,b4: Byte;
  3.   begin
  4.    a:=$E;
  5.    b4:=a mod 2;
  6.    a:= a shr 1;
  7.    b3:=a mod 2;
  8.    a:= a shr 1;
  9.    b2:=a mod 2;
  10.    a:= a shr 1;
  11.    b1:=a mod 2;
  12.    a:= a shr 1;
  13.    writeln(' в 2-ой записи :  чиcло Е = ', b1,b2,b3,b4 );
  14.    writeln(' в 8-ой записи :  чиcло Е = ', b1,(b2*4)+(b3*2)+(b4*1) );
  15.   end.

Задача 5. В переменную типа Byte "упаковано" 4 маленьких неотрицательных целых значений, каждое из которых занимает по 2 соседних бита. Вывести все эти значения в десятичном виде через запятую, в порядке их размещения внутри байта справа налево.
Ильюхов Александр решил эту задачу первым, хотя и напутал в порядке вывода чисел, чего так никто и не заметил:

  1. Program Konkurs_Zadacha5;
  2.   var M,numb1,numb2,numb3,numb4:byte;
  3. begin
  4.   ReadLn(M);
  5.   numb1:=(M and $C0) shr 6;
  6.   numb2:=(M and $30) shr 4;
  7.   numb3:=(M and $0C) shr 2;
  8.   numb4:=(M and $03);
  9.   WriteLn(numb1,', ',numb2,', ',numb3,', ',numb4);
  10. end.

Алексей Ваулин предлагает другой способ вычленения чисел, правда, немного более сложный, но тоже верный:
  1. program zd5;
  2.   var t, a, b, c, d : byte;
  3. begin
  4.   // считываем значение переменной
  5.   readln(t);
  6.   //берем 2 бита, перевод. их в 10-ю с.с., полученое число запис. в перем. - a
  7.   a := (t mod 2) * 1 + ((t div 2) mod 2 * 2);
  8.   //отсекаем эти 2 бита, чтобы получить доступ к другим
  9.   t := t div 4;
  10.   // дальше действуем в этом же духе
  11.   b := (t mod 2) * 1 + ((t div 2) mod 2 * 2);
  12.   t := t div 4;
  13.   c := (t mod 2) * 1 + ((t div 2) mod 2 * 2);
  14.   t := t div 4;
  15.   d := (t mod 2) * 1 + ((t div 2) mod 2 * 2);
  16.   // выводим полученные числа
  17.   writeln(a, ' ', b, ' ', c, ' ', d);
  18. end.

Красивая игра на сдвигах в решении Береснева Никиты:

  1. program pr5;
  2.  var a,n1,n2,n3,n4:byte;
  3. begin
  4.   readln(a);
  5.   n1:=a shr 6;
  6.   n2:=(a shl 2);
  7.   n2:=n2 shr 6;
  8.   n3:=(a shl 4);
  9.   n3:=n3 shr 6;
  10.   n4:=(a shl 6);
  11.   n4:=n4 shr 6;
  12.   writeln(n1,', ', n2, ', ', n3, ', ', n4);
  13. end.

А вот метод Тузаева Александра (я чуть подправил) – наверное самый короткий:

  1. program z4;
  2.   var a : byte;
  3. begin
  4.   read (a);
  5.   writeln(a div 64, ',', a div 16 mod 4, ',', a div 4 mod 4, ',', a mod 4);
  6. end.

Ну, и Муртаз тоже предложил свой вариант, надо сказать, довольно естественный:
  1. program z1;
  2.  var x,a,b,b1,b2,b3,b4: Byte;
  3.   begin
  4.   readln(x);
  5.   b4:=x mod 4;
  6.   x:=x shr 2;
  7.   b3:=x mod 4;
  8.   x:=x shr 2;
  9.   b2:=x mod 4;
  10.   x:=x shr 2;
  11.   b1:=x mod 4;
  12.   x:=x shr 2;
  13.   writeln(b1, ' ' ,b2, ' ' ,b3, ' ' ,b4);
  14.   end.

Вот, пожалуй, и всё. Заработанные баллы опубликую чуть позже. Если есть вопросы по решениям – задавайте.

5
Your rating: Нет Average: 5 (2 votes)
Группы:

Комментарии

СТАРТ!

В рубрике СТАТЬИ

Решения размещать

Решения размещать как комментарии к списку задач, т.е. ЗДЕСЬ.

Тузаев Александр аватар

Вопрос.

Решения выкладываем сразу?

Да, сразу

Да, сразу!

Тузаев Александр аватар

Задание 1

Переменной A типа Byte присваивается некоторое допустимое значение, после чего выводится значение not A. Написать программу, которая корректно выполняет указанные действия, но при этом не использует операции not.

  1. program lz;
  2.   var a : byte;
  3. begin
  4.   read (a);
  5.   b := 255 - a; // 255 - a = not a
  6.   writeln(a);
  7. end.

Береснев Никита аватар

задача номер 2

Задача 2. Переменной A типа Byte присваивается некоторое допустимое значение. Написать программу, которая обменивает внутреннее двоичное содержимое полубайтов, образующих это значение. Например, внутренний двоичный код 1001 0111 заданного значения эта программа превратит в код 0111 1001.

  1. program pr2;
  2.  var a,b,c,d:byte;
  3. begin
  4.   readln(a);
  5.   b:=a shr 4;
  6.   c:=a shl 4;
  7.   d:=b+c;
  8.   writeln(d);
  9. end.

Задача 1. Переменной A типа

Задача 1. Переменной A типа Byte присваивается некоторое допустимое значение, после чего выводится значение not A. Написать программу, которая корректно выполняет указанные действия, но при этом не использует операции not.

  1. Program Number1;
  2.  var x: Byte;
  3.   Begin
  4.    readln(x);
  5.    x:=255-x;
  6.    writeln(x);
  7.   end.

Условие задачи 4 немного

Условие задачи 4 немного подправил.

Неужели потенциал курса

Неужели потенциал курса исчерпывается всего лишь троими (и то, лишь один из них имеет собственное лицо)?

Валерий Шахамболетович, через

Валерий Шахамболетович, через сколько можно запостить решение задачи номер 3?

Тимур

Попридержите пока своё "секретное оружие". Я дам команду.

Ильюхов Александр аватар

Задача №5

Задача 5. В переменную типа Byte "упаковано" 4 маленьких неотрицательных целых значений, каждое из которых занимает по 2 соседних бита. Вывести все эти значения в десятичном виде через запятую, в порядке их размещения внутри байта справа налево.

  1. Program Konkurs_Zadacha5;
  2.   var M,numb1,numb2,numb3,numb4:byte;
  3. begin
  4.   ReadLn(M);
  5.   numb1:=(M and $C0) shr 6;
  6.   numb2:=(M and $30) shr 4;
  7.   numb3:=(M and $0C) shr 2;
  8.   numb4:=(M and $03);
  9.   WriteLn(numb1,', ',numb2,', ',numb3,', ',numb4);
  10. end.

Молодец Тузаев Александр!

На лету обрёл лицо!

Ильюхов Александр аватар

Оригинально

Высший класс. На мой взгляд, короче не придумаешь! Это про первое задание, которое решил Тузаев Александр

Не забывайте, можно и просто

Не забывайте, можно и просто обсуждать уже выложенные решения!

Матросов Владислав Сергеевич аватар

Вопрос по Задаче 2. Ответ

Вопрос по Задаче 2. Ответ надо вывести в десятичной СС или двоичной СС?

Алексей Ваулин аватар

Задача 5. Альтернативный вариант

Задача 5. В переменную типа Byte "упаковано" 4 маленьких неотрицательных целых значений, каждое из которых занимает по 2 соседних бита. Вывести все эти значения в десятичном виде через запятую, в порядке их размещения внутри байта справа налево.

  1. program zd5;
  2.   var t, a, b, c, d : byte;
  3. begin
  4.   // считываем значение переменной
  5.   readln(t);
  6.   //берем 2 бита, перевод. их в 10-ю с.с., полученое число запис. в перем. - a
  7.   a := (t mod 2) * 1 + ((t div 2) mod 2 * 2);
  8.   //отсекаем эти 2 бита, чтобы получить доступ к другим
  9.   t := t div 4;
  10.   // дальше действуем в этом же духе
  11.   b := (t mod 2) * 1 + ((t div 2) mod 2 * 2);
  12.   t := t div 4;
  13.   c := (t mod 2) * 1 + ((t div 2) mod 2 * 2);
  14.   t := t div 4;
  15.   d := (t mod 2) * 1 + ((t div 2) mod 2 * 2);
  16.   // выводим полученные числа
  17.   writeln(a, ' ', b, ' ', c, ' ', d);
  18. end.

Мне кажется у Александра Т.

Мне кажется у Александра Т. есть повод ответить тёзке взаимностью (ну, с малюсенькой оговоркой!)

Харченко Екатерина аватар

Задача 3

Написать программу, которая вычисляет сумму 2-го, 5-го и 8-го битов числа, присвоенного переменной типа Byte (биты пронумерованы в байте слева направо начиная с 1).

  1. Program z3;
  2.   var n,b2,b5,b8,s:byte;
  3. begin
  4.   Readln(n);
  5.   b2:=(n and $40) shr 6;
  6.   b5:=(n and $08) shr 3;
  7.   b8:=(n and $01);
  8.   s:=b2+b5+b8;
  9.   Writeln(s);
  10. end.

Ильюхов Александр аватар

Согласен.

Согласен.

Владислав.

Конечно, десятичной. Ведь у нас тип Byte и мы говорим о ВНУТРЕННЕМ представлении, которое просто преобразовали.

Матросов Владислав Сергеевич аватар

Задача 3.

Написать программу, которая вычисляет сумму 2-го, 5-го и 8-го битов числа, присвоенного переменной типа Byte (биты пронумерованы в байте слева направо начиная с 1).

  1.  Program mini_test;
  2.     var a, b, c, d, e: Byte;
  3.  Begin
  4.     Write('Введите число a: ');
  5.     Readln(a);
  6.     b:= a shl 1; b:= b shr 7;
  7.     c:= a shl 4; c:= c shr 7;
  8.     d:= a shl 7; d:= d shr 7;
  9.     e:= d + c + b;
  10.     Write('Сумма 2-го, 5-го и 8-го битов исходного числа a=',e);
  11.  End.

Береснев Никита аватар

задание 5. еще альтернатива

Задача 5. В переменную типа Byte "упаковано" 4 маленьких неотрицательных целых значений, каждое из которых занимает по 2 соседних бита. Вывести все эти значения в десятичном виде через запятую, в порядке их размещения внутри байта справа налево.

  1. program pr5;
  2.  var a,n1,n2,n3,n4:byte;
  3. begin
  4.   readln(a);
  5.   n1:=a shr 6;
  6.   n2:=(a shl 2);
  7.   n2:=n2 shr 6;
  8.   n3:=(a shl 4);
  9.   n3:=n3 shr 6;
  10.   n4:=(a shl 6);
  11.   n4:=n4 shr 6;
  12.   writeln(n1,', ', n2, ', ', n3, ', ', n4);
  13. end.

Алексей Пешков аватар

Разве данная программа

Разве данная программа работает?Мне кажется она не выполняет условие и не заменят команду "not".Это решение предложил Тимур Хотов

  1. Program Number1;
  2.  var x: Byte;
  3.   Begin
  4.    readln(x);
  5.    x:=255-x;
  6.    writeln(x);
  7.   end.

Тузаев Александр аватар

Комментарий к 5 заданию.

Решение отличное, но можно было обойтись без 4 дополнительных переменных просто выведя во writeln.

Екатерина

Подпортили качество решения на пустяке (не выполнен один из пунктов требований). Где условие задачи? Поймите, очень неудобно лезть наверх, чтобы уточнить условие решаемой задачи, а Вам ведь очень просто его скопировать. Учтите на будущее!

И почему же она не работает?

И почему же она не работает?

Харченко Екатерина аватар

Исправилась.

Исправилась.

Тузаев Александр аватар

Ошибка в задании 1

Вместо b, нужно поставить а.

Алексей Пешков аватар

Извиняюсь,неправильно понял

Извиняюсь,неправильно понял условие задачи,при повторной проверке все сошлось.

Алексей Пешков аватар

Извиняюсь,неправильно понял

Извиняюсь,неправильно понял условие задачи,при повторной проверке все сошлось.

Алексей Ваулин аватар

Задача 1

Задача 1. Переменной A типа Byte присваивается некоторое допустимое значение, после чего выводится значение not A. Написать программу, которая корректно выполняет указанные действия, но при этом не использует операции not.
Мне кажется задача 1, в начале, у Александра не работает. Предлагаю свое решение

  1. program zd1;
  2.   var a, b : byte;
  3. begin
  4.   read (a);
  5.   b := a xor 255;
  6.   writeln(b);
  7. end.

UPD. Извиняюсь, повторно вник в его решение, понял, все правильно у него

Ильюхов Александр аватар

Задача №4

Задача 4. Написать программу, которая выводит двоичное и восьмеричное представление однозначной 16-ричной константы (например, $D ), которая в начале работы, должна быть присвоена некоторой переменной в этой программе.

Так как необходимо было произвести только представление чисел, без всяких последующих манипуляций, то я с большим энтузиазмом схватился за эту соломинку и все операции провел непосредственно в операторах WriteLn:

  1. Program Konkusr_Zadacha4;
  2.   var c:byte;
  3. begin
  4.   c:=$AC;
  5.   WriteLn(
  6.   (c and $A0) shr 7,   { ^ (конъюнкция) с маской 10000000 и убираю все нули
  7.                                сдвигом в право
  8.                                 все остальное по той же аналогии}
  9.   (c and $40) shr 6,
  10.   (c and $20) shr 5,
  11.   (c and $10) shr 4,
  12.   (c and $0A) shr 3,
  13.   (c and $04) shr 2,
  14.   (c and $02) shr 1,
  15.   c and $01);
  16.   WriteLn(
  17.   (c and $C0) shr 6,  { ^ (снова конъюнкция) с маской 11000000 и сдвигаю
  18.                                влево
  19.                                 это делал по правилу перевода двоичного числа в 8-е
  20.                                  Разбивал на триады, 011 111 111}
  21.   (c and $38) shr 3,
  22.   c and $07);
  23. end.
  24.  

Ошибка, не поставил в конце комментария знак '}'

Береснев Никита аватар

решение 4 задачи Александра

однозначная 16-ричной константа
к сожалению у тебя такого я даже не увидел

Ильюхов Александр аватар

Благодарю. Что-то я увлекся и

Благодарю. Что-то я увлекся и взял двухзначную.

Ильюхов Александр аватар

Видать, беру с запасом...

Видать, беру с запасом...

Ильюхов Александр аватар

Видать, беру с запасом...

Видать, беру с запасом...

Береснев Никита аватар

задача номер 4

Задача 4. Написать программу, которая выводит двоичное и восьмеричное представление однозначной 16-ричной константы (например, $D ), которая в начале работы, должна быть присвоена некоторой переменной в этой программе.

  1. Program pr4;
  2.  var y,y1,y2,y3,y4: Byte;
  3.  const a=$F;
  4. Begin
  5.  y:=a;
  6.  y1:=y mod 2;
  7.  y:=y shr 1;
  8.  y2:=y mod 2;
  9.  y:=y shr 1;
  10.  y3:=y mod 2;
  11.  y:=y shr 1;
  12.  y4:=y mod 2;
  13.  writeln(y div 8, y mod 8);
  14.  writeln(y4,y3,y2,y1);
  15. end.

Ильюхов Александр аватар

Исправленная задача №4

Задача 4. Написать программу, которая выводит двоичное и восьмеричное представление однозначной 16-ричной константы (например, $D ), которая в начале работы, должна быть присвоена некоторой переменной в этой программе.

  1. Program Konkusr_Zadacha4;
  2.   var c:byte;
  3. begin
  4.   c:=$A;
  5.   WriteLn(  
  6.   (c and $08) shr 3,
  7.   (c and $04) shr 2,
  8.   (c and $02) shr 1,
  9.   (c and $01));
  10.   WriteLn(
  11.   (c and $08) shr 3,
  12.   (c and $07));    
  13. end.

Лукьянов Юрий аватар

Задание №2

Задача 2. Переменной A типа Byte присваивается некоторое допустимое значение. Написать программу, которая обменивает внутреннее двоичное содержимое полубайтов, образующих это значение. Например, внутренний двоичный код 1001 0111 заданного значения эта программа превратит в код 0111 1001.

  1. program A1;
  2.   var a: Byte;
  3.  begin
  4.   readln(a);
  5.   a:=a and $79;
  6.   writeln(a);
  7.  end.

Алексей Ваулин аватар

Владиславу к задаче 3

можно ещё двигать вправо биты и отрезать нужный модом на 2. Например 2-ой бит нужно вырезать (нумерация с единицы, справа налево).

  1. b := (a shr 1) mod 2; // дальше также, только сдиг увеличиться

Тузаев Александр аватар

Задание 5

В переменную типа Byte "упаковано" 4 маленьких неотрицательных целых значений, каждое из которых занимает по 2 соседних бита. Вывести все эти значения в десятичном виде через запятую, в порядке их размещения внутри байта справа налево.

  1. program z4;
  2.   var a : byte;
  3. begin
  4.   read (a);
  5.   writeln(a div 32, ',', a div 16, ',', a div 4, ',', a mod 4);
  6. end.

Программа ошибочна, и к сожалению работает до значения 15, только сейчас заметил.

Можно публиковать всё что удалось решить

Все кто хотел, думаю имели уже шанс высказаться и поделиться решениями. Снимем все ограничения. Единственно - не повторяйте уже опубликованные варианты. Хотя, признаться, не вижу принципиально новых ходов.

Задача 3

Задача 3. Написать программу, которая вычисляет сумму 2-го, 5-го и 8-го битов числа, присвоенного переменной типа Byte (биты пронумерованы в байте слева направо начиная с 1).

  1. Program Number3;
  2.  var x,y,S: Byte;
  3.   Begin
  4.    readln(x);
  5.    x:=x and $49;
  6.    y:=(x shr 6)mod 2;
  7.    s:=(x shr 3)mod 2;
  8.    x:=x mod 2;
  9.    s:=x+y+s;
  10.    writeln(s);
  11.   end.

Оригинально но с ошибкой.

я о самой: первая решенная задача. У кого есть паскаль проверяйте на паскаль.

Тляшок Муртаз Байзетович аватар

Юра, твоя программа работает

Юра, твоя программа работает некорректно , контр пример при вводе 254 должно вывести 127 , т.к 1111 1110 должно вывести 1111111 , а это в свою очередь не 120 , что выводит твоя программа после компиляции.

Лукьянов Юрий аватар

Задание №1

Переменной A типа Byte присваивается некоторое допустимое значение, после чего выводится значение not A. Написать программу, которая корректно выполняет указанные действия, но при этом не использует операции not.

  1. program A1;
  2.   var a,b:byte;
  3. begin
  4.   readln(a);
  5.    b := a xor 255;
  6.   writeln(b);
  7. end.

Лукьянов Юрий аватар

Да я вижу пытаюсь её найти

Да я вижу пытаюсь её найти

Ильюхов Александр аватар

Задача №2 У Лукьянова Юрия

Юра Лукьянов решил задачу за один ключевой оператор!

ВСЕ ЗАДАЧИ РЕШЕНЫ!

Благодарю участников! Итоги и распределение подарков - завтра (к вечеру), после анализа Вашей активности. В принципе, можно продолжать. А у меня ещё дела.
Доброй всем ночи!