Написать программы на паскале:
1)Дана последовательность чисел а1,а2,а3,....,а25.Указать наименьшую длину числовой оси,содержащую все эти числа(я так понял,что надо найти разницу между максимальным числом и минимальным);
2)Дано натуральное число N.Вычислить: S=1+1/2+1/4+1/8+1/16+...1/(2^N);
3)Дано натуральное число.Поменять порядок следования цифр в этом числе на обратный или сообщить,что это невозможно в силу переполнения.
Ответы
Ответ дал:
0
1) Все правильно, это и будет разность между максимумом и минимумом
program one;
var input,max,min:integer;
i:integer;
begin
readln(input);
max:=input;
min:=input;
for i:=2 to 25 do begin
readln(input);
if input>max then max:=input;
if input<min then min:=input;
end;
writeln(max-min);
end.
2) Гораздо проще не суммировать в цикле степени половины, а воспользоваться тем, что
.
program two;
var res:real;
i,n:integer;
begin
readln(n);
res:=0.5;
for i:=2 to n do res*=0.5;
res:=2-res;
writeln(res);
end.
3) Здесь существует несколько способов реализации; в частности, можно было просто считать число как строку и возвратить ее в перевернутом виде (ReverseString(s)), не заботясь о переполнении, однако я решил, что по логике задания нужно делать через числа. Впрочем, для выявления случаев переполнения все равно используется переворот строки
program three;
var a,b:int64; {можно использовать uint64, если в вашей среде Паскаля этот тип поддерживается, тогда число в строке ниже надо заменить}
begin
readln(a);
if ReverseString(IntToStr(a))>'9223372036854775807' then writeln('Слишком много') else begin
while a>0 do begin
b:=10*b+a mod 10;
a:=a div 10;
end;
writeln(b);
end;
end.
program one;
var input,max,min:integer;
i:integer;
begin
readln(input);
max:=input;
min:=input;
for i:=2 to 25 do begin
readln(input);
if input>max then max:=input;
if input<min then min:=input;
end;
writeln(max-min);
end.
2) Гораздо проще не суммировать в цикле степени половины, а воспользоваться тем, что
program two;
var res:real;
i,n:integer;
begin
readln(n);
res:=0.5;
for i:=2 to n do res*=0.5;
res:=2-res;
writeln(res);
end.
3) Здесь существует несколько способов реализации; в частности, можно было просто считать число как строку и возвратить ее в перевернутом виде (ReverseString(s)), не заботясь о переполнении, однако я решил, что по логике задания нужно делать через числа. Впрочем, для выявления случаев переполнения все равно используется переворот строки
program three;
var a,b:int64; {можно использовать uint64, если в вашей среде Паскаля этот тип поддерживается, тогда число в строке ниже надо заменить}
begin
readln(a);
if ReverseString(IntToStr(a))>'9223372036854775807' then writeln('Слишком много') else begin
while a>0 do begin
b:=10*b+a mod 10;
a:=a div 10;
end;
writeln(b);
end;
end.
Ответ дал:
0
спасибо большое
Ответ дал:
0
только можете пояснить во второй задаче после do почему res* а не двоеточие
Ответ дал:
0
То есть res*=0.5 и res:=res*0.5 - это одно и то же. То же самое касается операторов +=, -=, /=
Вас заинтересует
1 год назад
1 год назад
6 лет назад
6 лет назад
9 лет назад
9 лет назад
9 лет назад