Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
Хотя для наглядности речь в задачах может идти о столбах, шагах или распиливания бревна, полностью аналогичные задачи программистам приходится решать на каждом шагу (при работе с массивами, при вычислении количества шагов в циклах и т.д.) Все выражения, которые вам требуется составить, взяты из реальной программистской практики.
Прорешать данные задачи также полезно в связи с тем, что многие не умеют решать задачи в общем виде, когда вместо конкретных чисел используются буквенные обозначения. Кроме того, большинство выпускников обычных школ плохо представляют себе, что значит думать над задачей. Они могут прилежно заучить правила написания и смысл операторов языка, но когда надо изобрести способ решить задачу с их помощью, не понимают, что же им делать.
В данном случае мы имеем дело с простейшей ситуацией – по сути, требуется придумать программу, состоящую из одной строки. Набор операций дан, требуется их скомбинировать так, чтобы получился требуемый результат. Решение данных задач позволит выработать правильный подход и настрой для работы в ситуации когда «неизвестно что делать».
Используя арифметические операторы (+, -, *, /, 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;
Следующий раздел:
Предыдущий раздел:
Блин! Всё равно не со всем работает.((( Не домучил…
Задача № 6
//В доме 9 этажей, на каждом этаже одного подъезда по 4 квартиры.
// В каком подъезде, и на каком этаже находится n-я квартира. ;
program a1;
var
n:integer; //№ квартиры,этажей, квартир на этаже
x:=9;
y:=4;
begin
write(‘введите номер квартиры =’);
readln(n);
writeln(‘подъезд =’,(n-1) div (x*y) + 1);
writeln(‘этаж =’,(n mod (x*y)-1) div y +1);
end.
Добрый день, Тарас! Проверьте пожалуйста на правильность:
program Kopeyki;
var
n: integer;
begin
writeln(‘Введите кол-во копеек’);
readln(n);
writeln(n div 100,’ рублей ‘,n mod 100,’ копеек’);
writeln(n div 10,’ гривен ‘,n mod 10,’ копеек остается’);
writeln(n div 3,’ алтына ‘,n mod 3,’ копеек остается’);
writeln(n*4,’ полушек’);
end.
Добрый день, Тарас! Посмотрите пожалуйста задачу 8, я правда слегка изменил условие (кол-во оборотов вводится за минуту, а время в секундах). Вроде все работает за исключением случаев когда число вводимых оборотов кратное минуте, тогда все время будет ноль, подскажите пожалуйста, как можно это исправить, а то голова уже не варит. Спасибо
program zadanie_8;
var a,y,x,w,t:real;
begin
writeln(‘введите частоту вращения w в минуту’);
readln(w);
writeln(‘время вращения t в секундах’);
readln(t);
a:=360*((w/60)-(trunc(w/60)));//Узнаем кол-во градусов за секунду
y:=360/a; //Узнаем за какое время делается полный оборот
x:=360*(t/y-(trunc(t/y))); // Узнаем градус в определенное время
writeln(x);
end.
к задаче 9, если не ошибаюсь решение будет:
z:=x+y*(n-1)
Проверьте пожалуйста решение задачи 10:
x:=z*n div y;
на сколько понимаю, что даже если начинаем идти от столба, то его не берем зачет? Если считать то к у добавляем +1.
Проверьте 13ую. Вроде все правильно показывает.
program zadanie_13;
var
a:real;
begin
write(‘введите целое число’);
readln(a);
a:=(a/10-trunc(a/10))*10;
writeln(a:0:0);
end.
Предлагаю такое решение 8 задачи:
//Стрелка прибора вращается с постоянной скоростью,
//совершая w оборотов в секунду
//(не обязательно стрелка прибора,
//может быть это волчок в игре «Что? Где? Когда?» и т.п.)
//Угол поворота стрелки в нулевой момент времени
//примем за 0. Каков будет угол поворота через t секунд?
program strelka;
var
w, ugol, t, a: real;
b: integer;
begin
write (‘w = ‘); readln (w);
write (‘t = ‘); readln (t);
a:=(t*w*360)/360;
b:=trunc (a);
ugol:=(a-b)*360;
writeln (‘ угол поворота через Т секунд будет равен ‘, ugol);
end.
7 задача
//(+, -, *, /, div, mod),round(), trunc() и abs()
//Старинными русскими денежными единицами являются:
//1 рубль – 100 копеек,
//1 гривна — 10 копеек,
//1 алтын — 3 копейки,
//1 полушка — 0,25 копейки.
//Имеется А копеек.
//Запишите выражения для представления имеющейся суммы:
//в рублях, гривнах, алтынах и полушках.
program money;
var
rub, gr, kop, alt:integer;
pol:real;
begin
write (‘Введите количество копеек ‘);
readln (kop);
rub:= kop div 100;
gr:= (kop-rub*100) div 10;
alt:= (kop-rub*100-gr*10) div 3;
pol:= (kop-rub*100-gr*10-alt*3)/0.25;
Writeln (kop, ‘ коп. равно ‘, rub,’ руб. ‘,gr,’ грив. ‘,alt,’ алтынам и ‘,pol,’ полушкам ‘);
end.
Предлагаю решение для 9 задачи (надеюсь, правильное)
//9. Вы стоите на краю дороги
//от вас до ближайшего фонарного столба x метров.
//Расстояние между столбами y метров.
//На каком расстоянии от вас находится n-й столб?
//Длина вашего шага z метров.
//Мимо скольких столбов вы пройдете, сделав n шагов.
program stolbi;
var
x,y,r,z:real;
n: integer;
begin
write (‘введите расстояние до ближайшего столба: ‘);
readln (x);
write (‘введите расстояние между столбами: ‘);
readln (y);
write (‘введите длину Вашего шага: ‘);
readln (z);
write (‘введите количество шагов: ‘);
readln (n);
r:=n*z;
write (‘сделав n шагов Вы пройдете мимо стольки столбов: ‘, trunc ((r-x)/y+1));
end.
Ошибся, последний вариант для 10 задачи написал
Долго думала над решением 10-й задачи, вроде все получилось )
var
x, y, z, n, s: real;
begin
writeln(‘расстояние от вас до столба’);
readln(x);
writeln(‘расстояние между столбами’);
readln(y);
writeln(‘длина вашего шага в метрах’);
readln(z);
writeln(‘сколько шагов вы сделаете’);
readln(n);
s := (((n*z)-(y+x))/y)+1+1;
writeln(‘вы пройдете ‘, s, ‘ столбов’);
end.
хоть кто-то есть на сайте ?
вот ответ 10
program Столбы;
var
x , y , d , n : Integer;
begin
writeln(‘Вы стоите на краю дороги и от вас до ближайшего фонарного столба x метров. Расстояние между столбами y метров. Длина вашего шага z метров. Мимо скольких столбов вы пройдете, сделав n шагов’);
writeln(‘Расстояние до ближайшего столба(м) ‘);
writeln(‘x = ‘); {Вывод текста ‘n = ‘}
readln(x); {Ввод значения переменной x пользователем программы}
writeln(‘Расстояние между столбами (м)’);
writeln(‘y = ‘); {Вывод текста ‘n = ‘}
readln(y); {Ввод значения переменной x пользователем программы}
writeln(‘Длинна вашего шага (м)’);
writeln(‘d = ‘); {Вывод текста ‘n = ‘}
readln(d); {Ввод значения переменной x пользователем программы}
writeln(‘Кол-во шагов’);
writeln(‘n = ‘); {Вывод текста ‘n = ‘}
readln(n); {Ввод значения переменной x пользователем программы}
writeln (‘через ‘,n,’ шагов вы пройдете ‘,trunc((((d*n)-x)/y)+1),’ столбов’)
end.
Привет всем! Помогите, пожалуйста, с решением 1-3 задачи..вообще не могу…заранее спасибо)
Сайнет, давай пиши, что не понимаешь в первых трех — помогу.
А так по ходу никого тут, без Тараса Викторовича трудно.
Подскажите формулу 18 задачи или лучше намекните!
shae , вы решили 18-ю задачу?
Все, кто здесь бывает, пишите, вместе позанимаемся.
Нет
задача 6. как-то мудрено, кто по-другому решил ?
вот мое решение:
var
n,p,f:real;
begin
writeln(‘Введите номер квартиры’);
read(n);
p:=trunc((n+36)/36);
f:=((1+trunc(n/4))-(p-1)*9);
writeln(p,’ н подъезда ‘,f,’ н этажа’);
end.
Я проще решил. У меня вообще одна переменная.
Задание 10.
var
m,ns,n,s,z,x,y:real;
begin
writeln(‘Введите по очереди: 1.расстояние до ближайшего столба, 2. расстояние между столбами,3. номер столба,4.длину вашего шага, 5. кол-во шагов’);
read(x,y,ns,z,n);
s:=x+y*ns;// узнаем пройденное расстояние
writeln(‘Расстояние до ‘,n,’ столба = ‘,s,’ метр(а)ов’);
m:=trunc(z*n/y-x);// узнаем сколько столбов прошли
writeln(‘ за ‘,n,’ шагов, вы пройдете ‘,m,’ столбов’);
end.
13 задание.
var
a:integer;
begin
writeln(‘vvedite chislo’);
read(a);
writeln(‘posledn99 cifra ‘,a mod 10);
end.
АртемФ, можно одной, но там больно много получится, если по моему решению. Но так вроде тоже неплохо работает.
задание 24.
var d1,d2,d3,a:integer;
begin
read(a);
d1:=trunc(a/100);
d2:=trunc(a/10) mod 10;
d3:=a mod 10;
writeln(‘1ое число(‘,d1,’) 2ое число(‘,d2,’) 3е число(‘,d3,’)’);
end.
В 10-м усложняете, столько лишних переменных, DeadMilk . Во второй строке. Зачем вам столько? У меня там 4-е переменных и все!
DeadMilk, а в 13 если любое число???
АртемФ, в 13 да. В 10 просто + 9 задание, все параметры вводятся из-за этого. Можно было выкинуть пару переменных, и вместо них выводить просто действие, но тогда не понятнее становится и путанее.
Задание 6.
program six; {6. В доме 9 этажей, на каждом этаже одного подъезда по 4 квартиры. В каком подъезде, и на каком этаже находится n-я квартира.}
var n, x, a, b: integer;
begin
write (‘Введите номер квартиры n=’);
read (n);
x:=(n+3) div 4;
writeln (‘Общий номер этажа x=’, x);
a:=trunc (x/9 +0.9);
writeln (‘Номер подъезда a=’, a);
b:=x-(9*(a-1));
writeln (‘Номер этажа b=’, b);
end.
Задание 8.
//8. Стрелка прибора вращается с постоянной скоростью,
//совершая w оборотов в секунду.
//Угол поворота стрелки в нулевой момент времени примем за 0.
//Каков будет угол поворота через t секунд?
program восемь;
var w,x,t: real;
begin
write (‘Введите количество оборотов в секунду w ‘); read (w);
write (‘Введите количество секунд t ‘); read (t);
x:=(t/w)*360;
write (‘Угол поворота через ‘, t, ‘ секунд ‘, x);
end.
//9. Вы стоите на краю дороги и от вас до ближайшего фонарного столба x метров.
//Расстояние между столбами y метров.
//На каком расстоянии от вас находится n-й столб?
Program девять;
var x,y,n,a: real;
begin
write (‘Введите расстояние до ближайшего фонарного столба от вас x ‘);
read (x);
write (‘Введите расстояние между столбами y ‘);
read (y);
write (‘Введите количество столбов n ‘);
read (n);
a:=n*y-x;
write (‘Расстояние от вас до ‘, n, ‘-го столба ‘, a, ‘ метров’);
end.
//10. Вы стоите на краю дороги и от вас до ближайшего фонарного столба x метров.
//Расстояние между столбами y метров.
//Длина вашего шага z метров. Мимо скольких столбов вы пройдете, сделав n шагов.
program десять;
var x,y,z,n,a: real;
begin
write (‘Введите расстояние до ближайшего фонарного столба от вас x ‘);
read (x);
write (‘Введите расстояние между столбами y ‘);
read (y);
write (‘Введите длину вашего шага z ‘);
read (z);
write (‘Введите количество шагов n ‘);
read (n);
a:=(n*z)/y;
write (‘Вы прошли мимо ‘, a, ‘ столбов’);
end.
//11. x – вещественное число. Запишите выражение, позволяющее выделить его дробную часть.
//(+, -, *, /, div, mod), а также функции round(), trunc() и abs()
program одиннадцать;
var x,a: real;
begin
write (‘Введите вещественное число x ‘);
read (x);
a:= round (x);
a:= x-a;
write (‘Дробная часть ‘, a);
end.
//12. x – вещественное число. Запишите выражение, которое округлит его до сотых долей
//(останется только два знака после запятой).
//(+, -, *, /, div, mod), а также функции round(), trunc() и abs()
program двенадцать;
var x,a: real;
begin
write (‘Введите вещественное число x ‘);
read (x);
a:=(trunc (x*100))/100;
write (‘Решение ‘, a);
end.
//13. n – целое число. Запишите выражение, позволяющее узнать его последнюю цифру.
//(+, -, *, /, div, mod), а также функции round(), trunc() и abs()
program тринадцать;
var n,a: integer;
begin
write (‘Введите целое число ‘);
read (n);
a:= n mod 10;
write (‘Последняя цифра ‘, a);
end.
//14. n – четырехзначное целое число. Запишите выражение, позволяющее узнать его первую цифру.
//(+, -, *, /, div, mod), а также функции round(), trunc() и abs()
program четырнадцать;
var n,a: integer;
begin
write (‘Введите четырехзначное целое число ‘);
read (n);
a:= trunc (n/1000);
write (‘Первая цифра ‘, a);
end.
//15. Оператор div в Паскале работает только для целых чисел.
//Составьте выражение, позволяющее получать целую часть от деления вещественных чисел.
//(+, -, *, /, div, mod), а также функции round(), trunc() и abs()
program пятнадцать;
var x,y,z: real;
begin
write (‘Введите вещественное число x ‘);
read (x);
write (‘Введите вещественное число y ‘);
read (y);
z:= trunc (x/y);
write (‘Целая часть от деления вещественных чисел ‘, z);
end.
//16. Выразите операцию mod через другие арифметические операции.
//(+, -, *, /, div, mod), а также функции round(), trunc() и abs()
program пятнадцать;
var x,y,z,a: integer;
begin
write (‘Введите число x ‘);
read (x);
write (‘Введите число y ‘);
read (y);
z:= x — (x div y)*y;
write (‘Взятие остатка от деления ‘, z);
end.
Для а>0 и b>0 справедливо:
a mod b = a – (a div b)*b
(a div b)*b + (a mod b) = a
http://informatics.mccme.ru/mod/book/view.php?id=5115
//17. x – вещественное число. Запишите выражение, которое даст +1,
//если x>0 и -1, если x<0 (при x=0 выражение будет неопределено).
//(+, -, *, /, div, mod), а также функции round(), trunc() и abs()
program семнадцать;
var x,y,z,s: real;
begin
write ('Введите число x ');
read (x);
y:= abs (x) / x;
z:= x/x;
s:=y/z;
write ('Выражение равно ', s);
end.
//18. n и m – целые числа. Запишите выражение, которое давало бы 0,
//если n кратно m, и 1, если не кратно.
//(+, -, *, /, div, mod), а также функции round(), trunc() и abs()
program восемнадцать;
var n,m,x: integer;
begin
write (‘Введите целое число n ‘);
read (n);
write (‘Введите целое число m ‘);
read (m);
x:=trunc (((n/m)-(n div m))+0.9);
write (x);
end.
//19. От бревна длиной L отпиливают куски длиной x.
//Сколько кусков максимально удастся отпилить.
//(+, -, *, /, div, mod), а также функции round(), trunc() и abs()
program девятнадцать;
var L,x,z: integer;
begin
write (‘Введите длину бревна L ‘);
read (L);
write (‘Введите длину кусков x ‘);
read (x);
z:=L div x;
write (‘Максимально удастся отпилить ‘, z, ‘ кусков.’);
end.
//20. Бревно длиной L распилили в n местах.
//Какова средняя длина получившихся кусков?
//(+, -, *, /, div, mod), а также функции round(), trunc() и abs()
program двадцать;
var L,n,x: integer;
begin
write (‘Введите длину бревна L ‘);
read (L);
write (‘Введите количество распилов n ‘);
read (n);
x:=round (L/n);
write (‘Средняя длина получившихся кусков ‘,x);
end.
//21. Резиновое кольцо диаметром d разрезали в n местах.
//Какова средняя длина получившихся кусков?
//(+, -, *, /, div, mod), а также функции round(), trunc() и abs()
program двадцать_один;
var d,n,x: integer;
begin
write (‘Введите диаметр резинового кольца d ‘);
read (d);
write (‘Введите количество разрезов n ‘);
read (n);
x:= round (pi*d/2/n);
write (‘Средняя длина получившихся кусков ‘, x);
end.
//22. На прямой через равные промежутки располагается n точек.
//Расстояние от первой до последней равно L.
//Чему равно расстояние от первой точки до i-й?
//А от k-й до последней? А от i-й до k-й?
//(+, -, *, /, div, mod), а также функции round(), trunc() и abs()
program двадцать_два;
var n,L,i,k,x,y,z,a: real;
begin
write (‘Введите количество точек на прямой n ‘);
read (n);
write (‘Введите расстояние от первой точки до последней L ‘);
read (L);
write (‘Введите номер точки i ‘);
read (i);
write (‘Введите номер точки k ‘);
read (k);
x:=L/(n-1);
writeln (‘Длина каждого отрезка ‘, x);
y:=x*(i-1);
writeln (‘Расстояние от первой точки до ‘, i, ‘-й ‘, y);
z:=(n-k)*x;
writeln (‘Расстояние от ‘, k, ‘-й до последней ‘, z);
a:=(k-i)*x;
writeln (‘Расстояние от ‘, i, ‘-й до ‘, k, ‘-й ‘, a);
end.
//24. Пусть дано трехзначное число x (например, 123).
//Составьте выражения, которые позволят вычислить первую, вторую и третью цифру этого числа (числа 1, 2 и 3 в примере).
//Для облегчения поиска решения имейте в виду, что для двузначного числа первая цифра дается выражением
//d1:=x div 10;
//а вторая выражением
//d2:=x mod 10;
//(+, -, *, /, div, mod), а также функции round(), trunc() и abs()
program двадцать_четыре;
var x,y,z,a: integer;
begin
write (‘Введите трехзначное число x ‘);
read (x);
y:=x div 100;
writeln (‘Первая цифра ‘,y);
z:=(x div 10) mod 10;
writeln (‘Вторая цифра ‘,z);
a:=x mod 10;
writeln (‘Третья цифра ‘,a);
end.
//предлагаю вариант решения задачи №6
program house;
var
a: integer;
begin
write(‘введите номер квартиры, чтобы узнать, на каком она этаже: ‘);
readln(a);
writeln(‘квартира №’,a,’ на ‘,round(a mod 36/4+0.4),’ этаже ‘,round(a/36+0.4),’ подъезда.’);
end.
//вариант для 7 задачи
program sdaf;
var
r,g,a,k: integer;
p: real;
begin
writeln(‘сколько копеек нужно перевести?’);
readln(k);
r:=k div 100;
g:=(k mod 100) div 10;
a:=(k mod 10) div 3;
p:=(k mod 3)/0.25;
writeln(r,’ рублей ‘,g,’ гривен ‘,a,’ алтын ‘,p,’ полушек’);
end.
//вариант для 8 задачи
program волчок;
var
w: real;
t: integer;
begin
write(‘введите время — ‘);readln(t);
write(‘введите количество оборотов — ‘);readln(w);
writeln(‘угол поворота составит ‘,(t*w-trunc(t*w))*360,’ градусов, через ‘,t,’ секунд’);
end.
//вариант для 9 задачи
program столб;
var
x,y:real;
n:integer;
begin
write(‘метров до ближайшего столба — ‘);readln(x);
write(‘расстояние между столбами (в метрах) — ‘);readln(y);
write(‘узнать расстояния до столба номер — ‘);readln(n);
writeln(‘до ‘,n,’ столба номер ‘,n*y-(y-x),’ метров’);
end.