Запишите на языке паскаль массива в котором 111 элементов
Перейти к содержимому

Запишите на языке паскаль массива в котором 111 элементов

  • автор:

Помогите с дз по информатике. Паскаль. 9 класс.

Задание 1
Составить блок-схему алгоритма и программу на языке Паскаль для решения задачи.
Найдите количество положительных элементов одномерного массива, которые без остатка делятся на 4 и принадлежат промежутку от 10 до 30. Количество элементов массива и их значения задайте самостоятельно путём ввода с клавиатуры.

Задание 2
Составить программу на языке Паскаль для решения задачи.
Дан одномерный массив из 15 элементов, заполненный случайным образом в диапазоне от –40 до 40. Замените на ноль значения всех элементов, расположенных на нечётных позициях в массиве. Выведите на экран весь полученный ряд значений.

( P.S я из ИнтернетУрок. Кто тоже, то напишите если хотите в чат с домашкой в тг)

Лучший ответ

Программы обозначаю как P1 (Program P1) и P2 — соответственно P1 — к 1-ому заданию, P2 — ко 2-ому.

Кстати, в 1-ом: какой именно промежуток (границы строгие или включая эти числа)?

1)
Program P1;
uses crt;
const n=10;
type massiv=array [1..n] of integer;
var m: massiv;
i, k: integer;
begin
clrscr;
k:=0;
for i:=1 to n do begin
write (‘Введите ‘, i, ‘-й элемент массива, после чего нажмите клавишу Enter: ‘);
readln (m[i]);
end;
for i:=1 to n do begin
if (m[i]>0) and (m[i] mod 4=0) and (m[i]>=10) and (m[i]<=30) then k:=k+1;
end;
writeln (‘Количество положительных элементов одномерного массива, которые без остатка делятся на 4 и принадлежат промежутку от 10 до 30 составляет: ‘, k);
write (‘Программа завершена. Для выхода нажмите клавишу Enter.’);
readkey;
end.

2)
Program P2;
uses crt;
const n=15;
type massiv=array [1..n] of integer;
var m: massiv;
i: integer;
begin
clrscr;
for i:=1 to n do begin
m[i]:=random (81)-40;
end;
write (‘Был сгенерирован массив:’);
for i:=1 to n do begin
write (‘ ‘, m[i]);
end;
writeln (»);
for i:=1 to n do begin
if i mod 2<>0 then m[i]:=0;
end;
write (‘Этот массив после изменения: ‘);
for i:=1 to n do begin
write (‘ ‘, m[i]);
end;
writeln (‘ ‘);
write (‘Программа завершена. Для выхода нажмите клавишу Enter.’);
readkey;
end.

Остальные ответы
я хочу в тг
Загрузка… █████[][][][] 49%Знаток (454) 1 год назад
Загрузка… █████[][][][] 49%Знаток (454) 1 год назад

это бот с гдз, тоже может помочь

Покупаче ПокупачеУченик (115) 1 год назад

Если вам нужны ответы в домашней школе ИнтернетУрок — в телеграмме есть группа с ответами: https://t.me/dostup10class
Там есть ответы в интернет уроке на домашние задания/аттестации и другого для всех классов)

Программы обозначаю как P1 (Program P1) и P2 — соответственно P1 — к 1-ому заданию, P2 — ко 2-ому.

Кстати, в 1-ом: какой именно промежуток (границы строгие или включая эти числа)?

1)
Program P1;
uses crt;
const n=10;
type massiv=array [1..n] of integer;
var m: massiv;
i, k: integer;
begin
clrscr;
k:=0;
for i:=1 to n do begin
write (‘Введите ‘, i, ‘-й элемент массива, после чего нажмите клавишу Enter: ‘);
readln (m[i]);
end;
for i:=1 to n do begin
if (m[i]>0) and (m[i] mod 4=0) and (m[i]>=10) and (m[i]<=30) then k:=k+1;
end;
writeln (‘Количество положительных элементов одномерного массива, которые без остатка делятся на 4 и принадлежат промежутку от 10 до 30 составляет: ‘, k);
write (‘Программа завершена. Для выхода нажмите клавишу Enter.’);
readkey;
end.

2)
Program P2;
uses crt;
const n=15;
type massiv=array [1..n] of integer;
var m: massiv;
i: integer;
begin
clrscr;
for i:=1 to n do begin
m[i]:=random (81)-40;
end;
write (‘Был сгенерирован массив:’);
for i:=1 to n do begin
write (‘ ‘, m[i]);
end;
writeln (»);
for i:=1 to n do begin
if i mod 2<>0 then m[i]:=0;
end;
write (‘Этот массив после изменения: ‘);
for i:=1 to n do begin
write (‘ ‘, m[i]);
end;
writeln (‘ ‘);
write (‘Программа завершена. Для выхода нажмите клавишу Enter.’);
readkey;
end.

Загрузка… █████[][][][] 49%Знаток (454) 2 недели назад
чел, просто копировать ответы, что бы заработать баллы, не хорошо.

program task1; const n = 10; <количество элементов массива>var a: array[1…n] of integer; i, k: integer; begin writeln(‘Введите элементы массива:’); for i:= 1 to n do read(a[i]); k := 0; for i:= 1 to n do if (a[i] > 0) and (a[i] mod 4 = 0) and (a[i] < 30) and (a[i] >= 10) then k := k + 1; writeln(‘Количество положительных чисел, кратных 4 и принадлежащих промежутку [10,30): ‘, k); end. program task2; const m = 15; var A: array [1…m] of integer; i: integer; begin randomize; writeln(‘Исходный массив:’);

Рабочие тетради по программированию на языке Pascal

В тетради №1 представлены темы: алфавит языка, запись арифметических выражений, линейные алгоритмические конструкции, ветвящиеся алгоритмические конструкции, циклические алгоримические конструкции. В тетради №2 представлены темы: одномерные массивы и двумерные массивы. В файле «печать тетрадей» последовательность печати.

Вы уже знаете о суперспособностях современного учителя?

Тратить минимум сил на подготовку и проведение уроков.

Быстро и объективно проверять знания учащихся.

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

Избавить себя от подбора заданий и их проверки после уроков.

Наладить дисциплину на своих уроках.

Получить возможность работать творчески.

Просмотр содержимого документа
«печать тетрадей»

Тетрадь №2 40,1,38,3,36,5,34,7,32,9,30,11,28,13,26,15,24,17,22,19 20,21,18,23,16,25,14,27,12,29,10,31,8,33,6,35,4,37,2,39

Тетрадь №1 68,1,66,3,64,5,62,7,60,9,58,11,56,13,54,15,52,17,50,19,48,21,46,23,44,25,42,27,40,29,38,31,36,33 3 4 ,3 5 ,3 2 ,3 7 ,3 0 ,3 9 , 28 , 41 , 26 , 43 , 24 , 45 , 22 , 47 , 20 , 49 , 18 , 51 , 16 , 53 , 14 , 55 , 12 , 57 , 10 , 59 , 8 , 61 ,6,6 3 , 4 , 65 , 2 , 67

1 ,68,3,66,5,64,7,62,9,60,11,58,13,56,15,54,17,52,19,50,21,48,23,46,25,44,27,42,29,40,31,38,33,36
7,62,9,60,11,58,13,56,15,54,17,52,19,

Просмотр содержимого документа
«тетрадь2»

Муниципальное образовательное учреждение «Средняя общеобразовательная школа №55» г. Рязани.

ИНФОРМАТИКА Паскаль в вопросах и задачах (рабочая тетрадь №2)

