БОНУС -ТУР 26.09.2015

Условия бонус-тура:
1) Запрещено использование тех языковых средств, которые нами ещё не рассматривались;
2) Оцениваются только самые первые решения, или те, в которых предлагается другой способ. Но при этом, обсуждать, улучшать или находить ошибки в чужих решениях можно без ограничений – это тоже даёт бонусы.
3) До 24:00 разрешено представить решение не более, чем одной задачи (чтобы могло поучаствовать больше людей);
4) Любое решение обязательно должно предваряться номером и условием задачи. Принимается к рассмотрению только правильно выделенный тегами (“красивый”) код, содержащий ключевые комментарии.

При несоблюдении выше указанных правил, посты не комментируются.

Итак, вот задачи:

1. Пуcть переменной N типа Integer присвоено 4-значное в десятичной записи, целое положительное число. Используя целочисленные операции ТП, записать выражение, которое представляет собой сумму первой и третьей цифр записи этого числа. Например, при N=2764 значение этого выражения должно быть 2+6=8.

2. Чему равно значение выражения: (a shl 2) or (not b)) and $C, если a=6, b=15, а все величины, входящие в формулу имеют тип Byte?

3. Написать линейную Паскаль-программу, которая принимая на вход изображаемое значение типа Char выводит 1, если оно относится к основной кодовой странице ASCII и выводит 0, если к дополнительной.

4. Написать линейную Паскаль-программу, которая принимая на вход натуральное число, не превосходящее 15:
A) Выводит его 2-ичное представление (например, 12 -> 1100);
B) Выводит число единиц в этом 2-ичном представлении (например, 12 -> 2).

5. Переменной Z типа ShortInt Турбо Паскаля присвоено значение, которое в памяти представлено двоичным кодом: 1111 0000. Что мы увидим на мониторе при выводе этого значения оператором Write(Z)?

4.2
Your rating: Нет Average: 4.2 (5 votes)

Комментарии

НАЧАЛИ!

Условия на главной странице в рубрике "СТАТЬИ"

Задача 2

Чему равно значение выражения: (a shl 2) or (not b)) and $C, если a=6, b=15, а все величины, входящие в формулу имеют тип Byte?
Ответ: 0

Юрий Жаворонков аватар

Задача 1

1) Пуcть переменной N типа Integer присвоено 4-значное в десятичной записи, целое положительное число. Используя целочисленные операции ТП, записать выражение, которое представляет собой сумму первой и третьей цифр записи этого числа.
Например, при N=2764 значение этого выражения должно быть 2+6=8.

  1. program prog_01;
  2. var
  3. N:integer;
  4. Value_3,Value_1:byte;
  5. begin  
  6.  write('Введите четырехзначное число: '); //Диалог с пользователем
  7.  readln(N);  //Ввод числа N с клавиатуры
  8.  
  9.  N:=N div 10;  //отбрасываем первое с конца число 2345 > 234. т.к. основание=10 то делим именно на 10!
  10.  Value_3:=N mod 10; //получим значение хвоста делением на основание (234 mod 10 = 4)
  11.  Value_1:=N div 100; //получим значение 1-й цифры, пропустив пару шагов, и поделив сразу на оставшееся кол-во разрядов (234 div 100 =2)
  12.  
  13. writeln('Ответ: ', Value_1, ' + ', Value_3, ' = ',Value_1+Value_3);  //Вывод ответа в понятной пользователю форме
  14. end. //конец

Вариант 2 Сэкономлен байт, но медленнее за счет лишнего деления.

  1. program prog_01;
  2. var
  3. N:integer;
  4. Temp:byte;
  5. begin  
  6.  write('Введите четырехзначное число: '); //Диалог с пользователем
  7.  readln(N);  //Ввод числа N с клавиатуры
  8.  
  9.  N:=N div 10;  //отбрасываем первое с конца число 2345 > 234. т.к. основание=10 то делим именно на 10!
  10.  Temp:=N mod 10; //получим значение хвоста делением на основание (234 mod 10 = 4)
  11.  
  12. writeln('Ответ: ', N div 100, ' + ', Temp, ' = ', N div 100 + Temp);  //Вывод ответа в понятной пользователю форме
  13. end. //конец

