Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.05.2017, 19:56
66demon666 66demon666 вне форума
Прохожий
 
Регистрация: 18.05.2017
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Delphi 7 выдает неверный результат расчета по формуле

Здравствуйте! Есть задача:

Найти Y, если Y = X1 + X2 + … + Xn, X = Z^3 - B + A^2 / tg^2*beta. Количество X вводятся пользователем программы. Для каждого X значения Z, B, А, beta разные (вводятся пользователем программы).

Решаю
Код:
program Project2;

{$APPTYPE CONSOLE}
uses
  SysUtils,
  Math,
  System;

var
  xn,i:integer;
  a,b,z,beta,y:real;
  arr:array of real;
begin
y:=0;
write('input quantity X: ');
readln(xn);
SetLength(arr,xn);
for i:=0 to High(arr) do arr[i]:=0;
for i:=0 to High(arr) do
begin
writeln('Input a,b,z,beta for x',i,': ');
write('a=');
readln(a);
write('b=');
readln(b);
write('z=');
readln(z);
write('beta=');
readln(beta);
arr[i]:=((sqr(z)*z)-b+(sqr(a)/sqr(Tan(beta))));
end;
for i:=0 to High(arr) do y:=y+arr[i];
writeln('y=',y:3:2);
readln;
end.

Я что-то не так делаю, или что, потому что результат в образце: [скриншот вложение]
Следует заметить, что образец писался на C++. Заранее спасибо
Изображения
Тип файла: png Screenshot_4.png (17.4 Кбайт, 4 просмотров)
Ответить с цитированием
  #2  
Старый 19.05.2017, 00:46
Аватар для lmikle
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 6,925
Репутация: 49086
По умолчанию

Ну, у меня получилось вот так:
Код:
program SumX;
 
{$APPTYPE CONSOLE}

uses
  SysUtils, Math;
  
function getX(Num : Integer) : Double;
var
  Z, B, A, beta : Double;
begin
  WriteLn('Input values to calculate X'+IntToStr(I));
  Write('Input Z='); ReadLn(Z);
  Write('Input B='); ReadLn(B);
  Write('Input A='); ReadLn(A);
  Write('Input beta='); ReadLn(beta);
  
  Result := Z*Z*Z - B + Sqr(A) / Sqr(Tan(beta)); // Rad
  // Result := Z*Z*Z - B + Sqr(A) / Sqr(Tan(beta*PI/180)); // Grad
end;

var
  N, I : Integer;
  Y : Double;  
begin
  Write('Input number of X='); ReadLn(X);
  Y := 0;
  For I := 1 To N Do
    Y := Y + getX(I);
  WriteLn(Format('Y=%.2f',[Y]));
  ReadLn;
end;

end.

1. Массив тебе не нужен. У тебя простое сложение, которое можно сделать по ходу чтения данных
2. Там в функции рассчета X есть 2 примерно одинаковые строчки. Одна для beta в радианах (// Rad), вторая - градусах (// Grad). Надо оставить одну - которая правильная.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
66demon666 (19.05.2017)
  #3  
Старый 19.05.2017, 16:50
66demon666 66demon666 вне форума
Прохожий
 
Регистрация: 18.05.2017
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Благодарю, не учел некоторых аспектов)
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:41.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2017

ВКонтакте   Facebook   Twitter