Как найти максимальное отрицательное число в массиве

Максимальный отрицательный элемент массива

Просмотров 7.4к. Обновлено 15 октября 2021

В массиве найти максимальный отрицательный элемент. Вывести на экран его значение и позицию в массиве.

Задача поиска максимального отрицательного элемента массива не такая простая, как может показаться на первый взгляд.

Введем переменную (условно назовем ее A) для хранения индекса максимального отрицательного элемента и присвоим ей значение, выходящее за пределы возможных индексов. Например, если индексация элементов начинается с нуля, то данной переменной можно присвоить значение -1 (можно присвоить 0, если индексация начинается с 1). Если в массиве вообще не будет найдено отрицательных элементов, то ее такое значение будет «сигнализировать» об этом.

Перебираем массив в цикле. Если очередной элемент меньше нуля и значение переменной A равно -1, то значит, это первый встретившийся отрицательный элемент. Запоминаем его индекс в переменной A. Если же очередной элемент отрицательный, но A уже не содержит -1, то сравниваем значение текущего элемента с тем, которое содержится по индексу, хранимому в A. Если текущий элемент больше, то записываем его индекс в A.

После завершения цикла проверяем, не равно ли значение A -1. Если не равно, то выводим индекс максимального отрицательного элемента массива и его значение.

Pascal

максимальное отрицательное число паскаль


const N = 15;
var
arr: array[1..N] of integer;
i: byte;
index: byte;
begin
randomize;
for i:=1 to N do begin
arr[i] := random(100) - 50;
write(arr[i],' ');
end;
writeln;

index := 0;
for i:=1 to N do begin
if (arr[i] < 0) and (index = 0) then
index := i
else
if (arr[i] < 0) and (arr[i] > arr[index]) then
index := i;
end;
if index <> 0 then
writeln(index,': ',arr[index]);
end.



-36 0 -35 -15 2 -43 -18 -4 -6 -24 -30 -28 47 18 41
8: -4

Язык Си


#include < stdio.h>
#define N 15

main() {
int arr[N],index, i;
srand(time(NULL));
for (i=0; i< N; i++) {
arr[i] = rand() % 100 - 50;
printf("%d ", arr[i]);
}
printf("n");

index = -1;
for (i=0; i< N; i++) {
if (arr[i] < 0 && index == -1)
index = i;
else
if (arr[i] < 0 && arr[i] > arr[index])
index = i;
}
printf("%d-й = %dn",index+1,arr[index]);
}



33 -21 24 -36 42 -11 -6 42 32 36 -1 43 -8 24 40
11-й = -1

Python

максимальное отрицательное число python (питон)


from random import random
N = 15
arr = []
for i in range(N):
arr.append(int(random() * 100) - 50)
print(arr)

i = 0
index = -1
while i < N:
if arr[i] < 0 and index == -1:
index = i
elif arr[i] < 0 and arr[i] > arr[index]:
index = i
i += 1

print(index+1,':', arr[index])



[-30, 42, -5, 31, -37, 25, -50, -44, 17, -34, -33, -21, 48, 45, 15]
3 : -5

КуМир


алг чет_нечет
нач
цел N = 15
целтаб arr[1:N]
цел i, index

нц для i от 1 до N
arr[i] := irnd(100) - 50
вывод arr[i], " "
кц
вывод нс

index := 0
нц для i от 1 до N
если arr[i] < 0 и index = 0 то
index := i
иначе
если arr[i] < 0 и arr[i] > arr[index] то
index := i
все
все
кц
вывод index, ": ", arr[index], нс
кон



19 32 36 -15 -22 3 48 -42 3 -2 -6 -48 33 27 6
10: -2

Basic-256


N = 15
dim arr(N)
for i=0 to N-1
arr[i] = int(rand() * 100) - 50
print arr[i] + " ";
next i
print

