Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Incompatible types: array and integer


Автор: Fantik1990 5.11.2010, 06:15
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  a:array[1..n] of real;
  b:array[1..n] of real;
  c:array[1..n] of real;
  i:integer;
  s1,s2,sb,sg,ai:real;
begin
 //------------------------------------------------------------
 for i:=1 to n do
   a[i]:=strtofloat(memo1.lines[i-1]);  //ввод данных в массив
   b[i]:=strtofloat(memo2.lines[i-1]);
   c[i]:=strtofloat(memo3.lines[i-1]);
 //------------------------------------------------------------
  a[i]:=random(30); //генератор случайных чисел
  b[i]:=random(30);
  c[i]:=random(30);
 //-------------------------среднее ариф b
 s1:=0;
 for i:=1 to n do
 begin if i=1 then
 b:=1 else
 b:=(i-1)*i;
 s1:=s1+b;
 sb:=s1/n;
 end;
 //-------------------------среднее геометрич. c
 s2:=0;
 for i:=1 to n do
 begin if i=1 then
 c:=1 else
 c:=(i-1)*i;
 s2:=s2*c;
 sg:=Power(s2,1/n);
 end;
 //--------------------кол-во а
 ai:=0;
 for i=1 to n do
 begin if sb<=a<=sg
 then
 ai:=ai+1;
 end;


Добавлено @ 06:16
что тут не так,подскажите!

Автор: ~FoX~ 5.11.2010, 09:17
Цитата(Fantik1990 @  5.11.2010,  07:15 Найти цитируемый пост)
что тут не так,подскажите! 

Собственно все не так ))))

Цитата(Fantik1990 @  5.11.2010,  07:15 Найти цитируемый пост)
 b:=1 else
 b:=(i-1)*i;

Код

 b[i]:=1 else
 b[i]:=(i-1)*i;

Цитата(Fantik1990 @  5.11.2010,  07:15 Найти цитируемый пост)
 c:=1 else
 c:=(i-1)*i;

Код

c[i]:=1 else
c[i]:=(i-1)*i;


Цитата(Fantik1990 @  5.11.2010,  07:15 Найти цитируемый пост)
ai:=0;

Цитата(Fantik1990 @  5.11.2010,  07:15 Найти цитируемый пост)
 ai:=ai+1;


Код

a[i]:=0;
.......
a[i]i:=a[i]+1;


Автор: superVad 5.11.2010, 14:28
аааа - какая чушь

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  a:array[1..n] of real;
  b:array[1..n] of real;
  c:array[1..n] of real;
  i:integer;
  s1,s2,sb,sg,ai:real;
begin
  //------------------------------------------------------------
  for i:=1 to n do
    a[i]:=strtofloat(memo1.lines[i-1]);  //ввод данных в массив
  b[i]:=strtofloat(memo2.lines[i-1]);
  c[i]:=strtofloat(memo3.lines[i-1]);
 //------------------------------------------------------------
  a[i]:=random(30); //генератор случайных чисел
  b[i]:=random(30);
  c[i]:=random(30);
 //-------------------------среднее ариф b
  s1:=0;
  for i:=1 to n do
  begin
    if i=1
    then b:=1
    else b:=(i-1)*i;
    s1:=s1+b;
    sb:=s1/n;
  end;
 //-------------------------среднее геометрич. c
  s2:=0;
  for i:=1 to n do
  begin
    if i=1
    then c:=1
    else c:=(i-1)*i;
    s2:=s2*c;
    sg:=Power(s2,1/n);
  end;
 //--------------------кол-во а
  ai:=0;
  for i=1 to n do
  begin
    if sb<=a<=sg
    then ai:=ai+1;
  end;



Что бросается в глаза - непонятно, что это за такие - ввод данных в массив и генератор случайных чисел. Ну и энда в конце нету  smile .

Автор: Fantik1990 5.11.2010, 15:29
~FoX~ молодцом. сразу понял что мне надо.
только вот на строчке 

 ai:=0;
  for i=1 to n do
  begin
    if sb<=a<=sg
    then ai:=ai+1;

