БОНУС-МИНИ-ОНЛАЙН ТУР (№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)

Комментарии

Кальчицкая Митта-Мария аватар

Задача 4. “Счастливым номером” назовём 4-значное натуральное чис

  1. program chastie;
  2.    var a, k12, k34 :integer;
  3. begin
  4.   readln(a);
  5.   k12:=a div 100; //берем первую и вторую цифру
  6.   k12:=(k12 div 10)+(k12 mod 10); //сумма первой и второй цифры
  7.   k34:=a mod 100;//берем третью и четвуртую цифру
  8.   k34:=(k34 div 10)+(k34 mod 10); //их сумма третей и четвертой
  9.   If k12=k34 then do begin // проверяем условие
  10.      writeln(1)
  11.   end else begin
  12.      writeln(0)
  13.   end;
  14. end;

ОЧЕНЬ КРАСИВО, МИТТА, НО ...

Замечательные обозначения (одно "счастье" чего стоит), отличное оформление, рабочая программа (ну, почти рабочая, если честно, если закрыть глаза на самый последний знак...).
А запись условного оператора - в точности как я показывал!
Да ещё и самая первая предложила вариант решения.
Ну, просто молодец!

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

Раздел 1, задача #4

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

  1. Program z4;
  2. Var a, b: integer;
  3. Begin
  4.   Writeln('Введите число');
  5.   Readln(a);
  6.       b:= (a mod 10) + (a mod 100) div 10;  //суммируем последние две цифры
  7.       a:= (a div 10) + (a div 100) mod 10; //суммируем первые две цифры
  8.       if a = b do begin
  9.           writeln(1)
  10.       end else begin
  11.           writeln(0)
  12.       end;
  13. end.

Задача 2

  1. program sdvig;
  2.    var a,b,c,d:integer;
  3. begin
  4.    readln(a,b,c);
  5.    d:=a;
  6.    a:=b;
  7.    b:=c;
  8.    c:=d;
  9.    writeln(a,b,c);
  10. end.

Кальчицкая Митта-Мария аватар

нарушила правило-удалила решение

.

Валентина Петросян аватар

Задача 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 следует снова первый элемент А).
Экономьте, по возможности, переменные(извените, но переменные не смогла сэкономить)

  1. Program sdvig;
  2.  var a,b,c,d,s : integer;
  3. begin
  4. read(a,b,c);
  5. d:=a;
  6. s:=b;
  7. a:=c;
  8. b:=d;
  9. c:=s;
  10. writeln(a,b,c);
  11. End.

program perevod; begin var

program perevod;
begin
var a,b,c,d,e:integer;
readln(a);
b:=a mod 2;
c:=(a div 2) mod 2;
d:=(a div 4) mod 2;
e:=(a div 8) mod 2;
write(e,d,c,b);
end.

СЕРГЕЙ

1. Программа не верна даже на уровне синтаксиса. Попробуйте компилировать, увидите ошибку ...
2. Вы тоже плохо читали ограничения на решения.

РИЯН.

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

Нда

В этом и проблема, пишу с телефона. Но я так и не смог догадаться, как решить ее без if'а. А в задаче я забыл про кавычки в последних writeln, с двух сторон нуля и единицы

МИТТА!

У Вас всё в порядке. Задача ещё не решена. Продолжайте!
Перечитайте требования. Условные операторы не входят в перечень того, что можно использовать!

ВАЛЕНТИНА

Поздравляю, программа рабочая!
Но букет недостатков в оформлении. Попробуйте найти их сами.

раздел 1. задача 1

  1. program town;
  2.    var a,b,k,f,g,H,v,m,R : integer;
  3. begin
  4.    writeln ('введите a');
  5.    readln (a);
  6.    b:=a mod 2;
  7.    f:=a div 2;
  8.    g:=f mod 2;
  9.    k:=f div 2;
  10.    H:=k mod 2;
  11.    v:=k div 2;
  12.    m:=v mod 2;
  13.    R:= b div 1+ g div 1+ H div 1+ m div 1;
  14. writeln(m,H,g,b);
  15. writeln (R);
  16. end.

1-ая

  1. program ya;
  2.    uses crt;
  3.    var a,b,с,d,e,f,g,h,S : integer;
  4. begin
  5.    writeln ('введите a');
  6.    readln (a); // 12
  7.    b:=a mod 2; // 0 последняя цифра в 2-ичной
  8.    d:=a div 2; // 6
  9.    e:=d mod 2; // 0 3-ья цифра в 2-ичной
  10.    с:=d div 2; // 3
  11.    f:=с mod 2; // 1 2-ая цифра в 2-ичной
  12.    g:=с div 2; // 1
  13.    h:=g mod 2; // 1 1-ая цифра в 2-ичной
  14.    S:=b div 1 + e div 1 + f div 1 + h div 1; // сумма единичек в числе
  15. writeln (h,f,e,b); // вывод двочиного числа
  16. writeln (S, ' ','Цифр в числе'); // вывод количества единиц в числе
  17. end.

а как мне изменить решение

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

Ковалёва Нина аватар

Паскаль.Задача 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 следует снова первый элемент А).

  1. program Cyclic_Shift;
  2.     var A,B,C: integer;
  3. begin
  4.     readln(A,B,C);// вводим числа, например: 2,5,9
  5.     A:=A+B; // 2+5=7
  6.     B:=A-B; // 7-5=2
  7.     A:=A-B; // 7-2=5. Теперь: A=5,B=2,C=9
  8.     A:=C+A; //2+9=11
  9.     C:=A-C; //11-9=2
  10.     A:=A-C; // 11-2=9. Теперь: A=9,B=2,C=5
  11.     writeln(A,B,C);
  12. end.

Задача 1, другой способ

  1. program perevod;
  2. begin
  3.    var a,b,c,d,e:integer;
  4.    readln(a);
  5.       b:=a mod 2;
  6.       c:=(a div 2) mod 2;
  7.       d:=(a div 4) mod 2;
  8.       e:=(a div 8) mod 2;
  9.    write(e,d,c,b);
  10. end.

Валентина Петросян аватар

так лучше?

  1. Program sdvig;
  2.  var a,b,c,d,s : integer;
  3. begin
  4.  writeln('Введите a,b,c');
  5.  read(a,b,c);
  6.    d:=a;
  7.    s:=b;
  8.    a:=c;
  9.    b:=d;
  10.    c:=s;
  11.  writeln(a,',', b,',',c);
  12. End.

Задача 1

program converter;
var inp,outp,num,sum:integer;
begin
writeln('Введите число, не превосходящее 15');
readln(inp);
num:=1; //Счетчик, для разбиения числа в двоичный код
while inp>0 do begin //Число имеет неизвестную длинну, используем неопределенный цикл
outp:= outp +inp mod 2 * num; //Выделяем остаток в переменную вывода
if inp mod 2 <>0 then sum:=sum+1;//Счетчик единиц в новом числе
inp:=inp div 2; //Отделяем от переменной уже выведенную часть
num:= num*10; //Наращиваем счетчик, чтобы отделить следующую цифру
end;
writeln('Число в двоичном виде: "',outp,'"');
writeln('Количество единиц в нём: "',sum,'"');
end.

Анастасия Меркулова аватар

Задача 2. "Циклический сдвиг” значений вправо на 1 позицию.

  1. program ciklicheskiy_sdvig;   // Даем название данной программе
  2. var A,B,C: Integer;   // Описываем переменные и присваеваем им целочесленный тип данных
  3. Begin
  4.      write('Введите значения переменных A,B,C :');  // Просим пользователя ввести значения переменных
  5.      readln(A,B,C);    // Принимаем значения полученных переменных
  6.         {Меняем значения переменных без ввода новой переменной}
  7.         {Меняем значения переменных A и C путем сложения и вычитания}
  8.     A:=A+C;
  9.     C:=A-C;
  10.     A:=A-C;
  11.       {Аналогично меняем значения переменных A и B }
  12.     A:=A+b;
  13.     B:=A-B;
  14.     A:=A-B;
  15.     writeln('Результат: ',a,' ',b,' ',c);   // Вывод полученного результата на экран
  16. end.    // Завершение работы программы

Михно Валерия аватар

Задача 3

  1. program nuli;
  2.    var m,i,n:integer;
  3. begin
  4.    readln (m);
  5.    n:=0; // присваиваем переменной начальное значение
  6.    i:=4; //  i - количество совершаемых действий
  7.    while i > 0 do begin
  8.         if m mod 10 = 0 then begin
  9.            n:=n+1; // считаем кол-во нулей
  10.         end;
  11.            m:= m div 10; // отсекаем последние цифры по порядку
  12.            i:= i-1;
  13.    end;
  14.  writeln (n); // выводим кол-во нулей на экран
  15.  end.

Поправка

Насколько я понял, условие if использовать нельзя, как и while

1-ая МИК

  1. Перед вводом в RA заносим 0001
  2. 0000
  3. 0001  01 IN // Ввод числа X
  4. 0002  22 ST 0000 // Копирование числа из сумматора в ячейку A в ОП
  5. 0003  00 _
  6. 0004  00 _
  7. 0005  11 SUB 0000 // Вычитание из сумматора числа с указанной ячекой А
  8. 0006  00 _
  9. 0007  00 _
  10. 0008  11 SUB 0000 // Повторное вычитание из сумматора числа с указанной ячекой А
  11. 0009  00 _
  12. 0010  00 _
  13. 0011  02 // Вывод полученного противоположного иксу числа
  14. 0012 99 // конец

Тесленко Ольга аватар

Задача 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 следует снова первый элемент А).
Экономьте, по возможности, переменные!

  1. Program zadacha2; //заголовок программы
  2.   Var a,b,c,d: integer; //описание пременных
  3. Begin
  4.   Writeln('Введите 3 числа: '); //запрос ввода переменных
  5.   Readln(a, b, c); //ввод переменных
  6.   d:=c;
  7.   c:=b; //переприсваивание
  8.   b:=a;
  9.   a:=d;
  10.   Writeln('Результат: ',a, b, c); //вывод
  11. End.

Раздел 2. задача 6

  1. 0100).... // место для 4X
  2. 0102) 01// ввод значения X в сумматор
  3. 0103) 22 0100 // копирование X в сумматор
  4. 0106) 10 0100 // суммирование X со своей копией
  5. 0109) 10 0100
  6. 0112) 10 0100
  7. 0115) 02  // вывод содержимого сумматора
  8. 0116) 99 // остановка  
  9. // вносим в поле RA 0102

Даниил, МиК

Задача Вами решена. Поздравляю!
Задача 1 Паскаль не засчитана - повтор чужого кода.

Михно Валерия аватар

Задача 5. Другой способ

  1.  0304) 01 // ввели число m в сумматор
  2.  0305) 22 0300 // загрузили число m в яйчейку 300
  3.  0308) 21 0300 // скопировали число из яйчейки
  4.  0311) 10 0300 // удвоили число
  5.  0314) 22 0302 // разместили 2m в яйчейку 302
  6.  0317) 21 0300 // забрали число m
  7.  0320) 11 0302 // вычли из m 2m
  8.  0323) 02 // вывод получившегося числа на экран
  9.  0324) 99 // конец

ВАЛЕРИЯ

Да, и с этим можно согласиться. Ничего не сыкономили, зато форма записи предпочтительней.

Задача 6. ДИМА

Здесь всё оптимально. Поздравляю!

Задача 1, Дима Бербенцев

Решение странноватое. Что означают деления на 1 в строке 13 ?
Здесь шла речь по существу, о двух задачах (варианты A, B). В выводе никак это не показано.
И оформление плохое (имена переменных, отсутствие комментариев)

НИНА

Отличное решение. Все недостатки в варианте Валентины устранены. Поздравляю!

Случайно

Случайно

ВАЛЕНТИНА 2

Да, чуточку лучше. Вывод корректный.

НИКИТА Задача1

Не засчитываю и не комментирую (см. требования к оформлению)

ОЛЯ

Да, Оля, у Вас меньше переменных, чем у Валентины. Но на выводе все числа слипнутся.

НАСТЯ

Вы повторили по своему "экономный" метод использованный Ниной. Но, к сожалению, немножко запутались с обменами. Корректно работать программа не будет.
Зато очень подробно всё отдокументировали, что тоже неплохо.

Панчук Кристина аватар

Задача 6

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

  1.  0000 01 IN
  2.  0001 22 ST 0016
  3.  0002 -
  4.  0003 -
  5.  0004 10 ADD 0016
  6.  0005 -
  7.  0006 -
  8.  0007 10 ADD 0016
  9.  0008 -
  10.  0009 -
  11.  0010 10 ADD 0016
  12.  0011 -
  13.  0013 02 OUT
  14.  0014 99 HALI
  15. <code>

Задача 3. ВАЛЕРИЯ

Увидев While потерял интерес к Вашему тексту (см. требования к решениям)

Постарался исправить недочеты первой задачи

  1. program town;
  2.    var A,B,C,D,E,F,G,H,K : integer; // описание переменных
  3. begin
  4. writeln ( A);
  5. readln (A);
  6.    B:=A mod 2; //  Четвертая цифра в двоичной записи числа A
  7.    D:=A div 2; //  Целая часть от деления на два
  8.    E:=B mod 2; //   Третья цифра в двоичной записи числа A
  9.    C:=D div 2; //  Целая часть от деления на два
  10.    F:=C mod 2; //  Вторая цифра в двоичной записи числа A
  11.    G:=C div 2; //  Целая часть от деления на два
  12.    H:=G mod 2; //  Первая цифра в двоичной записи числа A
  13.    K:=H+F+E+B; // количество единиц в числе  A
  14. writeln (' A) ',' ',H,F,E,B); // вывод двоичного числа
  15. writeln (' B) ',' ',K, ' ','единицы в числе');  // вывод количества единиц в числе
  16. end.

