OberonCore https://forum.oberoncore.ru/ |
|
Интересный сайт - обучение школьников С++ и Паскаль https://forum.oberoncore.ru/viewtopic.php?f=88&t=2008 |
Страница 10 из 13 |
Автор: | Илья Ермаков [ Пятница, 06 Декабрь, 2013 07:37 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Геннадий Тышов писал(а): Какая цель этих рассуждений (не связанных с наименованием темы) Цитата: С каждой Sequence связаны охранники. Цитата: Охранники - это не управляющие конструкции. в чем практическая сторона этих длительных рассуждений?Люди тренируют свой аппарат анализа свойств программ. Конечно, это имеет смысл только для тех, кто "строит по сопромату". Ну а кто-то до сих пор не поймёт, зачем нужен "расчёт прочности" и "какие-то умные рассуждения", а строит дома в духе "ну, вот эту ...ню сделаем квадратной, а эту потолще... Ну, всё сразу видно, что выдержит. А у вас в выкладках ни хрена не понятно.". |
Автор: | ==== [ Пятница, 06 Декабрь, 2013 08:23 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Есть, массово применяемый сейчас, большой опыт программирования русскими программистами, на русских языках 1С. Это использование стиля программирования "Скульптор", широкое применение заменителей Goto для обеспечения - локальности принятия решений, локальности реализации принятых решений, снижения уровня вложенности, создание переменных при их использовании. В части циклов обработки процесса последовательности получения (чтения) информации из файлов и списковых структур в языках 1С сделано гораздо проще и нагляднее. К примеру, на языке 1С V7 - Код: // Найти в табличной части документу строку удовлетворяющую критерия XXX и YYY
// при поиске единственной строки прекратить простотр документа // Док.ВыбратьСтроки(); Пока Док.ПолучитьСтроку()=1 Цикл Если Док.ААА<>XXX Тогда Продолжить; ИначеЕсли Док.БББ<>YYY Тогда Продолжить; КонецЕсли; // ... // Обработать строку Док. Прервать; КонецЦикла; |
Автор: | ilovb [ Пятница, 06 Декабрь, 2013 08:45 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Геннадий Тышов: Реальный код покажите, пожалуйста. Тогда можно будет и поразмышлять. Демонстрации бессмысленных кусков кода не вызывают желания обсуждать это. |
Автор: | Илья Ермаков [ Пятница, 06 Декабрь, 2013 08:57 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Геннадий Тышов писал(а): ... Никто не будет лезть в тело вашего цикла и прогонять его по строкам, чтобы разобраться, когда он там заканчивается и что делает. На этапе аудита кода аффтар будет отправлен переписывать свою "скульптуру". |
Автор: | ilovb [ Пятница, 06 Декабрь, 2013 09:11 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Код: Док.ВыбратьСтроки(); // поиск Пока Док.ПолучитьСтроку()=1 И НЕ <Нашли> Цикл КонецЦикла; // обработка результата поиска Если <Нашли> Тогда ... // Обработать строку Док. КонецЕсли; У защитников goto прямо любовь к смешению мух с котлетами... |
Автор: | albobin [ Пятница, 06 Декабрь, 2013 09:19 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Мысль понятна, но это никаким образом не связано ни с этнической принадлежностью программиста, ни к использованному языку. Так, или примерно так, можно писать и на С и на MUMPSе и на OBERONе. Может всё сводится к такой идее? Любые безобразия разрешены, если они однообразны PS. На всякий случай прошу не обижаться, это не насмешка. |
Автор: | igor [ Пятница, 06 Декабрь, 2013 09:56 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Геннадий Тышов писал(а): Код: Если Док.ААА<>XXX Тогда Продолжить; ИначеЕсли Док.БББ<>YYY Тогда Продолжить; КонецЕсли; |
Автор: | igor [ Пятница, 06 Декабрь, 2013 10:04 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
albobin писал(а): Может всё сводится к такой идее? Да это же один из армейских лозунгов. Любые безобразия разрешены, если они однообразны (В оригинале: "Пусть безобразно, но единобразно!") |
Автор: | ==== [ Пятница, 06 Декабрь, 2013 10:55 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
igor писал(а): А дизъюнкцию условий сделать, никак? Не надо делать логическое выражение, применяем принцип декомпозиции, ведь критерии независимы друг от друга.У В.Д. Паронджанова есть рекомендация заменять логические выражения раздельными иконами Вопрос. Вложение: Новый_76(1).png
|
Автор: | ilovb [ Пятница, 06 Декабрь, 2013 11:28 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Цитата: применяем принцип декомпозиции Вы уверены, что понимаете значение слова "декомпозиция" по отношению к коду? ps Кстати, igor, вот вам просто замечательный пример как с помощью break превратить простейший поиск в ...... |
Автор: | igor [ Пятница, 06 Декабрь, 2013 12:10 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Геннадий Тышов писал(а): У В.Д. Паронджанова есть рекомендация заменять логические выражения раздельными иконами Вопрос. Так вот откуда ветер дует. Применительно к текстовым языкам это спорная рекомендация. |
Автор: | igor [ Пятница, 06 Декабрь, 2013 12:14 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
ilovb писал(а): ps Кстати, igor, вот вам просто замечательный пример как с помощью break превратить простейший поиск в ...... Да, я уже говорил, что не являюсь стороником всяких брейков и continue.
|
Автор: | ==== [ Пятница, 06 Декабрь, 2013 12:24 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
ilovb писал(а): У защитников goto прямо любовь к смешению мух с котлетами... ilovb писал(а): ps Кстати, igor, вот вам просто замечательный пример как с помощью break превратить простейший поиск в ...... Такие высказывания вызваны односторонним обучением, с явным креном на запугивание незрелого студента. Потом, в жизни, трудно отказаться от заблуждений, признаться, что всю жизнь заблуждался. Заблуждение доводит программиста до религиозного фанатизма. Читает "Как улучшить работу ума" В.Д. Паронджанова - Цитата: Вариант 1 описывает ортодоксальную позицию Дейкстры, согласно которой оператор goto имеет “гибельные последствия” и поэтому “должен быть исключен из всех языков программирования высокого уровня”. Исходя из этого были разработаны языки без goto: PDL [3], BLISS и др. Цитата: Ортодоксальный метод Дейкстры, полностью запрещающий goto и заменители (см. с. 238, табл. 4, вариант 1), безусловно является строгим формальным методом. К сожалению, он полезен лишь как интересная теоретическая идея, которая, как показал всемирный опыт, в чистом виде оказалась непригодной для массового использования. Смотрите также http://elementy.ru/lib/430680?context=286336&discuss=430680 Цитата: это какая-то очень яркая демонстрация свойства человеческой психики, что если человеку что-то внушили в студенческой молодости, то он будет отстаивать очевидно неверный взгляд, ибо в противном случае ему прийдется отбросить сентиментальные воспоминания и десятилетия, на которых базируется его или ее самооценка.
|
Автор: | adva [ Пятница, 06 Декабрь, 2013 12:47 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Геннадий Тышов писал(а): Смотрите также http://elementy.ru/lib/430680?context=286336&discuss=430680 Цитата: это какая-то очень яркая демонстрация свойства человеческой психики, что если человеку что-то внушили в студенческой молодости, то он будет отстаивать очевидно неверный взгляд, ибо в противном случае ему прийдется отбросить сентиментальные воспоминания и десятилетия, на которых базируется его или ее самооценка. А к себе данное высказывание не пробовали применять? Я за большую структурность, т.к. иногда так доставляют всякие "Продолжить" в циклах, и особенно "Возвраты" в "русском" языке 1С, особенно когда они применяются совершенно не к месту. Я за "Возврат" либо в первой строке процедуры (тогда ясно, что она не выполняется, по сути пустышка), либо в последней. "Продолжить" еще могу допустить в начале цикла, но в этом случае он легко заменяется "если". Выход же где либо из середины цикла, и при этом сам цикл на экран не помещается, это "вещь". Пришел к этому сам, без этого сайта, студентом не учился программированию, самоучка, очень много чужого кода приходилось разбирать на 1С, и брейки из середины цикла, очень запутывают код. Попал на данный сайт, нашел подтверждение своих взглядов. |
Автор: | ilovb [ Пятница, 06 Декабрь, 2013 12:51 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Геннадий Тышов писал(а): Такие высказывания вызваны односторонним обучением, с явным креном на запугивание незрелого студента. Потом, в жизни, трудно отказаться от заблуждений, признаться, что всю жизнь заблуждался. Заблуждение доводит программиста до религиозного фанатизма. Вы промахнулись чуть более чем полностью. Я 100% самоучка. И все мои представления сформировались на собственных ошибках. Даже больше скажу. По Дейкстре из меня должен был получиться любитель goto, т.к. мой первый язык QBASIC. Однако все получилось с точностью наоборот. Как раз благодаря васику я понял, что goto - это плохо. Мои первые опыты программирования дали хорошо прочувствовать сложность управления таким кодом. (и его анализа) |
Автор: | ilovb [ Пятница, 06 Декабрь, 2013 13:35 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Геннадий, вот одна из моих самых первых программ (храню как память о тех временах) Можете оценить степень хаоса в голове самоучки во время первых шагов в программировании, когда рядом нет никого знающего. Эта программа примечательна тем, что тут я впервые столкнулся со сложностью логики. Игра "Змейка" Код: CLS
SCREEN 12 RANDOMIZE TIMER DIM h(490): DIM v(388) FOR v = 2 TO 390 STEP 6 vi = vi + 1 hi = 0 FOR h = 2 TO 492 STEP 6 hi = hi + 1 h(hi) = h PSET (h, v), 8 FOR z = 1 TO 50: NEXT z NEXT h v(vi) = v NEXT v DIM x(100): DIM y(100) DIM nelzax(1000): DIM nelzay(1000) KEY(4) ON: ON KEY(4) GOSUB pause KEY(11) ON: ON KEY(11) GOSUB vverch KEY(12) ON: ON KEY(12) GOSUB vlevo KEY(13) ON: ON KEY(13) GOSUB vpravo KEY(14) ON: ON KEY(14) GOSUB vniz ON TIMER(15) GOSUB tuhloe LINE (1, 1)-(489, 387), 15, B LINE (2, 2)-(488, 386), 7, B LINE (3, 3)-(487, 385), 8, B PAINT (4, 4), 2, 8 live = 5 nachalo: x = 236: y = 158 FOR n = 1 TO 4 x(n) = 230 y(n) = 152 NEXT n dy = -6 n = 0 d = 4 c = 6 DO LOOP UNTIL INKEY$ = CHR$(13) GOSUB yabloco WHILE INKEY$ <> CHR$(27) IF x = h(hi) AND y = v(vi) AND clr = 1 THEN d = d + 3: TIMER OFF: c = 1: GOSUB yabloco IF x = h(hi) AND y = v(vi) AND clr = 4 THEN d = d + 6: TIMER OFF: c = 6: GOSUB yabloco IF c = 1 THEN GOSUB ponos n = n + 1 IF x(n + 1) = 0 THEN x(n + 1) = -10 x = x + dx: y = y + dy GOSUB proverka x(n) = x: y(n) = y IF n = d THEN n = 0 x1 = x(n + 1): y1 = y(n + 1) CIRCLE (x, y), 2, c CIRCLE (x, y), 1, c PSET (x - 1, y - 1), c: PSET (x + 1, y + 1), c: PSET (x + 1, y - 1), c: PSET (x - 1, y + 1), c: PSET (x, y), c CIRCLE (x1, y1), 2, 2 CIRCLE (x1, y1), 1, 2 PSET (x1 - 1, y1 - 1), 2: PSET (x1 + 1, y1 + 1), 2: PSET (x1 + 1, y1 - 1), 2: PSET (x1 - 1, y1 + 1), 2: PSET (x1, y1), 8 FOR i = 1 TO 5000: NEXT i WEND END vverch: IF dy <> 6 THEN dy = -6: dx = 0 RETURN vniz: IF dy <> -6 THEN dy = 6: dx = 0 RETURN vlevo: IF dx <> 6 THEN dx = -6: dy = 0 RETURN vpravo: IF dx <> -6 THEN dx = 6: dy = 0 RETURN yabloco: clr = 4 zan: vi = 2 + RND * 61: hi = 2 + RND * 78 FOR prov = 1 TO d IF h(hi) = x(prov) OR v(vi) = y(prov) THEN GOTO zan NEXT prov tuh: CIRCLE (h(hi), v(vi)), 2, clr CIRCLE (h(hi), v(vi)), 1, clr PSET (h(hi) - 1, v(vi) - 1), clr: PSET (h(hi) + 1, v(vi) + 1), clr: PSET (h(hi) + 1, v(vi) - 1), clr: PSET (h(hi) - 1, v(vi) + 1), clr: PSET (h(hi), v(vi)), clr TIMER ON RETURN proverka: IF live = 0 THEN END IF x > 3 AND x < 487 AND y = 2 OR y = 386 THEN live = live - 1: GOTO nachalo IF y > 3 AND y < 385 AND x = 2 OR x = 488 THEN live = live - 1: GOTO nachalo FOR prov = 1 TO d IF x = x(prov) AND y = y(prov) THEN END NEXT prov FOR prov = 1 TO kolvo IF x = nelzax(prov) AND y = nelzay(prov) THEN END NEXT prov RETURN pause: WHILE INKEY$ <> CHR$(13) WEND RETURN ponos: naugad = RND * 1000 IF naugad > 500 AND naugad < 600 THEN CIRCLE (x1, y1), 1, 0: CIRCLE (x1, y1), 2, 0: kolvo = kolvo + 1: nelzax(kolvo) = x1: nelzay(kolvo) = y1 PSET (x1 - 1, y1 - 1), 0: PSET (x1 + 1, y1 + 1), 0: PSET (x1 + 1, y1 - 1), 0: PSET (x1 - 1, y1 + 1), 0: PSET (x1, y1), 0 END IF RETURN tuhloe: clr = 1 GOTO tuh END |
Автор: | albobin [ Пятница, 06 Декабрь, 2013 14:07 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Пару слов о споре, где правильно локализовывать обработку найденного. Правильный ответ это - да там, где надо , в полном соответствии с тем шаблоном который служит основой. Тот, классический линейный поиск, он для последовательного выполнения сначала поиска, а затем обработки. Его можно рассматривать как частный случай последовательности : выбрать по некому критерию ; обработать выборку; Результатом выборки может быть произвольное к-во чего-то. Другой вариант - это цикл поиска совмещённый с обработкой. Крайние случаи: ДляВсехБезИсключения и ТолькоДляПервогоПодходящего. Какой придумать типовой шаблон для этих целей - это отдельный вопрос. |
Автор: | ==== [ Пятница, 06 Декабрь, 2013 14:11 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
ilovb Если первая программа работает, то замечательно, Вы достигли цели. Следующей Вашей целью должна быть наработка критериев качества и техники программирования. Для осмысливания должно быть написано еще множество вариантов программы. ============== Пытался аргументированно ответить Вам, но отказался от попытки переубеждать. Из своего творчества привожу фрагмент кода из ИС Дракон текущего состояния. Поиск строки Obraz во всех тестах всех Дракон-листов пользовательского проекта. Код: procedure PrktPoisk;
label L1; var NMLt,NEl,NDr,FLt,Prohod:Integer; El:tEl; Dr:tDr; Lt:tLt; TObr,FName:String; begin WListVyhod; TObr:=AnsiLowerCase(Obraz); for Prohod:=1 to 2 do begin // 1-До конца,2-от начала FLt:=0; // for NMLt:=0 to Length(MLt)-1 do begin with MLt[NMLt] do FName:=MVer[Length(MVer)-1].VName; Lt:=Nil; LtLoad(FName,Lt); if Pos(TObr,AnsiLowerCase(Lt.Klt1))>0 then goto L1; if Pos(TObr,AnsiLowerCase(Lt.Klt2))>0 then goto L1; if Pos(TObr,AnsiLowerCase(Lt.Klt3))>0 then goto L1; if Pos(TObr,AnsiLowerCase(Lt.Klt4))>0 then goto L1; if Form1.MV_Txt.Checked then begin if Pos(TObr,AnsiLowerCase(Lt.ATxt))>0 then goto L1; if Pos(TObr,AnsiLowerCase(Lt.BTxt))>0 then goto L1; if Pos(TObr,AnsiLowerCase(Lt.PTxt))>0 then goto L1; end; // for NDr:=0 to Lt.SDr.Count-1 do begin Dr:=Lt.SDr.Items[NDr]; if Pos(TObr,AnsiLowerCase(Dr.Id))>0 then goto L1; if Form1.MV_Txt.Checked then begin if Pos(TObr,AnsiLowerCase(Dr.ATxt))>0 then goto L1; if Pos(TObr,AnsiLowerCase(Dr.BTxt))>0 then goto L1; if Pos(TObr,AnsiLowerCase(Dr.PTxt))>0 then goto L1; end; // for NEl:=0 to Dr.SEl.Count-1 do begin El:=Dr.SEl.Items[NEl]; if El.Tip in [elUzl,elUPD,elGChe] then Continue; if Pos(TObr,AnsiLowerCase(El.Id))>0 then goto L1; if Pos(TObr,AnsiLowerCase(El.TxT))>0 then goto L1; if (El.Tip in [elVvd,elVyv,elPlk,elGPlk,elPPr])and (Pos(TObr,AnsiLowerCase(El.TxB))>0) then goto L1; if Form1.MV_Txt.Checked then begin if Pos(TObr,AnsiLowerCase(El.ATxt))>0 then goto L1; if Pos(TObr,AnsiLowerCase(El.BTxt))>0 then goto L1; if Pos(TObr,AnsiLowerCase(El.PTxt))>0 then goto L1; end; end; // end; // Lt.Free; Continue; L1: // Нашли Lt.Free; Inc(FLt); if FLt<>PozPrkt then Continue; LtOLoad(FName); NLt:=NMLt; PozLt:=1; LtPoisk; with MLt[NLt] do Form1.StatusBar.Panels[1].Text:=MVer[NVer].Soob; Exit; end; // if Prohod=2 then else if frDown in Form1.FindPrkt.Options then begin if Application.MessageBox( PChar('Конец. Продолжить поиск с начала?'), PChar('Поиск'), mb_YesNo+mb_IconQuestion)<>idYes then Exit; PozPrkt:=1; end else begin if Application.MessageBox( PChar('Начало. Продолжить поиск с конца?'), PChar('Поиск'), mb_YesNo+mb_IconQuestion)<>idYes then Exit; PozPrkt:=FLt; end; end; // ShowMessage(Format('%s: %s',['Не найден',Obraz])); end; |
Автор: | ilovb [ Пятница, 06 Декабрь, 2013 14:23 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Это вы сейчас так пишете? Извиняюсь, а сколько у вас опыта в программировании? Цитата: Если первая программа работает, то замечательно, Вы достигли цели. Какой еще цели? |
Автор: | albobin [ Пятница, 06 Декабрь, 2013 14:33 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Какое счастье, что на моём пути встретился MUMPS |
Страница 10 из 13 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |