Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2010, 22:21   #1
avengelus
Новичок
Джуниор
 
Регистрация: 22.10.2010
Сообщений: 3
Сообщение обработка одномерного массива

Подсчитать среднее значение элементов заданого массива.
Преобразовать исходный массив, вычитая из каждого элемента среднее значение.
avengelus вне форума Ответить с цитированием
Старый 22.10.2010, 22:27   #2
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

Код:
for i:=1 to n do
  Sum:=Sum + A[i];
S:=Sum/n;  //среднее значение
for i:=1 to n do
  A[i]:=A[i]-S;
вот и все.
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 22.10.2010, 22:34   #3
avengelus
Новичок
Джуниор
 
Регистрация: 22.10.2010
Сообщений: 3
По умолчанию

Спасибо большое!
avengelus вне форума Ответить с цитированием
Старый 22.10.2010, 23:05   #4
avengelus
Новичок
Джуниор
 
Регистрация: 22.10.2010
Сообщений: 3
По умолчанию

Код:
unit Unit5;

interface

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

type
  TForm5 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    StringGrid1: TStringGrid;
    StaticText1: TStaticText;
    StaticText2: TStaticText;
    Edit1: TEdit;
    StringGrid2: TStringGrid;
    Label4: TLabel;
    Edit2: TEdit;
    Button1: TButton;
    procedure Edit1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form5: TForm5;

implementation

{$R *.dfm}

var x,y:array of integer ;
n: integer ;
procedure TForm5.Edit1Change(Sender: TObject);
var i:integer ;
begin
n:= Strtoint(edit1.Text) ;
stringgrid1.ColCount:=n+1 ;
for i:=0 to n do stringgrid1.Cells[i,0]:=inttostr(i) ;
Setlength(x,n) ;
end;

procedure TForm5.Button1Click(Sender: TObject);

var i,S,Sr : integer ;
begin
for i:=1 to n do x[i]:=Strtoint(stringgrid1.Cells[i,0]) ;
  S:=S + X[i];
Sr:=S/n;
for i:=1 to n do
  Y[i]:=X[i]-Sr;
 for i:=1 to n do stringgrid2.Cells[i,1]:=inttostr(y[i])
  end;

end.
Пишет ошибку [Error] Unit5.pas(54): Incompatible types: 'Integer' and 'Extended'
указывает на строчку Sr:=S/n;
что нужно сделать?
avengelus вне форума Ответить с цитированием
Старый 23.10.2010, 04:55   #5
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Sr у тебя типа integer - целочисленный тип, а ты пытаешься запомнить в переменную этого типа число с "плавающей" запятой
Компилятор тебе и пишет - Incompatible types: 'Integer' and 'Extended' ,
т.е. несовместимые типы: целочисленный и с плавающей запятой.
Опиши Sr как extended
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Старый 23.10.2010, 08:38   #6
Weyner
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 25
По умолчанию

Код:
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
stringgrid1.RowCount:=spinedit1.value;
stringgrid1.colCount:=spinedit1.value;
stringgrid2.colCount:=spinedit1.value;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
A: array [1..10,1..10] of integer;
B: array [1..10] of double;
i,j: integer;
temp: double;
begin
{çïîëíåíèå ìàòðèöû}
for i := 1 to stringgrid1.rowcount do
 for j:= 1 to stringgrid1.colcount do
  a[i,j]:= strtoint(stringgrid1.Cells[j-1,i-1]);
    {Ïåðåáî âñåõ ñòðîê}
 for i:= 1  to stringgrid1.rowcount do
 begin
 {ïîäñ÷åò ñóììû ýëåìåíòîâ i-îé ñòðîêè}
  b[i]:=0;
  for j:=1 to stringgrid1.colcount do
   b[i]:=b[i]+a[i,j];
   {ðàñ÷åò ñðåäíåãî i-îé ñòðîêè }
   b[i]:= b[i]/stringgrid1.colcount;
   end;
   {Ñîðòèðîâêà ìàññèâà}
   i:=1;
   while i<stringgrid1.colCount do
    if b[i]>b[i+1] then
    begin
    temp:= b[i];
    b[i]:= b[i+1];
    b[i+1]:= temp;
    if i>1 then
    dec(i)
    else
    inc(i);
    end
    else
    inc(i);
    {Âûâîä ìàññèâà}
    for i:= 1 to stringgrid2.colcount do
    stringgrid2.cells[i-1,0]:= floattostr(b[i]);
Weyner вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# - из одномерного массива -> двумерный Vovan_Super Общие вопросы .NET 2 06.07.2010 19:27
Обработка одномерного массива. Gangstervic Помощь студентам 0 16.12.2009 19:21
Turbo Pascal. Формирование и обработка одномерного массива мирЗвонка Помощь студентам 2 04.11.2009 12:17
Сортировка одномерного массива Гамбит Помощь студентам 2 02.11.2009 00:28