встает курсор после to и выдает ошибку как было до этого.
в этой строчке мне нужно найти количество значений A, которые отвечают требованию sb<=ai<=sg
где sb-среднее арифмитическое, а sg-среднее геометрическое.
я исправил эту строчку как ты писал,но он все равно жалуется
что посоветуешь?

Автор: Fantik1990 5.11.2010, 15:45
 s3:=0;
 for i=1 to n do
 begin if sb<=a[i]<=sg
 then
 s3:=s3+1;
 end;

можно сделать и как предыдущие,но все равно не получается именно этот отрываок

Автор: ~FoX~ 5.11.2010, 15:48
Fantik1990, for i :=
Блин, кароче на:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  a:array[1..n] of real;
  b:array[1..n] of real;
  c:array[1..n] of real;
  i:integer;
  s1,s2,sb,sg,ai:real;
begin
 //------------------------------------------------------------
 for i:=1 to n do
   a[i]:=strtofloat(memo1.lines[i-1]);  //ввод данных в массив
   b[i]:=strtofloat(memo2.lines[i-1]);
   c[i]:=strtofloat(memo3.lines[i-1]);
 //------------------------------------------------------------
  a[i]:=random(30); //генератор случайных чисел
  b[i]:=random(30);
  c[i]:=random(30);
 //-------------------------среднее ариф b
 s1:=0;
 for i:=1 to n do
 begin if i=1 then
 b[i]:=1 else
 b[i]:=(i-1)*i;
 s1:=s1+b[i];
 sb:=s1/n;
 end;
 //-------------------------среднее геометрич. c
 s2:=0;
 for i:=1 to n do
 begin if i=1 then
 c[i]:=1 else
 c[i]:=(i-1)*i;
 s2:=s2*c[i];
 sg:=Power(s2,1/n);
 end;
 //--------------------кол-во а
 a[i]:=0;
 for i:=1 to n do begin
 if (sb<=a[i]) and (a[i]<=sg) then
 a[i]:=a[i]+1;
 end;
end;



Хотя имхо, код реально странноватый )))

Автор: superVad 5.11.2010, 16:02
~FoX~,

не

Код

for i:=1 to n do
   a[i]:=strtofloat(memo1.lines[i-1]);  //ввод данных в массив
   b[i]:=strtofloat(memo2.lines[i-1]);
   c[i]:=strtofloat(memo3.lines[i-1]);


а

Код

for i:=1 to n do
  a[i]:=strtofloat(memo1.lines[i-1]);  //ввод данных в массив
b[i]:=strtofloat(memo2.lines[i-1]);
c[i]:=strtofloat(memo3.lines[i-1]);


Это я к тому, что что то явно не так.

Автор: Fantik1990 5.11.2010, 16:10
Блин.Программа до запуска ни на что не жалуется,но как запустишь толи виснет толи не хочет делать все что прописано.может кто посмотрит,запустит ее у себя,посмотрит?((((((((((((((

Добавлено через 4 минуты и 19 секунд
~Fox~ то что ты прописал ошибки,они все исправились....но сама прога когда запускаешь не подает признаков жизни

Автор: ~FoX~ 5.11.2010, 17:35
Fantik1990, Судя по всему ты просто скопипастил код, а событие на кнопку не объявил....В дизайн тайме тыкни два раза на батон... 
И объясни мне логику вот этого куска кода
Код

   a[i]:=strtofloat(memo1.lines[i-1]);  //ввод данных в массив
   b[i]:=strtofloat(memo2.lines[i-1]);
   c[i]:=strtofloat(memo3.lines[i-1]);
 //------------------------------------------------------------
  a[i]:=random(30); //генератор случайных чисел
  b[i]:=random(30);
  c[i]:=random(30);

Зачем введенные с мемо данные заменять рандомными? или на оборот ))))

Автор: Fantik1990 5.11.2010, 17:58
если числа не ввидет пользователь но задействуется генератор.так нельзя?

Добавлено через 10 минут и 6 секунд
random я убрал.Это реально бред.не подумал.
а как ты задал значения в memo стандартом?когда загружаешь там уже проставлены значения.я вот искал,искал,не смог найти где их прописать по умолчанию можно.

Добавлено через 14 минут и 47 секунд
при изменении значений в memo результаты те же, ведь не должно быть так наверное.

Автор: ~FoX~ 5.11.2010, 18:14
 smile  smile  smile  Свойство Items у  Мемо

Автор: Fantik1990 5.11.2010, 18:27
а почему когда значения меняешь,результаты те же?

Автор: superVad 5.11.2010, 18:42
Fantik1990, разбей задачу на простые подзадачи и решай их. А то какая то ерунда получается.
В Memo смотри свойство Lines, это в самом коде видно кстати.

Ладно толстый намек еще:

вместо:

Код

for i:=1 to n do
   a[i]:=strtofloat(memo1.lines[i-1]);  //ввод данных в массив
   b[i]:=strtofloat(memo2.lines[i-1]);
   c[i]:=strtofloat(memo3.lines[i-1]);


наверное надо:

Код

for i:=1 to n do
begin
  a[i]:=strtofloat(memo1.lines[i-1]);  //ввод данных в массив
  b[i]:=strtofloat(memo2.lines[i-1]);
  c[i]:=strtofloat(memo3.lines[i-1]);
end;

Автор: ~FoX~ 5.11.2010, 19:14
Цитата(Fantik1990 @  5.11.2010,  19:27 Найти цитируемый пост)
а почему когда значения меняешь,результаты те же?

Потому что твои расчеты средних сначала заполняют УЖЕ ЗАПОЛНЕННЫЙ массив, а потом производят действия ))))) smile 
Например
Код

 for i:=1 to n do begin 
 if i=1 then b[i]:=1  //Вот это всё нафиг убрать надо
 else b[i]:=(i-1)*i;  //Вот это всё нафиг убрать надо
 s1:=s1+b[i];
 sb:=s1/n;
 end;

Соответственно и с геометрической прогрессией тоже самое 

Может ты просто опишешь задачу?  smile 

Автор: Fantik1990 5.11.2010, 20:42
Разработать алгоритм и программу решения задачи обработки одномерного массива (массивов). Количество элементов массива (массивов) является входным параметром и вводится в программе. При работе программы исходные массивы  не должны быть изменены.
Программа должна предлагать пользователю различные варианты задания значений элементов исходного массива (массивов):
1) Элементы исходного массива (массивов) вводятся пользователем.
2) Элементы исходного массива (массивов) вычисляются случайно.
3) Элементы исходного массива (массивов) задаются как предусмотренный в программе набор констант.
Программа должна быть представлена в виде консольного приложения и приложения Windows. 

Найти количество элементов массива a=(a1, a2,…,an), значения которых лежат между средним арифметическим элементов массива 
(b=b1, b2,…,bn) и средним геометрическим элементов массива c=(c1, c2,…,cn).

вот вся задача.

Автор: Fantik1990 5.11.2010, 22:48
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,Math;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Label1: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Memo2: TMemo;
    Label5: TLabel;
    Memo3: TMemo;
    Label2: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    procedure Button1Click(Sender: TObject);
  
  private
    { Private declarations }
  public
    { Public declarations }
  end;
const n=8;
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
a:array[1..n] of real;
b:array[1..n] of real;
c:array[1..n] of real;
i,j,k:integer;
s1,sg,s2,sb,s3:real;
//---------------
begin
for i:=1 to n do
c[i]:=StrToFloat(memo3.lines[i-1]);
s1:=1;
for i:=1 to n do
begin
s1:=s1*c[i];
sg:=Power(s1,1/n);
//----------------------
begin
for j:=1 to n do
b[j]:=StrToFloat(memo2.lines[j-1]);
s2:=0;
for j:=1 to n do
begin
s2:=s2+b[j];
sb:=s2/n;
//------------------------
begin
for k:=1 to n do
a[k]:=StrToFloat(memo1.lines[k-1]);
s3:=0;
for k:=1 to n do
begin
if (sg<=a[k]) and (a[k]<=sb) then s3:=s3+1;
end;
end;
end;
end;
end;
  label2.Caption:=FloatToStr(sb);
  label7.Caption:=FloatToStr(sg);
  label9.Caption:=FloatToStr(s3);
end;
end.


Добавлено @ 22:48
Задача работает.это готовый вариант

Автор: bems 7.11.2010, 16:25
Fantik1990, используй подсветку кода

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)