Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
Tiga
3 / 3 / 3
Регистрация: 24.05.2011
Сообщений: 39
1

TextABC

02.10.2011, 21:17. Просмотров 1571. Ответов 17
Метки нет (Все метки)

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

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//=================------------------//
     MoveTo(x0,y0);
//=================------------------//
     for i:=1 to n do
     begin
         x1:=x0+30;
         LineTo(x1,ary[i]);
//=================------------------//
             if(ary[i]<y0)then
             begin
                  Str(ary[i],strH);
                  TextF:=TextABC.Create(x1,(ary[i]-10),20,clRed,strH);
             end;
             if(ary[i]>y0)then
             begin
                  Str(ary[i],strH);
                  TextF:=TextABC.Create(x1,(ary[i]+10),20,clGreen,strH);
             end;
//=================------------------//
         x1:=x1+30;
         LineTo(x1,y0);
         LineTo(x0,y0);
         x0:=x1;
         MoveTo(x0,y0);
     end;
//=================------------------//
изначально y0=80 a x0=0
в ary[i] хранятся вершины треугольников и нужно, чтоб над ними выводились их координаты.
Я с ооп в паскале не особо дружу, подскажите где ошибка.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2011, 21:17
Ответы с готовыми решениями:

Разбиение на строчки в TextABC
Нужно запихать в TextABC огромную массу текста. Он запихивается, но выглядит, как одна строчка....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Puporev
Модератор
58122 / 44213 / 30543
Регистрация: 18.05.2008
Сообщений: 105,876
03.10.2011, 08:27 2
Весь-то код секретный? Тогда на форум экстрасенсов.
0
Tiga
3 / 3 / 3
Регистрация: 24.05.2011
Сообщений: 39
03.10.2011, 09:58  [ТС] 3
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
program Treangls;
uses ABCObjects, GraphABC;
//=================------------------//
var
MaxY, k, i, n, y0, x0, x1: integer;
ary:array[1..100] of integer;
strH:string;
TextF:TextABC;
//=================------------------//
begin
//=================------------------//
     x0:=0;
     y0:=250;
     x1:=x0;
//=================------------------//
     writeln('Enter number of treangls: ');
     readln(n);  //Cuantity of treangls
//=================------------------//
     for i:=1 to n do
     begin
         writeln('Enter ',i,' top of treangl: ');
         read(ary[i]);   //Tops
     end;
//=================------------------//
     MoveTo(x0,y0);
//=================------------------//
     for i:=1 to n do
     begin
         x1:=x0+30;
         LineTo(x1,ary[i]);
//=================------------------//
             if(ary[i]<y0)then
             begin
                  Str(ary[i],strH);
                  TextF:=TextABC.Create(x1,(ary[i]-10),20,clRed,strH);
             end;
             if(ary[i]>y0)then
             begin
                  Str(ary[i],strH);
                  TextF:=TextABC.Create(x1,(ary[i]+10),20,clGreen,strH);
             end;
//=================------------------//
         x1:=x1+30;
         LineTo(x1,y0);
         LineTo(x0,y0);
         x0:=x1;
         MoveTo(x0,y0);
     end;
//=================------------------//
     MaxY:=abs(ary[1]-y0);
     k:=1;
     for i:=1 to n do
     begin
         if((abs(ary[i]-y0))>MaxY)then
            begin
                 MaxY:=abs(ary[i]-y0);
                 k:=i;
            end;
     end;
//=================------------------//
     writeln('Maximal height have ',k,' triangle with height ',MaxY );
end.

Вот, если поможет.
В конце находится и выводится высота наибольшего треугольника.
0
Puporev
Модератор
58122 / 44213 / 30543
Регистрация: 18.05.2008
Сообщений: 105,876
03.10.2011, 10:20 4
 Комментарий модератора 
Пользуйтесь тегами PASCAL


Добавлено через 20 минут
Не понял я смысла твоей программы, вот привел ее к рабочему виду, но так и не понял.
Напиши что не так и точное условие твоей задачи.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
program Treangls;
uses crt,ABCObjects, GraphABC;
var MaxY, k, i, n, y0, x0, x1: integer;
    ary:array[1..100] of integer;
    strH,st:string;
    TextF:TextABC;
begin
x0:=0;
y0:=250;
x1:=x0;
writeln('Enter number of treangls: ');
readln(n);  //Cuantity of treangls
for i:=1 to n do
 begin
  writeln('Enter ',i,' top of treangl: ');
  read(ary[i]);   //Tops
 end;
hidecursor;
clearwindow;
MoveTo(x0,y0);
for i:=1 to n do
 begin
  x1:=x0+30;
  LineTo(x1,ary[i]);
  if(ary[i]<y0)then
   begin
    Str(ary[i],strH);
    TextF:=TextABC.Create(x1,(ary[i]-10),20,clRed,strH);
    end
  else if(ary[i]>y0)then
    begin
     Str(ary[i],strH);
     TextF:=TextABC.Create(x1,(ary[i]+10),20,clGreen,strH);
    end;
  x1:=x1+30;
  LineTo(x1,y0);
  LineTo(x0,y0);
  x0:=x1;
  MoveTo(x0,y0);
 end;
MaxY:=abs(ary[1]-y0);
k:=1;
for i:=1 to n do
 begin
  if((abs(ary[i]-y0))>MaxY)then
   begin
    MaxY:=abs(ary[i]-y0);
    k:=i;
   end;
 end;
Str(k,strH);
st:='Maximal height have '+strH;
Str(MaxY,strH);
st:=' triangle with height '+strH;
//strH:='Maximal height have ',k,' triangle with height '+strH;
TextF:=TextABC.Create(50,windowheight-40,20,clBlack,st);
end.
0
03.10.2011, 10:20
Tiga
3 / 3 / 3
Регистрация: 24.05.2011
Сообщений: 39
03.10.2011, 10:46  [ТС] 5
В целом нужно:
1)Из файла берутся данные
2)По этим данным(вершины треугольников) в графическом окне друг за другом относительно заданной оси на экране(y0) строятся друг за другом треугольники.
3)Вычисляется высота наибольшего треугольника от оси(y0).
4)Каждый треугольник закрашивается каким либо цветом.
5)Над вершинами треугольников выводится их высота.

Файл и закрашивание я в этой программе еще не реализовал, треугольники и вычисление наибольшей высоты сделал, на отображении координат в графическом окне застрял.
У меня с этим кодом в графическом окне строятся сами треугольники с введенными вручную координатами высот, но их координаты не отображаются.

Я так понимаю класс TextABC может в графическом окне(не в окне отладки) выводить на экран определенный текст, чего собственно и не происходит.

Собственно вот.
0
Puporev
Модератор
58122 / 44213 / 30543
Регистрация: 18.05.2008
Сообщений: 105,876
03.10.2011, 10:57 6
Цитата Сообщение от Tiga Посмотреть сообщение
чего собственно и не происходит.
Почему? У меня же выводит текст нормально. Только я не понял для чего именно TextABC; можно и и без модуля ABCObjects, обычным textout(x,y,s);
0
Tiga
3 / 3 / 3
Регистрация: 24.05.2011
Сообщений: 39
03.10.2011, 11:04  [ТС] 7
Хм странно, у меня кроме черных треугольников на экране ничего не отображается, попробую текстоут.
Извиняюсь за свою недостаточную компитентность по паскалю, я больше по части асм\срр.
0
Puporev
Модератор
58122 / 44213 / 30543
Регистрация: 18.05.2008
Сообщений: 105,876
03.10.2011, 11:05 8
Вот это непонятно
2)По этим данным(вершины треугольников) в графическом окне друг за другом относительно заданной оси на экране(y0) строятся друг за другом треугольники
Координаты вершин какими могут быть?
Треугольники произвольные? Или равносторонние, равнобедренные?
В произвольном треугольнике 3 высоты, нужно максимальную из них?
Основание треугольника параллельно оси Х?
Основания треугольников рисуются на оси Х?
Короче одни вопросы, по такому условию нельзя писать программу. Либо оно тупо составлено, либо Вы его не точно изложили.

Добавлено через 37 секунд
Tiga, Так Вы мой код скопируйте в окно АВС и запустите.
0
Puporev
Модератор
58122 / 44213 / 30543
Регистрация: 18.05.2008
Сообщений: 105,876
03.10.2011, 11:08 9
У меня выводит так.
0
Миниатюры
TextABC  
Puporev
Модератор
58122 / 44213 / 30543
Регистрация: 18.05.2008
Сообщений: 105,876
03.10.2011, 11:09 10
Написано конечно неправильно, это видно из картинки, но это уже другие проблемы.
0
Tiga
3 / 3 / 3
Регистрация: 24.05.2011
Сообщений: 39
03.10.2011, 11:14  [ТС] 11
Равнобедренные треугольники, основание лежит на оси(y0), именно как отображено на вашей схеме.
Задается координата по у для 2й вершины(ary[i])
Такое у вас получилось без редактирования моего кода?
0
Puporev
Модератор
58122 / 44213 / 30543
Регистрация: 18.05.2008
Сообщений: 105,876
03.10.2011, 11:25 12
Цитата Сообщение от Tiga Посмотреть сообщение
Такое у вас получилось без редактирования моего кода?
Без редактирования у меня вообще ничего не выводило кроме строки

Цитата Сообщение от Tiga Посмотреть сообщение
Maximal height have ',k,' triangle with height ',MaxY
Добавлено через 3 минуты
Наверное тогда так
Равнобедренные треугольники, основание лежит на оси Х
Тогда должны задаваться и координаты х1,х3 вершин основания? Или только координата у2, а длины оснований у всех равны?
0
Tiga
3 / 3 / 3
Регистрация: 24.05.2011
Сообщений: 39
03.10.2011, 11:31  [ТС] 13
Получается вот такой вариант.

треугольники почему то разрываются, при использовании текстоут такой же эффект.
0
Миниатюры
TextABC  
Puporev
Модератор
58122 / 44213 / 30543
Регистрация: 18.05.2008
Сообщений: 105,876
03.10.2011, 11:36 14
Это потому что координата вершины не входит на экран.
Для тестирования сделай ось Х внизу окна и не вводи значения больше высоты окна.
1
Tiga
3 / 3 / 3
Регистрация: 24.05.2011
Сообщений: 39
03.10.2011, 11:37  [ТС] 15
Все разобрался, после того как создавалось текстовое поле курсор смещался с координат x1,ary[i], MoveTo(x1,ary[i]) спасло.
Спасибо за подсказку с crt.
0
Puporev
Модератор
58122 / 44213 / 30543
Регистрация: 18.05.2008
Сообщений: 105,876
03.10.2011, 11:38 16
Если координаты положительные, то ось всегда должна быть внизу, оставить немного места для вывода результата. А для корректного вывода треугольников нужно найти максимальную высоту и определить вертикальный масштаб.
my:=(y0-50)/max;
0
Tiga
3 / 3 / 3
Регистрация: 24.05.2011
Сообщений: 39
03.10.2011, 12:09  [ТС] 17
Все верно получилось, примерно такой вывод и ожидался, спасибо.
1
Миниатюры
TextABC  
Puporev
Модератор
58122 / 44213 / 30543
Регистрация: 18.05.2008
Сообщений: 105,876
03.10.2011, 12:13 18
Вот и молодец!
0
03.10.2011, 12:13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.