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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2008, 22:09   #1
OLesechka300490
 
Регистрация: 08.06.2008
Сообщений: 5
По умолчанию создание встроенных функций

помогите пожалуйста решить задачу
Определите функцию, подсчитывающую сумму N первых элементов целочисленного массива А. N и массив А передать в качестве параметров.
проблема в том что программа не передает созданной функции массив a и количество чисел n

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    StringGrid1: TStringGrid;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  type mas=array of integer;

var
  Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
edit1.Text:='';
memo1.clear;
end;

function sum(a:mas;n:integer):integer;
var s,i:integer;
begin
for i:=1 to n do s:=s+a[i];
form1.memo1.lines.add(inttostr(s));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
a:array of integer;
n,m,i,d,s,j:integer;
c:extended;
begin
n:=strtoint(edit1.Text);
sum(n);
setlength(a,20);
i:=1;
randomize;
while i<>21 do begin
c:=random;
c:=c*100;
d:=round(c);
a[i]:=d;
stringgrid1.cells[0,i]:=inttostr(a[i]);
i:=i+1;
end;
sum(a);
end;
end.
Помним про тег <CODE>

Последний раз редактировалось merax; 09.06.2008 в 23:24.
OLesechka300490 вне форума Ответить с цитированием
Старый 09.06.2008, 22:47   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Ну естественно не вызывается - у тебя в функции описано 2 передаваемых параметра, а ты передаёшь по одному.
Ещё в Button1Click переменная a должна быть типа mas
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 09.06.2008, 22:54   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

1.
Цитата:
function sum(a:mas;n:integer):integer;
var s,i:integer;
begin
for i:=1 to n do s:=s+a[i];
Нужно
Код:
function sum(a:mas;n:integer):integer;
var s,i:integer;
begin
s:=0';
for i:=1 to n do 
s:=s+a[i];
2.
Цитата:
n:=strtoint(edit1.Text);
sum(n);
setlength(a,20);
Сначал sum была функция с двумя параметрами, а стала процедура с одним параметром.
puporev вне форума Ответить с цитированием
Старый 09.06.2008, 22:56   #4
OLesechka300490
 
Регистрация: 08.06.2008
Сообщений: 5
По умолчанию

да я уже изменила mas(a) на mas(a,n) и mas(n) убрала,но все равно выдает в строке mas(a,n) incompatible types. и тип переменной тоже в button изменила
OLesechka300490 вне форума Ответить с цитированием
Старый 09.06.2008, 23:03   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Если Вы глобально объявили тип mas:array of integer, то в программе нельзя писать a:array of integer, это будут разные типы, нужно писать a:mas;
puporev вне форума Ответить с цитированием
Старый 09.06.2008, 23:14   #6
OLesechka300490
 
Регистрация: 08.06.2008
Сообщений: 5
По умолчанию

я уже это изменила.но все равно выдает разные типы-проблема наверно в том,что в функцию надо передать одновременно массив и целое число,а я не знаю как это по-другому оформить((
OLesechka300490 вне форума Ответить с цитированием
Старый 10.06.2008, 12:54   #7
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Вот твой код. Тут надо учесть, что в динамическом массиве нумерация начинается с 0
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Memo1: TMemo;
    Button1: TButton;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  mas = array of integer;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function sum(a: mas; n: integer):integer;
var s,i:integer;
begin
s := 0;
for i := 0 to n-1 do s:=s+a[i];
sum := s;
end;

procedure TForm1.Button1Click(Sender: TObject);
var a: mas;
    n, i, d: integer;
    c: extended;
begin
n:=strtoint(edit1.Text);
setlength(a,n);
i:=0;
randomize;
while i<>n
  do begin
  c:=random;
  c:=c*100;
  d:=round(c);
  a[i]:=d;
  stringgrid1.cells[i,0]:=inttostr(a[i]);
  i:=i+1;
end;
form1.memo1.lines.add(inttostr(sum(a, n)));
end;

end.
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
шаблоны функций с++6.0 tanya Общие вопросы C/C++ 18 20.12.2008 19:39
Перегрузка функций... bondik Общие вопросы C/C++ 12 28.04.2008 01:07
Перехват API функций satana Win Api 4 21.08.2007 20:12