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

Оператор выбора в функции

25.02.2017, 21:15. Просмотров 245. Ответов 19
Метки нет (Все метки)

Ребят подскажите пожалуйста в чем ошибка?
Почему функция не возвращает результат в зависимости от выбора
переменой vib присваивается значение 1,2,3,4 но действия не происходит

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
unit Unit2;
 
interface
type
Arr = array[0..1000] of real;
function integral ( a,b,h:real; vib:integer) : Arr;
function znachenie (a,b,h:real; vib:integer):real;
implementation
 
function znachenie (a,b,h:real; vib:integer):real;
var
 i,n: integer;
 summa:real;
 begin
 summa:=0;
 n:=trunc((a-b)/h);
 case vib of
    1:
      for i:=1 to n do
        begin
         summa:=summa +(ln(i-1)+h/2);
         Result:=summa ;
        end;
 
    2:
      for i:=1 to n do
        begin
         summa:=summa +(cos(i-1)+h/2);
        Result:=summa ;
        end;
    3:
      for i:=1 to n do
        begin
         summa:=summa +(sin(i-1)+h/2);
         Result:=summa ;
        end;
    4:
      for i:=1 to n do
        begin
         summa:=summa +(sin(i-1)/cos(i-1)+h/2);
         Result:=summa ;
        end;
 end;
end;
 
 
 
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2017, 21:15
Ответы с готовыми решениями:

Оператор Выбора
Написать программу, которая по номеру дня недели (целому числу от 1 до 7)...

Оператор выбора Case
procedure TFormReport.Gen_ReportsClick(Sender: TObject); begin {$REGION '...

Оператор выбора ( в делфи 7)
Помогите пожалуйста решить задачу в делфи 7( желательно еще описать все...

Оператор выбора или что-то другое?
Дана строка, изображающая десятичную запись целого числа. Вывести строку,...

Оператор выбора для компонента Edit
Здравствуйте! Вот моя процедура: procedure TForm1.Button1Click(Sender:...

19
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
3882 / 2864 / 3639
Регистрация: 05.06.2014
Сообщений: 14,086
25.02.2017, 21:29 2
Цитата Сообщение от valera7794647 Посмотреть сообщение
действия не происходит
А вы как эту функцию вызываете?
0
Joey
Форумчанин
831 / 552 / 219
Регистрация: 05.05.2015
Сообщений: 3,200
Записей в блоге: 1
25.02.2017, 21:29 3
valera7794647, может весь код выложите?
Кстати, для начала, чем делать вот так:
Delphi
1
2
3
4
5
6
7
8
9
summa:=0;
...
case vib of
1:
  for i:=1 to n do
  begin
    summa:=summa +(ln(i-1)+h/2);
    Result:=summa;
  end;
можно же все операции делать просто с result:
Delphi
1
2
3
4
5
result := 0;
case vib of
1:
  for i:=1 to n do
    Result := Result + (ln(i-1)+h/2);
И тогда не придется объявлять переменную Summa и после каждого case 1,2,3,4 писать begin end
0
cfbogd
botsik
259 / 259 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
25.02.2017, 21:32 4
я чуть чуть упростил ваш код, у меня он работает так же, как и ваш
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
function znachenie (a,b,h:real; vib:integer):real;
var i,n: integer;
 begin
 Result:=0;
 n:=trunc((a-b)/h);
for i:=0 to n-1 do
 case vib of
    1: Result:=Result +(ln(i)+h/2);
    2: Result:=Result +(cos(i)+h/2);
    3: Result:=Result +(sin(i)+h/2);
    4: Result:=Result +(sin(i)/cos(i)+h/2);
 end;
end;
Добавлено через 52 секунды
Joey, с result правильно подмечено (код отредактировал)
0
Vaver
0 / 0 / 0
Регистрация: 23.04.2015
Сообщений: 98
25.02.2017, 21:40  [ТС] 5
Функцию вызываю так
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, VclTee.TeeGDIPlus, Vcl.StdCtrls,
  VCLTee.TeEngine, Vcl.ExtCtrls, VCLTee.TeeProcs, VCLTee.Chart, Vcl.Buttons,Unit2,
  VCLTee.Series;
 
type
 
  TForm1 = class(TForm)
    Chart1: TChart;
    Label1: TLabel;
    RadioGroup1: TRadioGroup;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Image1: TImage;
    BitBtn1: TBitBtn;
    Button1: TButton;
    Label5: TLabel;
    Series1: TLineSeries;
    Series2: TLineSeries;
    Image2: TImage;
    Label6: TLabel;
    Label7: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  a,b,h:real ;
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
  ar: Arr;
  int:real;
  i,r,vib:integer;
begin
a:=StrTofloat(Edit1.Text);
b:=StrTofloat(Edit2.Text);
h:=StrTofloat(Edit3.Text);
  case RadioGroup1.ItemIndex of
      0:vib:=1;
      1:vib:=2;
      2:vib:=3;
      3:vib:=4;
  end;
 
 
  ar := integral(a,b,h,vib);
  Series1.Clear;
  i:=2;
  while i<= trunc(ar[1]) do
     begin
    Series1.AddXY(ar[i],ar[i+1],'',clRed);
    i:=i+2       ;
     end;
     int:=  znachenie(a,b,h,vib)   ;
     Label7.Caption:='=' + floatTostr(int);
 end;
 
 
 
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text:='1';
Edit2.Text:='10';
Edit3.Text:='0,1';
Label7.Caption:='';
end;
 
 procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
Button1.Click;
end;
 
end.
0
cfbogd
botsik
259 / 259 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
25.02.2017, 21:42 6
Цитата Сообщение от valera7794647 Посмотреть сообщение
Delphi
1
2
3
4
5
case RadioGroup1.ItemIndex of
0:vib:=1;
1:vib:=2;
2:vib:=3;
3:vib:=4;
Delphi
1
vib:=Radiobutton1.ItemIndex+1;
0
Vaver
0 / 0 / 0
Регистрация: 23.04.2015
Сообщений: 98
25.02.2017, 21:42  [ТС] 7
Цитата Сообщение от valera7794647 Посмотреть сообщение
действия не происходит
А вы как эту функцию вызываете?

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
unit Unit2;
 
interface
type
Arr = array[0..1000] of real;
function integral ( a,b,h:real; vib:integer) : Arr;
function znachenie (a,b,h:real; vib:integer):real;
implementation
 
function znachenie (a,b,h:real; vib:integer):real;
var
 i,n: integer;
 summa:real;
 begin
 summa:=0;
 n:=trunc((a-b)/h);
 case vib of
    1:
      for i:=1 to n do
        begin
         summa:=summa +(ln(i-1)+h/2);
         Result:=summa ;
        end;
 
    2:
      for i:=1 to n do
        begin
         summa:=summa +(cos(i-1)+h/2);
         Result:=2;
        end;
    3:
      for i:=1 to n do
        begin
         summa:=summa +(sin(i-1)+h/2);
         Result:=3;
        end;
    4:
      for i:=1 to n do
        begin
         summa:=summa +(sin(i-1)/cos(i-1)+h/2);
         Result:=4;
        end;
 end;
end;
 
function integral ( a,b,h:real ; vib:integer) : Arr;
 var
 i,r,n:integer;
begin
i:=2;
r:=3;
n:=1;
case vib of
  1:
     while a<=b do
         begin
            Result[i]:= a;
            Result[r]:= ln(a);
            a:=a+h;
            i:=i+2 ;
            r:=r+2 ;
            n:=n+2;
     end;
     2:
     while a<=b do
         begin
            Result[i]:= a;
            Result[r]:= cos(a);
            a:=a+h;
            i:=i+2 ;
            r:=r+2 ;
            n:=n+2;
     end;
     3:
     while a<=b do
         begin
            Result[i]:= a;
            Result[r]:= sin(a);
            a:=a+h;
            i:=i+2 ;
            r:=r+2 ;
            n:=n+2;
     end;
     4:
     while a<=b do
         begin
            Result[i]:= a;
            Result[r]:= sin(a)/cos(a);
            a:=a+h;
            i:=i+2 ;
            r:=r+2 ;
            n:=n+2;
     end;
end;
   Result[1]:= n-1;
end;
 
 
end.
0
cfbogd
botsik
259 / 259 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
25.02.2017, 21:44 8
только самой функции я не вижу
0
Vaver
0 / 0 / 0
Регистрация: 23.04.2015
Сообщений: 98
25.02.2017, 21:47  [ТС] 9
int:= znachenie(a,b,h,vib) ;
Label7.Caption:='=' + floatTostr(int);

Добавлено через 49 секунд
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
function znachenie (a,b,h:real; vib:integer):real;
var
 i,n: integer;
 summa:real;
 begin
 summa:=0;
 n:=trunc((a-b)/h);
 case vib of
    1:
      for i:=1 to n do
        begin
         summa:=summa +(ln(i-1)+h/2);
         Result:=summa ;
        end;
 
    2:
      for i:=1 to n do
        begin
         summa:=summa +(cos(i-1)+h/2);
        Result:=summa ;
        end;
    3:
      for i:=1 to n do
        begin
         summa:=summa +(sin(i-1)+h/2);
         Result:=summa ;
        end;
    4:
      for i:=1 to n do
        begin
         summa:=summa +(sin(i-1)/cos(i-1)+h/2);
         Result:=summa ;
        end;
 end;
end;
0
cfbogd
botsik
259 / 259 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
25.02.2017, 21:48 10
Цитата Сообщение от valera7794647 Посмотреть сообщение
2:
* * * for i:=1 to n do
* * * * begin
* * * * *summa:=summa +(cos(i-1)+h/2);
* * * * *Result:=2;
смысл ганять цикл, если результат все равно будет равен vib ???

Добавлено через 43 секунды

Не по теме:

хватит один и тот же код присылать

0
Vaver
0 / 0 / 0
Регистрация: 23.04.2015
Сообщений: 98
25.02.2017, 21:48  [ТС] 11
можно и так

Label7.Caption:='=' + floatTostr(znachenie(a,b,h,vib));
0
cfbogd
botsik
259 / 259 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
25.02.2017, 21:49 12
нужно над implementation написать:
uses Unit2;, а с верхнего uses удалить, должно помочь
0
Vaver
0 / 0 / 0
Регистрация: 23.04.2015
Сообщений: 98
25.02.2017, 21:51  [ТС] 13
пардон
не так
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
function znachenie (a,b,h:real; vib:integer):real;
var
 i,n: integer;
 summa:real;
 begin
 summa:=0;
 n:=trunc((a-b)/h);
 case vib of
    1:
      for i:=1 to n do
        begin
         summa:=summa +(ln(i-1)+h/2);
         Result:=summa ;
        end;
 
    2:
      for i:=1 to n do
        begin
         summa:=summa +(cos(i-1)+h/2);
         Result:=summa ;
        end;
    3:
      for i:=1 to n do
        begin
         summa:=summa +(sin(i-1)+h/2);
         Result:=summa ;
        end;
    4:
      for i:=1 to n do
        begin
         summa:=summa +(sin(i-1)/cos(i-1)+h/2);
         Result:=summa ;
        end;
 end;
end;
Добавлено через 1 минуту
но зачем это писать?
2 функция отрабатывает все
0
Joey
25.02.2017, 21:53
  #14

Не по теме:

cfbogd, ну и терпение, сэр...

0
cfbogd
botsik
259 / 259 / 140
Регистрация: 05.06.2016
Сообщений: 1,247
Записей в блоге: 1
25.02.2017, 21:53 15
valera7794647, вы хотя бы смотрите что мы вам тут присылаем?
вносите правки в свой код, смотреть больно
0
Vaver
0 / 0 / 0
Регистрация: 23.04.2015
Сообщений: 98
25.02.2017, 21:54  [ТС] 16
и эта фунуция возвращает значение если написать
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
function znachenie (a,b,h:real; vib:integer):real;
var
 i,n: integer;
 summa:real;
 begin
 summa:=0;
 n:=trunc((a-b)/h);
 [COLOR="red"]case vib of
    1:
      [COLOR="Red"] Result:=vib ;[/COLOR][/COLOR]
      
 
    2:
      for i:=1 to n do
        begin
         summa:=summa +(cos(i-1)+h/2);
         Result:=summa ;
        end;
    3:
      for i:=1 to n do
        begin
         summa:=summa +(sin(i-1)+h/2);
         Result:=summa ;
        end;
    4:
      for i:=1 to n do
        begin
         summa:=summa +(sin(i-1)/cos(i-1)+h/2);
         Result:=summa ;
        end;
 end;
end;
0
cfbogd
25.02.2017, 21:56
  #17

Не по теме:

Joey, мое терпение исчерпано, я пас

0
Vaver
0 / 0 / 0
Регистрация: 23.04.2015
Сообщений: 98
25.02.2017, 22:34  [ТС] 18
Ребят спасибо за оптимизацию кода!
Но логики это не меняет никак!
оператор выбора case of в одной функции работает с циклом while
а с циклом for нет хотя переменной vib присваивается значение индекса радиогрупп

Добавлено через 8 минут
А логическую ошибку я сам нашел!
n:=trunc((a-b)/h);
надо было n:=trunc((b-a)/h);
т к n было меньше 0 то и цикл for был от 1 до -89
Искренне спасибо за оптимизацию кода!
0
cfbogd
25.02.2017, 23:02
  #19

Не по теме:

Цитата Сообщение от valera7794647 Посмотреть сообщение
Но логики это не меняет никак!
потому что её у тебя нет

0
Vaver
0 / 0 / 0
Регистрация: 23.04.2015
Сообщений: 98
25.02.2017, 23:28  [ТС] 20
Не по теме:

Цитата Сообщение от valera7794647 Посмотреть сообщение
Но логики это не меняет никак!
потому что её у тебя нет

Добиться результата можно разными путями!
Кто-то более длинным способом кто-то короче!
У меня пока опыта нет !
Поэтому решаю задачи по мере своей компетенции!
Возможно потом немного упростил бы синтаксис!
Набрасываться что логики нет не стоит))
Не было бы логики и это бы не написал!
Для начинающего думаю не так критично.
Еще раз спасибо за упрощение синтаксиса!
Ответ на свой вопрос нашел сам!
Всем спасибо!
0
25.02.2017, 23:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2017, 23:28

Составить программу, использующую оператор множественного выбора
1. Используя оператор множественного выбора, составить программу, позволяющую...

Оператор множественного выбора, вывод значения в Memo
var c:string;i:integer; begin i:=strtoint(Edit2.Text); case i of ...

Условные операторы ,Оператор выбора ,Операторы цикла
Helpp =)) 1) На числовой оси расположены три точки: A, B, C. Определить,...


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

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

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