Дан вещественный массив из 50 элементов. Элементы массива могут принимать произвольные значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит наименьший номер отрицательного элемента массива или сообщение, что такого элемента нет.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
| Паскаль | Бейсик |
|---|---|
const N = 50; var a: array [1..N] of real; i, j: integer; begin for i := 1 to N do readln(a[i]); ... end. | N = 50 DIM A(N) AS REAL DIM I, J AS INTEGER FOR I = 1 TO N INPUT A (I) NEXT I ... END |
| Си++ | Алгоритмический язык |
#include <iostream> using namespace std; #define N 50 int main(void) {float a[N]; int i, j; for (int i = 0; i < N; i++) cin >> a[i]; ... } | алг нач цел N = 50 вещтаб а[1:N] цел i, j нц для i от 1 до N ввод a [IT кц ... кон |
| Естественный язык | |
Объявляем массив А из 50 элементов. Объявляем целочисленные переменные I, J. В цикле от 1 до 50 вводим элементы массива А с 1-го по 50-й. ... | |
| Python | |
# допускается также использовать # целочисленные переменные j a = [] n = 50 for i in range(0, n): a.append(int(input())) | |
В качестве ответа вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Borland Pascal 7.0) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).
| ПАСКАЛЬ | БЕЙСИК |
| i : = 1 ; while (i < N) and (a[i] >= 0) do i : = i + 1; if a [i ] >= 0 then writeln('нeт таких') else writeln(i); | I = 1 WHILE I < N AND A (I) >= 0 I = I + 1 ENDW IF A (I) >=0 THEN PRINT "нет таких" ELSE PRINT I ENDIF |
| Си++ | Алгоритмический язык |
| for(i=0; i< N && a[i]>=0; i++); if(a[i]>=0) cout << "нет таких"; else printf("%d" , i); | i := 1 нц пока i < N- и a[i] >= 0 i:=i + 1 кц если а [ i ] >= 0 то вывод "нет таких" иначе вывод i все |
| Естественный язык |
| Записываем в переменную I начальное значение, равное 1. В цикле пока I меньше 50 и пока 1-й элемент неотрицательный, увеличиваем переменную I на единицу. Если после окончания цикла элемент массива с номером I неотрицательный — выводим сообщение, что отрицательных элементов в массиве нет. Иначе, после окончания цикла выводим значение переменной I. |
Приведем решение, использующее только один цикл (один проход по массиву).
const n=50;
var a: array[1..n] of real;
i, j: integer;
begin
j:=0;
for i:=1 to n do
begin
readln(a[i]);
if (a[i]<0) and (j=0) then j:=i;
end;
if j=0 then writeln('no') else writeln(j);
end.

