Принципы построения компьютера предложил фон Нейман
Принципов, изложенных фон Нейманом, было пять:
1 .Использование двоичной системы счисления. Ее преимущество перед традиционной десятичной системой состоит в том, что над числами в двоичной записи намного легче проводить арифметические операции. Справедливости ради стоит заметить, что этот принцип не был изобретен лично фон Нейманом. Уже в немецких моделях вычислительных машин Z1−Z4, которые разрабатывались начиная с 1938 года, использовалась двоичная система.
2.Принцип линейности и однородности памяти. Память в машине фон Неймана - это линейная последовательность элементов (ячеек). Ячейки памяти имеют адреса. Другие устройства компьютера могут записывать информацию в любую ячейку и считывать информацию из любой ячейки, обращаясь к ячейке по ее адресу. Этот принцип определил возможность работать с переменными.
3.Принцип программного управления. Работа вычислительной машиной управляется без участия человека программой, которая хранится в памяти. (Исключения составляют случаи, когда это участие предусмотрено самой программой. Например, человек вводит данные.) В качестве примера устройства, которое выполняет команды, но исключительно с участием человека, можно назвать калькулятор. Программа состоит из команд, которые выполняются друг за другом. При этом каждая команда либо сама указывает на следующую за ней команду, либо следующей будет выполняться команда из соседней ячейки памяти. Этот процесс длится, пока не выполнится команда конца программы.
4.Принцип совместного использования памяти. Память компьютера хранит одинаковым образом и данные, и команды. Компьютер не может определить, что хранится в данной ячейке памяти – данные или команда. Поэтому над командами можно выполнять те же действия, что и над данными. Следовательно, команды одной программы могут быть получены в качестве результата, возвращенного другой программой. Самым важным следствием этого принципа является принцип хранимости программы в памяти вместе с данными. Это предопределило возможность относительно легко менять программу. Для вычислительных машин, созданных до принципов фон Неймана (немецкие модели Z1−Z4) перепрограммирование было либо вообще невозможно, либо требовало переключения специальных перемычек на панели, которое занимало несколько дней.
5.Условный переход. Несмотря на последовательность выполнения команд, можно реализовать переход к любому участку кода.
// PascalABC.NET 3.4.2, сборка 1790 от 15.09.2018
// Внимание! Если программа не работает, обновите версию!
type
РайонГорода = class
private
Naim: string;
S: real;
Kol: integer;
procedure SetNaim(NewName: string);
begin
if NewName.Length > 0 then Naim := NewName
end;
procedure SetKol(NewKol: integer);
begin
if NewKol > 0 then Kol := NewKol
end;
public
property Название: string read Naim write SetNaim;
property Площадь: real read S;
property ЧисленностьНаселения: integer read Kol write SetKol;
constructor(НаимРайона: string; Площадь: real; Население: integer);
begin
Naim := НаимРайона;
S := Площадь;
Kol := Население
end;
function ПлотностьНаселения := Round(Kol / S, 2);
procedure ЗадатьИмя(НаимРайона: string);
begin
SetNaim(НаимРайона)
end;
procedure ЗадатьЧисленность(Население: integer);
begin
SetKol(Население)
end;
end;
Город = class
private
City: string;
Districts: List<РайонГорода>;
public
constructor(Город: string);
begin
Districts := new List<РайонГорода>;
City := Город
end;
property НаселенныйПункт: string read City;
procedure ДобавитьРайон(Район: string; Площадь: real; Проживает: integer);
begin
var R := new РайонГорода(Район, Площадь, Проживает);
Districts.Add(R)
end;
function СредняяПлощадь := Districts.Select(d -> d.Площадь).Average;
function СредняяЧисленность :=
Districts.Select(d -> d.ЧисленностьНаселения).Average;
function ГустонаселенныйРайон :=
Districts.Select(d -> (d.Название, d.ПлотностьНаселения)).MaxBy(r -> r[1]);
procedure ИзменитьНаименованиеРайона(s1, s2: string);
begin
var i := Districts.FindIndex(d -> d.Название = s1);
if i >= 0 then Districts[i].ЗадатьИмя(s2)
end;
procedure ИзменитьЧисленностьРайона(s: string; n: integer);
begin
var i := Districts.FindIndex(d -> d.Название = s);
if i >= 0 then Districts[i].ЗадатьЧисленность(n)
end;
procedure Вывод;
begin
Println('Сведения по городу', City);
foreach var d in Districts do
Println(d.Название, d.Площадь, d.ЧисленностьНаселения);
Println('-' * 60)
end;
end;
begin
var GG := new Город('Просто город');
GG.ДобавитьРайон('Ворошиловский', 30, 218439);
GG.ДобавитьРайон('Железнодорошный', 69, 104339);
GG.ДобавитьРайон('Кировский', 18.6, 63499);
GG.ДобавитьРайон('Ленинский', 13, 821730);
GG.Вывод;
GG.ИзменитьНаименованиеРайона('Железнодорошный', 'Железнодорожный');
GG.ИзменитьЧисленностьРайона('Ленинский', 82173);
GG.Вывод;
Println('Средняя площадь', GG.СредняяПлощадь);
Println('СредняяЧисленность', GG.СредняяЧисленность);
var (Район, Плотность) := GG.ГустонаселенныйРайон;
Println('Наиболее густонаселен', Район, Плотность)
end.
Відповідь:
i = 14.
Пояснення:
Начнем с конца.
Для выхода из цикла условие ( i <= 15 ) не должно выполняться. Значит на последнем цикле, в конце i = 16. Изменение переменной i идет в сторону увеличения ( i = i + 1 ), значит в начале цикла i = 15 - выполнение второй раз, i = 14 - выполнение первый раз.