index = -1
for i=0 to N-1
if arr[i] < 0 then
if index = -1 then
index = i
else
if arr[i] > arr[index] then
index = i
endif
endif
endif
next i

print index+1;
print ": ";
print arr[index]



17 31 -21 24 -8 29 7 42 13 -15 -30 30 33 32 -7
15: -7

Проверка отрицательности элемента вынесена в отдельную ветку if. Иначе возникает ошибка, когда первый элемент неотрицательный, т.к. в Basic-256 при логическом операторе and происходит проверка второго условия даже если первое ложное. И получается, что переменная index отрицательна, что вызывает ошибку выхода за границы массива.

let test12 = [-1, -2, -3];

I’m stuck on this one. I used the below on positive integers but I’m not sure what to change for negatives.

let test = [1 , 2, 3];

var largest= 0;

for (i=0; i<=test.length;i++){
    if (test[i]>largest) {
        largest=test[i];
    }
}
console.log(largest);

asked Oct 25, 2018 at 23:37

K.Wagner's user avatar

3

largest negative integer in an array

Your question can have 3 interpretations:

  1. The negative integer that is farthest from 0
  2. The negative integer that is closest to 0
  3. The largest number in general (you might be struggling if an all negative integer array comes along, because you initialize min to 0)

Just to clarify, smallest is ‘farthest from zero’. But here’s all three ways 🙂 :

const ints = [-3, -2, -1, 0, 1, 2]

const negativeInts = ints.filter(i => i < 0)

const smallestNegative = Math.min(...negativeInts)
const largestNegative = Math.max(...negativeInts)
const largestOverall = Math.max(...ints)
console.log({smallestNegative, largestNegative, largestOverall}) // -3, -1, 2

Hope this helps. Cheers.

answered Oct 26, 2018 at 6:05

jonathangersam's user avatar

Just initialize largest to -Infinity rather than 0. You also need to iterate over the input array’s length, not 0 to largest:

let test12 = [-1, -2, -3];
var largest = -Infinity;
for (i = 0; i < test12.length; i++) {
  if (test12[i] > largest) {
    var largest = test12[i];
  }
}
console.log(largest);

Another method would be to spread into Math.max:

let test12 = [-1, -2, -3];
console.log(
  Math.max(...test12)
);

answered Oct 25, 2018 at 23:39

CertainPerformance's user avatar

6

Largest negative would be -244, so you can sort and get the first index.

let arr = [-1, -2, -244, -7],
    [largets] = arr.slice().sort((a, b) => a - b);
console.log(largets);

answered Oct 25, 2018 at 23:52

Ele's user avatar

EleEle

33.4k7 gold badges37 silver badges75 bronze badges

1

Try this..

var array = [-155,3, 6, 2, 56, 32, 5, -89, -32,115,-150];
array.sort(function(a, b) {
  return a - b;
});
console.log(array[0]);

answered Oct 26, 2018 at 6:13

Krupesh Kotecha's user avatar

Krupesh KotechaKrupesh Kotecha

2,3963 gold badges20 silver badges40 bronze badges

0

In case you want a programming solution ,like an edit that your program needs to perform even if an all negative array is given, then try this :

let test = [-10, -1, -2, -3];
// just Assign largest to the first element in test.
// the largest int might not be greater than zero,
// but will definitely be larger that any other element in the array. 
var largest= test[0];

for (i=0; i<=test.length;i++){
    if (test[i]>largest) {
        largest=test[i];
    }
}
console.log(largest);

answered Oct 26, 2018 at 6:53

BlueZa

0 / 0 / 0

Регистрация: 18.12.2015

Сообщений: 44

1

Нахождение максимального отрицательного элемента массива

23.12.2015, 16:55. Показов 9898. Ответов 10

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

нахождение максимального отрицательного элемента массива
минимально положительные я нашел , помогите максимально отрицательные , и подскажите куда вставить код)

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var a:array[-10..10] of integer;
  i,minplus,maxminus:integer;
begin
randomize;
  for i:=1 to 10 do begin
  a[i]:=random(30);
  Writeln (i,' ','Значение элемента массива - ',a[i]);
  end;
  minplus:=a[1];
  for i:=1 to 10 do begin 
  if a[i]<minplus then minplus:=a[i];
  end;
  writeln('minpluse=',minplus);
  readln;
end.



0



Azazel-San

Mental handicap

1245 / 623 / 171

Регистрация: 24.11.2015

Сообщений: 2,429

23.12.2015, 17:06

2

А как это максимально отрицательное? Может просто минимальное?
Ищется так же

Pascal
1
if a[i]<min then min:=a[i];



0



schoolteacher

39 / 39 / 49

Регистрация: 18.12.2015

Сообщений: 127

23.12.2015, 21:27

3

Может так?

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
program z1623223;
var a:array[-10..10] of integer;
  i,minplus,maxminus:integer;
begin
randomize;
  Writeln ('Массив:');
  for i:=-10 to 10 do begin
  a[i]:=random(30);
  Write (a[i],' ');
  end;
  writeln;
  minplus:=a[1];
  for i:=1 to 10 do begin
  if a[i]<minplus then minplus:=a[i];
  end;
  writeln('minpluse=',minplus);
  maxminus:=a[-1];
  for i:=-1 downto -10 do begin
  if a[i]>maxminus then maxminus:=a[i];
  end;
  writeln('maxminus=',maxminus);
end.

Добавлено через 7 минут
Если правильно понял.



0



Mental handicap

1245 / 623 / 171

Регистрация: 24.11.2015

Сообщений: 2,429

23.12.2015, 21:38

4

Программа будет работать неверно.. Какой смысл делать массив [-10..10]? Если вы и так заполняете массив с помощю команды рандом.. Причем только положительние, а смысл искать максимально отрицательное число с положительных чисел?



0



39 / 39 / 49

Регистрация: 18.12.2015

Сообщений: 127

23.12.2015, 22:26

5

Добавлено решение для элементов имеющих положительные значения и отрицательные индексы.



0



Azazel-San

Mental handicap

1245 / 623 / 171

Регистрация: 24.11.2015

Сообщений: 2,429

23.12.2015, 22:53

6

schoolteacher, при чём тут индексы?
Если все числа положительные? Максимальное отрицательное число.. Почему вы думаете тут есть слово отрицательное? Надо найти не просто максимальное число т.е. найбольшее..

Добавлено через 21 минуту
Ищет максимальное отрицательное, т.е. это то число которое ближе всего находится к 0

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
program z1623223;
var a:array[-10..10] of integer;
i,minplus,maxminus:integer;
begin
randomize;
Writeln ('Массив:');
for i:=-10 to 10 do begin
a[i]:=random(31)-12;
Write (a[i],' ');
end;
writeln;
{minplus:=a[1];
for i:=1 to 10 do begin
if a[i]<minplus then minplus:=a[i];
end;
writeln('minpluse=',minplus);}
maxminus:=-maxint;
for i:=-10 to 10 do begin
if (a[i]>maxminus) and (a[i]<0) then maxminus:=a[i];
end;
if maxminus=-maxint then writeln('error') else
writeln('maxminus=',maxminus);
end.



0



schoolteacher

39 / 39 / 49

Регистрация: 18.12.2015

Сообщений: 127

23.12.2015, 23:07

7

Вполне соглашаюсь с Вашим мнением.
Поясню свои размышления:
Судя по тому, что элементы массива имеют положительные и отрицательные индексы:

Pascal
1
var a:array[-10..10] of integer;

И в первой части решения поиск minplus производится среди элементов, имеющих положительные индексы:

Pascal
1
2
3
4
5
minplus:=a[1];
for i:=1 to 10 do begin
if a[i]<minplus then minplus:=a[i];
end;
writeln('minpluse=',minplus);

