Персональная страничка
Диканева Тараса
Викторовича

Главная \ Преподавательское \ Программирование для начинающих

1. Линейные программы: арифметические операторы, стандартные функции и ввод/вывод в текстовом режиме

Предыдущий раздел:

Следующий раздел:

1.7. Задачи на составление арифметических выражений

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

Прорешать данные задачи также полезно в связи с тем, что многие не умеют решать задачи в общем виде, когда вместо конкретных чисел используются буквенные обозначения. Кроме того, большинство выпускников обычных школ плохо представляют себе, что значит думать над задачей. Они могут прилежно заучить правила написания и смысл операторов языка, но когда надо изобрести способ решить задачу с их помощью, не понимают, что же им делать.

В данном случае мы имеем дело с простейшей ситуацией – по сути, требуется придумать программу, состоящую из одной строки. Набор операций дан, требуется их скомбинировать так, чтобы получился требуемый результат. Решение данных задач позволит выработать правильный подход и настрой для работы в ситуации когда «неизвестно что делать».

Задания:

Используя арифметические операторы (+, -, *, /, div, mod), а также функции round(), trunc() и abs(), составьте арифметические выражения для вычисления следующих величин:

1. n-е четное число (первым считается 2, вторым 4 и т.д.)

2. n-е нечетное число (первое равно 1, второе 3 и т.д.)

3. В очереди стоят n людей, сколько человек находится между i-м и k-м в очереди.

4. Сколько нечетных чисел на отрезке (a, b), если a и b – четные? Если a и b – нечетные? a –четное, b – нечетное?

5. Сколько полных минут и часов содержится в x секундах?

6. В доме 9 этажей, на каждом этаже одного подъезда по 4 квартиры. В каком подъезде, и на каком этаже находится n-я квартира.

7. Старинными русскими денежными единицами являются: 1 рубль – 100 копеек, 1 гривна — 10 копеек, 1 алтын — 3 копейки, 1 полушка — 0,25 копейки. Имеется А копеек. Запишите выражения для представления имеющейся суммы в рублях, гривнах, алтынах и полушках.

8. Стрелка прибора вращается с постоянной скоростью, совершая w оборотов в секунду (не обязательно стрелка прибора, может быть это волчок в игре «Что? Где? Когда?» и т.п.) Угол поворота стрелки в нулевой момент времени примем за 0. Каков будет угол поворота через t секунд?

9. Вы стоите на краю дороги и от вас до ближайшего фонарного столба x метров. Расстояние между столбами y метров. На каком расстоянии от вас находится n-й столб?

10. Та же ситуация, что и в предыдущей задаче. Длина вашего шага z метров. Мимо скольких столбов вы пройдете, сделав n шагов.

11. x – вещественное число. Запишите выражение, позволяющее выделить его дробную часть.

12. x – вещественное число. Запишите выражение, которое округлит его до сотых долей (останется только два знака после запятой).

13. n – целое число. Запишите выражение, позволяющее узнать его последнюю цифру.

14. n – четырехзначное целое число. Запишите выражение, позволяющее узнать его первую цифру.

15. Оператор div в Паскале работает только для целых чисел. Составьте выражение, позволяющее получать целую часть от деления вещественных чисел.

16. Выразите операцию mod через другие арифметические операции.

17. x – вещественное число. Запишите выражение, которое даст +1, если x>0 и -1, если x<0 (при x=0 выражение будет неопределено).

18. n и m – целые числа. Запишите выражение, которое давало бы 0, если n кратно m и 1, если не кратно.

19. От бревна длиной L отпиливают куски длиной x. Сколько кусков максимально удастся отпилить.

20. Бревно длиной L распилили в n местах. Какова средняя длина получившихся кусков?

21. Резиновое кольцо диаметром d разрезали в n местах. Какова средняя длина получившихся кусков?

22. На прямой через равные промежутки располагается n точек. Расстояние от первой до последней равно L. Чему равно расстояние от первой точки до i-й? А от k-й до последней? А от i-й до k-й?

23. Известно, что приближенные формулы для вычисления синуса и косинуса работают тем точнее, чем меньше значение аргумента. Поскольку синус и косинус 2π-периодические функции (sin(x) = sin(x+2πn) , где n – любое целое число), то можно вычисление синуса от любого аргумента привести к вычислению синуса от аргумента, лежащего в диапазоне от 0 до 2π. Запишите формулы, позволяющие:
(а) привести положительный угол x в диапазон от 0 до 2π.
(б) аналогично для отрицательного угла.

24. Пусть дано трехзначное число x (например, 123). Составьте выражения, которые позволят вычислить первую, вторую и третью цифру этого числа (числа 1, 2 и 3 в примере). Для облегчения поиска решения имейте в виду, что для двузначного числа первая цифра дается выражением

  d1:=x div 10;

а вторая выражением

  d2:=x mod 10;

Следующий раздел:

Предыдущий раздел:

327 комментариев

  1. Lena

    Добрый день. Верна ли программа к 3 задаче? :
    var
    k,i,s: integer;
    begin
    write(`s=`);
    readln(k,i);
    s:=k-i-1;
    writeln(abs(s));
    end

  2. Lena

    А знвчения условности не были еще описанны. Как без них решить 4-ю задачу?

  3. Taras

    3-я — правильно.
    В 4-й считай, что просто это 3 задачи.

  4. e2-e4

    Разве правильное решение у Lena?
    Если, к примеру, мы введем 1 и 2, то программа возвращает значение 2.

    Да и сама переменная s зачем здесь?

  5. e2-e4

    var
    i, k: integer;

    begin
    writeln(‘введите i’);
    write(‘i=’);
    readln(i);
    writeln(‘введите k’);
    write(‘k=’);
    readln(k);

    writeln(‘между i и k — ‘, abs(k-i)-1, ‘ человек’);

    end.

  6. Николай

    Добрый Вечер!
    Подскажите верна ли задача №6?
    var
    n,x,y: integer;
    begin
    writeln(‘Введите № кв. ‘);
    readln(n);
    x:=(n+35) div 36;
    y:=(n+3) div 4-((n+35) div 36-1)*9;
    writeln(‘Подъезд № ‘,x,’ Этаж № ‘,y);
    end.

  7. Николай

    Пожалуйста подскажите № 10. всю голову сломал….

  8. Николай

    Тарас Викторович!!!!! вернитесь на сайт… ПОЖАЛУЙСТАААА!!!!

  9. Николай

    Верно ли №14?
    program pervaya_cifra;
    var
    x: integer;
    begin
    write(‘x= ‘);
    readln(x);
    write(‘Первая цифра ‘,trunc(x/1000));
    end.

  10. Николай

    верно ли 15?
    program delenie;
    var
    x,y: real;
    begin
    write(‘x= ‘);
    readln(x);
    write(‘y= ‘);
    readln(y);
    write(‘целая часть от деления ‘,trunc(x/y));
    end.

  11. Николай

    а 16?
    program delenie;
    var
    x,y: integer;
    begin
    write(‘x= ‘);
    readln(x);
    write(‘y= ‘);
    readln(y);
    write(‘остаток от деления ‘,x-y*trunc(x/y));
    end.

  12. Николай

    верно ли 17?
    program semnadcat;
    var
    x: real;
    begin
    write(‘x= ‘);
    readln(x);
    write(trunc(x/abs(trunc(x))));
    end.

  13. Николай

    верно ли 19?
    program devyatnadcat;
    var
    l,x: integer;
    begin
    write(‘l= ‘);
    readln(l);
    write(‘x= ‘);
    readln(x);
    write(‘макс. кол-во кусков ‘,trunc(l/x));
    end.

  14. Николай

    верно ли 20?
    program dvadcat;
    var
    l,n: integer;
    begin
    write(‘l= ‘);
    readln(l);
    write(‘n= ‘);
    readln(n);
    write(‘средний размер ‘,l/(n+1));
    end.

  15. Николай

    верно ли 21?
    program dvadcatodin;
    var
    n,d: integer;
    begin
    write(‘d= ‘);
    readln(d);
    write(‘n= ‘);
    readln(n);
    write(‘средний размер ‘,pi*d/n);
    end.

  16. Николай

    Здравствуйте Тарас Викторович!
    Проверьте пожалуйста №22.
    program dvadcat_dva;
    var
    l,n,i,k: real;
    begin
    write(‘l= ‘);
    readln(l);
    write(‘n= ‘);
    readln(n);
    write(‘i= ‘);
    readln(i);
    write(‘k= ‘);
    readln(k);
    write(‘от 1-ой до i ‘,(l/(n-1))*(i-1),’ от k до последней ‘,(l/(n-1))*(n-k),’ от i до k ‘,(l/(n-1))*(k-i));
    end.

  17. Николай

    верно ли 24?
    program dvadcat_chetire;
    var
    x: integer;
    begin
    write(‘x= ‘);
    readln(x);
    write(‘1-я цифра — ‘,(trunc(x div 10))div 10,’ 2-я — ‘,(trunc(x div 10))mod 10,’ 3-я цифра — ‘,round((x/10-trunc(x/10))*10));
    end.

  18. e2-e4

    Николай, 10-я задача:

    var
    x,y,z,n: integer;

    begin

    writeln(‘Введите расстояние до ближайшего столба’);
    readln(x);

    writeln(‘Введите расстояние между столбами’);
    readln(y);

    writeln(‘Введите длину вашего шага’);
    readln(z);

    writeln(‘Введите количество шагов’);
    readln(n);

    writeln(‘Вы прошли мимо ‘, round (z*n/(z*n+x)) + round (z*n/(z*n+x)) * ((z*n-x) div y) ,’ столбов.’);

    end.

  19. Николай

    Спасибо е2-е4!!!

  20. Алексанлдр

    Таким образом можно было задачу №10 решить?
    program hz;
    var
    n, x, y : integer;
    b,z: real;
    begin
    write ( ‘введите расстояние от Вас до столба’);
    readln(x);
    write ( ‘введите расстояние между столбами’);
    readln(y);
    write(‘введите длину Вашего шага’);
    readln(z);
    write(‘введите количество шагов’);
    readln(n);
    b:=( n*z -(x-y))/y;
    b:= trunc (b);

    writeln (‘через ‘,n,’ шагов вы пройдете’,b,’ столбов’);

    end.

  21. Taras

    Можно :)
    Целую часть от деления можно получить сразу с помощью div. Кстати, тогда и тип real для, по определению, целого числа столбов не понадобился бы. Для большей ясности я бы написал:

    (n*z − x) div y + 1

  22. Алексанлдр

    20 задачу может я не до конца понял ? но зачем искать среднюю длину ,если это и есть по сути деление длины на кол-во спиленных мест?

    program brevna ;
    var
    l,n, x: real ;
    begin
    write (‘введите длину бревна ‘);
    readln(l);
    write(‘введите количество обрубов’);
    readln(n);
    x:=l/n;
    writeln(‘средняя длина куска равна ‘,x, ‘ м’);
    end.

  23. Алексанлдр

    да и в 21 не уверен , что все понял)
    program krug ;
    var
    d,n : real ;
    begin
    write(‘введите диаметр’);
    readln(d);
    write(‘введите количество срезов’);
    readln(n);
    writeln( ‘ средняя длина отрезков равна ‘,d*3.14/n);
    end.

  24. Taras

    20 — бревно длиной L = 1 м распилили в n = 1 (одном) месте. Получились куски со средней длиной L/n = 1 м. Очевидно, пилили вдоль! При больших n, соответственно, предполагается пиление по диагонали.

    21 — правильно. Вместо 3.14 можно использовать стандартную функцию pi.

  25. Алексанлдр

    понял ) а так?

    program brevna ;
    var
    l,n, x: real ;
    begin
    write (‘введите длину бревна ‘);
    readln(l);
    write(‘введите количество обрубов’);
    readln(n);
    x:=l/n+1;
    writeln(‘средняя длина куска равна ‘,x, ‘ м’);
    end.

  26. Taras

    Так получатся куски по 2 метра :)

  27. Алексанлдр

    а теперь?))

    program brevna ;
    var
    l,n, x: real ;
    begin
    write (‘введите длину бревна ‘);
    readln(l);
    write(‘введите количество обрубов’);
    readln(n);
    x:=l/(n+1);
    writeln(‘средняя длина куска равна ‘,x, ‘ м’);
    end.

  28. Алексанлдр

    Тарас ,еще проверьте , пожалуйста, задания в главе 2.4

  29. Лилия

    Тарас ! я не понимаю как решить 2 и 3 задачи помогите!!

  30. АленА

    У меня такое решение к задаче №3:
    program Ochered;
    var
    i, k, n: integer;
    begin
    writeln(‘Введите количество людей в очереди ‘);
    readln(n);
    writeln(‘Введите число i ‘ );
    readln(i);
    writeln(n>=i);
    writeln(‘Введите число k ‘);
    readln(k);
    writeln(n>=k);
    writeln(‘Между i и k стоит ‘, abs(i-k)-1, ‘ людей.’);
    end.

  31. АленА

    Задача №1:
    program Chet;
    var
    n: integer;
    begin
    writeln(‘Введите число n ‘);
    readln(n);
    writeln(n, ‘-е четное число ‘, 2*n);
    end.

    Задача №2:
    program Nechet;
    var
    n: integer;
    begin
    writeln(‘Введите число n ‘);
    readln(n);
    writeln(n, ‘-е нечетное число ‘, 2*n-1);
    end.

  32. АленА

    Задача №5:
    program Vremya;
    var
    x: integer;
    begin
    writeln(‘Введите количество секунд ‘);
    readln(x);
    writeln(‘в ‘, x, ‘ секундах ‘, x div 60, ‘ полных минут ‘, x div 3600, ‘ полных часов ‘);
    end.

  33. АленА

    Задача №6
    program Dom;
    var
    n, x, y, z: integer;
    begin
    writeln(‘Введите номер квартиры ‘);
    readln(n);
    x:=(n+35) div 36;
    z:= n -(x-1)*36;
    y:=(z+3)div 4;
    writeln(‘квартира номер ‘, n, ‘ находится в ‘, x, ‘ подъезде ‘, ‘ на ‘, y , ‘ этаже ‘);
    end.

  34. АленА

    Задача №7
    program Kopejki;
    var
    x, a, b, c, d: integer;
    begin
    writeln (‘введите количество копеек ‘);
    readln (x);
    a:= x div 100;
    b:= (x-a*100) div 10;
    c:= (x-a*100-b*10) div 3;
    d:= (x-a*100-b*10-c*3)*4;
    writeln (a, ‘ рублей ‘, b, ‘ гривен ‘, c, ‘ алтын ‘, d, ‘ полушек ‘);
    end.

  35. АленА

    Проверьте, пожалуйста, задачу №8.
    program Krug;
    var
    x, t, y: real;
    begin
    writeln (‘введите период вращения стрелки в секундах – время, за которое стрелка совершает один оборот’);
    readln (y);
    writeln (‘введите время вращения в секундах’);
    readln (t);
    x:=(2*pi/y)*t;
    writeln (‘угол поворота через ‘, t, ‘ секунд равен ‘, x, ‘ радиан’);
    end.

  36. АленА

    Задача №9.
    program Stolb;
    var
    x, y, n: integer;
    begin
    writeln(‘Введите расстояние до ближайшего столба ‘);
    readln(x);
    writeln(‘Введите расстояние между столбами ‘);
    readln(y);
    writeln(‘Введите количество столбов ‘);
    readln(n);
    writeln(‘Крайний столб находится от вас на расстоянии ‘, x+y*(n-1), ‘ метров.’);
    end.

  37. АленА

    Переделала задачу №8:
    program Krug;
    var
    x, t, y: real;
    begin
    writeln (‘введите частоту вращения стрелки — количество оборотов за одну секунду ‘);
    readln (y);
    writeln (‘введите время вращения в секундах’);
    readln (t);
    x:=2*pi*y*t;
    writeln (‘угол поворота через ‘, t, ‘ секунд равен ‘, x, ‘ радиан или ‘, x*180/pi, ‘ градусов ‘);
    end.

  38. АленА

    Помогите найти ошибку в формуле к задаче №8, градусы выходят за пределы 360, как это исправить?

  39. АленА

    Задача №11.
    program Drob;
    var
    x: real;
    begin
    writeln(‘Введите дробное число’);
    readln(x);
    writeln(‘дробная часть числа ‘, x-trunc(x));
    end.

  40. АленА

    Задача №12.
    program Okrugleniye;
    var
    x, y, z: real;
    begin
    writeln(‘Введите дробное число’);
    readln(x);
    y:=trunc(x);
    z:=(x-trunc(x))*100;
    writeln(‘округлено до сотых = ‘, y, ‘.’, round(z));
    end.

  41. АленА

    Задача №13.
    program Poslednyaya;
    var
    n:integer;
    x, y: real;
    begin
    writeln (‘введите цифру’);
    readln (n);
    x:=n/10;
    y:= x-trunc(x);
    writeln (‘последняя цифра вашего числа ‘, round(y*10));
    end.

  42. АленА

    Задача №14.
    program Pervaya;
    var
    n:integer;
    x, y: real;
    begin
    writeln (‘введите четырехзначное число’);
    readln (n);
    x:=n/10000;
    y:= x-trunc(x);
    writeln (‘первая цифра вашего числа ‘, trunc(y*10));
    end.

  43. АленА

    Задача №15.
    program Celaya;
    var
    x, y: real;
    begin
    writeln(‘ведите дробное число ‘);
    readln(x);
    writeln(‘ведите второе дробное число ‘);
    readln (y);
    writeln(‘Целая часть от деления ‘, trunc(x/y));
    end.

  44. АленА

    Задача №19.
    program Brevno;
    var
    l,x: integer;
    begin
    writeln(‘Введите длину бревна ‘);
    readln(l);
    writeln(‘Введите длину бруска в тех же единицах измерения ‘);
    readln(x);
    write(‘Из бревна получится ‘, l div x, ‘ целых брусков.’);
    end.

    Задача №20.
    program Brevno2;
    var
    l,n: integer;
    begin
    writeln(‘Введите длину бревна ‘);
    readln(l);
    writeln(‘Введите количество распилов ‘);
    readln(n);
    write(‘Средняя длина бруска ‘, l div (n+1));
    end.

  45. АленА

    Задача №21.
    program Kolzo;
    var
    d,n: real;
    begin
    writeln(‘Введите диаметр кольца ‘);
    readln(d);
    writeln(‘Введите количество разрезов ‘);
    readln(n);
    write(‘Средняя длина куска кольца ‘, pi*d/n);
    end.

    Задача №22.
    program Pryamaja;
    var
    l, i, k, n, x: real;
    begin
    writeln(‘Введите количество точек ‘);
    readln(n);
    writeln(‘Введите расстояние от первой до последней точки ‘);
    readln(l);
    writeln(‘Введите порядковый номер точки i ‘);
    readln(i);
    writeln(‘Введите порядковый номер точки k ‘);
    readln(k);
    x:=l/(n-1);
    write(‘Расстояние от первой точки до i-й = ‘, x*(i-1), ‘, расстояние от k-й до последней = ‘, x*(n-k), ‘, расстояние от i-й до k-й = ‘, x*abs(k-i));
    end.

  46. АленА

    Задача №24.
    program Tri;
    var
    x, d1, d2, d3: integer;
    begin
    writeln(‘Введите трехзначное число ‘);
    readln(x);
    d1:= x div 100;
    d2:= (x-d1*100) div 10;
    d3:= x mod 10;
    write(‘1-я цифра числа ‘, d1, ‘, 2-я цифра числа ‘, d2, ‘, 3-я цифра числа ‘, d3);
    end.

  47. Аноним

    111

  48. Евгений

    если кому интересно ещё)), задача номер 4
    program Skolko_Chisel;

    var
    a, b: real;

    begin
    write(‘a=’);
    readln(a);
    write(‘b=’);
    readln(b);
    writeln(‘Chisel=’, (round(((b — a) — 1) / 2)));
    end.
    у меня по крайней мере получается, правильно или нет, решать «гуру». Желание научится появилось сегодня, пару часов назад. Почитал, всё доступно написано, как раз для таких, как я. Решение не всё, но остальное путём банальной смены операторов.

  49. Евгений

    Извиняюсь, там конечно же не real, а integer. Кстати затягивает :-)

  50. Роман

    Евгений, задача 4 состоит из 3 разных задач в первом случае
    var
    a, b: integer;

    begin
    writeln(‘введите четное a’);
    write(‘a=’);
    readln(a);
    writeln(‘введите четное b ‘);
    write(‘b=’);
    readln(b);
    writeln(‘нечетных между a и b — ‘, abs (a-b)/2, ‘ единиц ‘);

    end.
    во втором
    var
    a, b: integer;

    begin
    writeln(‘введите нечетное a’);
    write(‘a=’);
    readln(a);
    writeln(‘введите нечетное b ‘);
    write(‘b=’);
    readln(b);
    writeln(‘нечетных между a и b — ‘, abs (a-b)/2-1, ‘ единиц ‘);

    end.
    в третьем
    var
    a, b: integer;

    begin
    writeln(‘введите четное a’);
    write(‘a=’);
    readln(a);
    writeln(‘введите нечетное b ‘);
    write(‘b=’);
    readln(b);
    writeln(‘нечетных между a и b — ‘, abs ((a-b)-1)/2, ‘ единиц ‘);

    end.

  51. Макс

    Задача № 8 (Видимо я жутко тупой, т.к. мучил её ровно сутки:))
    var
    w, t, c, g, g1: real;
    begin
    write(‘количество оборотов в секунду=’);
    readln(w);
    write(‘количество секунд=’);
    readln(t);
    c:=360*w;
    g:=c*t;
    g1:=g-(360*trunc(w)*trunc(t));
    writeln(trunc(g1));
    end.

Добавить комментарий