Обновить
14

Химик и программист.

32
Подписчики
Отправить сообщение
А вот в реальной жизни практически никогда не нужно оперировать со 'знакомыми объектами'
В GUI нужно. Или предлагаете только консольные приложения делать? Я про это писал.
К сожалению, сегодня роботы-таксисты сбивают пешеходов, а бортовые ИИ роняют самолеты.
Еще можо вспомнить парадокс Рассела и связанные парадоксы.
Математика имеет разные направления и взгляды. Пример:
Конструктивная математика отвергает используемую в теоретико-множественной математике абстракцию актуальной бесконечности, связанную с рассмотрением никогда не завершаемых процессов как бесконечно продолженных и тем самым как бы завершённых.
И далее:
в конструктивной математике под «существованием» конструктивного объекта понимается его потенциальная осуществимость — то есть наличие в нашем распоряжении метода, позволяющего воспроизводить этот объект любое потребное число раз. Такое понимание резко расходится с пониманием существования объекта, принятым в теоретико-множественной математике.
Про какую версию Вы говорите?
Я о версии, котрая была в MS DOS 3.2.
В ранних версиях Basic:
Рекурсия не допускалась.

Бейсик поздних версий (начиная с Turbo Basic и Visual Basic) резко отличается от ранних вариантов. Фактически, это новый язык, который во многом ближе к Фортрану или Паскалю, чем к исходному Бейсику. Основные изменения версий 1990-х годов состоят в следующем: [...] Появилась рекурсия.
На этом основывается суть всех учебных заведений.
Традиционных учебных заведений. Но сейчас множество курсов, где бывает очень своеобразная «педагогика».
Если говорить о проф.математиках, знающих много алгоритмов (на псевдокоде), могущих доказать корректность и оценить сложность, то ситуация сложнее. Найти день, чтобы прочитать 30 стр. описания Паскаля и разобраться в БНФ, каждый из них сможет. Сложность, видимо, во взглядах. У них иной взгляд, чем у «кодеров».
7-летних учеников у меня не было. (Был, правда, случай, когда читал лекцию про комп. игры в младших классах подшефной школы). Но это не про циклы и переменные. Думаю, что в данном случае, если сын захочет, то папа сможет провести с ним больше, чем 3 занятия. Но в 7 лет дети часто меняют желания и увлечения. И в более старшем возрасте… Один мой знакомый — университетский профессор, математик, спец. по комбинаторике и теории графов. У нас с ним назревала совместная статья в мат.сборник по его интересному алгоритму. Как-то он пожалел, что не умеет программировать. Я ему предложил прочесть 30 страничную книгу Вирта о Паскале. С его уровнем это было бы не трудно, обещал помочь если возникнут затруднения. Он сначала загорелся, а потом сказал, что передумал. Отсюда ИМХО вывод, что не все люди хотят «кодить» :)
А в турбо Паскале была черепашья графика. Наверное, самый простой подход для начинающих.
Матан для многих сложнее:) Конечно, понятие теоретической сложности алгоритмов не для первых занятий. Понятие переменной всем известно из школьной алгебры. С пониманием типов у начинающих иногда возникают трудности. Ветвления и циклы проблем обычно не вызывают — все знают выражение «ходить по кругу» — «зациклиться»:)
Ну, не на первом шаге, не на первом занятии, а на 4ом вполне возможно. Я в МГУ когда-то по Паскалю лекции читал. Уложился в 6 лекций. Рекурсия вопросов не вызвала.
Dr Pascal был предназначен для вводного курса по программированию для первокурсников. Там приводился пример рекурсии в задаче 8 ферзей. И для бинарных деревьев рекурсия нужна. Рекурсивные алгоритмы очень наглядны.
ИМХО выучить может чуть сложнее, а учиться будет проще.
См. Вики:
Каждая строка начиналась с номера. При вводе в редактор строка оказывалась в исходном тексте программы на позиции, соответствующей её номеру. Для вставки новой строки нужно было дописать строку с номером, находящимся в диапазоне между номерами двух других строк. «Раздвинуть» строки было невозможно, если требовалось вставить новую строку между строками с соседними номерами, приходилось повторно вводить эти строки с другими номерами, чтобы обеспечить разрыв в нумерации (либо применять специальную команду RENUM, которая перенумеровывала все уже введённые строки с постоянным шагом, синхронно изменяя все команды переходов).
Там еще много примеров для ранних версий, теперешний VBA — это другой язык, как и поздние версии фортрана сильно отличны от фортрана-4.
Многие классические алгоритмы, которые изучают на первых шагах, рекурсивные (Ханойские башни, 8 ферзей и т.д.). А в QBasic нет рекурсии.
Есть Паскаль специально для обучения. Нпр., Dr Pascal.
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 малых цикла для перечисления нужных участков строк и столбцов.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность