1. есть число n. пускай n=123. что будет, если разделить его на 10? получится 12,3. то есть 12 - целая часть, а 3 - остаток. далее снова делим на 10. 1,23. и в последний раз: 0,123. целая часть =0. на этом останавливаемся. а сколько раз выполнили деление? 3. вот и ответ. теперь запишем на паскале: как видно из вышенаписанного, нужно продолжать выполнять действия, пока целая часть не равна 0. то есть while n> 0 do и у нас есть некоторый счетчик итераций, значение которого и будет являться ответом. а тело цикла: n div 10 (целочисленное деление) inc(k) (увеличение счетчика) вторая: как я понял, нужно просто вывести на экран то, что должно получиться? нужно в цикле пройти по каждому символу. если он равен "*" (if s[i] = '*' then), ничего не делать. иначе вывести его два раза (write(s[i], добавить данные в начало файла нельзя. нужно либо записывать в новый, либо перезаписывать исходный (предварительно считав все в память)
К сожалению, задание составлено некорректно. 0<N≤30 допускает случай N=0. Но тогда ряд значений должен оканчиваться 2⁰, а не 2¹, как указано. Да и массив из N элементов при N=0 - нечто странное. Поэтому принято решение считать значение N<1 ошибкой.
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017 // Внимание! Если программа не работает, обновите версию!
begin var n:=ReadInteger; Assert(n>0,'Нарушение: N<=0'); var a:=SeqGen(n,2,i->2*i).Reverse.ToArray; a.Println end.
0<N≤30 допускает случай N=0. Но тогда ряд значений должен оканчиваться 2⁰, а не 2¹, как указано. Да и массив из N элементов при N=0 - нечто странное. Поэтому принято решение считать значение N<1 ошибкой.
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017
// Внимание! Если программа не работает, обновите версию!
begin
var n:=ReadInteger;
Assert(n>0,'Нарушение: N<=0');
var a:=SeqGen(n,2,i->2*i).Reverse.ToArray;
a.Println
end.
Примеры
5
32 16 8 4 2
20
1048576 524288 262144 131072 65536 32768 16384 8192 4096 2048 1024 512 256 128 64 32 16 8 4 2