М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
Oksanaa11
Oksanaa11
28.05.2021 05:36 •  Информатика

Вася придумал робота-шифратора, и сейчас пишет для него программы. шифратор работает со строками. до сегодняшнего дня робот умел выполнять только команду cut(x), она означает, что нужно взять поданную на вход роботу строку, разрезать ее пополам после символа с номером x, символы второй части записать в обратном порядке, затем две части переставить местами и склеить обратно в целую строку (символы строки нумеруются слева направо начиная с 1). например, если робот работает со строкой алгоритм и выполняет команду cut(4), то результатом его работы будет строка мтиралго. если после этого робот выполнит команду cut(1), то получится строка огларитм. сегодня вася написал новую команду mcut. например, mcut(4, 1, 3) означает, что робот сначала выполняет команду cut(4), затем для получившейся строки команду cut(1), затем для получившейся строки команду cut(3). на вход роботу подали строку абвгдежз, после чего он выполнил команду mcut(3, 7, 6, 5, 1) 2020 раз подряд (после первого выполнения команды mcut вторая выполняется для полученной строки и так далее). какая строка в итоге получилась?

👇
Открыть все ответы
Ответ:
Semev
Semev
28.05.2021
Program Task;
Const N = 5;
Var a: Array [1..N] of LongInt;
    i: Integer;
Function MinDigit(number: LongInt): Integer;
Var digits: Array of Integer;
    num, min, i: Integer;
Begin
    num := number;
While num <> 0 Do
Begin
    num := num Div 10;
    i := i + 1;
End;
    SetLength(digits, i);
    num := number;
For i := 0 To Length(digits) - 1 Do
Begin
    digits[i] := num Mod 10;
    num := num Div 10;End;
For i := 0 To Length(digits) - 1 Do
    If digits[i] < digits[min] Then
    min := i;    Result := digits[min];
End;
Begin
    WriteLn('Введите ', N, ' целых чисел через пробел');
    For i := 1 To N Do
        Read(a[i]);
    For i := 1 To N Do
        Write(MinDigit(a[i]), ' ');
End.
4,4(68 оценок)
Ответ:
danilgrekov20
danilgrekov20
28.05.2021
Type
    bignum = array[1..100] of integer;

var
    a, b: bignum;
    i, j, k, n_a, n_b: integer;

procedure get_num(var m: bignum; var n: integer);
var
    i := 0;
    s: string;
begin
    write('Введите число = ');
    readln(s);
    s := trim(s);
    n := 0;
    for i := length(s) downto 1 do
        if s[i] in ['0'..'9'] then begin
            n := n + 1;
            m[n] := strtoint(s[i]);
        end;
end;

function more(a, b: bignum; n_a: integer): boolean;
var
    i: integer;
    f := false;
begin
    for i := n_a downto 1 do
    begin
        if a[i] > b[i] then f := true
        else if a[i] < b[i] then f := false;
        if a[i] <> b[i] then break;
    end;
    more := f;
end;

procedure show(m: bignum; n: integer);
var
    i: integer;
begin
    write('Вывод ');
    for i := n downto 1 do
        write(m[i]);
    writeln();
end;

begin
    get_num(a, n_a);
    get_num(b, n_b);
   
    while (n_a >= n_b) and more(a, b, n_a) do    
    begin
        if (a[n_a] > b[n_b]) then k := n_a - n_b
        else if n_a > n_b then k := n_a - n_b - 1
        else k := 0;
       
        for i := 1 to n_b do
        begin
            a[i + k] := a[i + k] - b[i];
            if a[i + k] < 0 then begin
                for j := i + k to n_a - 1 do
                begin
                    if a[j] >= 0 then break;
                    a[j] := a[j] + 10;
                    a[j + 1] := a[j + 1] - 1;
                end
            end;
        end;
        if a[n_a] = 0 then n_a := n_a - 1;
    end;
   
    show(a, n_a);
end.
4,5(58 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