3 задачи по паскалю

msblast
Сообщения: 10
Зарегистрирован: 15 май 2007, 19:06

Код: Выделить всё

program ex3;
type
Tfigure=(circle,rectangle,triangle);
Tcolor=(red,green,blue);
Point=record
x,y:real
end;
figures=record
color:Tcolor;
case figureType:Tfigure of
     circle :( centre :p oint;radius:real);
     rectangle :( s1,s2 :p oint);
     triangle :( t1,t2,t3 :p oint)
end;
tlist=array[1..20] of figures;

var
list:tlist;
i:byte;
c:char;
s:integer;

begin
repeat
inc(i);
writeln('Ввод данных о ', i ,' фигуре');
with list[i] do
begin
writeln('Введите тип фигуры');
readln(figureType);                       [U][B]---вот здесь пишет ошибку 64 (Cannot Read or Write variables of this type)[/B][/U]
if figureType=circle then
   begin
   writeln('Введите цвет');
   readln(color);
   writeln('Введите координату центра (x,y)');
   readln(centre.x,centre.y);
   writeln('Введите радиус');
   readln(radius);
   S:=3,14*(radius*radius);
writeln('Ввести еще данные?');
readln(c);
until c in ['n','N'];
writeln('Площадь круга  = ',s);
readln;
end.

Написал кусочек для проверки, поидеи должен выдовать площадь круга, вместо этого ругается что неможет записать или прочитать
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

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

тип фигуры записывается в List.Type
центр круга в list.centre.x и list.centre.y
радиус в list.radius
цвет в list.color

правильно?
Правильно.
msblast писал(а):

Код: Выделить всё

.....................
readln(figureType);                       [U][B]---вот здесь пишет ошибку 64 (Cannot Read or 
Написал кусочек для проверки, поидеи должен выдовать площадь круга, вместо этого ругается что неможет записать или прочитать
Правильно руагется. Потому figureType - переменную пользовательского типа. В нее с экрана никак не прочитаешь.
msblast
Сообщения: 10
Зарегистрирован: 15 май 2007, 19:06

BBB писал(а):Есть формула Герона вычисления площади теругольника по трем его сторонам:

S = SQRT (p * (p-a) * (p-b) * (p-c))

где a, b, c - длины сторон треугольника,
а p - полупериметр треугольника: p = (a+b+c) / 2

А, зная координаты вершин, длины сторон определить несложно:
a = SQRT ( (t1.x - t2.x)^2 + (t1.y - t2.y)^2)
b = SQRT ( (t1.x - t3.x)^2 + (t1.y - t3.y)^2)
c = SQRT ( (t2.x - t3.x)^2 + (t2.y - t3.y)^2)
насчет блин сторон немного непонял
это вроде Теорема пифагора, а на кой она нужна тут?
бред какой то выходит, если так записать то он находит площадь с координатами (1.1)(5.5)(1.10) но не может найти (1.1)(5.5)(3.3)
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

msblast писал(а):насчет блин сторон немного непонял
это вроде Теорема Пифагора, а на кой она нужна тут?
Теорема Пифагора блин нужна блин чтобы блин посчитать блин длину отрезка блин, концы которого заданы блин в декартовой системе координат.
бред какой то выходит, если так записать то он находит площадь с координатами (1.1)(5.5)(1.10) но не может найти (1.1)(5.5)(3.3)
У тебя эти три точки лежат на одной прямой. Т.е. имеет место вырожденный треугольник. По идее, его площадь должна получаться нулевая.
У меня вполне находит, правда результат получается не ровно ноль, а "очень маленький": 1.8145860520E-05

Код: Выделить всё

type
Point=record
x,y:real;
end;

var a, b, c, p, S : real;
    t1, t2, t3 : Point;

begin
  t1.x := 1; t1.y := 1;
  t2.x := 5; t2.y := 5;
  t3.x := 3; t3.y := 3;

a := SQRT ( SQR(t1.x - t2.x) + SQR(t1.y - t2.y));
b := SQRT ( SQR(t1.x - t3.x) + SQR(t1.y - t3.y));
c := SQRT ( SQR(t2.x - t3.x) + SQR(t2.y - t3.y));

  p := (a + b +c) / 2;

  S := SQRT (p * (p-a) * (p-b) * (p-c));


  writeln ('S: ', S);

end.
msblast
Сообщения: 10
Зарегистрирован: 15 май 2007, 19:06

угу....

а с 3 задачей кто подскажет, задача готова на 99%, осталось написать код для поиска аптеки с наибольшим ассортиментом

помогите....мне через день сдавать это надо, а у меня полторы задачи висит(((
Ответить