БОНУС-МИНИ-ОНЛАЙН ТУР (№1)

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

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

Итак, вот задания:

1. ПАСКАЛЬ. Написать Паскаль программы, производящие следующие вычисления над ЦЕЛЫМИ числами типа Integer (используем только присваивания, операции ввода/вывода и базовые арифметические операции целочисленной арифметики Паскаля: +, -, *, div, mod ):

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

Задача 2.
Ввести значения для A, B, C и переприсвоить их так, чтобы получился “циклический сдвиг” значений вправо на 1 позицию. Так, например, введя Readln(A,B,C) // 2,5,9 мы в итоге должны получить Writeln(A,B,C) // 9,2,5.
Т.е. мы хотим, чтобы начальное значение A ушло на 1 позицию вправо и стало значением B; Исходное значение B, точно так, же сдвинулось в C; Наконец, значение C перенеслось в A (считается, что “в циклическом порядке” элементов A,B,C, за последним элементом C следует снова первый элемент А).
Экономьте, по возможности, переменные!

Задача 3.
Ввести натуральное ДВОИЧНОЕ 4-значное число и вывести количество содержащихся в его двоичной записи нулевых цифр. Например, 0100 => 3 (в двоичной записи числа три нуля).

Задача 4.
“Счастливым номером” назовём 4-значное натуральное число такое, что сумма первых его двух цифр совпадает с суммой вторых двух его цифр. Написать программу, которая распознаёт счастливые номера, выводя 1, если введённый номер счастливый, и выводя 0, если нет. Например, 3416 => 1, 5003 => 0 (первый номер счастливый, второй – нет).

2. МиК. Написать МиК программы, производящие вычисления функций по следующим формулам:

Задача 5.
F(X) = - X; // т.е. вводится целое Х, а выводится противоположное по знаку его значение.

Задача 6.
F(X)=4X; // например, введя 3, мы должны вывести в качестве результата 12.

Задача 7.
F(X,Y)= X+Y-1; //например, введя 4 и 7, мы должны получить 10.

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

Комментарии

Задача 1

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

НА СЕГОДНЯ ВСЁ

Итак, общий на сегодня итог:
Не решены задачи 3, 4 (были попытки) и 7.
На этом сегодня завершим. Краткий анализ решений и распределение оценок постараюсь представить к завтрашнему вечеру. Можете продолжать, а я ухожу.
Спасибо за работу. Спокойной ночи!

/

/

НИКИТА

В п.1 (ПАСКАЛЬ) ЯВНО перечислено всё что только и можно использовать. Доброй ночи!

Поздно уже, но все же (4-ая)

  1. program asd;
  2.    uses crt;
  3.    var a,b,c,d,S,H,N:word;  // описание переменных
  4. begin  // начало
  5.    writeln ('Введите a');
  6.    readln (a);   // 5003 ввод данных
  7.    b:=a mod 10;  // 3 4-ая цифра
  8.    a:=a div 10;  // 500
  9.    c:=a mod 10;  // 0 3-ья цифры
  10.    a:=a div 10;  // 50
  11.    d:=a mod 10;  // 0 2-ая цифра
  12.    a:=a div 10;  // 5 1-ая цифра
  13.    S:=d+a;  // 5 Сумма первых 2 цифр
  14.    H:=c+b;  // 3 Сумма вторых 2 цифр
  15.    N:=(S div H) + (H div S) - 1;  // 1 - счастливое, 0 - нет
  16.    writeln (N);  // вывод ответа
  17. end.  // конец

ДАНИИЛ

Ну, и что получим, если введём 9001, например?
Хотя двинулись Вы в нужном направлении.

Кстати,

Можно продолжать предложения решений.

Подсказка по задаче 7.

Внимательней изучите систему команд МиК. Там есть одна, которая поможет.

РЕЗУЛЬТАТЫ БОНУС-ТУРА 1.

Учитывались: степень правильности, момент публикации, степень новизны (отличие от предыдущих решений),
рельефность кода, грамотный выбор идентификаторов, наличие комментариев, понятность выдачи результата, общее соответствие опубликованным правилам участия в туре.
В частности, на последнем пункте "погорели" в целом, сильные ребята, имевшие отличные шансы, работы которых вообще мною не рассматривались: Никита Головань (полностью "пролетел") и Михно Валерия (пострадала частично). У Никиты, боюсь, пренебрежение правилами становится системой.

ВСЕ участники получили дополнительных 2 балла (и статус активных в моих глазах) только за один факт участия в туре.

Ещё замечу, что эти типы заданий (а может быть и некоторые из этих задач) войдут в первую контрольную работу, которая состоится через пару недель. Советую всем разобраться с решениями этих задач!

А результаты такие:

  1. Дмитрий Бербенцев - 7
  2. Белоглазов Даниил - 6
  3. Ковалёва Нина - 5
  4. Кальчицкая Митта - 4
  5. Валентина Петросян - 4
  6. Анастасия Меркулова - 4
  7. Михно Валерия - 4
  8. Науменко Виктор - 4
  9. Кавкази Риян - 3
  10. Тесленко Ольга - 3
  11. Панчук Кристина - 3
  12. Верещагин Сергей - 2
  13. Никита Головань -2

