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

Некоторый алгоритм из одной цепочки десятичных цифр получает новую цепочку следующим образом: 1. первая цифра исходной цепочки не меняется; 2. каждая следующая цифра (начиная со второй) заменяется суммой этой цифры и предыдущей цифры исходной цепочки. сумма вычисляется до тех пор, пока не будит получена десятичная цифра. например, сумма цифр 7 и 5 равна 12. это число, а не десятичная цифра, значит, необходимо суммирование продолжить: 1+2=3. это цифра, следовательно, суммирование закончено. например, если исходная цепочка 4 7 2 8 1, то результатом работы этого алгоритма будет цепочка 4 2 9 1 9. дана цепочка символов 1 7 5 2 6 .применить к этой цепочке описанный алгоритм дважды. какая цифра чаще всего встречается в получившейся цепочке?

👇
Ответ:
лалка136
лалка136
06.03.2021

Мне понравилась задачка, как мне кажется, наиболее изящное решение через рекурсивную функцию

Пусть А(Размер) - массив, в котором хранится исходная цепочка. Тогда основная процедура будет иметь вид

//

Процедура Сформировать()
ТХТ=""+А(1);
Для ц=2 по Размер Цикл
      След=Следующий(А(ц-1)+А(ц));
      ТХТ=ТХТ+";"+След;
КонецЦикла;
Сообщить(ТХТ);
КонецПроцедуры

 

Вот и всё! Осталось написать процедуру-функцию Следующий

У меня она рекурсивная

//

Функция Следующий(тЧ)
Если тЧ<10 Тогда
    Возврат(тЧ);
Иначе 
    Д=Цел(тЧ/10);
     Е=тЧ-Д*10;
     Возврат(Следующий(Д+Е));
КонецЕсли;
КонецФункции

 

Вот теперь совсем всё.

При подстановке цепочки 1;7;5;2;6 программа выдала 1;8;3;7;8 то есть чаще встречается 8.

 

Замечание1 Можешь написать и не рекурсивную, это просто, НО рекурсия красивей(как мне кажется), да и просто делать дальнейшие модификации задачи(например для исходных многозначных чисел).

Замечание2 Я, по сути дела, "вручную" находил десятки и единицы, если в языке, которым ты владеешь, есть функции типа, "остаток от деления", можешь их использовать 

Замечание3 Программа абсолютно рабочая, чуть-чуть изменена для детского восприятия, написана на 1С77. Перевести на свой язык, думаю, сумеешь.

Успехов!

 

 

Кстати, вот что у меня получилось(не адаптированный текст), если исходная цепочка может содержать любые неотрицательные целые числа, а на выходе - сумма цифр первого, ну и Сумма цифр предыдущего с текущим. Как видишь, практически тот же текст, но более общий.

 

Функция Следующий(тЧ)
Если тЧ<10 Тогда
   Возврат(тЧ);
Иначе
   сТЧ=Строка(тЧ);
   чч=0;
   Для цц=1 по СтрДлина(сТЧ) Цикл
      чч=чч+Число(Сред(сТЧ,цц,1));
   КонецЦикла;

   Возврат(Следующий(чч));
КонецЕсли;
КонецФункции

//
Процедура Сформировать()
ТХТ=""+Следующий(Цепь.ПолучитьЗначение(1));
Для ц=2 по Цепь.РазмерСписка() Цикл
   След=Следующий(Цепь.ПолучитьЗначение(ц-1)+Цепь.ПолучитьЗначение(ц));
   ТХТ=ТХТ+";"+След;
КонецЦикла;
Сообщить(ТХТ);
КонецПроцедуры

 

 

4,6(81 оценок)
Открыть все ответы
Ответ:
cheburejp00xj4
cheburejp00xj4
06.03.2021

1 программа:

var x, y, t:integer;

begin

 for x:=3 to 15 do begin

   writeln('x = ', x);

   t := x - 2;

   y := 7*t*3-6*t+10;

   writeln('y = ', y);

   writeln('');

 end;

end.

2 программа:

const pass ='45xlua';

var x:string;

a:boolean;

begin

 a:= false;

 while a<>true do begin

    writeln('Введите пароль');

    readln(x);

    if x = pass then begin

      a:=true;

      writeln('Пароль верный');

      end

    else

      writeln('Пароль неверный, введите еще раз');

    writeln('');

 end;

end.

4 программа:

var a, a1, a2, x, kol:integer;

begin

writeln('Введите четырёхзначное число');

readln(a);

x := a;

while x<>0 do begin

  x:= x div 10;

  kol:= kol + 1;

  end;

 if (kol = 4) then begin

   a1 := a div 100;

   a2:= a mod 100;

   writeln(a1+a2);

 end

  else

    writeln('Число не является четырёхзначным');

end.

4,5(70 оценок)
Ответ:
Helluing
Helluing
06.03.2021
1. Определим скорость передачи в Мб/с

1 байт = 8 = 2³ бит.
1 Мбайт = (2¹⁰)² = 2²⁰ байт = 2²⁰ × 2³ = 2²³ бит.
Скорость 2¹⁸ бит/с равна 2¹⁸ / 2²³ = 2⁻⁶ Мбайт/с

2. Определим время, необходимое для передачи файла по А

10 Мбайт / 2⁻⁶ Мбайт/с = 10 × 32 с = 320 с

3. Определим время, необходимое для передачи файла по Б.

Объем файла после архивации составит 30% от объема исходного, следовательно и время передачи файла также будет составлять 30% от времени по варианту А.
320 с × 0.3 = 96 с
И еще 7 + 1 = 8 с нужны на подготовку файла.
Итого, время по варианту Б составит 96 + 8 = 104 с.

4. По варианту Б время меньше на 320 - 104 = 216 с, т.е. этот вариант быстрее.

ответ: Б216
4,8(24 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