Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
2 / 2 / 1
Регистрация: 19.09.2015
Сообщений: 121
1

Вычислить площадь многоугольника

07.01.2016, 16:59. Показов 1461. Ответов 5
Метки нет (Все метки)

Доброго времени суток, уважаемые форумчане. Мне кое-что непонятно насчет комбинированных типов с вариантами.
Вот внизу есть программа, которая вычисляет площадь многоугольника. В зависимости от значения переменной Figure у нас будет доступ либо к переменным w и h(в случае Figure = Rectangle), L1,L2,a(в случае Figure = Triangle), и R (в случае Figure = Circle). Я правильно рассуждаю? Но вот загвоздка в том, если закоментить строки 19, 25 и 31, то программа все равно будет получать доступ ко всем переменным, вне зависимости от значения Figure. В чем дело?

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
program area;
uses crt;
type TFigure = (Rectangle,Triangle,Circle);
     TPolygon = record
       Area: real;
       case Figure: TFigure of
         Rectangle: (w,h :integer);
         Triangle: (L1,L2:integer; a:real);
         Circle: (R:integer);
     end;
var Polygon : TPolygon;
    t: 0..2;
begin
   clrscr;
   write('Площадь какой фигуры вы хотите вычислить? (0-Прямоугольник,1-Треугольник,2-Окружность):  ');
   readln(t);
   with Polygon do begin
    if t=0 then begin
       //Figure:=Rectangle;
       write('Введите длину и ширину прямоугольника: ');
       readln(w,h);
       area:=w*h;
    end;
    if t=1 then begin
      //Figure:=Triangle;
      write('Введите длины L1,L2 и угол между ними: ');
      readln(l1,l2,a);
      area:=l1*l2*sin(a*Pi/180);
      end;
    if t=2 then begin
     // Figure:=Circle;
      write('Введите радиус окружности R: ');
      readln(R);
      area:=Pi*sqr(R);
      end;
    writeln('Площадь: ',area);
   end;
   Readkey;
end.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2016, 16:59
Ответы с готовыми решениями:

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

Найти площадь многоугольника
Дан массив координат точек на плоскости, задающих выпуклый многоугольник. Описав функцию,...

Площадь произвольного многоугольника
Здравствуйте, хочу попросить у вас помощь. Есть у меня задача: дано произвольный многоугольник...

Вычислить площадь многоугольника
Многоугольник на плоскости задан координатами своих вершин в порядке их обхода. Найти площадь. ...

5
Модератор
63655 / 47238 / 32552
Регистрация: 18.05.2008
Сообщений: 114,474
07.01.2016, 18:34 2
Цитата Сообщение от Mendel Посмотреть сообщение
о программа все равно будет получать доступ ко всем переменным, вне зависимости от значения Figure. В чем дело?
Так Вы сами вычеркнули эту зависимость.
0
2 / 2 / 1
Регистрация: 19.09.2015
Сообщений: 121
07.01.2016, 20:10  [ТС] 3
Я хочу сказать, что неважно, будут ли эти строки вычеркнуты или нет, программа все равно будет работать. И меня интересует вопрос, почему? Программа, которая сейчас выше полностью работоспособна. А ведь по сути не должна работать, так как значение переменной Figure не задается и следовательно доступ к переменным l1,l2,a к примеру не должен осуществляться.
0
318 / 208 / 162
Регистрация: 08.12.2015
Сообщений: 861
07.01.2016, 22:51 4
Разве не должен? Переменные объявлены.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
5745 / 3451 / 2446
Регистрация: 22.11.2013
Сообщений: 9,689
Записей в блоге: 1
08.01.2016, 00:44 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Mendel,
значение селектора Figure доступно во время исполнения, это не мешает генерить код доступа к любым полям записи во время компиляции. Правильное обращение к полям лежит только на программисте.

Добавлено через 17 минут
Более того, допустимы записи с вариантами вовсе без селектора:
Pascal
1
2
3
4
5
6
type
  LongRec = record
    case Integer of
    0: (b: array [0..3] of Byte);
    1: (l, h: Word);
  end;
1
2 / 2 / 1
Регистрация: 19.09.2015
Сообщений: 121
09.01.2016, 16:30  [ТС] 6
Теперь понятно. Спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2016, 16:30

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Подпрограммы: Вычислить площадь многоугольника
Даны действительные числа: k,m,n,p. Вычислить площадь многоугольника, изображенного на рисунке: ...

Вычислить площадь правильного многоугольника
Вычислить площадь правильного многоугольника со стороной а, используя подпрограмму вычисления...

Вычислить площадь выпуклого многоугольника, если известны координаты его вершин
Вычислить площадь выпуклого многоугольника, если известны координаты его вершин.

площадь многоугольника
Необходимо по координатам точек на плоскости карты найти площадь многоугольника. Формат файла...

Площадь выпуклого многоугольника.
Выпуклый многоугольник задан последовательностью координат своих вершин в порядке обхода....

Площадь выпуклого многоугольника
Дан выпуклый многоугольник, с заданной последовательностью координат своих вершин в порядке обхода...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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