Консультация № 193385
12.06.2018, 15:09
0.00 руб.
13.06.2018, 00:20
1 8 1
Здравствуйте! Прошу помощи в следующем вопросе:

пусть элементами квадрата являются радиус описанной окружности (R), радиус вписанной окружности (m), диагональ квадрата, сторона. написать программу, которая по соответствующей введенной букве рисует определенным цветом и надписывает соответствующий параметр. предусмотреть критический случай
Прикрепленные файлы:
13972a536335c0095517eff1c9ad72fa42dc7674.jpg

Обсуждение

давно
Студент
400828
51
12.06.2018, 15:15
общий
Два вопроса:
Какой язык/среда программирования?
Как определяется "определённый цвет"?
Об авторе:
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
давно
Посетитель
402145
1
12.06.2018, 15:24
общий
Адресаты:
Программа Паскаль АВС
давно
Старший Модератор
31795
6196
13.06.2018, 00:23
общий
Уважемые эксперты, обратите внимание на вопрос!
Спасибо!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Студент
400828
51
13.06.2018, 18:13
общий
Адресаты:
Всё это не сложно в PascalABC.net.
Единственное затруднение в выборе цвета.
Ответе, пожалуйста, на ранее заданный вопрос: "Как определяется "определённый цвет"?"
Об авторе:
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
давно
Студент
400828
51
13.06.2018, 20:29
общий
Считаем, что цвет вводится тремя интенсивностями RGB.
Тогда решение может быть таким:
Код:

uses GraphABC;
const space=10; // Зазор от кромки окна
pw=3; // Толщина линии
var MaxHeight, MaxSize, a, r1: integer; R, G, B: byte; c: color;
ch: char; ok: boolean;
begin
MaximizeWindow;
MaxHeight:=WindowHeight-2*space;
SetWindowTitle('Рисуем квадратик:)');
writeln('Введите интенсивность красной, зелёной и синей составляющих цвета (RGB):');
readln(R, G, B);
c:=rgb(R, G, B);
SetPenColor(c);
SetPenWidth(pw);
repeat
ClearWindow;
writeln('Введите способ определения квадрата');
writeln('(R - радиус описанной окружности; m - радиус вписанной окружности,');
writeln('d - диагональ квадрата; с - сторона квадрата):');
readln(ch);
ch:=upcase(ch);
until ch in ['R', 'M', 'D', 'C'];
repeat
ClearWindow;
ok:=false;
case ch of
'R':
begin
writeln('Введите радиус описанной окружности не более ', MaxHeight div 2);
read(r1);
a:=round(r1*2/sqrt(2));
if 2*r1<=MaxHeight then
ok:=true;
end;
'M':
begin
writeln('Введите радиус вписанной окружности не более ', MaxHeight div 2);
read(r1);
a:=2*r1;
if 2*r1<=MaxHeight then
ok:=true;
end;
'D':
begin
writeln('Введите диагональ квадрата не более ', round(MaxHeight*sqrt(2)));
read(r1);
a:=round(r1/sqrt(2));
if r1<=MaxHeight*sqrt(2) then
ok:=true;
end;
else
begin
writeln('Введите сторону квадрата не более ', MaxHeight);
read(r1);
a:=r1;
if r1<=MaxHeight then
ok:=true;
end;
end;
until ok;
ClearWindow;
Rectangle((WindowWidth - a) div 2, (WindowHeight - a) div 2, (WindowWidth + a) div 2, (WindowHeight + a) div 2);
if (ch='R') or (ch='M') then
DrawCircle(WindowWidth div 2,WindowHeight div 2, r1);
end.
Об авторе:
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
давно
Старший Модератор
31795
6196
13.06.2018, 23:02
общий
Адресаты:
Пора бы обзавестись и АВС(если нужно выложу дистрибктив)

function RGB(r,g,b: byte): Color;
Возвращает цвет, который содержит красную (r), зеленую (g) и синюю (b) составляющие (r,g и b - в диапазоне от 0 до 255)

=
function RGB(r,g,b: integer): ColorType;
Возвращает целое значение, являющееся кодом цвета, который содержит красную, зеленую и синюю составляющие с интенсивностями r, g и b соответственно (r, g и b – целые в диапазоне от 0 до 255, причем, 0 соответствует минимальной интенсивности, 255 – максимальной).



