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

написать код! Нужно дополнить код по условиям задания Дано: Изображение, на котором показан фрагмент звездного неба с круглой или эллиптической (овальной) черной областью. Если это эллипс, то гарантируется, что его длинная ось расположена горизонтально (то есть эллипс не будет повернут). На приведенном выше изображении черный звездолет обрисован светлым контуром, но это только для наглядности, на загруженном для обработки изображении такого контура не будет. Пиксели, затененные звездолетом, имеют идеально черный цвет (значение 0).

Требуется: найти и вывести видимый диаметр звездолета, то есть максимальную ширину непрерывной черной области, в пикселях.

Как отлаживать: закомментируй строку с "url=input()", а вместо нее раскомментируй следующую строку. Также можно раскомментировать строку с print(wa,ha). После этого шаблон программы должен выполняться без ошибок, выводя на консоль "200 200" (размер картинки) и "0" (вместо правильного ответа). Дальше дописываешь, что нужно, и добиваешься правильного ответа. Когда все работает, переносишь готовую программу обратно в Степик, только не забудь снова закомментировать/раскомментировать нужные строки!

Подсказки и пояснения:

Картинка уже загружена в переменную photo (это объект Image из библиотеки PIL, если интересно, документацию можно легко найти в интернете).

Картинка уже преобразована в формат greyscale (градации серого), каждая точка изображения представлена числом от 0 (черная точка) до 255 (белая).

Чтобы получить яркость точки по координатам (x,y), используется вызов photo.getpixel((x,y)). Двойные скобки означают, что x и y объединены в кортеж (x,y), передаваемый в getpixel() как один параметр.

Чтобы найти максимум чего-либо, берем переменную ("текущий максимум"), назначаем ей заведомо маленькое значение. Затем в цикле каждый раз сравниваем с текущим максимумом очередное значение, и если оно больше, то заменяем текущий максимум на это значение.

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

КОД:

# Это загрузка картинки, здесь ничего трогать не надо!

from PIL import Image

import requests

url = input() # для отладки замените на:

# url = "https://stepik.org/media/attachments/lesson/578362/stars1h.png"

loaded_image=Image.open(requests.get(url, stream=True).raw) #загружаем картинку

photo=loaded_image.convert(mode="L") # переводим в greyscale (тона серого)

wa, ha = photo.size # это размеры картинки (ширина и высота, соотв.)

#print(wa,ha) # раскомментируй для отладки - должен выдавать "200, 200"

# Дальше идет ваш код!

alien_ship_width = 0 # здесь должен оказаться результат

# здесь пишем, что еще требуется перед обработкой всей картинки

# ...

for y in range(ha): # цикл просмотра по строкам

# здесь пишем, что требуется перед просмотром очередной строки

# ...

for x in range(wa): # цикл просмотра точек очередной строки

pix = photo.getpixel((x,y)) # взяли точку...

# и вот тут что-то с ней делаем!

# ...

# здесь пишем, что требуется после просмотра очередной строки

# ...

print(alien_ship_width) # выводим полученный результат

Показать ответ
Ответ:
Хрустяня
Хрустяня
26.06.2022 05:14
// PascalABC.NET 3.3, сборка 1625 от 17.01.2018
// Внимание! Если программа не работает, обновите версию!

begin
  var a:=ReadReal('Введите число a:');
  var n:=ReadInteger('Введите показатель степени n:');
  if n<=0 then begin
    Writeln('Показатель степени должен быть натуральным числом');
    Exit
    end;
  // перевод показателя степени в двоичную систему счисления
  var t:=n;
  var r:string:='';
  while t>=2 do (r,t):=(t mod 2+r,t shr 1);
  r:=t+r;
  // возведение в степень
  var (rr,i):=(a,2);
  while i<=r.Length do begin
    rr:=Sqr(rr);
    if r[i]='1' then rr*=a;
    i+=1
    end;
  Writeln(a,'^',n,' = ',rr)  
end.

Примеры
Введите число a: 3.182
Введите показатель степени n: 11
3.182^11 = 338611.675261463

Введите число a: 2
Введите показатель степени n: 10
2^10 = 1024
0,0(0 оценок)
Ответ:
Tryys
Tryys
14.08.2020 20:00
Все зависит от того, что обеспечивают эти семафоры.
1. Семафоры обеспечивают синхронизацию потоков. Тогда будут выполнены P(S!) в первом потоке и P(S2) во втором, причем более быстрый процесс подождет, а затем работа пойдет одновременно с точки P(S2) в первом потоке и P(S1) во втором.
2. Семафоры захватывают ресурсы. В этом случае произойдет взаимная блокировка. Например, P(S2) в первом потоке будет ждать некоего ресурса, захваченного вторым потоком, а P(S1) во втором потоке - ресурса, захваченного первым потоком.
3. Семафоры запрещают одновременное выполнение некоторого общего участка кода. Также возможна взаимная блокировка по принципу, описанному выше.
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота