Целочисленная арифметика в Паскаль и Питон (Бонус-тест для 1 курса)

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

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

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

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

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

Задача 2.
По заданным натуральным, трёхзначным в десятичной записи числам A и B образовать и вывести число C такое, что на нечётных позициях этого числа стоят цифры числа А, а на чётных - цифры числа B. Например, А=205, B=312 дают C=230152. Представить код решения этой задачи
A) На Паскале; B) На Питоне.

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

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

Задача 5.
Привести не содержащую никаких переменных программу на Питоне, которая:
A) Удваивает вводимое число.
B) Находит сумму двух введённых чисел.

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

Комментарии

// Написать

  1. // Написать Паскаль-программу, которая принимая на вход натуральное число, не превосходящее 15:
  2. // B) Выводит число единиц в этом 2-ичном представлении (например, 12 -> 2).
  3.  
  4. program pr1;
  5.   var n,k:integer;
  6. begin
  7.   writeln ('введите натуральное число, не превосходящее 15:');
  8.   readln (n);
  9.    k:=0;
  10.    k:=k+n mod 2;
  11.    n:=n div 2;
  12.    k:=k+n mod 2;
  13.    n:=n div 2;
  14.    k:=k+n mod 2;
  15.    n:=n div 2;
  16.    k:=k+n mod 2;
  17.    n:=n div 2;
  18.   writeln ('число единиц:', k);  
  19. end.

Павел Хартомацидис аватар

...

А какое у тебя было решение?

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

Задача 3

  1. {Ввести натуральное ДВОИЧНОЕ 4-значное число и вывести количество содержащихся в его двоичной записи нулевых цифр. Например, 0100 => 3 (в двоичной записи числа три нуля). Решить задачу на Паскале.}
  2.  
  3. program zadacha_3;
  4.    var n,x1,x2,x3,x4,pr,kol: integer;
  5. begin
  6.    writeln('введите 4-значное двоичное число: ');  
  7.    readln(n);
  8.    
  9.    x4:= n mod 10;
  10.    n:=n div 10;
  11.    x3:= n mod 10;
  12.    n:=n div 10;
  13.    x2:= n mod 10;
  14.    n:=n div 10;
  15.    x1:= n mod 10;
  16.    n:=n div 10;
  17.    
  18.    pr:=(x1-1)+(x2-1)+(x3-1)+(x4-1);
  19.    kol:=pr-pr*2;
  20.    writeln(kol);
  21.    
  22. end.

Пархоменко Ольга аватар

 program z1;    var N, a, b,

  1.  program z1;
  2.     var N, a, b, c, d : integer;
  3. begin
  4.    readln(N);
  5.    writeln( 'Vvedite chislo N=< 15');
  6.     a:= N mod 2;
  7.     N:= N div 2;
  8.     b:= N mod 2;
  9.     N:=div 2;
  10.     c:= N mod 2;
  11.     N:= N div 2;
  12.     d:= N mod 2;
  13.     N:= N div 2;
  14.     writeln(' Dvoichnoe chislo N = ' a,b,c,d);
  15. end.

Пархоменко Ольга аватар

Задача 1

  1. program z1;
  2.     var N, a, b, c, d : integer;
  3. begin
  4.     readln(N);
  5.     writeln( 'Vvedite chislo N=< 15');
  6.     a:= N mod 2;
  7.     N:= N div 2;
  8.     b:= N mod 2;
  9.     N:=div 2;
  10.     c:= N mod 2;
  11.     N:= N div 2;
  12.     d:= N mod 2;
  13.     N:= N div 2;
  14.     writeln(' Dvoichnoe chislo N = ' a,b,c,d);
  15. end.

Злобина Олеся Эдуардовна аватар

Задача 2 (A)

  1. По заданным натуральным, трёхзначным в десятичной записи числам A и B образовать и вывести число C такое, что на нечётных позициях этого числа стоят цифры числа А, а на чётных - цифры числа B. Например, А=205, B=312 дают C=230152. Представить код решения этой задачи
  2. A) На Паскале; B) На Питоне.
  3. A)
  4. Program zadacha 2;
  5.   var A, B, a1, a2, a3, b1, b2, b3: Integer;
  6. Begin
  7.   writeln(' Введите два трехзначных числа ');
  8.   readln(A, B);
  9.   a3:=A mod 10;
  10.   A:=A div 10;
  11.   a2:=A mod 10;
  12.   A:=A div 10;
  13.   a1:= A;
  14.   b3:=B mod 10;
  15.   B:=B div 10;
  16.   b2:=B mod 10;
  17.   B:=B div 10;
  18.   b1:=B;
  19.   writeln(a1, b1, a2, b2, a3, b3);
  20. end.

