Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 5

Функция в отдельном модуле и динамический массив

22.05.2013, 21:29. Показов 1462. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Нужна помощь с задачей:

Программа должна считать сумму элементов динамического массива, стоящих на нечетных местах.
Массив заполнятся случайными числами из диапазона от 1 до 10.


Процедуру заполнения массива и функцию подсчета суммы надо вынести в отдельный модуль. Первое у меня сделать получилось, а вот задать функцию, считающую сумму, и записать её во второй модуль не выходит.

Мой код:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//Unit1//
 
procedure TForm1.Button1Click(Sender: TObject);
var x: pInteger;
    i, k, l, n, sum:integer;
begin
   k:=0;
   sum:=0;
   n:=StrToInt(Edit1.text);
   l:=StrToInt(Edit2.text);
   getmem (x, n*sizeof(integer));
   for i:=0 to n-1 do
   begin
   inc(k);
   fill(x,n);
   Memo1.Lines.Add(IntToStr(k)+')'+' '+IntToStr(x[i]));
   if x[i]>l then                                //та часть,
   if i mod 2=0 then sum:=sum+x[i];    //которую тоже надо вынести в Unit2
   end;
   Memo1.Lines.Add('Сумма:'+' '+IntToStr(sum));
   freemem (x, n*sizeof(integer));
end;
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Unit2//
type
    pInteger=^integer;
procedure fill(x:pInteger; n:integer);
implementation
procedure fill(x:pInteger; n:integer);
 
var
i:integer;
begin
  for i:=0 to n-1 do
  begin
    x[i]:=random(10)+1; //заполнение массива случайными числами
  end;
end;
end.
То, как я пытаюсь задать функцию во втором модуле:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
//Unit2//
function summa(x:pInteger; n,l:integer): integer;
var
i, sum: integer;
begin
sum:=0;
for i:=0 to n-1 do
begin
   if x[i]>l then                               
   if i mod 2=0 then summa:=sum+x[i];
end;
end.
Может кто-нибудь сказать, где у меня ошибки?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.05.2013, 21:29
Ответы с готовыми решениями:

Где в модуле объявить динамический массив?
Здравствуйте. Объясните пожалуйста, как объявляется массив в классе. Допустим мне нужен массив бесконечной геометрической прогрессии....

ISR в отдельном модуле
Как из main-программы перенести ISR в другой модуль (библиотеку)? AVR-GCC. Пока приходится костылем: в модуле void isr_foo(void) { ... } ...

Процедуры и функции в отдельном модуле.
При реализации использовать процедуры и функции, которые необходимо разместить в отдельном модуле, созданном самостоятельно. ___ ...

1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,901
Записей в блоге: 12
23.05.2013, 12:17
Напиши так:
Pascal
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
unit Unit2;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils;
 
type
    ArrInt = array of integer; // Это и есть динамический массив...
 
procedure fill(var x:ArrInt; n:integer);
function summa(x:ArrInt; l:integer): integer;
 
implementation
 
procedure fill(var x:ArrInt; n:integer);
var
  i:integer;
begin
  SetLength(x, n);
  for i:=0 to n-1 do
  begin
    x[i]:=random(10)+1; //заполнение массива случайными числами
  end;
end;
 
function summa(x:ArrInt; l:integer): integer;
var
  i, sum: integer;
begin
  Result:=0;
  for i:=0 to High(x) do
  begin
    if x[i]>l then // про это в условии ничего не было
    if i mod 2 <> 0 then Result:=Result + x[i]; // нечетные - это те, которые НЕ делятся на 2
  end;
end;
 
end.
, и используй:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button1Click(Sender: TObject);
var
  x: ArrInt;
  i, l, n:integer;
begin
  n:=StrToInt(Edit1.text);
  l:=StrToInt(Edit2.text);
 
  fill(x,n);
  for i := 0 to High(x) do
    Memo1.Lines.Add(Format('%d) %d', [i + 1, x[i]]));
 
  Memo1.Lines.Add('Сумма: ' + IntToStr(summa(x, l)));
  SetLength(x, 0); // Хотя этого можно и не делать
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.05.2013, 12:17
Помогаю со студенческими работами здесь

Выделить в подпрограмму и обособить в отдельном модуле
По программе: import math numbers = def func(x: int) -&gt; float: return math.exp(math.sin(x)) if x &gt; 3 else 0 ...

Процедуры и функции оформить в отдельном модуле
Процедуры и функции оформить в отдельном модуле, и создать программу, которая использует процедуры и функции из созданного модуля. ...

Оформить в виде макроса и разместить их в отдельном модуле
В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) обнулить все отрицательные элементы массива расположенные...

Сделать недоступной функцию в отдельном .cpp модуле
Допустим, я хочу добавить к проекту новый .cpp файл с содержанием некоторых функций. Проблема в том, что те функции, ради которых...

Как послать сообщение на форму из класса в отдельном модуле
Помогите с таким вопросом. Я создал класс TMyBox=class(TListBox) в отдельном модуле и прописал его в основном. В этом классе есть...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru