IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> работа с текстом в графическом режиме
сообщение
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Вот такая задачка:
В верхней левой и в правой нижней части экрана произволь-ным цветом создайте две прямоугольных области с одной общей точкой. Залейте их разным цветом и выведите внутри каждой области, соответственно, одно из следующих сообще-ний: «Question 1» и «Question 2»

У меня затруднение с тем, чтобы текст не выходил за пределы прямоугольников...


Uses Crt, Graph;
const x = 320; y = 175;
var
DriverVar, ModeVar, a, b, a_, b_: integer;

begin
clrscr;
Writeln ('vvedite odni razmeri');
readln (a);
readln (b);
Writeln ('teperi sledyuchie');
readln (a_);
readln (b_);

DriverVar := Detect;
InitGraph (DriverVar, ModeVar,'');

SetBkColor(13);
setcolor(15);
bar(x+b,y+a,x,y);
SetTextStyle(0,1,1);
OutTextXY( (x + b) div 2, (y + a) div 2, 'Question 1');
setfillstyle(7,15);
bar(x,y,x-a_,y-b_);
SetTextStyle(0,0,2);
OutTextXY( (x - a_) div 2, (y - b_) div 2, 'Question 2');

readln;

closegraph;
end.


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






А теперь скажи, ЧТО надо ввести, чтобы получить ВООБЩЕ какой-нибудь прямоугольник, а не несколько отдельных линий?

И сразу же вопрос №2 - за счет чего ты хочешь
Цитата
чтобы текст не выходил за пределы прямоугольников
? Чтобы все, что НЕ поместилось - обрезалось? Или уменьшать размер шрифта?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 26.02.2007 21:14) *



И спвзу эе вопрос №2 - за счет чего ты хочешь ? Чтобы все, что НЕ поместилось - обрезалось? Или уменьшать размер шрифта?

уменьшать размер шрифта




Добавлено через 2 мин.
Цитата(volvo @ 26.02.2007 21:14) *

А теперь скажи, ЧТО надо ввести, чтобы получить ВООБЩЕ какой-нибудь прямоугольник, а не несколько отдельных линий?


Не пойму смысл этого вопроса! Ведь я использую процедуру для построения именно всего прямоугольника через координаты верхнего левого угла и нижнего правого.

Сообщение отредактировано: 18192123 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
Не пойму смысл этого вопроса!
В программе есть ввод данных? ReadLn запрашивается? Что надо ввести, чтобы получить прямоугольники? При вводе произвольных данных прямоугольников не получается... Скажи ТОЧНО, какие цифры ты вводишь...

Добавлено через 40 сек.
Почему надо все время ДОГАДЫВАТЬСЯ? dry.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(Алена @ 27.02.2007 21:16) *

В программе есть ввод данных? ReadLn запрашивается? Что надо ввести, чтобы получить прямоугольники? При вводе произвольных данных прямоугольников не получается... Скажи ТОЧНО, какие цифры ты вводишь...

Добавлено через 40 сек.
Почему надо все время ДОГАДЫВАТЬСЯ? dry.gif

Пусть а=150, b=150, а_=180, b_=90
Почему при произвольных данных прямоугольники не получаются? ведь, в принципе, пользователь может ввести любые параметры для прямоугольников...

Сообщение отредактировано: 18192123 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Розовый фон. Гламурненько... Глазам неприятно.
СетФиллСтиль - первый параметр - стиль заливки. Вы выбрали заливку клеточками. Второй параметр - цвет.
У меня такой вариант работает:


uses
Crt, Graph;

const
x = 320; y = 240;
S1 = 'Question 1';
S2 = 'Question 2';

var
DriverVar, ModeVar, a, b, a_, b_: integer;
W1, W2: integer;

begin
clrscr;
Writeln ('vvedite odni razmeri');
readln (a);
readln (b);
Writeln ('teperi sledyuchie');
readln (a_);
readln (b_);
DriverVar := Detect;
InitGraph (DriverVar, ModeVar,'');
SetTextJustify(CenterText, CenterText);
setcolor(15);
setfillstyle(1,GREEN);
bar(x+b,y+a,x,y);
SetTextStyle(4,0,4);
W1 := TextWidth(S1);
SetTextStyle(4, 1, a shl 2 div w1);
OutTextXY(x + b shr 1, y + a shr 1, S1);
setfillstyle(1,CYAN);
bar(x,y,x-a_,y-b_);
SetTextStyle(4,0,4);
W2 := TextWidth(S2);
SetTextStyle(4, 0, a_ shl 2 div w2);
OutTextXY(x - a_ shr 1, y - b_ shr 1, S2);
readln;
closegraph;
end.



Я смотрю, в этой теме сплошные кошки на аватарах...

Сообщение отредактировано: TarasBer -


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской

Репутация: -  -1  +


Цитата
Я смотрю, в этой теме сплошные кошки на аватарах...

Да уж кошачее собрание... smile.gif Прикольно.
TarasBer, а тебя прога при маленьких значениях всё равно текст за пределы выкидывает... Ну там конечно можно ещё стили менять текста (там ведь в разных стилях размер бывает совсем маленький) и меняя размер можно ущемлять его в прямоугольники или если нельзя ущемить вообще не выводить... Но я сомневаюсь что ему такая намудрённость нужна...


--------------------
Time have not meaning. Mind - this is main...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(TarasBer @ 27.02.2007 22:56) *


Вроде поняла..кроме одного момента...

W1 := TextWidth(S1);
SetTextStyle(4, 1, a shl 2 div w1);
OutTextXY(x + b shr 1, y + a shr 1, S1);




Каково назначение здесь первой строки? И откуда shl, shr ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Цитата
Каково назначение здесь первой строки?
Вычисление ширины текста, вестимо..

Цитата
И откуда shl, shr ?
А у тебя на клавиатуре кнопка F1 есть? Откуда она там? И самое главное, ЗАЧЕМ? Набери shl в Паскале и нажми Ctrl + F1 - узнаешь, иначе обсуждение очень быстро выйдет за рамки заданной тобой темы...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 28.02.2007 1:01) *



Набери shl в Паскале и нажми Ctrl + F1 - узнаешь, иначе обсуждение очень быстро выйдет за рамки заданной тобой темы...

Не могли бы вы дать ссылку, где об этом можно подробно почитать (а то у меня Паскаль не русифицирован.... unsure.gif )
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Цитата(18192123 @ 8.03.2007 23:51) *

Не могли бы вы дать ссылку, где об этом можно подробно почитать (а то у меня Паскаль не русифицирован.... unsure.gif )

Литература
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +



SetTextStyle(4, 1, a shl 2 div w1);



выражение a shl 2 div w1, как я поняла, используется в качестве размера шрифта...
но объясните мне пожалуйста в чём его смысл ? (нашла, что операция shl обеспечивает сдвиг на определенное кол-во разрядов влево)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Цитата(18192123 @ 9.03.2007 19:50) *


SetTextStyle(4, 1, a shl 2 div w1);



выражение a shl 2 div w1, как я поняла, используется в качестве размера шрифта...
но объясните мне пожалуйста в чём его смысл ? (нашла, что операция shl обеспечивает сдвиг на определенное кол-во разрядов влево)

На положительные целые числа операция shl x дейтвует такде, как и умножение на 2 в степени x. А shr x означает делние на 2 в степени x. НО: умножение, а тем более деление может отнимать очень много времени, а побитовый сдвиг делается намного (в несколько десятков раз) быстрее. В маленьких программах разница во времени незаметна, но в серьёзных программах иногда приходится делать всё при помощи быстрых битовых операций.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Конечно не по теме, но где можно бы почитать о применении логических операций к числам?


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






В поиске есть, suriv спрашивал когда-то, в "Теоретических вопросах" ...

Добавлено через 3 мин.
Здесь тоже было: Не пойму!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(TarasBer @ 9.03.2007 20:29) *

На положительные целые числа операция shl x дейтвует такде, как и умножение на 2 в степени x. А shr x означает делние на 2 в степени x. НО: умножение, а тем более деление может отнимать очень много времени, а побитовый сдвиг делается намного (в несколько десятков раз) быстрее. В маленьких программах разница во времени незаметна, но в серьёзных программах иногда приходится делать всё при помощи быстрых битовых операций.

а почему нужно именно 2 в выражении a shl 2 div w1?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Цитата(18192123 @ 9.03.2007 20:43) *

а почему нужно именно 2 в выражении a shl 2 div w1?

Потому что мне захотелось умножить именно на 2^2=4.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(TarasBer @ 9.03.2007 20:55) *

Потому что мне захотелось умножить именно на 2^2=4.

спасибо! теперь всё ясно!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 25.09.2021 11:09
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name