Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Delphi и Lazarus


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Boriss
Статус: Академик
Рейтинг: 2294
∙ повысить рейтинг »
star9491
Статус: Практикант
Рейтинг: 1865
∙ повысить рейтинг »
Евгений/Genia007/
Статус: Бакалавр
Рейтинг: 959
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Delphi и Lazarus

Номер выпуска:1530
Дата выхода:15.05.2010, 22:00
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:359 / 189
Вопросов / ответов:1 / 1

Вопрос № 178328: Помогите решить в делфи задачу Используя создание внешней библиотеки . Дан целочисленный вектор размера n. Найти среднее арифметическое. Для решения задачи создать и использовать модуль, содержащий следующие подпрограммы: процедуру...



Вопрос № 178328:

Помогите решить в делфи задачу Используя создание внешней библиотеки . Дан целочисленный вектор размера n. Найти среднее арифметическое. Для решения задачи создать и использовать модуль, содержащий следующие подпрограммы: процедуру заполнения одномерного массива с клавиатуры, функцию для нахождения среднего арифметического значения.

Отправлен: 10.05.2010, 21:49
Вопрос задал: Яруллина Ирина Булатовна, Посетитель
Всего ответов: 1
Страница вопроса »


Отвечает Евгений/Genia007/, Бакалавр :
Здравствуйте, Яруллина Ирина Булатовна.
Могу предложить такой вариант решения Вашей задачи:
модуль библиотеки
Код:
library mymas;

uses
SysUtils,
Dialogs,
Classes,
StdCtrls;

{$R *.res}

var
a: array of integer;

function avg(n: integer): real; stdcall; export; // Функция вычисления средне арифметического
var
i: integer;
j: real;
begin
j:= 0;
for i:= 0 to n - 1 do
j:= j + a[i]; // Вычисляем общую сумму массива
j:= j / n; // Вычисляем среднее арифметическое
result:= j;
end;

procedure vvod(n, y: integer; Memo: TMemo); stdcall; export; // Процедура ввода массива
var
i: integer;
begin
Setlength(a, n); // Установили размер масс ива
if n <> y then // Размер массива и количество элементов должны совпадать
begin
ShowMessage('Размерность массива и его количество не совпадают!');
exit;
end;
for I:= 0 to n - 1 do
a[i]:= StrToInt(Memo.Lines.Strings[i]); // Запоминаем массив
end;

begin
end.
модуль программы
Код:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
{Процедура из библиотеки ввода массива}
procedure vvod(n, y: integer; Memo: TMemo); stdcall; external 'mymas.dll' index 1;
{Функция расчёта среднего арифметического}
function avg(n: integer): real; stdcall; external 'mymas.dll' index 2;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
n: integer;
begin
try
n:= StrToInt(Edit1.Text); // Запомнили размерность массива
if n = 0 then // Размер не может быть 0
begin
ShowMessage('Ошибка ввода размерности массива!');
Exit;
end;
Except
ShowMessage('Ошибка ввода размерности массива!');
Exit;
end;
vvod(n, Memo1.Lines.Count, Memo1); // Ввели массив
Edit2.Text:= FloatToStr(avg(n)); // Расчитали среднее ариф метическое
end;

end.
Прикрепленный файл: загрузить »

-----
Помогли тебе, помоги и ты.

Ответ отправил: Евгений/Genia007/, Бакалавр
Ответ отправлен: 13.05.2010, 20:58
Номер ответа: 261374

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 261374 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.14 от 03.03.2010

    В избранное