+ замечание по документации отработано
+ замечание по отсутствию мнемоники отработано

Киржинов Довлет аватар

Задача 4

4. Написать линейную Паскаль-программу, которая принимая на вход натуральное число, не превосходящее 15:
A) Выводит его 2-ичное представление (например, 12 -> 1100);
B) Выводит число единиц в этом 2-ичном представлении (например, 12 -> 2).
Решение:

  1. program zadacha_4;
  2. Var a,b,n,k:integer;
  3. Begin
  4. Readln (a);//запрос на ввод десятичного числа не превосходящего 15
  5. N:=1;
  6. B:=0;
  7. k:=0;
  8. B:=b+n*(a mod 2);
  9. K:=k+(a mod 2);
  10. A:=a div 2;
  11. N:=n*10;
  12. B:=b+n*(a mod 2);
  13. K:=k+(a mod 2);
  14. A:=a div 2;
  15. N:=n*10;
  16. B:=b+n*(a mod 2);
  17. K:=k+(a mod 2);
  18. A:=a div 2;
  19. N:=n*10;
  20. B:=b+n*(a mod 2);
  21. k:=k+(a mod 2);
  22. Writeln ('число в двоичной системе =',b);
  23. writeln ('число единиц в двочином представлении равно ',k);
  24. Readln;
  25. End.

4. Написать линейную

4. Написать линейную Паскаль-программу, которая принимая на вход натуральное число, не превосходящее 15:
A) Выводит его 2-ичное представление (например, 12 -> 1100);

  1.  var n:byte;
  2. begin
  3. write('n(0..15): '); readln(n); writeln(n div 8,n div 4 mod 2,n div 2 mod 2,n mod 2); readln
  4. end.

Артем Безворитний аватар

Задача 1

1. Пуcть переменной N типа Integer присвоено 4-значное в десятичной записи, целое положительное число. Используя целочисленные операции ТП, записать выражение, которое представляет собой сумму первой и третьей цифр записи этого числа. Например, при N=2764 значение этого выражения должно быть 2+6=8.

  1. program zadacha1;
  2. var n,x,s:integer;
  3. begin
  4. x:=0;
  5. s:=0;
  6. readln(n);
  7. n:=n div 10;
  8. x:=n mod 10;
  9. s:=x+(n div 100);
  10. writeln(s);
  11. end.

Асфар Нехай аватар

задача 3

Написать линейную Паскаль-программу, которая принимая на вход изображаемое значение типа Char выводит 1, если оно относится к основной кодовой странице ASCII и выводит 0, если к дополнительной.

  1. program three;
  2. uses crt;
  3. var a:char
  4. bx,dx:integer;
  5. begin
  6. read(a);
  7. BX:=ord(symb):
  8. DX:=BX div 127;
  9. BX:=BX div 225;
  10. writeln('Ответ: ',DX xor BX);
  11. end.

Юрий Жаворонков аватар

Асфар

Смотрю юзаешь мой шаблон)) Хоть бы переменный BX, DX в коде поменял

Симонова Юлия аватар

Задача 2

2. Чему равно значение выражения: (a shl 2) or (not b)) and $C, если a=6, b=15, а все величины, входящие в формулу имеют тип Byte?
На самом деле ответ 1.

Асфар Нехай аватар

Юрий

зачем каждый раз придумывать велосипед? можно же придумать один раз, и по придуманному шаблону решать однотипнве задачи

Водогреева Дарья аватар

Задача 5

Переменной Z типа ShortInt Турбо Паскаля присвоено значение, которое в памяти представлено двоичным кодом: 1111 0000. Что мы увидим на мониторе при выводе этого значения оператором Write(Z)?

  1. program zadacha_5;
  2. var
  3. Z:shortint;
  4. begin  
  5. Z:=1*128+1*64+1*32+1*16; //нули можно не писать
  6. write(Z);
  7. readln;
  8. end.