то логично предположить, что (возможно) поиск maxminus нужно производить среди элементов, имеющих отрицательные индексы.
Задание изложено неоднозначно, поэтому возможны различные толкования.

Добавлено через 3 минуты
Если a[i]:=random(31)-12;
то возможно maxminus:=-13;

Добавлено через 4 минуты
В исходнике вообще нет отрицательных чисел:
a[i]:=random(30);



0



Mental handicap

1245 / 623 / 171

Регистрация: 24.11.2015

Сообщений: 2,429

23.12.2015, 23:11

8

schoolteacher, смотря для что для кого значить максимальне отрицательное, скажу свою версию почему так, сто також максимальне число к поимеру 1,4,6,3,9 среди этих чисел макс будет 9, если делать для отрицательных то то что ближе к 0. Ведь среди -5,-7,-4,-1 максотриц. будет -1 ведь оно наибольшее среди отрицательных?

Добавлено через 2 минуты
schoolteacher, и у нас в отрицательном индексе массива лежало положительное число, ведь массив задан рандомно, пока я не задал границы



0



schoolteacher

39 / 39 / 49

Регистрация: 18.12.2015

Сообщений: 127

24.12.2015, 10:05

9

С алгоритмом и реализацией в Паскале знаком, согласен, спасибо.
Один из возможных вариантов полной программы:

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
program z1623223;
var a:array[-10..10] of integer;
i,minplus,maxminus:integer;
begin
randomize;
Writeln ('Массив:');
for i:=-10 to 10 do begin
a[i]:=random(101)-50;
Write (a[i],' ');
end;
writeln;
minplus:=50;
for i:=-10 to 10 do begin
if (a[i]<minplus) and (a[i]>0) then minplus:=a[i];
end;
writeln('minpluse=',minplus);
maxminus:=-50;
for i:=-10 to 10 do begin
if (a[i]>maxminus) and (a[i]<0) then maxminus:=a[i];
end;
if maxminus=-maxint then writeln('error') else
writeln('maxminus=',maxminus);
readln;
end.



0



Azazel-San

Mental handicap

1245 / 623 / 171

Регистрация: 24.11.2015

Сообщений: 2,429

24.12.2015, 10:20

10

schoolteacher, я бы сделал так, зачем такие огромные числа?

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
program z1623223;
var a:array[-10..10] of integer;
i,minplus,maxminus:integer;
begin
randomize;
Writeln ('Массив:');
for i:=-10 to 10 do begin
a[i]:=random(19)-10;
Write (a[i],' ');
end;
writeln;
minplus:=maxint;
for i:=-10 to 10 do begin
if (a[i]<minplus) and (a[i]>0) then minplus:=a[i];
end;
writeln('minpluse=',minplus);
maxminus:=-maxint;
for i:=-10 to 10 do begin
if (a[i]>maxminus) and (a[i]<0) then maxminus:=a[i];
end;
if maxminus=-maxint then writeln('error') else
writeln('maxminus=',maxminus);
readln;
end.

Добавлено через 10 минут
Вот, так получше будет (работает только на ABC.net)

Pascal
1
a[i]:=random(-10,10);



0



bormant

Модератор

Эксперт Pascal/DelphiЭксперт NIX

7533 / 4394 / 2784

Регистрация: 22.11.2013

Сообщений: 12,584

Записей в блоге: 1

24.12.2015, 11:09

11

Лучший ответ Сообщение было отмечено BlueZa как решение

Решение

Если исходное задание звучит так:
в массиве a[-10..10] найти минимальное значение из элементов с положительными индексами и максимальное из элементов с отрицательными, то

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
  a: array [-10..10] of Integer;
  i, pm, nm: Integer;