4-ая задача, но я не уверен что так можно

  1. program asd;
  2. uses crt;
  3. var a,b,c,d,S,H,N:word; // описание переменных
  4. begin // начало
  5.    writeln ('Ввелиие a');
  6.    readln (a);//5003 ввод данных
  7.    b:=a mod 10; // 3 4-ая цифра
  8.    a:=a div 10; // 500
  9.    c:=a mod 10; // 0 3-ья цифры
  10.    a:=a div 10; // 50
  11.    d:=a mod 10; // 0 2-ая цифра
  12.    a:=a div 10; // 5 1-ая цифра
  13.    S:=d+a; // 5 Сумма первых 2 цифр
  14.    H:=c+b; // 3 Сумма вторых 2 цифр
  15.    writeln (Byte(S=H)); // Вывод статуса выполнения условия в байтном типе
  16. end. // конец

Можно ли представить решение

Можно ли представить решение 7-ой, или тур все еще идет?

О задачах 4 и 7.

Этот вариант задачи 4 выше уже предлагался Науменко Виктором и не годится (он и сам это понимал).
Я не раз высказывался о том, что список допустимых средств очень ограничен, явно мною очерчен, не включает никакой экзотики и состоит лишь из базовых математических примитивов языка.

И с публикацией решений давайте подождём. А вдруг кто-то сообразит!

4-ая задача 3 попытка

  1. program asd;
  2. uses crt;
  3. var a,b,c,d,S,H,N:word; // описание переменных
  4. begin // начало
  5.    writeln ('Ввелиие a');
  6.    readln (a);//5003 ввод данных
  7.    b:=a mod 10; // 3 4-ая цифра
  8.    a:=a div 10; // 500
  9.    c:=a mod 10; // 0 3-ья цифры
  10.    a:=a div 10; // 50
  11.    d:=a mod 10; // 0 2-ая цифра
  12.    a:=a div 10; // 5 1-ая цифра
  13.    S:=d+a; // 5 Сумма первых 2 цифр
  14.    H:=c+b; // 3 Сумма вторых 2 цифр
  15.    N:=(S div H)*(H div S); //  0*1 если не счастливое 1*1 если счастливое
  16.    writeln (N); // вывод 1/0
  17. end. // конец

ДАНИИЛ(!)

Почти ...
Почти решил!
Осталось только справиться с примерами типа 1000.

4-ая задача Так?

  1. program asd;
  2. uses crt;
  3. var a,b,c,d,S,H,N:word; // описание переменных
  4. begin // начало
  5.    writeln ('Введите a');
  6.    readln (a);  //5003 ввод данных
  7.    b:=a mod 10; // 3 4-ая цифра
  8.    a:=a div 10; // 500
  9.    c:=a mod 10; // 0 3-ья цифры
  10.    a:=a div 10; // 50
  11.    d:=a mod 10; // 0 2-ая цифра
  12.    a:=a div 10; // 5 1-ая цифра
  13.    S:=d+a; // 5 Сумма первых 2 цифр
  14.    H:=c+b; // 3 Сумма вторых 2 цифр
  15.    N:=((S+1) div (H+1))*((H+1) div (S+1)); //  0 если не счастливое 1 если счастливое (прибавляем к обоим суммам по 1 чтобы откинуть вариант с делением на 0, для различных чисел ничего не изменится потому в любом случае один из дивов будет 0 как и для равных чисел S H т.е. которые выполняют условию счастливого числа т.к. к равным числам прибавится одинаковое число, при этом дивы не изменятся, они все равно оба будут равны 1)
  16.    writeln (N); // вывод 1/0
  17. end. // конец

ДАНИИЛ(!!!)

Наконец, всё правильно.
Восхищён настойчивостью! Надеюсь, не "сдуетесь"!

Науменко Виктор аватар

Задача 7

  1. 0000 23 LA 0001   //Берем 1
  2. 0001 00 _
  3. 0002 00 _
  4. 0003 22 ST 0100  //Выгружаем её
  5. 0004 00 _
  6. 0005 00 _
  7. 0006 01 IN   //Вводим X
  8. 0007 22 ST 0102    //Выгружаем его
  9. 0008 00 _
  10. 0009 00 _
  11. 0010 01 IN      //Вводим Y
  12. 0011 10 ADD 0102    //X+Y
  13. 0012 00 _
  14. 0013 00 _
  15. 0014 11 SUB 0100    // Вычитаем 1
  16. 0015 00 _
  17. 0016 00 _
  18. 0017 02 OUT    //Вывод
  19. 0018 99 HALT     //Конец

Заметил, что нет решений задачи 3. Решил предложить свой вариант

Задача 3.
Ввести натуральное ДВОИЧНОЕ 4-значное число и вывести количество содержащихся в его двоичной записи нулевых цифр. Например, 0100 => 3 (в двоичной записи числа три нуля).

  1. program z3;
  2.   var a, b: Integer;
  3. begin
  4.   writeln('Введите a');
  5.   readln(a);  //Например, 1010
  6.   b:= b + (a mod 10);  // Сумма числа b и последней цифры числа a. b = 0
  7.   a:= a div 10;  // Убираем последнюю цифру. a = 101
  8.  
  9.   b:= b + (a mod 10);  // b = 1
  10.   a:= a div 10;  // a = 10
  11.  
  12.   b:= b + (a mod 10);  // b = 1
  13.   a:= a div 10;  // a = 1
  14.  
  15.   b:= b + (a mod 10);  // b = 2. Это количество единиц в нашем числе
  16.   a:= a div 10;  // a = 0
  17.  
  18.   a:= 4 - b;  //Число нулей
  19.   writeln(a);
  20. end.