procedure DrawCircle(x,y,r: integer);
Рисует окружность с центром (x,y) и радиусом r

=
procedure Circle(x,y,r: integer);
Рисует окружность с центром в точке (x,y) и радиусом r.


По коду:
1) цвета можно не задавать.
2) скорее всего Привет интересует:


Цитата: privet921
надписывает соответствующий параметр

Какой бы парметр не был введен, ему нужны они все, с указанием значений

3)Я бы с помощью CASE вывел надпись:
writeln('Введите радиус описанной окружности не более ', MaxHeight div 2);
. . .
writeln('Введите сторону квадрата не более ', MaxHeight);

и с помощью
[code lang=pascal] repeat
. . .
until in [ 0..МАХ];[/code]
проверил одновременно 0..МАХ, т.е.
Цитата: privet921
предусмотреть критический случай

а потом, CASE присвоил нужное значение, расчитал все параметры и вывел их на экран, используя
procedure TextOut(x,y: integer; s: string);
Выводит строку s в прямоугольник к координатами левого верхнего угла (x,y)

Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Студент
400828
51
14.06.2018, 00:22
общий
Адресаты:
По пунктам "обвинения" хочу сообщить следующее:
1, 2, 3, 4:
У меня установлен PascalABC.net. В нём писал и проверял. Ver 3.2 сборка 1374. Help в наличии.
5.1. По заданию надо задавать
5.2. Скорее всего, не интересует
Все остальные, кроме "предусмотреть критический случай": Мы не ставим задачей портала написать по студенческому заданию коммерческий код. Мы пытаемся донести до студента возможные варианты алгоритма решения задачи.
Про "критический случай" всё предусмотренно или типом данных (как byte для R, G, B), или repeat - until при вводе данных
Об авторе:
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
давно
Студент
400828
51
17.06.2018, 21:56
общий
это ответ
Здравствуйте, privet921!
Код может быть таким:
Код:

uses GraphABC;
const space=10; // Зазор от кромки окна
pw=3; // Толщина линии
var MaxHeight, MaxSize, a, r1: integer; R, G, B: byte; c: color;
ch: char; ok: boolean;
begin
MaximizeWindow;
MaxHeight:=WindowHeight-2*space;
SetWindowTitle('Рисуем квадратик:)');
writeln('Введите интенсивность красной, зелёной и синей составляющих цвета (RGB):');
readln(R, G, B);
c:=rgb(R, G, B);
SetPenColor(c);
SetPenWidth(pw);
repeat
ClearWindow;
writeln('Введите способ определения квадрата');
writeln('(R - радиус описанной окружности; m - радиус вписанной окружности,');
writeln('d - диагональ квадрата; с - сторона квадрата):');
readln(ch);
ch:=upcase(ch);
until ch in ['R', 'M', 'D', 'C'];
repeat
ClearWindow;
ok:=false;
case ch of
'R':
begin
writeln('Введите радиус описанной окружности не более ', MaxHeight div 2);
read(r1);
a:=round(r1*2/sqrt(2));
if 2*r1<=MaxHeight then
ok:=true;
end;
'M':
begin
writeln('Введите радиус вписанной окружности не более ', MaxHeight div 2);
read(r1);
a:=2*r1;
if 2*r1<=MaxHeight then
ok:=true;
end;
'D':
begin
writeln('Введите диагональ квадрата не более ', round(MaxHeight*sqrt(2)));
read(r1);
a:=round(r1/sqrt(2));
if r1<=MaxHeight*sqrt(2) then
ok:=true;
end;
else
begin
writeln('Введите сторону квадрата не более ', MaxHeight);
read(r1);
a:=r1;
if r1<=MaxHeight then
ok:=true;
end;
end;
until ok;
ClearWindow;
Rectangle((WindowWidth - a) div 2, (WindowHeight - a) div 2, (WindowWidth + a) div 2, (WindowHeight + a) div 2);
if (ch='R') or (ch='M') then
DrawCircle(WindowWidth div 2,WindowHeight div 2, r1);
end.
Об авторе:
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Форма ответа