Пользователь вводит последовательность положительных и отрицательных чисел ,признак окончания 0.определить сколько раз в этой последовательности меняется знак.на языке питон.желательно с пояснениями .на школьном уровне.
PascalABC.NET 3.4.0, сборка 1670 от 23.05.2018 Внимание! Если программа не работает, обновите версию!
1. Самое простое "арифметическое" решение
begin var n:=Abs(ReadInteger('n=')); // защита от отрицательных чисел Writeln(n div 100,',',(n div 10) mod 10,',',n mod 10) end.
Пример n= 318 3,1,8
2. "Арифметическое" решение с циклом, цифры в обратном порядке
begin var n:=Abs(ReadInteger('n=')); // защита от отрицательных чисел while n>10 do begin Write(n mod 10,','); n:=n div 10 end; Writeln(n mod 10) end.
Пример n= 318 8,1,3
3. "Арифметическое" решение с массивом
begin var n:=Abs(ReadInteger('n=')); // защита от отрицательных чисел var a:array[1..3] of integer; var i:=3; while n>0 do begin a[i]:=n mod 10; i-=1; n:=n div 10 end; Writeln(a[1],',',a[2],',',a[3]) end.
Пример n= 318 3,1,8
4. Решение с символьной строкой
begin Abs(ReadInteger('n=')).ToString.ToCharArray.Println(',') end.
PascalABC.NET 3.4.0, сборка 1671 от 31.05.2018 Внимание! Если программа не работает, обновите версию!
begin var n:=ReadInteger('Число сторон многоугольника:'); var xp:=new real[n]; var yp:=new real[n]; Writeln('Введите парами координаты вершин'); for var i:=0 to n-1 do Read(xp[i],yp[i]); var (x,y):=ReadReal2('Введите координаты точки:'); var (i,j,c):=(0,n-1,False); while i<n do begin if ((yp[i]<=y) and (y<yp[j]) or (yp[j]<=y) and (y<yp [i])) and (x<(xp[j]-xp[i])*(y-yp[i])/(yp[j]-yp[i])+xp[i]) then c:=not c; j:=i; i+=1; end; if c then Writeln('Внутри') else Writeln('Не внутри') end.
Примеры Число сторон многоугольника: 5 Введите парами координаты вершин -5 2 2 6 7 3.1 4.3 -5 -6 -6 Введите координаты точки: 2.1 1.7 Внутри
Число сторон многоугольника: 5 Введите парами координаты вершин -5 2 2 6 7 3.1 4.3 -5 -6 -6 Введите координаты точки: -2 5 Не внутри
Внимание! Если программа не работает, обновите версию!
1. Самое простое "арифметическое" решение
begin
var n:=Abs(ReadInteger('n=')); // защита от отрицательных чисел
Writeln(n div 100,',',(n div 10) mod 10,',',n mod 10)
end.
Пример
n= 318
3,1,8
2. "Арифметическое" решение с циклом, цифры в обратном порядке
begin
var n:=Abs(ReadInteger('n=')); // защита от отрицательных чисел
while n>10 do begin
Write(n mod 10,',');
n:=n div 10
end;
Writeln(n mod 10)
end.
Пример
n= 318
8,1,3
3. "Арифметическое" решение с массивом
begin
var n:=Abs(ReadInteger('n=')); // защита от отрицательных чисел
var a:array[1..3] of integer;
var i:=3;
while n>0 do begin
a[i]:=n mod 10;
i-=1;
n:=n div 10
end;
Writeln(a[1],',',a[2],',',a[3])
end.
Пример
n= 318
3,1,8
4. Решение с символьной строкой
begin
Abs(ReadInteger('n=')).ToString.ToCharArray.Println(',')
end.
Пример
n= 318
3,1,8
Внимание! Если программа не работает, обновите версию!
begin
var n:=ReadInteger('Число сторон многоугольника:');
var xp:=new real[n];
var yp:=new real[n];
Writeln('Введите парами координаты вершин');
for var i:=0 to n-1 do Read(xp[i],yp[i]);
var (x,y):=ReadReal2('Введите координаты точки:');
var (i,j,c):=(0,n-1,False);
while i<n do begin
if ((yp[i]<=y) and (y<yp[j]) or (yp[j]<=y) and (y<yp [i]))
and (x<(xp[j]-xp[i])*(y-yp[i])/(yp[j]-yp[i])+xp[i]) then c:=not c;
j:=i;
i+=1;
end;
if c then Writeln('Внутри')
else Writeln('Не внутри')
end.
Примеры
Число сторон многоугольника: 5
Введите парами координаты вершин
-5 2 2 6 7 3.1 4.3 -5 -6 -6
Введите координаты точки: 2.1 1.7
Внутри
Число сторон многоугольника: 5
Введите парами координаты вершин
-5 2 2 6 7 3.1 4.3 -5 -6 -6
Введите координаты точки: -2 5
Не внутри