begin
  Randomize;
  Write('A =');
  for i:=Low(a) to High(a) do begin
    a[i]:=-10+Random(21); Write(a[i]:4);
  end; WriteLn;
  nm:=a[-1]; pm:=a[1];
  for i:=Low(a) to -2 do if nm<a[i] then nm:=a[i];
  for i:=2 to High(a) do if pm>a[i] then nm:=a[i];
  WriteLn('max(negind): ',nm,' min(posind): ',pm);
end.

Если же исходное задание звучит так:
в массиве A из N элементов [-10..10] найти минимальный положительный и максимальный отрицательный элементы, то

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
var
  a: array [1..10] of Integer;
  i, pm, nm: Integer;
begin
  Randomize;
  Write('A ='); pm:=MaxInt; nm:=-MaxInt-1;
  for i:=Low(a) to High(a) do begin
    a[i]:=-10+Random(21); Write(a[i]:4);
    if (a[i]<0) and (nm<a[i]) then nm:=a[i];
    if (a[i]>0) and (pm>a[i]) then pm:=a[i];
  end; WriteLn;
  WriteLn('max(neg): ',nm,' min(pos): ',pm);
end.

Добавлено через 5 минут
или с проверкой существования искомого:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
  a: array [1..10] of Integer;
  i, pm, nm: Integer;
begin
  Randomize;
  Write('A ='); pm:=MaxInt; nm:=-MaxInt-1;
  for i:=Low(a) to High(a) do begin
    a[i]:=-10+Random(21); Write(a[i]:4);
    if (a[i]<0) and (nm<a[i]) then nm:=a[i];
    if (a[i]>0) and (pm>a[i]) then pm:=a[i];
  end; WriteLn;
  Write('max(neg): '); if nm=-MaxInt-1 then Write('no') else Write(nm);
  Write(' min(pos): '); if pm=MaxInt then WriteLn('no') else WriteLn(pm);
end.



1



Как найти максимальный отрицательный элемент в массиве? С++



Знаток

(314),
закрыт



8 лет назад

Артём Соболев

Профи

(637)


8 лет назад

заводишь 2 переменные max и imax (1 – максимальное отрицательное число, 2 – порядковый номер в массиве (не обязательно, зависимо от дальнейшей задачи))
max присваиваешь значение 1 элемента массива, imax присваиваешь 0.
запускаешь цикл, прогоняешь все элементы массива.
пишешь условие (пример на C#):
if ((mas[i]<0) && (max<mas[i]))
{
max=mas[i];
imax=i;
}вроде так…

Duality

Просветленный

(29306)


8 лет назад

Та элементарно – заводишь переменную, присваиваешь его значение первого элемента, а потом проходишь по массиву и сравниваешь с этой переменной – если текущий элемент меньше – пихаешь его в эту переменную. Когда массив кончится в этой переменной у тебя будет наименьший элемент.

Раздел:
Задачи /
Простейшие /

Найти максимальное отрицательное число

Основы программирования 2.0

Основы программирования
Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать.
Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь.
Подробнее…

Условие задачи 1.9

Задача 1.9
Даны три целых числа А, В, С. Вывести на экран максимальное отрицательное число.

Именно так звучит условие этой задачи. И, честно говоря, для меня оно не является однозначным.

Что такое максимальное отрицательное число? Это отрицательное число с наименьшим значением? Или всё-таки это отрицательное число, которое имеет наибольшее значение среди остальных?

Например,

-4, -3, -1

Какое число здесь является максимальным отрицательным? -4 или -1?

Вот ведь, загадили русский язык иностранными словами, а теперь сами не можем понять, о чём говорим)))

Если было сказано – “наибольшее отрицательное число”, то всё было бы понятно. В примере наибольшим является -1.

А максимальное – это с какого конца оси на множестве целых чисел? Вот ведь вопрос…

Если попытаться вспомнить строгие математические термины, то тут будет без бутылки не разобраться, потому что придётся вспоминать всё.

