Var n, i, z, step, k, g, retry: integer; // n - количество карточек (вводит пользователь), остальное - обычные счетчики циклов
c: array[1..300000] of integer; // массив, в котором хранятся все наши карточки
begin
write('Введите количество карточек: '); // рекомендую для теста вводить около десяти , т.к. больше вероятность, что попадутся одинаковые числа и вы сможете увидеть результат
readln(n);
writeln();
writeln('Карточки: ');
for z := 1 to n do begin
c[ z ] := random(10); // создается <em>n</em> карточек
//c[ 1 ] := 3; эти строки я закомментировал
//c[ 2 ] := 0; их можно удалить
//c[ 3 ] := 7;
//c[ 4 ] := 6; просто проверял работу своими значениями
//c[ 5 ] := 6;
//c[ 6 ] := 3;
//c[ 7 ] := 4;
//c[ 8 ] := 0;
//c[ 9 ] := 2;
//c[ 10 ] := 2;
write( '|' , c[ z ], '| ' ); // вывод обрамленных карточек
end;
step := 0; // переменная, которая считает шаги
writeln();
for retry := 1 to 11 do begin // главный цикл, который прогоняет второстепенный цикл 11 кругов, для того, чтобы исключить вероятность, что "сзади" остались одинаковые числа
for z := 1 to n do begin // второстепенный цикл
if z >= n then break // в случае конца выходим из цикла и отдаем управление программой главному циклу (тот что выше)
else begin // начинаем проверять карточки слева направо, пока не достигнут конец. в случае оного - выполняется действие выше
if c[ z ] = c[ z + 1 ] then begin // сравниваем соседние карточки. если они равны, то начинаем делать шаг
inc(step);
writeln();
writeln( step, ' шаг ', retry, ' круг: ');
inc( c[ z ] );
for g := 1 to ( n - z ) do c[ z + g ] := c[ z + g + 1 ]; // удаляем две одинаковых карточки, оставляем одну, увеличенную на 1
n := n - 1; // сокращаем количество карточек на 1
writeln();
for k := 1 to n do write( '|' , c[ k ], '| ' ); // вывод каждого шага
writeln();
end;
end;
end;
end;
<span>writeln();
end.</span>
<em>// PascalABC.NET 3.2, сборка 1383 от 09.02.2017</em>
<em>// Внимание! Если программа не работает, обновите версию!</em>
begin
var m,n:integer;
Write('Введите n и m: '); Read(n,m);
Writeln('Сумма n+...+m равна ',Range(n,m).Sum);
Writeln('Произведение n*...*m равно ',
Range(n,m).Aggregate(BigInteger(1),(i,j)->i*j))
end.
<u>Пример</u>
Введите n и m: 6 27
Сумма n+...+m равна 363
Произведение n*...*m равно 90740578753486268006400000
Log2(4000000000)=4 байта на точку.
800*600*4=1920000 байт на картинку или 1920000*8=15360000 бит.
15360000/51200=300 секунд
1)
var k,a,i,n : integer;
t : Text;
begin
readln (k);
n := 0;
Assign (t,'test.txt');
Reset(t);
i := 1;
while not Eof(t) do
begin
read (t,a);
if a = k then
n := i;
i := i +1;
end;
Close (t);
writeln (n);
<span> end.
2)
var
t,t1,t2 : Text;
i : integer;
a : real;
begin
Assign (t,'text.txt');
Reset (t);
Assign (t1,'r1.txt');
rewrite (t1);
Assign (t2,'r2.txt');
rewrite (t2);
i := 1;
while not Eof(t)
do
begin
read (t,a);
if i mod 2 = 1 then
write (t1,a:3:3,' ')
else
write (t2,a:3:3,' ');
i:= i +1;
end;
Close (t);
Close (t1);
Close (t2);
<span> end.</span>
</span>
Тут изображен цикл, а мы объявили не с клавиатуры она 256 а б 0
и тут сказано если а = 1 то идем к завершению программы, но пока а!=0
то будет производится вычисления что а будет делится на 2 (8 раз пройдет цикл) а к б будет присваиваться значения его + новое а
к примеру
1) 256/2 = 128 б = 0+128
2)64 192
3)32 224
4)16 240
5)8 248
6)4 252
7)2 254
8)1 - выход
последняя б на выходе будет 254
про спасибо не забудь)