![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
у меня должен быть одномерный массив, выводящее произведение четных элементов массива, но она показывает другие цифры
[code][/спам Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMyForm = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MyForm: TMyForm;
implementation
{$R *.dfm}
procedure TMyForm.Button1Click(Sender: TObject);
var a: array [1..5] of integer ;
var i, p,n, k:integer;
begin
for i:=1 to 5 do
begin
a :=random (11)+1;
end;
p:=1;
k:=5 div 2;
for p:=1 to k do
n:= p* a[i*2];
if p<>0 then
Edit1.Text := FloatToStr(n);
end;
procedure TMyForm.Button2Click(Sender: TObject);
begin
self.Close;
end;
end.Последний раз редактировалось M.A.D.M.A.N., 28.05.2013 в 08:47. |
|
#2
|
||||
|
||||
|
Вообще работать не должно
Заполнение массива Код:
for i := 1 to 5 do a[i]:= random (11) + 1; Код:
n:= p* a[i*2]; |
|
#3
|
|||
|
|||
|
в ответе выходят цифры 17564312 такого плана, а на самом деле же должен быть: 2*4*6*8=3840, вообщем перестановка не помогает
|
|
#4
|
|||
|
|||
|
вот исходник
|
|
#5
|
|||
|
|||
|
Не программа, а бред!
1) Не верный синтаксис for i:=1 to 5 do begin a :=random (11)+1; end; нужно: for i:=1 to 5 do begin a[i] :=random (11)+1; end; При таком коде а может принимать как четные значения так и не четные!! Для чего Вы пишите Рандом +1 не ясно. 2) k:=5 div 2; зачем это выражение??? Оно всегда равно 2. Проще тогда написать k:=2. 3) Таким образом цикл выполниться всего два раза для p:=1 и для p:=2 for p:=1 to k do n:= p* a[i*2]; n примет значения: n:=1*(любое число до 11 плюс 1) n:=2*(любое число до 11 плюс 1) Ну например может получится n:=5 b n:=24 4) Вывода на экран вынесен за цикл!! if p<>0 then Edit1.Text := FloatToStr(n); Данные строки, в виду того что вынесены за цикл, выведут всего одно лишь значение n, а именно последнее посчитаное. Для моих примеров n:=24. 5) if p<>0 then Что это вообще за строка?? p всегда больше нуля, значит данное вырожение автоматический всегда ТРУ. Его вообще можно выкинуть. Прежде чем что-то писать необходимо самому разобраться, что должна делать программа. тогда и написание станет простым. |