Ну да ладно, приняв во внимание, что на русский язык слово “максимальный” переводится как наибольший, а также вспомнив таки немного математику и учтя, что в случае линейно упорядоченного множества (коим и являются наши числа) максимальный элемент является наибольшим, а минимальный – наименьшим, будем считать, что в нашем примере максимальным отрицательным числом будет -1. Из этого и будем исходить при решении задачи.

Однако, надо обратить внимание также на то, что числа А, В, С могут быть положительными (причём как все, так и некоторые из них).

Вариантов решения, как всегда, немало. Можно, например, сохранить эти числа в
массив и отсортировать его по убыванию. А затем перебрать его элементы до тех пор, пока не попадётся первое отрицательное число. Оно и будет максимальным отрицательным. Если же такого не найдётся, значит отрицательных чисел среди А, В, С не было.

Можно попробовать решить задачу рекурсивно (правда, я не пробовал и даже не думал, может и нельзя)))).

Но мы пойдём другим путём…

Вообще, задачка не такая уж и простая. Начинающему программисту придётся поломать голову (но это и хорошо – только так из начинающих программистов получаются опытные – путём ломания голов))).

Возможно, я нашёл не самые лучшие решения. Но по крайней мере они работают. Вот решения на
Паскале и
С++.

Решение задачи 1.9 на Паскале

program maxneg;
 
//****************************************************************
// КОНСТАНТЫ
//****************************************************************
const
  MAX_VAL = 1000;
 
//****************************************************************
// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ
//****************************************************************
var
  A, B, C : Integer;
  Nums    : byte;
 
//****************************************************************
// ФУНКЦИИ И ПРОЦЕДУРЫ
//****************************************************************
 
//****************************************************************
// Возвращает случайное значение
//****************************************************************
function GetRandomNum : Integer;
begin
  Result := Random(MAX_VAL) - ((MAX_VAL div 10) * 7);
end;
 
//****************************************************************
// Сравнивает два числа
// ВХОД: N1, N2 - числа для сравнения
// ВЫХОД: 0 - числа равны
//        1 - число 1 больше числа 2
//        2 - число 2 больше числа 1
//****************************************************************
function GetMax(N1, N2 : integer) : integer;
begin
  Result := 0;
  if (N1 > N2) then Result := 1
  else if (N1 < N2) then Result := 2;
end;
 
//****************************************************************
// Сравнивает три отрицательных числа
// ВХОД: N1, N2, N3 - числа для сравнения
// ВЫХОД: 'A' - наибольшее число N1
//        'B' - наибольшее число N2
//        'C' - наибольшее число N3
//****************************************************************
function GetMaxABC(N1, N2, N3 : integer) : char;
begin
  Result := 'C';
  if GetMax(N1, N2) < 2 then      //Если N1 >= N2
    begin
      if GetMax(N1, N3) < 2 then  //Если N1 >= N3
        Result := 'A';
    end
  else                            //Если N1 < N2
    begin
      if GetMax(N2, N3) < 2 then  //Если N2 >= N3
        Result := 'B';
    end;
end;
 
//****************************************************************
// Определяет знаки чисел и возвращает их в разрядах числа типа BYTE
// ВХОД: na, nb, nc - числа A, B, C
// ВЫХОД: знаки чисел - бит 2 - число na, бит 1 - число nb, бит 0 - число nc
// То есть всего возможны 8 комбинаций:
//   0 - все положительные
//   1 - С < 0
//   2 - B < 0
//   3 - B и С меньше нуля
//   4 - A < 0
//   5 - A и С меньше нуля
//   6 - A и B меньше нуля
//   7 - все отрицательные
//****************************************************************
function GetNumZnak(na, nb, nc : integer) : byte;
var ba, bb, bc  : byte;
begin
  ba := 0;
  bb := 0;
  bc := 0;
  if na < 0 then ba := 4;
  if nb < 0 then bb := 2;
  if nc < 0 then bc := 1;
  Result := ba + bb + bc;
