Как известно, нецелые числа в компьютере далеко не всегда представляются точно, поскольку большую часть их даже теоретически невозможно точно перевести в двоичную систему. Это порождает проблемы при проверках на точное равенство. Например, если мы попробуем перевести в двоичную систему число 0.1, то не сможем этого сделать и в компьютере вместо 0.1 будет храниться число, которое чуть-чуть, но все же меньше. Многократно увеличивая шагами какую-то величину на 0.1 мы все больше и больше будет удаляться от правильного (ожидаемого) значения и при проверка на точное равенство нас неприятно удивит. Поэтому в предыдущем ответе, несмотря на то, что диапазон задавался [1.2;2], проверка делается на 2.1 (можно и на 2.0000001 было делать).
Есть другой писать программы для табуляции функций. 1) Находим, сколько значений нужно получить Для этого от конечного значения вычитаем начальное, делим на шаг, берем целую часть результата и увеличиваем на единицу. (2-1.2)/0.1=8, 8+1=9 - именно столько раз выполнится цикл. Да-да, мы делаем традиционный цикл со счетчиком (for), в котором i будет меняться от 0 до 8. 2) получим формулу для вычисления значения аргумента. При i=0 значение х(0)=1.2. При i=1 должно получиться x(1)=1.3. Легко найти зависимость: x(i)=1.2+i/10. Можно компьютер и переписать это выражение в виде x(i)=(12+i)/10, потому что в первом случае будут операции а) перевод i в real б) сложение двух real в) деление двух real, а во втором - а) сложение двух integer б) перевод в real в) деление двух real и это быстрее.
var i:integer; x,y:real; begin for i:=0 to 8 do begin x:=(12+i)/10; y:=sqrt(x-1)/sin(1/x); Writeln(x:3:1,y:10:6) end end.
#include <iostream>
#include <math.h>
using namespace std;
int main() {
int a;
cin >> a;
int d = a%10;
string s = "yes";
while(abs(a) > 0) {
if(a%10 != d) {
s = "no";
break;
}
a/=10;
}
cout << s << endl;
}
2)
#include <iostream>
#include <math.h>
using namespace std;
int main() {
int a;
cin >> a;
int d = a%10;
a/=10;
string s = "no";
while(abs(a) > 0) {
if(a%10 == d) {
s = "yes";
break;
}
d = a%10;
a/=10;
}
cout << s << endl;
}
Есть другой писать программы для табуляции функций.
1) Находим, сколько значений нужно получить
Для этого от конечного значения вычитаем начальное, делим на шаг, берем целую часть результата и увеличиваем на единицу.
(2-1.2)/0.1=8, 8+1=9 - именно столько раз выполнится цикл.
Да-да, мы делаем традиционный цикл со счетчиком (for), в котором i будет меняться от 0 до 8.
2) получим формулу для вычисления значения аргумента.
При i=0 значение х(0)=1.2. При i=1 должно получиться x(1)=1.3.
Легко найти зависимость: x(i)=1.2+i/10. Можно компьютер и переписать это выражение в виде x(i)=(12+i)/10, потому что в первом случае будут операции а) перевод i в real б) сложение двух real в) деление двух real, а во втором - а) сложение двух integer б) перевод в real в) деление двух real и это быстрее.
var
i:integer;
x,y:real;
begin
for i:=0 to 8 do begin
x:=(12+i)/10;
y:=sqrt(x-1)/sin(1/x);
Writeln(x:3:1,y:10:6)
end
end.
Результат
1.2 0.604198
1.3 0.787430
1.4 0.965466
1.5 1.143501
1.6 1.323877
1.7 1.507784
1.8 1.695869
1.9 1.888486
2.0 2.085830