Да, Кристина

Да, Кристина, всё верно, поздравляю! Только вот комментарии бы ещё добавить...

Тесленко Ольга аватар

передел 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 следует снова первый элемент А).
Экономьте, по возможности, переменные!

  1. Program zadacha2; //заголовок программы
  2.   Var a,b,c,d: integer; //описание пременных
  3. Begin
  4.   Writeln('Введите 3 числа: '); //запрос ввода переменных
  5.   Readln(a, b, c); //ввод переменных
  6.   d:=c;
  7.   c:=b; //переприсваивание
  8.   b:=a;
  9.   a:=d;
  10.   Writeln('Результат: ', a,', ', b,', ', c); //вывод
  11. End.

Панчук Кристина аватар

Я переживала, что не успею

В следующий раз напишу, обещаю))

ДМИТРИЙ

Ну да, так лучше. Вот еще бы и в обозначениях переменных навести порядок.

Не сомневаюсь, Кристина.

Не сомневаюсь, Кристина.

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

Задача 4

  1. program Primer;                
  2.      var a, sum1, sum2, zapas: Word;  
  3. Begin
  4.    //Ввод числа и его внос в запасную переменную
  5.    Write('Введите 4-значное число a = ');            
  6.    Readln(a);  
  7.    zapas:=a;
  8.    
  9.    //Сумма последних 2 чисел
  10.    sum1:=sum1 + a mod 10;
  11.    a:= a div 10;
  12.    sum1:=sum1 + a mod 10;
  13.    a:= a div 10;
  14.    
  15.    //Сумма первых 2 чисел
  16.    sum2:=sum2 + a mod 10;
  17.    a:= a div 10;
  18.    sum2:=sum2 + a mod 10;
  19.    a:= a div 10;
  20.    
  21.    //Вывод
  22.    Writeln(zapas,' => ',Word(sum1=sum2));  
  23. End.

По идее, это тоже является неправильным решением, если смотреть на условия, но пока что в голову мне другое решение не приходит.

program converter; var

program converter;
var inp,outp,num,sum:integer;
begin
writeln('Введите число, не превосходящее 15');
readln(inp);
num:=1;                                 //Счетчик, для разбиения числа в двоичный код
while inp>0 do begin                   //Число имеет неизвестную длинну, используем неопределенный цикл
outp:= outp +inp mod 2 * num;         //Выделяем остаток в переменную вывода
if inp mod 2 <>0 then sum:=sum+1;    //Счетчик единиц в новом числе
inp:=inp div 2;                     //Отделяем от переменной уже выведенную часть
num:= num*10;                      //Наращиваем счетчик, чтобы отделить следующую цифру
end;
writeln('Число в двоичном виде: "',outp,'"');
writeln('Количество единиц в нём: "',sum,'"');
end.

РИЯН - другой способ.

Ну, может быть, и другой, но не понятно что за задача вообще решается. В задаче 1 речь шла о двух вариантах. Да и код просто синтаксически не верен.

НИКИТА

Неужели трудно ВНИМАТЕЛЬНО изучить требования к решениям?

program town;    var

  1. program town;
  2.    var A,B,C,D,E,F,G,H,K : word; // описание переменных
  3. begin
  4. writeln ( A);
  5. readln (A);
  6.    B:=A mod 2; //  Четвертая цифра в двоичной записи числа A
  7.    D:=A div 2; //  Целая часть от деления на два
  8.    E:=B mod 2; //   Третья цифра в двоичной записи числа A
  9.    C:=D div 2; //  Целая часть от деления на два
  10.    F:=C mod 2; //  Вторая цифра в двоичной записи числа A
  11.    G:=C div 2; //  Целая часть от деления на два
  12.    H:=G mod 2; //  Первая цифра в двоичной записи числа A
  13.    K:=H+F+E+B; // количество единиц в числе  A
  14. writeln (' A) ',' ',H,F,E,B); // вывод двоичного числа
  15. writeln (' B) ',' ',K, ' ','единицы в числе');  // вывод количества единиц в числе
  16. end.

Да, Виктор

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