Влад, Олеся

Влад. Эта задача решена Вами ЛОГИЧЕСКИ верно. И я её засчитываю.
Проблемы с неверными ответами имеют ФИЗИЧЕСКИЙ характер и сопряжены с тем, что Integer разрядности на вашем компьютере не хватает (допустимы не балее чем 5-значные числа). Попробуйте тип LongInt, должно получиться. Эти вопросы мы обсудим на лекциях позже.
Олеся. Ваше решение в принципе такое же. Но вы фактически НЕ ОБРАЗОВАЛИ нового числа, а только его "нарисовали".

Хандожко Вероника аватар

# Задача 2. По заданным

  1. # Задача 2.
  2. По заданным натуральным, трёхзначным в десятичной записи числам A и B образовать и вывести число C такое, что на нечётных позициях этого числа стоят цифры числа А, а на чётных - цифры числа B. Например, А=205, B=312 дают C=230152. Представить код решения этой задачи
  3. B) На Питоне.
  4. print(Введите два трехзначных числа)
  5. a = int(input())
  6. b = int(input())
  7. a1 = a // 100
  8. a2 = ( a // 10) % 10
  9. a3 = a % 10
  10. b1 = b // 100
  11. b2 = ( b // 10) % 10
  12. b3 = b % 10
  13. c = a1*100000 + b1*10000 + a2*1000 + b2*100 + a3*10 + b3
  14. print(c)

Александр Глобенко аватар

Задача 1.

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

  1. program zadacha1a;
  2.  var
  3.   n:integer;
  4. begin
  5.  readln(n); //вводим наше число
  6.  if (n>15) or (n<=0) then
  7.   writeln('Введенное число больше 15 или меньше 0, попробуйте снова ->')
  8.   else if n<8 then
  9.    writeln(N div 2 div 2,N div 2 mod 2,N mod 2)//если n<8
  10.   else if n<12 then
  11.    writeln(N div 2 div 2 div 2,n mod 2 div 2,N div 2 mod 2,N mod 2) если 8<=n<12
  12.   else
  13.    writeln(N div 2 div 2 div 2,n div 2 div 2 div 2,N div 2 mod 2,N mod 2);//если число n>=12
  14. end.

Как то сложно, но работает.

Внимание!

На сегодня я вас оставляю!
Анализ ваших достижений с учётом содержания и последовательности появления постов постараюсь опубликовать завтра к вечеру. Там же приведу распределение бонусных баллов. Ещё не все задачи решены. Успехов вам!

Титов Влад аватар

Условные операторы if

Александр Глобенко, Условные операторы if запрещены, я тоже на этом прокололся

Александр Глобенко аватар

Условные операторы if

Ну такое. Зачем тогда показали циклы на лекции если айайай ими нельзя пользоваться

Хандожко Вероника аватар

Задача 5

  1. #Привести код не содержащей никаких переменных программы на Питоне, которая:
  2. A) Удваивает вводимое число.
  3. B) Находит сумму двух введённых чисел.
  4. a)
  5. print(int(input()) * 2)
  6. b)
  7. print(int(input()) + int(input()))

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

Глобенко

Саша, там же уточнили, что нельзя пользоваться всем тем, что НЕ использовали на Лаб. занятии.

Титов Влад аватар