Массивы одномерные. Задание 1. 1. Какая форма организации данных называется массивом? _________________________________________________________________________________________________________________________________________________________________________________________________________ 2. Для чего нужно описывать массив? _________________________________________________________________________________________________________________________________________________________________________________________________________ 3. Что включают в себя понятия номер и значение элемента массива? _________________________________________________________________________________________________________________________________________________________________________________________________________ 4. Опишите как организовать вывод линейного массива в строчку? ___________________________________________________________________________________________________________________________________________________________ в столбец? ___________________________________________________________________________________________________________________________________________________________ 5.Напишите формулы для подсчета суммы, количества и произведения значений элементов массива? Сумма ____________________________________________________________________________ К 6. Опишите способы заполнения массивов. _________________________________________________________________________________________________________________________________________________________________________________________________________ оличество ____________________________________________________________________________ Произведение ____________________________________________________________________________
7. Перечислите основные алгоритмы обработки массивом: _________________________________________________________________________________________________________________________________________________________________________________________________________ Задание 2. Напишите фрагмент программы для заполнения элементов массива датчиком случайных чисел на интервале: 1. [111, 555] ______________________________________________________________________________________________________________________________________ 2. [-122, 123] ______________________________________________________________________________________________________________________________________ 3. [-222, 0] ______________________________________________________________________________________________________________________________________ 4. [0, 212] ______________________________________________________________________________________________________________________________________ 5. [-115, -250] ______________________________________________________________________________________________________________________________________ 6. [115, 250] ______________________________________________________________________________________________________________________________________ 7. [-115, 250] ______________________________________________________________________________________________________________________________________ 8. [-115, 115] ______________________________________________________________________________________________________________________________________ 9. [-50, 100] ______________________________________________________________________________________________________________________________________
Задание 3. 1. Создайте и распечатайте в строчку одномерный массив следующим образом: А(1)=1, А(2)=-1, А(3)=1, А(4)=-1, …….. ______________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________ ______________________________________________________________________________________________________________________________________ 2. Создайте и распечатайте в столбик одномерный массив длиной N следующим образом: А(1)=4, А(2)=6, А(3)=8, А(4)=10, …….. _______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 3. Создайте и распечатайте в столбик одномерный массив длиной N следующим образом: А(1)=-4, А(2)=5, А(3)=-6, А(4)=17, A (5)=-8, A (6)=9, …….? ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 4. Создайте и распечатайте в строчку одномерный массив длиной N следующим образом: А(1)=14, А(2)=15, А(3)=16, А(4)=-17, А(5)=-18, А(6)=-19, А(7)=20, А(8)=21, А(9)=22 …….? ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ _________________________________________________________________________________________________________________________________________________________________________________________________________

Задание 4. 1. Дан массив А(N), сформированный датчиком случайных чисел на интервале (-50; 150). Из элементов массива А, кратных 5, сформировать массив В. _______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 2. Дан массив А(N), сформированный датчиком случайных чисел на интервале (-150; 15). Из элементов массива А, принадлежащих интервалу (-100; 10), сформировать массив В. __________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ Задание 5. Написать программу. 1. Сформировать одномерный массив В( N ), каждый элемент которого вычисляется по формуле ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 2. Дан массив А(30). Сформировать новый массив В из четных значений массива А, Если таких элементов нет, то сообщить об этом. ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Задание 6. По фрагменту блок-схемы напишите программу и назовите алгоритм обработки: 1. __________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 2. ________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 3._______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
4._________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Задание 7. 1. Вводится следующий поток данных: 7, 2, 3, -2, 4, -7, 10, 1. Напишите программу по данной блок схеме и вычислите результат.
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

2. Вводится следующий поток данных: 9, 5, 2, 3, -2, -6, 4, -7, 1, 10. Напишите программу по данной блок схеме и вычислите результат. ___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Задание 8. 1. Составить по имеющейся программе блок-схему: program zadacha ; var x: array [1..50] of real; i, k, k1, k2: integer; begin k:=0; k1:=0; k2:=0; for i:=1 to 50 do begin writeln (‘ введите значение ‘, i , ‘ эл — та ‘); readln (x[i]); if x[i]0 then k:=k+1 else if x[i]=0 then k1:=k1+1 else k 2:= k 2+1 end ; writeln (‘Положительных элементов’, k ); writeln (‘Элементов равных нулю ’, k1 ); writeln (‘Отрицательных элементов’, k2 ); end .

Помогите, пожалуйста, с информатикой!

Нужно выполнить данные программы в Паскале. Помогите, очень нужно!
1. Дан целочисленный массив X размерности 5х4. Заменить в нем все элементы, меньшие 5 числом 111. Полученный массив вывести.
2.Дана прямоугольная таблица, которая содержит не более 10 строк и не более 10 столбцов. Найти сумму элементов, которые расположены в строках с нечетными номерами и произведение элементов, которые расположены в строках с четными номерами.

3.Дан двумерный массив, который содержит не более 10 строк и не более 10 столбцов. Найти максимальный по абсолютной величине элемент и поменять его местами с последним элементом массива.

4.Дан двумерный массив, который содержит не более 10 строк и не более 10 столбцов. Создать новый массив, элементами которого являются абсолютная величина соответствующего элемента старого массива.

5.Дан двумерный массив, который содержит не более 10 строк и не более 10 столбцов. Создать одномерный массив, элементами которого являются четные элементы двумерного массива.

Лучший ответ

Есть в интернете очень хорошие сайты. с решением задач по любому предмету.

Или же в поисковике набиваете условие задачи. и вам ответ выскакивает на

Но самый лучший сайт. это Решебник.ру.

Есть еще Букваед.ру. еще Решу.ру.

Остальные ответы
«Это письмо получилось таким длинным потому, что у меня не было времени написать его короче.»
Паскаль
«Это письмо получилось таким длинным потому, что у меня не было времени написать его короче.»
Паскаль

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

Только с первым и вторым могу помочь
«Это письмо получилось таким длинным потому, что у меня не было времени написать его короче.»
Паскаль

Одномерный массив можно представить как линейную структуру, в которой элементы следуют друг за другом. Однако бывают более сложные структуры данных. Например, двумерные массивы, которые можно описать как таблицу, в ячейках которой располагаются значения. Для обращения к данным массива указывается номера их строк и столбцов. Часто табличные массивы называют матрицами.

Обычно двумерные массивы на языке программирования Pascal описываются так:

array [1..m, 1..n] of базовый_тип
Однако можно их описывать и по-другому:

array [1..m] of array [1..n] of базовый_тип
При этом описание может быть в разделе type и тогда создается новый тип, который можно использовать при объявлении переменных. Или массив может быть описан непосредственно в разделе переменных. m и n – это константы, их можно опустить и вставить конкретные значения, но лучше так не делать. Обычно подразумевают, что в интервале от 1 до m определяется количество строк, а в интервале от 1 до n – количество столбцов массива.

1 вариант – описание массива через раздел type:
const
M = 10;
N = 5;
type
matrix = array [1..M, 1..N] of integer;
var
a: matrix;
2 вариант – описание массива в разделе переменных:
const
M = 10;
N = 5;
var
a: array [1..M, 1..N] of integer;
При использовании третьего варианта описания лучше сначала определить некоторый тип одномерного массива (строка двухмерного массива), который затем используется при описании двухмерного массива:
type a = array[1..10] of byte;
var b: array[1..100] of a;
Для обращения к элементу двухмерного массива необходимо указать имя массива и в квадратных скобках через запятую – значения двух индексов (первый указывает номер строки, а второй – номер столбца), на пересечение которых стоит элемент (например, a[i,2]:=6). В языке программирования Pascal допустимо разделение индексов с помощью квадратных скобок (например, a[i][5]:= 7).

Если описывается двумерный массив как типизированная константа, то при задании значений его элементов он рассматривается как массив массивов. При этом в общих круглых скобках через запятую перечисляются заключенные в круглые скобки значения элементов строк (каждая строка в своих скобках):
type
arr = array[1..4, 1..3] of integer;
const
cords: arr = ((1,-1,3), (0,0,0), (1,4,0), (4,-1,-1));
Рассмотрим простой пример работы с двумерным массивом. Сначала заполним его данными, а затем выведем их на экран в виде таблицы.
var
matrix: array[1..3,1..5] of integer;
i, j: integer;

begin
writeln (‘Введите 15 чисел: ‘);

for i := 1 to 3 do
for j := 1 to 5 do
read (matrix[i,j]);

for i := 1 to 3 do begin
for j := 1 to 5 do
write (matrix[i,j], ‘ ‘);
writeln
end;

readln
end.
Размерность массива (т. е. количество содержащихся в нем значений) определяется произведением количества строк на количество столбцов. В примере выше в массив помещается 15 значений.

Когда пользователь вводит очередное число, то процедура read считывает его и помещает в ячейку с текущими индексами i и j. Когда i равна единице, значение j меняется пять раз, и, значит, заполняется первая строка таблицы. Когда i равна двум, значение j снова меняется пять раз и заполняется вторая строка таблицы. Аналогично заполняется третья строка таблицы. Внутренний цикл for в общей сложности совершает 15 итераций, внешний только 3.

Как пользователь вводит значения – не важно. Он может их разделять либо пробелом, либо переходом на новую строку.

Вывод значений двумерного массива организован в виде таблицы. Выводятся 3 строки по 5 чисел в каждой. Внутри строк числа разделяются пробелом.

На самом деле, это не совсем корректно написанная программа. Мы несколько раз используем цифры 3 и 5. А что если мы захотим поменять размерность массива? Придется просмотреть всю программу (представьте, чт

——-____________——-
\ ___________/

Одномерный массив можно представить как линейную структуру, в которой элементы следуют друг за другом. Однако бывают более сложные структуры данных. Например, двумерные массивы, которые можно описать как таблицу, в ячейках которой располагаются значения. Для обращения к данным массива указывается номера их строк и столбцов. Часто табличные массивы называют матрицами.
Обычно двумерные массивы на языке программирования Pascal описываются так:
array [1..m, 1..n] of базовый_тип
Однако можно их описывать и по-другому:
array [1..m] of array [1..n] of базовый_тип
При этом описание может быть в разделе type и тогда создается новый тип, который можно использовать при объявлении переменных. Или массив может быть описан непосредственно в разделе переменных. m и n – это константы, их можно опустить и вставить конкретные значения, но лучше так не делать. Обычно подразумевают, что в интервале от 1 до m определяется количество строк, а в интервале от 1 до n – количество столбцов массива.

Почему массивы начинаются с нуля

Самое очевидное объяснение: индекс — это смещение относительно начала массива. Так элементы массива легче адресовать в памяти.

Проверим это на C.

#include int main() < int data[3] = ; int i = 0; printf("Array address: %p\n", data); do < printf("Array[%u] = %p\n", i, (void *)(&data[i])); i++; >while(i

Array address: 0x7ffd7c514a6c
Array[0] = 0x7ffd7c514a6c
Array[1] = 0x7ffd7c514a70
Array[2] = 0x7ffd7c514a74

Как первый (нулевой) элемент, так и сам массив находятся по одному и тому же адресу, поскольку 0-й элемент удалён на 0 элементов от начала. Эта связь между указателями и массивами в C настолько тесная, что их даже можно рассматривать вместе.

Однако это ответ на вопрос «зачем», а не «почему». Нумеровать массивы с нуля стали не сразу. Удивительно, но развитие такого простого вопроса не умещается в предложении или абзаце.

Потому что так удобнее

К началу 1960-х годов сформировалось три подхода к организации структуры, которую сегодня мы называем статическим массивом:

    Исчисление с 0. Нижняя граница массива начинается с нуля.

Непривычно для обывателя, если это не житель Германии, свыкшийся с нумерацией этажей в зданиях. Последний элемент массива из, скажем, 8 элементов имеет номер 7.

Не всё так однозначно. Единообразия даже у самых первых языков программирования не существовало:

  1. Нумерация с нуля: LISP 1.5, APL (допускает выбор при запуске программы).
  2. Нумерация с единицы: APL, Бейсик, ранний Фортран.
  3. Произвольные границы: Алгол-60, затем Фортран, CPL, SIMULA, CLU, PL/1, Кобол, Паскаль, Алгол-68, JOVIAL.

Конечно, это не самый сильный аргумент. Часто языки снабжались синтаксическим сахаром для нумерации с 1. К примеру, в Алголе массив V[0:3] начинается с 0, а массив V[3] — с 1.

Создатель языка APL Кеннет Айверсон в книге «A Programming Language» объясняет, почему далее по тексту он будет пользоваться нумерацией элементов массива с нуля. При этом язык допускает отсчёт как с единицы, так и с нуля. Айверсон приводит уже описанный выше аргумент о сдвигах в позиционной нумерации.

Тем не менее и в эпоху до C звучали предложения выбирать нумерацию с 0. Логично предположить, что это была историческая неизбежность, до которой оставалось несколько лет.

Потому что парусные регаты мешали вычислениям

В 1967 году Мартин Ричардс впервые реализует компилятор своего детища — BCPL (Basic Combined Programming Language). Этот язык программирования был призван исправить проблемы созданного в начале шестидесятых языка CPL путём отказа от технологий, затрудняющих компиляцию.

Первый компилятор BCPL был написан для операционной системы CTSS машины IBM 7094 Массачусетского технологического института. На тот момент компьютеры — это уже не целые комнаты и электронные лампы, но всё ещё огромные шкафы с транзисторами и консоли управления без экранов. Ресурсов серии 7090 хватило, чтобы запустить американца в космос. Но мощность измерялась в тысячах машинных слов, микросекундах тактов и килофлопсах, а цена — в миллионах долларов.

В пятидесятых и шестидесятых IBM выдавала институту щедрые скидки на свои научные компьютеры или даже предоставляла их бесплатно. В 1963 году в МТИ поставили IBM 7094. На компьютер уговор был такой: 8 часов в сутки получают специалисты института, 8 часов — другие колледжи и университеты Новой Англии, а третью смену отдавали самой IBM для личных нужд.

На этом особенности не кончались. Несколько раз в год IBM обсчитывала регаты: президент IBM соревновался в заплыве на больших яхтах в проливе Лонг-Айленд, и каждое из судов получало очки гандикапа по специальной сложной формуле. Когда в вычислительный центр приходило задание, операторам полагалось всё бросить и запустить вычисления этих очков.

Машинный зал с установленным компьютером IBM 7094 в Колумбийском университете США. Фотоархив

Вообще, и без этого был шанс не получить результат вычислений. Изначально 7094 работал в режиме пакетной обработки. Вспомогательная система на IBM 1401 загружала пакет задач с перфокарт на ленту, а затем запускала задачи одну за другой и записывала результаты для последующей печати. Для каждой задачи приводилась оценка времени. Если задача выходила за пределы отпущенного, её принудительно прерывали.

В итоге компиляция в BCPL была оптимизирована по максимуму. То есть и указатели на элементы массива должны максимально близко походить на машинный код, без необходимости вычитать единицу при указании на элемент массива. Хотя во время выполнения программы не играет роли схема организации массивов, нумерация с нуля могла появиться для оптимизации времени компиляции.

Впрочем, конкретно эта версия — лишь гипотеза Майка Хойе. Ей нет никаких подтверждений от собствено Ричардса или хотя бы упоминаний в литературе. Мартин Ричардс в переписке с Хойе лишь приводит общие соображения о том, что он хотел достичь близости к машинному коду, поэтому указатель p и p + 0 — это одна и та же переменная. Ни на какие яхты Ричардс не жалуется.

К тому же на момент появления первого компилятора BCPL уже была готова операционка Compatible Time-Sharing System. В ней на одной машине с разделением времени компьютер выполняет одну задачу за один раз, но с оптимизацией ввода и вывода, чтобы паузы одного пользователя заполнялись работой других. Это уже не былая пакетная обработка задач.

Точно известно, что в дальнейшем BCPL значительно повлиял на все современные языки программирования.

В 1969 году Кен Томпсон урезал функциональность BCPL до языка B. В дальнейшем, для развития операционной системы Unix, Деннис Ритчи улучшил B добавлением функций PDP-11, в результате чего и получился C. Полвека спустя список языков, на которые оказал влияние C, занимает в «Википедии» целую страницу.

В языке BCPL v!5 и 5!v совпадают, поскольку являются указателем на !(v+5) или !(5+v) . Аналогично в C v[5] эквивалентно 5[v] .

Потому что так предложил Дейкстра

В 1982 году Эдсгер Дейкстра опубликовал статью «Почему нумерация должна начинаться с нуля». В ней он низверг как нумерацию с единицы, так и произвольные границы индексов. Очевидно, что Дейкстра — не человек, который легко поддаётся влиянию C, но также он раскритиковал Алгол-60, своё собственное детище, и Паскаль.

Известно, что Дейкстра ближе к концу жизни всё больше писал от руки, а не набирал тексты на машинке. Архив рукописей Эдсгера Вибе Дейкстры

Если необходимо записать интервал натуральных чисел 2, 3, …, 12 без опухоли из точек, возможны четыре варианта:

Затем автор замечает, что для нижней границы предпочтителен знак «⩽», поскольку наименьшее натуральное число существует. В противном случае, если последовательность начинается с наименьшего натурального числа, нижняя граница не будет натуральным числом.

Затем статья делает вывод, что из соображений простоты для последовательности из N членов предпочтительнее диапазон 0 ⩽ i < N , а не 1 ⩽ i < N+1 .

Куда менее известный документ — это полушуточная техническая заметка от 1 апреля 1980 года IEN 137 под названием «О священных войнах и призыв к миру» [On Holy Wars and a Plea for Peace].

В заметке Дэнни Коэн приводит интересный аргумент: в системе счисления с основанием b при отсчёте с нуля первые b ^ N неотрицательных чисел представляются ровно N цифрами. Например, если речь про двоичную запись, то 2 ^ 3 = 8 , и восьмой элемент массива будет иметь номер 1112, а не 10002. Понятно, что с такими преобразованиями легко бы мог справиться компилятор.

Потому что так более элегантно

Это объяснение может раздражать субъективностью. Соображения о красоте у каждого свои и совпадать не обязаны. Но авторы языков программирования — тоже люди со своими предпочтениями.

В конце восьмидесятых Гвидо ван Россум при создании Python как учёл свой предыдущий опыт с языком ABC, так и задумал привлечь аудиторию хакеров от мира Unix и C.

С 1983 года Гвидо работал в Центре математики и информатики в Амстердаме над реализацией языка ABC. Проект ставил целью создать язык программирования, пригодный для обычных людей, но не настолько ужасно реализованный, как Бейсик. Нумерация массивов в ABC начиналась с единицы. Такой же схемы придерживались другие знакомые Россуму языки — Алгол, Фортран и Паскаль.

Однако в вышедшем в 1991 году Python нумерация начинается с нуля, а не единицы. Получилось так в результате долгих размышлений.

Одна из причин — слайсы. Чаще всего при создании слайса используются операции «получить первые n элементов» и «начиная с i, получить следующие n элементов». При этом первый случай эквивалентен i == первый индекс . Гвидо посчитал, что лучше, если обе операции возможны без лишней головной боли в виде коррекции +1 и −1.

Если первый элемент имеет номер 1, то возможно указывать первый элемент и число элементов, которые нужно получить. Россум уже был знаком с подобным по ABC и вполне мог бы положиться на этот опыт.

Тем не менее автора Python очаровал синтаксис слайсов полуоткрытого интервала, если нумерация начинается с нуля: a[:n] (или a[0:n] ) и a[i:i+n] . К примеру, строку a легко разбить на три части a[:i] , a[i:j] и a[j:] .

Заметим, что в воспоминаниях Гвидо не приводит ни призывы гениев информатики, ни практики других языков, ни принципы, заложенные мастодонтами компьютерных вычислений шестидесятых. Зато слово «элегантность» в пяти абзацах его объяснения встречается 3 раза.

Почему же массивы начинаются с нуля?

Так исторически сложилось.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *