1 / 1 / 0
Регистрация: 07.02.2009
Сообщений: 20
1

Подпрограммы: разделить каждый из элементов массива на его максимальный отрицательный элемент

06.03.2009, 17:08. Показов 1531. Ответов 4
Метки нет (Все метки)

Ввести одномерные массивы X1(n1), X2(n2) и X3(n3) . Разделить каждый из элементов на максимальный элемент среди отрицательных элементов соответствующего массива. Массивы вывести на экран до и после преобразования (или сообщение о невозможности преобразования). (При решении реализовать процедуры ввода и вывода массивов: Vvod1m(A,N,Name) и Vivod1m(A,N,Name); функцию MaxOtr(A,N):<тип массива> – максимум среди отрицательных, которая равна нулю если отрицательных нет; и процедуру Delenie(A,N,Chislo) – деление элементов массива на значением Chislo)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.03.2009, 17:08
Ответы с готовыми решениями:

В каждой из трех матриц найти максимальный элемент и разделить на него каждый отрицательный элемент матрицы
Задание:В каждой из трех матриц Х, Y и Z найти максимальный элемент и разделить на него каждый...

Разделить каждый из элементов на максимальный элемент среди отрицательных элементов соответствующего массива
Ввести одномерные массивы X1n1 X2n2 X3n3. Разделить каждый из элементов на максимальный элемент...

Каждый элемент одномерного массива разделить на сумму всех его элементов
Найти сумму элементов одномерного массива размером 4. разделить каждый элемент исходного массива на...

Разделить каждый элемент массива на максимальный элемент (нормирование)
вот задача: Ввести вектор целых чисел. Выполнить нормирование элементов этого вектора, разделив...

4
Эксперт С++
3068 / 1406 / 425
Регистрация: 19.01.2009
Сообщений: 3,845
06.03.2009, 20:14 2
Вот
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
uses CRT;
 
const
  nmax = 10;
 
var
  i, n1, n2, n3      : integer;
  X1  : array[1..nmax] of integer;
  X2  : array[1..nmax] of integer;
  X3  : array[1..nmax] of integer;  
  
procedure Vvod1m(var a : array of integer; N: integer);
var  q : integer;
begin
  for q := 1 to N do
  begin
    Write('Введите ',q,'-й элемент массива : ');
    ReadLn(a[q]);
  end;
end;
 
procedure Vivod1m(a : array of integer; N: integer);
var  q : integer;
begin
  for q := 1 to N do
    Write(a[q]:3,' ');
  WriteLn;
end;
 
function MaxOtr(a : array of integer; N: integer) : integer;
var  q, max : integer;
begin
  Max := 0;
  for q := 1 to N do
    if a[q]<max then
      max := a[q];
 
  MaxOtr := max;
end;
 
procedure Delenie(var a : array of integer; N: integer; Chislo : integer);
var  q : integer;
begin
  if chislo = 0 then
  begin
    WriteLn('ОШИБКА : нельзя делить на ноль!');
    Exit;
  end;
 
  for q := 1 to N do
    a[q] := a[q] div chislo;
end;
 
begin
  ClrScr;
  
  {вводим массивы}
  Write('Введите количество элементов массива X1 (MAX=',nmax,') : '); ReadLn(n1); if n1>nmax then n1:=nmax;
  Vvod1m(x1,n1);
 
  Write('Введите количество элементов массива X2 (MAX=',nmax,') : '); ReadLn(n2); if n2>nmax then n2:=nmax;
  Vvod1m(x2,n2);
 
  Write('Введите количество элементов массива X3 (MAX=',nmax,') : '); ReadLn(n3); if n3>nmax then n3:=nmax;
  Vvod1m(x3,n3);
 
  ClrScr;
 
  WriteLn('МАССИВЫ ДО ПРЕОБРАЗОВАНИЯ');
  Vivod1m(x1,n1);
  Vivod1m(x2,n2);
  Vivod1m(x3,n3);
 
  Delenie(x1,n1, MaxOtr(x1,n1));
  Delenie(x2,n2, MaxOtr(x2,n2));
  Delenie(x3,n3, MaxOtr(x3,n3));
 
  WriteLn('МАССИВЫ ПОСЛЕ ПРЕОБРАЗОВАНИЯ');
  Vivod1m(x1,n1);
  Vivod1m(x2,n2);
  Vivod1m(x3,n3);
 
  WriteLn;
  WriteLn('Для продолжения нажмите любую клавишу...');
  ReadKey;
end.
0
Почетный модератор
64279 / 47578 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
06.03.2009, 20:34 3
Вот здесь неверно.
Max := 0;
for q := 1 to N do
if a[q]<max then
max := a[q];
Так мы получим не максимальное отрицательное, а минимальное.