Вероника, не работает так =(

Вероника, не работает так =( Я тоже пробовал таким образом

Титов Влад аватар

хотя нет, работает, я делал

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

Зиновьева Анастасия аватар

   Решение второй задачи на

  1.  
  2.  Решение второй задачи на паскале:
  3. program zadacha_2;
  4.   var k1,k2,k3,k4,k5,k6,k7,k8,s:integer;
  5.  
  6. begin
  7.    write('Введите 2 числа: ');
  8.    readln(k1);
  9.    readln(k2);
  10.    
  11.    k3:=k1 div 100;
  12.    k4:=k1 mod 5;
  13.    k5:=k1 mod 100;
  14.    k6 := k2 div 100;;
  15.    s := k2 mod 100;
  16.    k7 := s div 10;;
  17.    
  18.       k8 := s mod 10;
  19.  
  20.    writeln('Число 1 равно: ',k3,k6,k4,k7,k5,k8);
  21.  readln;
  22. End.

Хандожко Вероника аватар

Возможно :D

Возможно :D

no comments

код не соответствует требованиям

no comments

код не соответствует требованиям

Александр Глобенко аватар

Задание 5

  1. n=int(input())
  2. m=int(input())//для задания Б
  3. print('Если удвоить',n,'то получим',n*2)//Ответ на задание А
  4. print('Сумма чисел',n,'и',m,'равна ',n+m)//Ответ на задание Б

Так просто или я не понял задания?

Зиновьева Анастасия аватар

решение 4 задачи: program

  1. решение 4 задачи:
  2. program zadacha_4;
  3.   var k1,k2,k3,k4,m,a,s,i,d,x,q:integer;
  4.  
  5. begin
  6.    write('Введите число: ');
  7.    readln(i);
  8.    
  9.    
  10.   k1:=i div 1000;
  11.    s:=i mod 1000;
  12.    a:=s div 100;
  13.    m := k1+a;
  14.    k3:= s mod 100;
  15.    d := k3 div 10;
  16.    x := k3 mod 10;
  17.    q := d+x;
  18.    
  19.    writeln(m,q);
  20.  readln;
  21. End.
  22.  Итоговые числа получила, но не придумала способ их сравнить.

Зиновьева Анастасия аватар

program zadacha_4;   var

  1. program zadacha_4;
  2.   var k1,k2,k3,k4,m,a,s,i,d,x,q:integer;
  3.  
  4. begin
  5.    write('Введите число: ');
  6.    readln(i);
  7.    
  8.    
  9.   k1:=i div 1000;
  10.    s:=i mod 1000;
  11.    a:=s div 100;
  12.    m := k1+a;
  13.    k3:= s mod 100;
  14.    d := k3 div 10;
  15.    x := k3 mod 10;
  16.    q := d+x;;
  17.    if m=q then
  18.      begin
  19.        writeln('1');
  20.        
  21.      end;
  22.    if m<>q then  begin
  23.        writeln('0');
  24.        
  25.      end;
  26.    11
  27.  readln;
  28. End.
  29. Решила через if

Александр Глобенко аватар

Задача 4

Решение вроде рабочее без if
переменные a и b это твои m и q

  1. program zd4sravnenie;
  2.  var b1,a1,a,b:integer;
  3. begin
  4.  readln(a,b);// тут я ввожу твои m и q
  5.  a1:=a div b;//0 - если а1 меньше b1////или >0 если наоборот
  6.  b1:=b div a;//тут тоже самое
  7.  a1:=((a1+2) div (a1+1)) mod 2;//тут мы всё сводим к нулям и еденицам
  8.  b1:=((b1+2) div (b1+1)) mod 2;//соответственно если a1 div b1 =0 или наоборот то тут тоже 0, а если >0 то будет 1
  9.  writeln((a1-b1+1)*(a1-b1-1)*-1);// а тут просто ничего не придумал и сделал так
  10. end.// каниц

Без условий циклов и левых процедур, как все любят
Какая то зверская задачка по моему, 3 часа ночи так то...

Титов Влад аватар

Александр, без использования

Александр, без использования переменных(в твоём случае m, n не используя) нужно решить задачу 5

ИТОГИ БОНУС-ТЕСТА

Общая статистика:
Всего на сайт зашло - 22 человека;
Следили за всем ходом событий - около 16 человек;
Приняли то или иное участие в тесте (прислали хотя бы один пост) - 12 человек.

При оценке достижений, в частности, учитывались следующие критерии:
1) момент опубликования первого правильного решения задачи, или же решения уже решённой задачи, но другим методом;
2) правильность оформления программного кода;
3) активность в комментировании решений товарищей;
4) оригинальность представленного решения.

Кроме того, все участники (выше указанные 12 человек), независимо от результата, получили по 1 дополнительному баллу за активность;
Окончательные результаты показаны ниже.

Распределение баллов:

  1. Титов В. - 6
  2. Тесленко О. - 6
  3. Хандожко В. - 6
  4. Никитенко В. - 5
  5. Зиновьева А. - 5
  6. Глобенко А. - 5
  7. Бобкова В. - 4
  8. Караваева Ю. - 3
  9. Злобина О. - 3
  10. Хартомацидис П. - 2
  11. Пархоменко О. -2
  12. Нестеров В. -2

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

B) Выводит число единиц в этом 2-ичном представлении (например, 12 -> 2).
Здесь подойдёт этот вот код Виолетты Бобковой:

  1. // Написать Паскаль-программу, которая принимая на вход натуральное число, не превосходящее 15:
  2. // B) Выводит число единиц в этом 2-ичном представлении (например, 12 -> 2).
  3.  
  4. program pr1;
  5.   var n,k:integer;
  6. begin
  7.   writeln ('введите натуральное число, не превосходящее 15:');
  8.   readln (n);
  9.    k:=0;
  10.    k:=k+n mod 2;
  11.    n:=n div 2;
  12.    k:=k+n mod 2;
  13.    n:=n div 2;
  14.    k:=k+n mod 2;
  15.    n:=n div 2;
  16.    k:=k+n mod 2;
  17.   writeln ('число единиц:', k);  
  18. end.

Задача 2.
По заданным натуральным, трёхзначным в десятичной записи числам A и B образовать и вывести число C такое, что на нечётных позициях этого числа стоят цифры числа А, а на чётных - цифры числа B. Например, А=205, B=312 дают C=230152. Представить код решения этой задачи
A) На Паскале (плохо оформлен!):

  1. program ABC; //Титов Влад
  2. var A,B,C1,C2,C3,C4,C5,C6,C:integer;
  3. begin;
  4. readln(A);
  5. readln(B);
  6. C5:=A mod 10;
  7. C3:=(A div 10) mod 10;
  8. C1:=(A div 100);
  9. C6:=B mod 10;
  10. C4:=(B div 10) mod 10;
  11. C2:=B mod 100;
  12. C:=C1*100000 + C2*10000 + C3*1000 + C4*100 + C5*10 + C6;
  13. writeln(C);
  14. end.

Здесь следует отметить, что в Паскале тип Integer для 32-разрядного процессора ограничен диапазоном чисел [-32768; 32767]. Поэтому попытка выполнить выше приведённую программу на машине с таким процессором, приведёт к выходу за пределы указанного отрезка и, как следствие, к неправильному результату. Выходом из положения является использование более широкого диапазона, обеспечиваемого типом LongInt.

Решение на Питоне аналогично.

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

  1. ...
  2. //b1,b2,b3,b4 - найденные двоичные цифры числа
  3. ones:=b1+b2+b3+b4; //число единиц
  4. nils:=4-ones; //число нулей
  5. ...

Хотя и более сложное, но оригинальное решение этой же задачи предложила Оля Тесленко (я чуть упростил её решение):
  1. ...
  2. //b1,b2,b3,b4 - найденные двоичные цифры числа
  3. b1:=b1-1; b2:=b2-1; b3:=b3-1; b4:=b4-1;
  4. //единицы превратились в нули, а нули - в минус единицы
  5. mnils:=b1+b2+b3+b4; //число нулей в исходной записи, со знаком минус
  6. nils:= - mnils; //требуемый ответ
  7. ...

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

Наверное, самая интересная задача. Её как надо не решил никто, но принцип решения уловил хорошо потрудившийся Александр Глобенко.

Действуем так. Пусть мы уже нашли L и R - соответственно, сумму левых двух, и сумму правых двух цифр. Основная проблема - не используя if-оператора, "сравнить" L и R, получив 1, если они равны, и 0 - если не равны.
Вот решение:

  1. ...
  2. L:=L+1; R:=R+1; //теперь ни L, ни R гарантированно не нули
  3. rez:=(L div R)*(R div L)); //требуемый результат
  4. //Очевидно, либо оба сомножителя единицы, либо один из них - ноль
  5. ...

Задача 5.
Привести не содержащую никаких переменных программу на Питоне, которая:
A) Удваивает вводимое число.
B) Находит сумму двух введённых чисел.

Здесь права Хандожко Вероника. Вот её решения:

  1. print(int(input()) * 2) #вариант A)

  1. print(int(input()) + int(input()))  #вариант B)

Вот и всё пока. Если возникли вопросы, спрашивайте.

Спасибо

спасибо помогла