Математика имеет разные направления и взгляды. Пример:
Конструктивная математика отвергает используемую в теоретико-множественной математике абстракцию актуальной бесконечности, связанную с рассмотрением никогда не завершаемых процессов как бесконечно продолженных и тем самым как бы завершённых.
И далее:
в конструктивной математике под «существованием» конструктивного объекта понимается его потенциальная осуществимость — то есть наличие в нашем распоряжении метода, позволяющего воспроизводить этот объект любое потребное число раз. Такое понимание резко расходится с пониманием существования объекта, принятым в теоретико-множественной математике.
Бейсик поздних версий (начиная с Turbo Basic и Visual Basic) резко отличается от ранних вариантов. Фактически, это новый язык, который во многом ближе к Фортрану или Паскалю, чем к исходному Бейсику. Основные изменения версий 1990-х годов состоят в следующем: [...] Появилась рекурсия.
Если говорить о проф.математиках, знающих много алгоритмов (на псевдокоде), могущих доказать корректность и оценить сложность, то ситуация сложнее. Найти день, чтобы прочитать 30 стр. описания Паскаля и разобраться в БНФ, каждый из них сможет. Сложность, видимо, во взглядах. У них иной взгляд, чем у «кодеров».
7-летних учеников у меня не было. (Был, правда, случай, когда читал лекцию про комп. игры в младших классах подшефной школы). Но это не про циклы и переменные. Думаю, что в данном случае, если сын захочет, то папа сможет провести с ним больше, чем 3 занятия. Но в 7 лет дети часто меняют желания и увлечения. И в более старшем возрасте… Один мой знакомый — университетский профессор, математик, спец. по комбинаторике и теории графов. У нас с ним назревала совместная статья в мат.сборник по его интересному алгоритму. Как-то он пожалел, что не умеет программировать. Я ему предложил прочесть 30 страничную книгу Вирта о Паскале. С его уровнем это было бы не трудно, обещал помочь если возникнут затруднения. Он сначала загорелся, а потом сказал, что передумал. Отсюда ИМХО вывод, что не все люди хотят «кодить» :)
Матан для многих сложнее:) Конечно, понятие теоретической сложности алгоритмов не для первых занятий. Понятие переменной всем известно из школьной алгебры. С пониманием типов у начинающих иногда возникают трудности. Ветвления и циклы проблем обычно не вызывают — все знают выражение «ходить по кругу» — «зациклиться»:)
Ну, не на первом шаге, не на первом занятии, а на 4ом вполне возможно. Я в МГУ когда-то по Паскалю лекции читал. Уложился в 6 лекций. Рекурсия вопросов не вызвала.
Dr Pascal был предназначен для вводного курса по программированию для первокурсников. Там приводился пример рекурсии в задаче 8 ферзей. И для бинарных деревьев рекурсия нужна. Рекурсивные алгоритмы очень наглядны.
Каждая строка начиналась с номера. При вводе в редактор строка оказывалась в исходном тексте программы на позиции, соответствующей её номеру. Для вставки новой строки нужно было дописать строку с номером, находящимся в диапазоне между номерами двух других строк. «Раздвинуть» строки было невозможно, если требовалось вставить новую строку между строками с соседними номерами, приходилось повторно вводить эти строки с другими номерами, чтобы обеспечить разрыв в нумерации (либо применять специальную команду RENUM, которая перенумеровывала все уже введённые строки с постоянным шагом, синхронно изменяя все команды переходов).
Там еще много примеров для ранних версий, теперешний VBA — это другой язык, как и поздние версии фортрана сильно отличны от фортрана-4.
VBA отличается от QBasic-а не меньше, чем QBasic от ранних версий Basic-а. В ранних версиях не было IDE, строки нужно было нумеровать руками. Подпрограммы Basic не полноценные процедуры. Вызывались gosub номер строки, параметры передавлись через глобальные переменные. Был оператор let. Важной причиной популярности Basic стал его небольшой объем, который можно было впихнуть в маленькую память. Перед VBA такой задачи не было.
program tmp;
{Delpi 7}
{$APPTYPE CONSOLE}
uses
SysUtils,System;
var
M : array of array of integer;
N : integer;
i,j,c : integer;
level, start, fin : integer;
v : integer;
stop: integer;
begin
write ('N=?');
readln (N);
SetLength(M,N+1,N+1);
{
//
for i :=1 to N do
for j:= 1 to N do
M[i,j]:= 0;
//
}
v := 0;
start := 0;
fin := N;
i:= 1;
stop := N * N div 2 + N mod 2;
for level:=1 to stop do // main loop
begin
start := start+1;
for c:=start to fin do // from left to right
begin
v := v+1;
M [i,c] := v;
j := c;
end;
start := start+1;
for c:=start to fin do // from top to bot
begin
v := v+1;
M [c,j] := v;
i := c;
end;
start := start-1;
fin := fin-1;
for c:=fin downto start do // from right to left
begin
v := v+1;
M [i,c] := v;
j := c;
end;
for c:=fin downto start+1 do // from bot to top+1
begin
v := v+1;
M [c,j] := v;
i := c;
end;
end; // main loop
// print result
for i :=1 to N do
begin
for j:= 1 to N do
write (M[i,j]:3);
writeln;
end;
writeln ('v=',v,'=N*N');
write ('Press anykey to exit...');
readln;
end.
2 цикла перебирают элементы матрицы, только вложенный порезан на 4 малых цикла для перечисления нужных участков строк и столбцов.
И далее: