Лидеры рейтинга

ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

1058

Россия, пос. Теплоозёрск, ЕАО


ID: 226425

Konstantin Shvetski

Модератор

314

Россия, Северодвинск


ID: 401284

Михаил Александров

Советник

278

Россия, Санкт-Петербург


ID: 137394

Megaloman

Мастер-Эксперт

177

Беларусь, Гомель


ID: 400669

epimkin

Профессионал

105


ID: 404002

sglisitsyn

6-й класс

42


ID: 242862

Hunter7007

Мастер-Эксперт

31

Россия, Омск


8.10.3

30.10.2021

JS: 2.10.3
CSS: 4.6.0
jQuery: 3.6.0
DataForLocalStorage: 2021-12-04 22:46:17-standard


Создание программ на языках Pascal, Delphi и Lazarus.

Администратор раздела: Зенченко Константин Николаевич (Старший модератор)

Консультация онлайн # 201688

Раздел:  Pascal / Delphi / Lazarus
Автор вопроса: kmrobertdowneyjr (Посетитель)
Дата: 15.11.2021, 17:00 Консультация закрыта
Поступило ответов: 1

Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Нужно составить программу с объяснениями к каждой строчке. На языке Pascal.
Составьте программу, отыскивающую номер первого по порядку нулевого элемента одномерного массива W(N).

Ответ # 281755 от Megaloman
Код
const                                     { Как константы определим:}
     N = 20;                              { количество элементов массива;}
     O = -10;                             { начальное значение отрезка;}
     R = 10;                              { конечное значение отрезка;}
var
   W : array [1..N] of integer;           { опишем массив, в который занесём исходные значения;}
   i : Integer;                           { индекс массива;}
   maxx : Integer;                        { максимум для генерации случайного числа от 0<=A[i]<maxx=R-O+1;}
   inul : Integer;                        { номер нулевого элемента;}

begin
     randomize;                           { инициализация генератора случайных чисел;}
     maxx := R-O+1;                       { вычисление верхней границы случайного числа;}

     writeln('Исходный массив W');        { выдача заголовка для печати исходного массива;}
     for i := 1 to N do begin             { цикл по всем элементам массива;}
         W[i] := random(maxx) + O;        { занесение в массив случайного значения O<=A[i]<=R;}
         write(W[i] : 4);                 { печать значения элемента массива;}
         end;

     inul := 0;                           { Номер нулевого элемента, для начала вне массива =0;}
     for i := 1 to N do begin             { цикл по всем элементам массива от 1 до N;}
         If (W[i] = 0) Then begin         { если элемент массива =0}
            inul := i;                    { запомним номер нулевого элемента}
            break;                        { выходим из цикла}
         end;
     end;

     writeln;                             { пропустим пустую строку чтобы отделить вывод от исходного массива;}

     If (inul = 0) Then begin             { если нулевой элемент не найден (номер элемента вне массива)}
        writeln('Нулевой элемент в массиве не найден');                 {сообщаем об этом}
        end
     Else begin
        writeln('Номер первого нулевого элемента в массиве=',inul:4);   {иначе выдаём номер нулевого элемента}
        end;
end.

Последнее редактирование 15.11.2021, 19:05 Megaloman (Мастер-Эксперт)


Megaloman

Мастер-Эксперт
15.11.2021, 19:02
Мини-форум консультации # 201688

q_id

Megaloman

Мастер-Эксперт

ID: 137394

1

= общий =    16.11.2021, 15:12
kmrobertdowneyjr, Зенченко Константин Николаевич:

Тут более уместны циклы с условиями:

Я рассматривал такую возможность, но решил, что проще For. По любому надо организовывать счетчик в цикле (тут for удобнее), но, как плата, пришлось ввести признак найденного элемента inul, чтобы иметь какое-то основание для выдачи соответствующего сообщения.
Поразмыслив, понял, что Repeat даст возможность подсократить код.
Код
const                                     { Как константы определим:}
     N = 20;                              { количество элементов массива;}
     O = -10;                             { начальное значение отрезка;}
     R = 10;                              { конечное значение отрезка;}
var
   W : array [1..N] of integer;           { опишем массив, в который занесём исходные значения;}
   i : Integer;                           { индекс массива;}
   maxx : Integer;                        { максимум для генерации случайного числа от 0<=A[i]<maxx=R-O+1;}
   inul : Integer;                        { строка с выводом ответа;}

begin
     randomize;                           { инициализация генератора случайных чисел;}
     maxx := R-O+1;                       { вычисление верхней границы случайного числа;}

     writeln('Исходный массив W');        { выдача заголовка для печати исходного массива;}
     for i := 1 to N do begin             { цикл по всем элементам массива;}
         W[i] := random(maxx) + O;        { занесение в массив случайного значения O<=A[i]<=R;}
         write(W[i] : 4);                 { печать значения элемента массива;}
         end;
     writeln;                             { организуем начало новой строки после вывода исходного массива;}

     i := 1;                              { присваеваем начальный номер индекса массива}
     Repeat                               { организуем цикл}
                                          { если найден нулевой элемент, выдаём сообщение}
         If W[i] = 0 Then writeln('Номер первого нулевого элемента в массиве=',i:4);
         i := i + 1;                      { наращиваем номер индекса массива}
     Until (i > N) Or (W[i-1] = 0);       { завершаем цикл, если i > N или найден нулевой элемент}

     If (i > N) And (W[N] <> 0) Then writeln('Нулевой элемент в массиве не найден');{сообщаем об этом}
end.

=====
Нет времени на медленные танцы

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Лучшие эксперты раздела

Зенченко Константин Николаевич

Старший модератор

Рейтинг: 244

Лысков Игорь Витальевич

Мастер-Эксперт

Рейтинг: 43

Gluck

9-й класс

Рейтинг: 42

Вадим Исаев ака sir Henry

Мастер-Эксперт

Рейтинг: 2

Асмик Гаряка

Советник

Рейтинг: 0

Орловский Дмитрий

Мастер-Эксперт

Рейтинг: 0