Перевести программу с Pascal - C (СИ) (77334)
Формулировка задачи:
uses crt;
type Tochka=record
x,y:real;
end;
const nmax=20;
var a:array[1..nmax+1] of Tochka;
t:Tochka;
n,i:integer;
s,s1:real;
begin
repeat
write('Kolichestvo vershin ot 4 do ',nmax,' n=');
readln(n);
until n in [4..nmax];
writeln('Vvedite koordinaty vipuklogo ',n,'-ugolnika:');
for i:=1 to n do
begin
writeln('Tochka ',i);
write(' x=');readln(a[i].x);
write(' y=');readln(a[i].y);
end;
a[n+1]:=a[1];
t.x:=(a[1].x+a[3].x)/2;
t.y:=(a[1].y+a[3].y)/2;
s:=0;
for i:=1 to n do
begin
s1:=abs((t.x-a[i].x)*(a[i+1].y-a[i].y)-(a[i+1].x-a[i].x)*(a[i+1].y-t.y))/2;
s:=s+s1;
end;
write('S=',s:0:4);
end.Решение задачи: «Перевести программу с Pascal»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
#define NMAX 20
struct Tochka
{
double x;
double y;
};
int main(void)
{
struct Tochka a[NMAX+1];
struct Tochka t;
int n, i;
float s, s1;
do {
printf("Kolichestvo vershin ot 4 do %d : ", NMAX);
scanf("%d", &n);
} while((4<n) && (n>NMAX));
printf("Vvedite koordinaty vipuklogo %d-ugolnika.\n", n);
for(i=1; i<=n; i++)
{
printf("Tochka %d\n", i);
printf(" x = "); scanf("%lf", &a[i-1].x);
printf(" y = "); scanf("%lf", &a[i-1].y);
}
a[n] = a[0];
t.x = (a[0].x + a[2].x)/2;
t.y = (a[0].y + a[2].y)/2;
s = 0;
for(i=0; i<n; i++)
{
s1 = fabs((t.x-a[i].x)*(a[i+1].y-a[i].y)-(a[i+1].x-a[i].x)*(a[i+1].y-t.y))/2;
s = s + s1;
}
printf("S = %0.4lf\n", s);
return 0;
}
Объяснение кода листинга программы
- Объявление переменных и структурных типов.
- Ввод количества вершин от 4 до NMAX.
- Ввод координат узлов многоугольника.
- Копирование координат первого узла в последний для обеспечения замыкания многоугольника.
- Вычисление центра тяжести многоугольника.
- Инициализация суммы площадей равной нулю.
- Вычисление площади каждого треугольника, используя формулу Герона.
- Вычисление площади всего многоугольника, суммируя площади всех треугольников.
- Вывод площади многоугольника.
- Возврат 0, чтобы указать, что программа успешно завершилась.