В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
1234дмит232323
1234дмит232323
27.08.2020 03:01 •  Информатика

Нужно перевести из pascal на python, ) uses graphabc,crt; var x,y,y0,ys,i,s: integer; k,q: real; begin setwindowsize(700,500); write('сколько секунд должны отсчитать часы? '); readln(s); setpencolor(clnavy); arc(200,410,200,-8,61); arc(400,410,200,119,-170); arc(200,70,200,-60,7); arc(400,70,200,173,-120); setbrushcolor(clsilver); setpencolor(clblack); rectangle(170,50,430,30); rectangle(170,450,430,430); floodfill(250,110,clskyblue); floodfill(250,410,clskyblue); k: =80; x: =300; q: =0; for y: =130 to 230 do begin setpencolor(clnavy); line(round(x-k),y,round(x+k),y); k: =k-q; if y mod 25=0 then q: =q+0.45; end; k: =80; x: =300; q: =0; y0: =430; for y: =130 to 230 do begin setpencolor(clskyblue); line(round(x-k),y,round(x+k),y); k: =k-q; if y mod 25=0 then q: =q+0.45; setpencolor(clnavy); line((x-100),430,x,y0); line(x,y0,(x+100),430); sleep(10*s); y0: =y0-1; for i: =1 to 20 do begin ys: =random(151)+250; putpixel(300,ys,clnavy); end; for i: =1 to 20 do begin ys: =random(101)+230; putpixel(300,ys,clskyblue); end; end; setpencolor(clskyblue); line(300,250,300,330); setpencolor(clnavy); arc(200,410,200,-8,61); arc(400,410,200,119,-170); arc(200,70,200,-60,7); arc(400,70,200,173,-120); setbrushcolor(clsilver); rectangle(170,50,430,30); rectangle(170,450,430,430); writeln(s,' секунд истекло! '); end.

Показать ответ
Ответ:
ИэнШоу
ИэнШоу
13.02.2023 10:03

using System;

namespace ConsoleApp1

{

   class Program

   {

       static void Main(string[] args)

       {

           double x,y,xn=1;

           int n = 0;

           Console.WriteLine("Введите x:");

           x = Convert.ToDouble(Console.ReadLine());

           Console.WriteLine("Введите y:");

           y = Convert.ToDouble(Console.ReadLine());

           if (xn >= y) Console.WriteLine("Наибольшее целое n равно {0}", n);

           else

           {

               while (xn*x < y)  

               {

                   xn *= x;

                   n++;

               }

               Console.WriteLine("Наибольшее целое n равно {0}", n);

           }

       }

   }

}

0,0(0 оценок)
Ответ:
daryalife1998
daryalife1998
21.07.2022 02:12

Будем рассматривать каждое введённое число как правый элемент возможной пары (первые 8 чисел не могут быть такими элементами). Для получения максимальной суммы нужно сложить это число с максимальным из всех элементов, расположенных от начала последовательности до элемента, расположенного на 8 позиций раньше текущего. Будем хранить этот максимум и корректировать его при вводе каждого нового элемента. Для этого понадобится хранить последние 8 элементов. Остальные элементы последовательности можно не хранить, это обеспечивает эффективность по памяти. Для хранения 8 элементов можно использовать циклический массив, как показано в следующем решении.

 

Решение 1. Правильная и эффективная программы на языке Паскаль (использован циклический массив):

 

const s=8; {требуемое расстояние между элементами}

var

   N: integer; {количество чисел}

   x: integer; {очередное число}

   a: array[0..s-1] of integer;

   m: integer; {максимальное число}

   sm: integer; {максимальная сумма пары}

   i: integer; {счётчик для ввода}

   ia: integer; {текущий индекс в массиве a}

begin

   readln(N);

   {ввод первых s чисел}

   for i:=0 to s − 1 do readln(a[i]);

   {ввод и обработка остальных значений}

   m:=0; sm:=0; ia:=0;

   for i:=s to N − 1 do begin

       readln(x);

       if a[ia] > m then m := a[ia];

       if m+x > sm then sm := m+x;

       a[ia] := x;

       ia := (ia+1) mod s

   end;

   writeln(sm)

end.

 

Вместо циклического массива можно использовать сдвиги. В этом случае для вычисления максимума всегда используется первый элемент массива, а новое число записывается в последний. Хотя этот алгоритм работает медленнее, чем алгоритм с циклическим массивом (для каждого элемента требуется 7 дополнительных присваиваний при сдвигах), основное требование эффективности здесь выполнено: при увеличении размера массива в k раз количество действий растёт не более чем в k раз. Ниже приводится пример такой программы.

 

Решение 2. Правильная и эффективная программы на языке Паскаль (использован сдвиг массива)

 

const s=8; {требуемое расстояние между элементами}

var

   N: integer; {количество чисел}

   x: integer; {очередное число}

   a: array[1..s] of integer;

   m: integer; {максимальное число}

   sm: integer; {максимальная сумма пары}

   i: integer; {счётчик для ввода}

   ia: integer; {счётчик для сдвига}

begin

   readln(N);

   {ввод первых s чисел}

   for i:=1 to s do readln(a[i]);

   {ввод и обработка остальных значений}

   m:=0; sm:=0;

   for i:=s+1 to N do begin

       readln(x);

       if a[1] > m then m := a[1];

       if m+x > sm then sm := m+x;

       for ia:=1 to s − 1 do a[ia]:=a[ia+1];

       a[s] := x

   end;

   writeln(sm)

end.

 

Возможно также «лобовое» решение: запишем в се и сходные числа в массив, переберём все возможные пары и выберем из них требуемую. Такое решение не является эффективным ни по памяти (требуемая память зависит от размера исходных данных), ни по времени (количество возможных пар, а значит, количество действий и время счёта с ростом количества исходных элементов растёт квадратично). Такая программа оценивается не выше двух .

Ниже приведена реализующая описанный выше алгоритм программа на языке Паскаль (использована версия PascalABC).

 

Решение 3. Правильная, но неэффективная программы на языке Паскаль:

 

const s=8; {требуемое расстояние между элементами}

var

   N: integer; {количество чисел}

   a: array [1..1000] of integer; {исходные данные}

   sm: integer; {максимальная сумма пары}

   i,j: integer;

begin

   readln(N);

   for i:=1 to N do readln(a[i]);

   sm :=0;

   for i := 1 to N − s do begin

       for j := i+s to N do begin

           if a[i]+a[j] > sm

               then sm := a[i]+a[j]

       end;

   end;

   writeln(sm)

end.

Надеюсь

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота