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 как решение РешениеКод:
Вывод программы:
0 |
Fixer_84 1505 / 968 / 812 Регистрация: 30.04.2016 Сообщений: 3,334 |
||||
26.01.2017, 21:34 |
3 |
|||
SlavaCherep, здравствуйте! Вот мое решение:
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 15main() {
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 += 1print(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 iindex = -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 iprint 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)
Из всех сгенерированных чисел у нас 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.