Ответ: -16

Задача 4

4. Написать линейную Паскаль-программу, которая принимая на вход натуральное число, не превосходящее 15:
A) Выводит его 2-ичное представление (например, 12 -> 1100);
B) Выводит число единиц в этом 2-ичном представлении (например, 12 -> 2).

  1. program Project4;
  2. {$APPTYPE CONSOLE}
  3.   var a,b,c,d,e,f: byte;
  4. begin
  5.   readln(a);
  6.   b:=a mod 2; //получаем 4ый разряд двоичного числа (ххху)
  7.   a:=a div 2;
  8.   c:=a mod 2; //получаем 3ий разряд двоичного числа (ххух)
  9.   a:=a div 2;
  10.   d:=a mod 2; //получаем 2ой разряд двоичного числа (хухх)
  11.   a:=a div 2;
  12.   e:=a mod 2; //получаем 1ый разряд двоичного числа (уххх)
  13.   f:=b+c+d+e; //сумма разрядов
  14.   writeln('Двоичное представление',e,d,c,b, 'Число единиц',f);
  15.   readln
  16. end.

Консольная программа TD

Артем Безворитний аватар

Задача 2

2. Чему равно значение выражения: (a shl 2) or (not b)) and $C, если a=6, b=15, а все величины, входящие в формулу имеют тип Byte?

(a shl 2) or (not b))=1
1 and $C=1
Ответ: 1

Юрий Жаворонков аватар

Шаблон

Асфар, дабы не так палиться)

Лимит

Сказали же, что нельзя больше одной задачи((

Артем Безворитний аватар

Задача 4

4. Написать линейную Паскаль-программу, которая принимая на вход натуральное число, не превосходящее 15:
A) Выводит его 2-ичное представление (например, 12 -> 1100);
B) Выводит число единиц в этом 2-ичном представлении (например, 12 -> 2).

  1. program zadacha4;
  2.  var n,n4,n3,n2,n1,sum: byte;
  3. begin
  4.  readln(n);
  5.  n4:=n mod 2;
  6.  n:=n div 2;
  7.  sum:=sum+n4;
  8.  n3:=n mod 2;
  9.  n:=n div 2;
  10.  sum:=sum+n3;
  11.  n2:=n mod 2;
  12.  n:=n div 2;
  13.  sum:=sum+n2;
  14.  n1:=n mod 2;
  15.  sum:=sum+n1;
  16.  writeln(n1,n2,n3,n4,' количество единиц ',sum);
  17.  end.

Артем Безворитний аватар

Совсем забыл

Как же я забыл то

А первый пункт 4 задачи-это

А первый пункт 4 задачи-это уже считается за одну задачу?Или можно и 2 пункт написать?

Юрий Жаворонков аватар

Забыл..

Артем, Что нельзя больше 1 задачи)) Согласен.. а хочется.

Киржинов Довлет аватар

Не согласен с ответом в задаче 2

Валерий Шахамболетович, я не согласен с тем, что во второй задаче ответ 1, но т.к. я решал другую задачу, могу ли я привести свою точку зрения насчет задачи номер 2?

Артем Безворитний аватар

Извиняюсь

Прошу засчитать только мою самую первую задачу

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

Задача 2

2. Чему равно значение выражения: (a shl 2) or (not b)) and $C, если a=6, b=15, а все величины, входящие в формулу имеют тип Byte?
Ответ: 1

Так как, при ((a shl) or (not b)) стоит оператор or , а "a shl" это 1
(a shl 2) or (not b)) and $C

Юрий Жаворонков аватар

Присоединяюсь к Довлету

Ответ в задаче 2 неверный...

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

М, мне кажется я ошибся

Ведь мы далее умножаем, а там получается 1 and 1100
Ответ 1100
Не знаю можно ли редактировать, по этому решил написать отдельным постом

ПОХОЖЕ, ВЫСКАЗАЛИСЬ

По существу пока промолчу.
Но всё же отмечу, что в целом, решения плохо документированы (где мнемоника!), неэффективны (арифметические операции гораздо медленнее логических и сдвиговых!), а есть и просто не верные (проверьте всё сами!).

Я же написал - решения можно

Я же написал - решения можно комментировать без ограничений!

Киржинов Довлет аватар

Комментарий к задаче 2

Все забыли, что тип BYTE это 8 битовая ячейка.
a=6, значит a в двочиной в (т.к. тип byte) восьмибитовой ячейке выглядит как 00000110,
произведя операцию (a shl 2), переменная a примет значение 00011000.
b=15, значит оно выглядит как 00001111, произведя операцию not b, оно будет выглядеть так:
11110000, теперь дизъюнкция этих чисел a и b равна 11111000.
Т.к. мы производим еще конъюнкцию этого числа с числом $C которое равно 00001100, конечным результатом будет
число:00001000, при переводе в 10-ю с.с. оно станет числом 16

Юрий Жаворонков аватар

Не согласен с Довлетом

Ответ не 16.

Киржинов Довлет аватар

Соглашусь ответ 8

Да, ответ 8, это 4й разряд 2^3, ответ будет 8, спасибо что поправил, тот пост не могу изменить, так что считайте ответом не 16 а 8

Юрий Жаворонков аватар

Пожалуйста

Всегда пожалуйста

  1. a  = 00000110  //6
  2. b  = 00001111  //15
  3. $C = 00001100  //12
  4. a shl 2 = 00011000  //24
  5. not b = 11110000  //240
  6.  
  7. 00011000 or 11110000 = 11111000  //248
  8. 11111000 and 00001100 = 00001000 //8

Смаков Роман аватар

Задача 5

5.Переменной Z типа ShortInt Турбо Паскаля присвоено значение, которое в памяти представлено двоичным кодом: 1111 0000. Что мы увидим на мониторе при выводе этого значения оператором Write(Z)?
Ответ:-112

Асфар Нехай аватар

задача 3 с комментарием

  1. program three;
  2. uses crt;
  3. var sym:char;
  4. bx,dx:integer;
  5. begin
  6. read(sym);
  7. BX:=ord(sym):
  8. DX:=BX div 127;//проверка по неизменяемой части
  9. BX:=BX div 225;//проверка по изменяемой части
  10. writeln('Ответ: ',DX xor BX);
  11. end.

Анализ Довлета можно считать

Анализ Довлета (комментарий к задаче 2), а потом и Юрия, можно считать образцом того, как нужно представлять решения. Ответы типа ДА, НЕТ, 1, 2 ... мало чему учат и конечно же не приемлемы.

Юрий Жаворонков аватар

Роман

Роман, с чего вы взяли что -112???

Т.к. тип shortInt знаковый, следовательно 1 в начале говорит о дополнительном коде, по этому:

  1. 100000000-
  2.  11110000=
  3.  00010000
  4. а это есть модуль числа со знаком минус т.е. -16

Так что Дарья права!

Клименко Екатерина аватар

2. Чему равно значение

2. Чему равно значение выражения: ((a shl 2) or (not b)) and $C, если a=6, b=15, а все величины, входящие в формулу имеют тип Byte?
a=00000110
b=00001111
$C=00001100
1) a shl 2(сдвиг влево на 2 бита)=00011000
2) not b=11110000
3) 1) or 2)= 00011000 or 11110000=100001000 (но т.к. тип Byte, то результат=11111000)
4) 3) and $C= 11111000 and 00001100=00001000=8
Ответ: 8

Киржинов Довлет аватар

Согласен

Полностью разделяю точку зрению Юрия и Дарьи

Задача 3 - не принимается!

Плохое решение. Как по методу, так и по стилю. О стиле (о пресловутых DX, BX) я уже говорил, Юрий. Но стиль этот (как и метод) подхватил теперь и Асфар! Ищите естественные обозначения и эффективный (без делений) метод.

