![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Анна |
![]() ![]()
Сообщение
#1
|
![]() Бывалая ![]() ![]() ![]() Группа: Пользователи Сообщений: 290 Пол: Женский Реальное имя: Анютка Репутация: ![]() ![]() ![]() |
Люди, помогите пожалйуйста мне.
Прочитала это: http://forum.pascalnet.ru/index.php?showt...0&st=0&p=26901& и это: http://forum.pascalnet.ru/index.php?showtopic=2706 Очень плохо все поняла ![]() Есть задача: Все элементы в массиве С [1..30] меньше среднеарифметического положительных чисел заменить на максимальное значение массива. Организовать это всё с помощью функции или процедуры, находящейся в модуле. Использовать линамические переменные ![]() Что-то написала, но имхо чушь unit MyMod;
interface
procedure qwe (c: array [1..30] of integer);
var
i,temp: integer;
for i:=1 to 30 do
if c[i] > 0 then temp:=temp+c[i]; {среднеарифметич. .. как дальше?}
=-=-=-=-=-=-=-=-=-=-=-=-=-=
if c[i] > temp then c[i] := max
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
![]() Модуль: unit module;
interface
type
ParrType = record
arr: ^arrType;
size: integer;
end;
arrType = array[1 .. 65520 div sizeof(integer)] of integer;
procedure getArray(var p: ParrType; const size: integer);
procedure freeArray(var p: ParrType);
procedure do_it(p: ParrType);
implementation
procedure getArray(var p: ParrType; const size: integer);
begin
getmem(p.arr, size * sizeof(integer));
p.size := size;
end;
procedure freeArray(var p: ParrType);
begin
freemem(p.arr, p.size * sizeof(integer));
end;
procedure do_it(p: ParrType);
var
s: real;
i, max: integer;
begin
s := 0; max := -maxint;
for i := 1 to p.size do begin
s := s + p.arr^[i];
if max < p.arr^[i] then max := p.arr^[i];
end;
s := s / p.size;
for i := 1 to p.size do
if p.arr^[i] < s then p.arr^[i] := max;
end;
end.
Основная программа: uses module;
var
x: ParrType;
i: integer;
begin
getArray(x, 30); { <--- Создаем динамический массив }
for i := 1 to 30 do { <--- Ну, или заполнить массив по-другому }
x.arr^[i] := i;
for i := 1 to 30 do { <--- Печатаем массив ДО изменения }
write(x.arr^[i]:4);
writeln;
do_it(x);
for i := 1 to 30 do { <--- Печатаем массив ПОСЛЕ изменения }
write(x.arr^[i]:4);
writeln;
freeArray(x); { <--- Удаляем динамический массив }
end.
|
Анна |
![]()
Сообщение
#3
|
![]() Бывалая ![]() ![]() ![]() Группа: Пользователи Сообщений: 290 Пол: Женский Реальное имя: Анютка Репутация: ![]() ![]() ![]() |
Модуль не запускается
![]() Ругается на "arr: ^arrType;" И что означает "1 .. 65520 div sizeof(integer)" ![]() |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Странно... FPC сожрал такое определение... Попробуй так:
type
arrType = array[1 .. 65520 div sizeof(integer)] of integer;
ParrType = record
arr: ^arrType;
size: integer;
end;
Цитата что означает "1 .. 65520 div sizeof(integer)" Означает, что используя этот тип, можно будет индексировать максимально возможное количество элементов: всего для массива доступно 65520 байт, если учесть что размер каждого элемента массива не равен 1 (у Integer, например, размер = 2 байта), то делим максимально доступный размер на размер элемента и не нужно отключать проверку индексов, она может пригодиться... |
Анна |
![]()
Сообщение
#5
|
![]() Бывалая ![]() ![]() ![]() Группа: Пользователи Сообщений: 290 Пол: Женский Реальное имя: Анютка Репутация: ![]() ![]() ![]() |
Не хочу покаказаться наглой .. но нельзя ли упростить модуль ?
![]() |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
![]() Упрощай, если найдешь, что... |
Анна |
![]()
Сообщение
#7
|
![]() Бывалая ![]() ![]() ![]() Группа: Пользователи Сообщений: 290 Пол: Женский Реальное имя: Анютка Репутация: ![]() ![]() ![]() |
Можно, к примеру, обойтись без записей?
p.size и т.п. Просто я просматриваю программу и офигеваю ![]() |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Уберутся записи - придется в каждую процедуру передавать не 1 а 2 параметра (размер массива добавится), тогда точно где-нибудь можно ошибиться... Так что пользуйся, как есть...
|
klem4 |
![]()
Сообщение
#9
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Тотже самое без записи .. если тебе так проще.
unit module;
interface
type
ParrType = ^arrType;
arrType = array[1 .. 65520 div sizeof(integer)] of integer;
procedure getArray(var p: ParrType; const size: integer);
procedure freeArray(var p: ParrType; const size : integer);
procedure do_it(p: ParrType; const size : integer);
implementation
procedure getArray(var p: ParrType; const size: integer);
begin
getmem(p, size * sizeof(integer));
end;
procedure freeArray(var p: ParrType; const size : integer);
begin
freemem(p, size * sizeof(integer));
end;
procedure do_it(p: ParrType; const size : integer);
var
s: real;
i, max: integer;
begin
s := 0; max := -maxint;
for i := 1 to size do begin
s := s + p^[i];
if max < p^[i] then max := p^[i];
end;
s := s / size;
for i := 1 to size do
if p^[i] < s then p^[i] := max;
end;
end.
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Анна |
![]()
Сообщение
#10
|
![]() Бывалая ![]() ![]() ![]() Группа: Пользователи Сообщений: 290 Пол: Женский Реальное имя: Анютка Репутация: ![]() ![]() ![]() |
Вот модуль ...
unit mass;
interface
type
b=array [1..20] of integer;
A=^b;
int=^integer;
rl = ^real;
procedure mas (var m1,m2:A; ch:rl);
implementation
procedure mas (var m1,m2:A; ch:rl);
var
j,i: integer;
k, temp:^integer;
begin
new (temp);
new (k);
new(m1);
new (m2);
new (ch);
for i:=1 to 20 do begin
if m1^[i]>0 then temp^:=temp^+m1^[i];
k^:=k^+1;
end;
ch^ := temp^/k^;
j:=1;
for i:=1 to 20 do begin
if m1^[i]<0 then begin
m2^[j] := m1^[i]; inc(j); end; end;
dispose (temp);
dispose (k);
dispose (m1);
dispose (m2);
dispose (ch);
end;
end.
Мне этот модуль нужно переделать под свою задачц ... условие выше .. А то в ваших решениях я заплюхалась ![]() Алгоритм составила ![]() 1) Находим макс. значение 2) Находим среднеарифмитическое среди положит. чисел .. 2) Заменяем числа меньшие средеарифмитичес. полож. чисел на макс. значение Дальше встала .. не могу ![]() ![]() ![]() |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Ну, если ты считаешь, что тебе легче разобраться с постоянным разыменованием переменных, чем с одной единственной записью, содержащей два (!!!) поля, и делающей работу СОВЕРШЕННО прозрачной, то разбирайся... Для меня, например, этот код - нечитаемый, и нет никакого желания вникать в него ...
|
![]() ![]() |
![]() |
Текстовая версия | 10.08.2025 2:22 |