Добавлено через 8 минут 4 секунды
Я тоже написал, мне кажется ближе к условию, хотя тоже не идеал, особенно с минимумом.
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
uses crt;
const nmax=100;
type Tmas=array[1..nmax]of real;
procedure Vvod1m(var a:Tmas;var n:byte;name:string);
var i:byte;
begin
write('Razmernost massiva ',name,': ');
readln(n);
for i:=1 to n do
a[i]:=20*random-9;
end;
procedure Vivod1m(var a:Tmas;n:byte;name:string);
var i:byte;
begin
writeln('Massiv ',name,':');
for i:=1 to n do
write(a[i]:6:2);
writeln;
end;
function MaxOtr(a:Tmas;n:byte):real;
var i,k:byte;
    max:real;
begin
max:=-100;k:=0;
for i:=1 to n do
if (a[i]<0)and(a[i]>max) then
   begin
     max:=a[i];
     k:=1;
   end;
if k=0 then max:=0;
MaxOtr:=max;
end;
procedure Delenie(var a:Tmas;n:byte;chislo:real);
var i:byte;
begin
for i:=1 to n do
a[i]:=a[i]/chislo;
end;
var x1,x2,x3:Tmas;
    n1,n2,n3:byte;
begin
clrscr;
randomize;
Vvod1m(x1,n1,'X1');
Vivod1m(x1,n1,'X1');
writeln('Max otr el=',MaxOtr(x1,n1):0:2);
if MaxOtr(x1,n1)=0 then writeln('Preobrazovanie nevozmozno!')
else
  begin
    Delenie(x1,n1,MaxOtr(x1,n1));
    Vivod1m(x1,n1,'X1');
  end;
Vvod1m(x2,n2,'X2');
Vivod1m(x2,n2,'X2');
writeln('Max otr el=',MaxOtr(x2,n2):0:2);
if MaxOtr(x2,n2)=0 then writeln('Preobrazovanie nevozmozno!')
else
  begin
    Delenie(x2,n2,MaxOtr(x2,n2));
    Vivod1m(x2,n1,'X2');
  end;
Vvod1m(x3,n3,'X3');
Vivod1m(x3,n3,'X3');
writeln('Max otr el=',MaxOtr(x3,n3):0:2);
if MaxOtr(x3,n3)=0 then writeln('Preobrazovanie nevozmozno!')
else
  begin
    Delenie(x3,n3,MaxOtr(x3,n3));
    Vivod1m(x3,n3,'X3');
  end;
readln
end.
1
Эксперт С++
3068 / 1406 / 425
Регистрация: 19.01.2009
Сообщений: 3,845
06.03.2009, 21:08 4
Цитата Сообщение от Puporev Посмотреть сообщение
Вот здесь неверно.
Так мы получим не максимальное отрицательное, а минимальное.
Согласен... опять меня подвело желание скорее кодить, не дочитав задание до конца

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function MaxOtr(a:Tmas;n:byte):real;
var i,k:byte;
    max:real;
begin
max:=-100;k:=0;
for i:=1 to n do
if (a[i]<0)and(a[i]>max) then
   begin
     max:=a[i];
     k:=1;
   end;
if k=0 then max:=0;
MaxOtr:=max;
end;
Хочу развить Вашу мысль: данный алгоритм не найдет максимальное минимальное число менее -100. Вот как я предлагаю выкрутится: присвоить переменной max наименьшее из вообще возможных значений для Real переменных. Так же если использовать по активнее использовать встроенную локальную переменную, обозначающую возврат из функции, то мы спокойно можем избавиться от переменной-флага k.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function MaxOtr(a:Tmas; n:byte):real;
var i   : byte;
    max : real;
begin
  max    := 2.9e-39; {применяем самое минимальное из возможных REAL}
  MaxOtr := 0;       {это если ни одного минимального мы не обнаружим}
 
  for i:=1 to n do
    if (a[i]<0) and (a[i]>max) then
    begin
      max    := a[i]; {запоминаем макс из мин}
      MaxOtr := max;  {когда функция завершится ее результатом будет}
                      { самое последнее значение}
    end;  
end;
0
Почетный модератор
64279 / 47578 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
06.03.2009, 21:11 5
max := 2.9e-39; {применяем самое минимальное из возможных REAL}
Полностью согласен. Сходу забыл как писать, а посмотреть лень было. С целыми всегда так пишу
max:=-maxint-1;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.03.2009, 21:11
Помогаю со студенческими работами здесь

Разделить каждый элемент массива на максимальный по модулю элемент массива
1. Разделить каждый элемент массива целых чисел, в котором не все элементы равны нулю, на самый по...

Каждый отрицательный элемент массива заменить на его абсолютную величину
Дан массив вещественных чисел. а) Каждый отрицательный элемент заменить на его абсолютную...

Каждый отрицательный элемент массива заменить на его абсолютную величину
Дан массив вещественных чисел x. Каждый отрицательный элемент заменить на его абсолютную величину.

Каждый отрицательный элемент динамического массива заменить на его абсолютную величину
Дан массив вещественных чисел. Вывести на экран новое состояние массива, в котором: а)...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru