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

0 / 0 / 0

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

Сообщений: 35

1

Найти первый и последний отрицательный элемент массива

26.01.2017, 12:26. Показов 15924. Ответов 2


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

Организовать одномерный массив с вещественными числами и найти первый и последний отрицательный элемент массива;

Добавлено через 4 минуты
Помогите пожалуйста. Заранее спосибо.



0



void_ptr

3 / 3 / 6

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

Сообщений: 20

26.01.2017, 21:22

2

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

Решение

Код:

C++
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
#include <iostream>
#include <cmath>
#include <ctime>
#include <cstdlib>
 
int main()
{
    const int arrSize = 10; 
    
    double arr[arrSize];
    
    srand(time(0)); 
    for (int i =0; i< arrSize; i++)
    {
        //заполняем массив псевдослучайными вещественными чилами 
        //в диапазоне [-25; 25]
        arr[i] = (-50 + rand() % 101) / 2.0; 
    }
    
    int first = -1; int last = -1;
    bool found = false;
    for (int i = 0; i < arrSize; i++) //поиск первого и последнего отрицательно элемента
    {
        if (arr[i] < 0)
        {
            if (found)
            {
                last = i;
            }
            else 
            {
                first = i;
                last = first;
                found = true;
            }
        }
    }
    
    
    std::cout << "Array: ";
    for (int i = 0; i < arrSize; i++)
    {
        std::cout << arr[i] << "  ";
    }
    std::cout << std::endl;
    if (first==-1 && last == -1) 
    {
        std::cout << "No negative elements." << std::endl;
    }
    else
    {
        std::cout << "First negative element: arr[" << first << "] = " << arr[first] << std::endl;
        std::cout << "Last negative element: arr[" << last << "] = " << arr[last] << std::endl;
    }
    
    return 0;
}

Вывод программы:
Array: 7 -18.5 -22.5 5.5 8 -4.5 -10.5 18.5 10 2.5
First negative element: arr[1] = -18.5
Last negative element: arr[6] = -10.5
Press ENTER to continue…



0



Fixer_84

1505 / 968 / 812

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

Сообщений: 3,334

26.01.2017, 21:34

3

SlavaCherep, здравствуйте! Вот мое решение:

C++
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
#include <iostream>
 
using namespace std;
 
int main()
{
    int N;
    double first, last;
    cout << "Введите размер массива:" << endl;
    cout << "N = ";
    cin >> N;
    double* A = new double[N];
    cout << "Введите массив:" << endl;
    for (int i = 0; i < N; i++)
    {
        cin >> A[i];
    }
    for (int i = 0, j = N - 1; i < N, j >= 0; i++, j--)
    {
        if (A[j] < 0)
            first = A[j];
        if (A[i] < 0)
            last = A[i];
    }
    cout.precision(2);
    cout << fixed << "Первый отрицательный элемент массива: " << first << endl;
    cout << fixed << "Последний отрицательный элемент массива: " << last << endl;
    delete[] A;
    system("pause");
    return 0;
}



0



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

Просмотров 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 отрицательна, что вызывает ошибку выхода за границы массива.

Напишем программу, которая определяет номер отрицательного элемента в массиве.

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



program massiv9;
uses crt;
const N=10;
type x=array [1..N] of integer;
var a:x;
i:integer;
k:integer;
begin
clrscr;
randomize;
for i:=1 to N do
begin
a[i]:= -10+random (91);
write (A[i]:4)
end;
writeln;
k:=0;
for i:=1 to N do
if a[i] <0 then
begin
k:=I
end;
if k>0 then
writeln (‘Индекс отрицательного элемента = ’,k)
else
writeln (‘В массиве нет отрицательных элементов');
readln
end.



В строке №7 мы записали переменную для хранения индекса отрицательного элемента.

В строке №19 мы задаем условие, при котором перебираются все 10 сгенерированных чисел и среди них ищется отрицательный, и если отрицательное число находится, то его индекс (номер) заносится в переменную K (строка №21).

В строке №23 записывается условие: если переменная «K» больше 0 (т.е. есть отрицательные элементы), то на экран выводится сообщение (строка №24). В обратном случае (если нет отрицательных элементов, и «K» так и останется равным 0), выведется сообщение (строка №26)

nakhozhdenie nomera otricateljnogo ehlementa v massive

nakhozhdenie nomera otricateljnogo ehlementa v massive.

Из всех сгенерированных чисел у нас 2 числа отрицательные. Так как цикл начинался с первого элемента и закончился на 10-ом элементе, у нас выводится номер последнего найденного отрицательного числа (т.к. именно этот номер последним был записан в переменную «K»). Если бы нам нужно было найти номер первого отрицательного числа, то мы бы заменили строку №16 (for i:=1 to N do) на такую строку: for k:=N downto 1 do (т.е. перебирали бы элементы с конца).


Предыдущая статья : Определение наличия в массиве отрицательных чисел.

Оглавление : Уроки Паскаль.

Следующая статья : Двумерные массивы в Pascal.


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

       #include "stdafx.h" 
       #include "stdio.h" 
       #include "conio.h" 
       #include "math.h"

       const int k = 12, l = 14;

       int per_otr(int d[], int *l)
       {
        int otr = 1;
        for (int i = 0; i<*l; i++)
        {
          if (d[i]<0)
          otr = d[i];
        }
        return otr;
      }
      void vvod2(int a[][l], int *n, int *m)
      {
        printf("Vvedite kolichestvo strok:n");
        scanf("%d", n);
        printf("Vvedite kolichestvo stolbcov:n");
            scanf("%d", m);
            for (int i = 0; i<*n; i++)
            {
                printf("Vvedite %d stroky:n", i + 1);
                for (int j = 0; j<*m; j++)
                    scanf("%d", &a[i][j]);
            }
        }
        void vivod(int a[], int t)
        {
            for (int i = 0; i<t; i++)
                printf("%d ", a[i]);
        }
        void vivod2(int a[][l], int n, int m)
        {
            for (int i = 0; i<n; i++)
            {
                for (int j = 0; j<m; j++)
                    printf("%d ", a[i][j]);
                printf("n");
            }
        }
        void perepis(int ar[][l], int a[], int n, int m, int *t)
        {
            *t = 0;
            for (int i = 0; i<n; i++)
                for (int j = 0; j<m; j++)
                    if ((per_otr(ar[j], &n))!=1)
                    {
                        a[*t] = ar[i][j];
                        (*t)++;

                    }
        }

        void swap(int *a, int *b)
        {
            int buf = *a;
            *a = *b;
            *b = buf;
        }

        void sort(int a[], int t)

        {
            for (int i = 0; i<t - 1; i++)
                for (int j = i + 1; j<t; j++)
                    if (a[i]>a[j])
                        swap(&a[i], &a[j]);
        }



        int main()
        {
            int ar[k][l], a[k], n, m, t;
            vvod2(ar, &n, &m);
            printf("Isxodnii massiv:n");
            vivod2(ar, n, m);
            perepis(ar, a, n, m, &t);
            printf("Chisla  v new massive:n");
            vivod(a, t);
            printf("n");
            sort(a, t);
            printf("Otsortirovannie Chisla  v new massive:n");
            vivod(a, t);
            _getch();
            return 0;
        }

Чуть-чуть поправил решение предыдущег автора

uses crt;
var a:array [1..100] of integer;
i,n,max,j:integer;
begin
clrscr;
write(‘N=’);
readln(n);

for i:=1 to n do
begin
write(‘A[‘,i,’]=’);
readln(a[i]);
end;

clrscr;

writeln(‘Massiv A: ‘);
for i:=1 to n do
write(a[i],’ ‘);

writeln;
max:=a[1];
for i:=1 to n do
begin
if (a[i]<0) and (a[i]>max) then
begin
max:=a[i];
j:=i;
end;
end;

if max<0 then
writeln(‘Max sredi otric=’,max,’ ego nomer=’,j)
else
writeln(‘Otricat net’);
readkey
end.

Обосрамс ШрамовОракул (57403)

4 года назад

исправил

uses crt;
var a:array [1..100] of integer;
i,n,max,j:integer;
begin
clrscr;
write(‘N=’);
readln(n);

for i:=1 to n do
begin
write(‘A[‘,i,’]=’);
readln(a[i]);
end;

clrscr;

writeln(‘Massiv A: ‘);
for i:=1 to n do
write(a[i],’ ‘);

writeln;
max:=a[1];
j:=1;
for i:=1 to n do
begin
if (a[i]<0) and (a[i]<max) then
begin
max:=a[i];
j:=i;
end;
end;

if max<0 then
writeln(‘Max sredi otric=’,max,’ ego nomer=’,j)
else
writeln(‘Otricat net’);
readkey
end.

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