Эдуард Дохужев аватар

№4

4. Написать линейную Паскаль-программу, которая принимая на вход натуральное число, не превосходящее 15:
A) Выводит его 2-ичное представление (например, 12 -> 1100);
B) Выводит число единиц в этом 2-ичном представлении (например, 12 -> 2).

A)

  1. Program abc;
  2. var a,b:integer;
  3. begin
  4. readln(a);
  5. b:=(a div 2 div 2 div 2 mod 2)*1000 +(a div 2 div 2 mod 2 )*100+(a div 2 mod 2)*10+(a mod 2);
  6. writeln(b);
  7. end.

B)
  1. Program abc;
  2. var a,b:integer;
  3. begin
  4. readln(a);
  5. b:=(a div 2 div 2 div 2 mod 2)*1000 +(a div 2 div 2 mod 2 )*100+(a div 2 mod 2)*10+(a mod 2);
  6. a:=(a mod 2)+(a div 2 mod 2)+(a div 2 div 2 mod 2 )+(a div 2 div 2 div 2 mod 2);
  7. writeln(a);
  8. end.

Киржинов Довлет аватар

Можно ли еще писать?

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

Довлет!

Уже в третий раз пишу - КОММЕНТАРИИ К РЕШЕНИЯМ БЕЗ ОГРАНИЧЕНИЙ!

Асфар Нехай аватар

задача 3 изменения

со сдвигами

  1. program three;
  2. uses crt;
  3. var sym:char;
  4. a:integer;
  5. begin
  6. read(sym);
  7. a:=ord(sym);
  8. a:=a shr 7;
  9. write(1-a);
  10. end.

ПОДПРАВИЛ

Юрий Жаворонков аватар

Задача 3

А сам код задачи кинуть нельзя, жаль.

ОШИБКА!

Асфар, метод нашли верно. Но всё же допустили ошибку!
Юрий, не понял, о каком коде речь...

Юрий Жаворонков аватар

О коде...

Код ЯП задачи №3, что запрещено п.3 условий данного бонус-тура .

Асфару нужно всего-то инвертировать вывод и все, что он и сделал.

Асфар Нехай аватар

исправил

уже исправил, дописал WRITE(1-a)

Теперь так. Вот только я

Теперь так.
Вот только я заметил, Асфар, с типами Вы обращаетесь небрежно ...

Киржинов Довлет аватар

Второй способ решения задачи 3

Приведу способ решения без сдвигов
Добавил комментарии

  1. program zadacha3;
  2. var a:char;
  3. b:byte;
  4. begin
  5. read(a);//считываем символ
  6. b:=ord(a);//кладём в b его код
  7. b:=b div 128;//если его код меньше 128,т.е. основная страница таблицы, то в b кладётся 0, если больше либо равно 129(т.е. дополнительная страница), то кладём единицу
  8. writeln('Ответ: ',b xor 1);//если основная 0 xor 1 равно 1, если дополнительная 1 xor 1 равно 0
  9. end.

Юрий Жаворонков аватар

3 байта

Да... целых 3 байта на ветер...
Довлет, как я понял в пред. методе именно реализация ч/з деления вызывала вопросы и была заменена на сдвиги, как наиболее быстрые.

Асфар Нехай аватар

согласен

нужно было вместо типа integer указать тип byte

4Написать линейную

4Написать линейную Паскаль-программу, которая принимая на вход натуральное число, не превосходящее 15:
B) Выводит число единиц в этом 2-ичном представлении (например, 12 -> 2).

  1. program zad4(B);
  2. var i,k:byte;
  3. begin
  4. write('i (0..15): '); readln(i); k:=0;
  5. k:=k+i mod 2; i:=i div 2;
  6. k:=k+i mod 2; i:=i div 2;
  7. k:=k+i mod 2; i:=i div 2;
  8. k:=k+i mod 2; i:=i div 2;
  9. writeln(k); readln
  10. end.