end;
 
//****************************************************************
// Выводит результат на экран
// ВХОД: S - имя числа, N - значение числа
// ВЫХОД: Если N >= 0, то сообщение об отсутствии отрицательных чисел
//        Если N < 0, то имя числа и его значение (число N)
//****************************************************************
procedure NumberToScreen(S : char; N : integer);
begin
  if N < 0 then
    WriteLn('The smallest negative number is ', S, ' = ', N)
  else
    WriteLn('All the numbers are positive');
end;
 
//****************************************************************
// ОСНОВНАЯ ПРОГРАММА
// Алгоритм:
// получить только отрицательные числа
// сравнить эти числа
//****************************************************************
begin
  //Запустить генератор случайных чисел
  Randomize;
 
  //Получить случайные значения для чисел А, В, С
  A := GetRandomNum;
  B := GetRandomNum;
  C := GetRandomNum;
  WriteLn('A = ', A, ', B = ', B, ', C = ', C);
  Nums := GetNumZnak(A, B, C);
 
  case Nums of
  0 :           //Все числа положительные
    NumberToScreen('A', A);
  1 :           //Только С < 0;
    NumberToScreen('C', C);
  2 :           //Только B < 0;
    NumberToScreen('B', B);
  3 :           //B и С меньше нуля
    if GetMax(B, C) < 2 then  //Если B = С или B > C, то
      NumberToScreen('B', B)  //искомое число - это B
    else                      //иначе
      NumberToScreen('C', C); //искомое число - это С
  4 :           //Только A < 0;
    NumberToScreen('A', A);
  5 :           //A и С меньше нуля
    if GetMax(A, C) < 2 then  //Если A = С или A > C, то
      NumberToScreen('A', A)  //искомое число - это A
    else                      //иначе
      NumberToScreen('C', C); //искомое число - это С
  6 :           //A и B меньше нуля
    if GetMax(A, B) < 2 then  //Если A = B или A > B, то
      NumberToScreen('A', A)  //искомое число - это A
    else                      //иначе
      NumberToScreen('B', B); //искомое число - это B
  7 :           //Все числа отрицательные;
    case GetMaxABC(A, B, C) of
    'A' : NumberToScreen('A', A);
    'B' : NumberToScreen('B', B);
    'C' : NumberToScreen('C', C);
    end;
  end;
 
  WriteLn('The end. Press ENTER...');
  ReadLn;
end.

Решение задачи 1.9 на С++

#include 
#include 
 
using namespace std;
 
//****************************************************************
// КОНСТАНТЫ
//****************************************************************
const int MAX_VAL = 1000;  
 
//****************************************************************
// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ
//****************************************************************
int A, B, C;
char Nums;
 
//****************************************************************
// ФУНКЦИИ И ПРОЦЕДУРЫ
//****************************************************************
 
//****************************************************************
// Возвращает случайное значение
//****************************************************************
int GetRandomNum()
{
  int n = (MAX_VAL / 10) * 7;
  return(rand()%MAX_VAL - (int)n);
}  
 
//****************************************************************
// Сравнивает два числа
// ВХОД: N1, N2 - числа для сравнения
// ВЫХОД: 0 - числа равны
//        1 - число 1 больше числа 2
//        2 - число 2 больше числа 1
//****************************************************************
int GetMax(int N1, int N2)
{
  int Res = 0;
  if (N1 > N2) Res = 1;
  else if (N1 < N2) Res = 2;
  return(Res);
}
 
//****************************************************************
// Сравнивает три отрицательных числа
// ВХОД: N1, N2, N3 - числа для сравнения
// ВЫХОД: 'A' - наибольшее число N1
//        'B' - наибольшее число N2
//        'C' - наибольшее число N3
//****************************************************************
char GetMaxABC(int N1, int N2, int N3)
{
  char Res = 'C';
  if (GetMax(N1, N2) < 2)       //Если N1 >= N2
    {
      if (GetMax(N1, N3) < 2)   //Если N1 >= N3
        Res = 'A';
    }
  else                          //Если N1 < N2
    {
      if (GetMax(N2, N3) < 2)   //Если N2 >= N3
        Res = 'B';
    }
  return(Res);
}
 
