Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Dushni_student
0 / 0 / 0
Регистрация: 03.06.2016
Сообщений: 4
1

Умудрился запутаться в простейшем цикле

13.08.2016, 22:22. Просмотров 782. Ответов 5
Метки нет (Все метки)

Нужно сделать программу для табулирования функции(Два списка со значениями x и соответствующими им значениям y. Вводятся начальное значение x, шаг его изменения, и конечное значение x), сижу, ломаю голову уже 3 день, проблем море:

1)Алгоритм не работает, видимо программа не выполняет все 3 ветви( в списке Y везде нули).
2)первая команда while тоже не работает, приходится во всех циклах делать прерывание, почему?
3)Так и не нашёл, как округлять значение до десятых и потом выводить это в Memo.

Надеюсь вы сможете подсказать что-либо, код примитивнейший, думаю программист сразу учует неладное.

Delphi
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
63
64
var
xh,xk,h,a,x,y : Real;
pi : real;
 
 
 
 
procedure TForm1.Button1Click(Sender: TObject);
 
begin
 
 xh:=StrToFloat(Edit1.Text);
 xk:=StrToFloat(Edit2.Text);
 h:=StrToFloat(Edit3.Text);
 a:=StrToFloat(Edit4.Text);
 ////Недопустимые символы
 if (xh>=xk) or (h<0)
 then
 begin
 Button1.Caption:='Неверный интервал и/или шаг';
 end
 
      ///табулирование
      else
      begin
      x:=xh;
 
          while (x<xk) do
          begin
 
              while x<=0 do
              begin
              Memo1.Lines.Add(FloatToStr(x));
              y:=0;
              Memo2.Lines.Add(FloatToStr(y));
              if x>xk then break;
              x:=x+h;
              end;
 
              while (x>0) and (x<pi) do
              begin
              Memo1.Lines.Add(FloatToStr(x));
              y:=a*(sin(x));
              Memo2.Lines.Add(FloatToStr(y));
              x:=x+h;
              if x>xk then break;
              end;
 
              while x>=pi do
              begin
              Memo1.Lines.Add(FloatToStr(x));
              y:=0;
              Memo2.Lines.Add(FloatToStr(y));
              if x>xk then break;
              x:=x+h;
              end
 
          end
      end;
 
 end;
 
 
end.
http://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
y=\begin{cases}a\, \sin x & \text{, if } 0<x<\pi \\ 0 & \text{, otherwise}\end{cases}<br />

где x = xh (h) xk. Заданы xh, xk, h, a.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2016, 22:22
Ответы с готовыми решениями:

Переменная, которая только что использовалась в цикле в качестве счётчика в следующем цикле не используется
Помогите, пожалуйста. Вот отрывок программы (программа целиком- в архиве): procedure...

Реализация "Числовой проверки" в простейшем текстовом редакторе
Приветствую! Возникла проблема с реализацией функции &quot;Числовая проверка&quot; в простейшем блокноте. ...

Неясность в простейшем цикле
Всем доброго! То ли лыжи не едут, то ли коэффициент трения зашкаливает: подсмотрел я у Шилдта код,...

Как не запутаться в изменениях
Всем привет. Подскажите, как решить проблему. Использую MS Office Word 2003. Нужно сделать 3...

Много кода. Как не запутаться?
Здравствуйте. Вот по работе разрабатываю сервис. Возможно он разрастется в коде, так что трудно...

5
cfbogd
botsik
259 / 259 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
13.08.2016, 22:35 2
Лучший ответ Сообщение было отмечено Dushni_student как решение

Решение

Цитата Сообщение от Dushni_student Посмотреть сообщение
begin
Button1.Caption:='la-la-la';
end
begin и end можно и не писать, если исполняется только одно действие.

Добавлено через 2 минуты
Цитата Сообщение от Dushni_student Посмотреть сообщение
var xh,xk,h,a,x,y : Real;
pi : real;
в коде не написано каково значение pi, его нужно, между прочим, в const прописывать.
1
Dushni_student
0 / 0 / 0
Регистрация: 03.06.2016
Сообщений: 4
13.08.2016, 23:17  [ТС] 3
Благодарю! за 3 дня даже и не мог подумать что всё дело в константе...
0
northener
пофигист широкого профиля
3429 / 2328 / 631
Регистрация: 15.07.2013
Сообщений: 13,796
14.08.2016, 00:08 4
Цитата Сообщение от cfbogd Посмотреть сообщение
в коде не написано каково значение pi, его нужно, между прочим, в const прописывать.
Оно уже давно прописано в исходниках Дельфи.
0
Puporev
Модератор
55422 / 42548 / 29402
Регистрация: 18.05.2008
Сообщений: 100,652
14.08.2016, 09:13 5
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.Button1Click(Sender: TObject);
var xn,xk,x,h,a,y:double;
begin
xn:=StrToFloat(Edit1.Text);
xk:=StrToFloat(Edit2.Text);
h:=StrToFloat(Edit3.Text);
a:=StrToFloat(Edit4.Text);
x:=xn;
while x<xk+h/2 do
 begin
  if(x>0)and(x<pi) then y:=a*sin(x)
  else y:=0;
  Memo1.Lines.Add('x='+formatfloat('0.00',x)+'  y='+formatfloat('0.000',y));
  x:=x+h;
 end;
end;
1
cfbogd
botsik
259 / 259 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
14.08.2016, 10:50 6
Цитата Сообщение от northener Посмотреть сообщение
Оно уже давно прописано в исходниках Дельфи.
правильно, но по сути это же не переменная
0
14.08.2016, 10:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2016, 10:50

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

Глюк в простейшем скрипте
Приветствую всех. Нахожусь в лёгком замешательстве %-). Вроде простой скрипт выпадающего списка...

Ошибка в простейшем коде
SELECT name as id_d FROM dolz UNION ALL SELECT name as id_o FROM otdel собственно хочу...


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

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

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