//****************************************************************
// Определяет знаки чисел и возвращает их в разрядах числа типа BYTE
// ВХОД: na, nb, nc - числа A, B, C
// ВЫХОД: знаки чисел - бит 2 - число na, бит 1 - число nb, бит 0 - число nc
// То есть всего возможны 8 комбинаций:
//   0 - все положительные
//   1 - С < 0
//   2 - B < 0
//   3 - B и С меньше нуля
//   4 - A < 0
//   5 - A и С меньше нуля
//   6 - A и B меньше нуля
//   7 - все отрицательные
//****************************************************************
char GetNumZnak(int na, int nb, int nc)
{
  int ba = 0;
  int bb = 0;
  int bc = 0;
  if (na < 0) ba = 4;
  if (nb < 0) bb = 2;
  if (nc < 0) bc = 1;
  return(ba + bb + bc);
} 
 
//****************************************************************
// Выводит результат на экран
// ВХОД: S - имя числа, N - значение числа
// ВЫХОД: Если N >= 0, то сообщение об отсутствии отрицательных чисел
//        Если N < 0, то имя числа и его значение (число N)
//****************************************************************
void NumberToScreen(char S, int N)
{
  if (N < 0)
    cout << "The smallest negative number is " << S << " = " << N << endl;
  else
    cout << "All the numbers are positive" << endl;;
}         
 
//****************************************************************
// ОСНОВНАЯ ПРОГРАММА
//****************************************************************
int main(int argc, char *argv[])
{
  //Запустить генератор случайных чисел   
  srand(time(0));         
  
  //Получить случайные значения для чисел А, В, С
  A = GetRandomNum();
  B = GetRandomNum();
  C = GetRandomNum();
  cout << "A = " << A << ", B = " << B << ", C = " << C << endl;
  Nums = GetNumZnak(A, B, C);
 
  switch(Nums)
  {
  case 0 :                     //Все числа положительные
    NumberToScreen('A', A);
    break;
  case 1 :                     //Только С < 0;
    NumberToScreen('C', C);
    break;
  case 2 :                     //Только B < 0;
    NumberToScreen('B', B);
    break;
  case 3 :                     //B и С меньше нуля
    if (GetMax(B, C) < 2)      //Если B = С или B > C, то
      NumberToScreen('B', B);  //искомое число - это B
    else                       //иначе
      NumberToScreen('C', C);  //искомое число - это С
    break;
  case 4 :                     //Только A < 0;
    NumberToScreen('A', A);
    break;
  case 5 :                     //A и С меньше нуля
    if (GetMax(A, C) < 2)      //Если A = С или A > C, то
      NumberToScreen('A', A);  //искомое число - это A
    else                       //иначе
      NumberToScreen('C', C);  //искомое число - это С
    break;
  case 6 :                     //A и B меньше нуля
    if (GetMax(A, B) < 2)      //Если A = B или A > B, то
      NumberToScreen('A', A);  //искомое число - это A
    else                       //иначе
      NumberToScreen('B', B);  //искомое число - это B
    break;
  case 7 :                     //Все числа отрицательные;
    switch(GetMaxABC(A, B, C))
    {
      case 'A' : NumberToScreen('A', A); break;
      case 'B' : NumberToScreen('B', B); break;
      case 'C' : NumberToScreen('C', C); break;
    }
  }    
  
  system("PAUSE");
  return EXIT_SUCCESS;
}

Как стать программистом 2.0

Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки…
Подробнее…

Помощь в технических вопросах

Помощь в технических вопросах

Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение – ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации.
Подробнее…

Добавить комментарий