Какой язык программирования надо втюхивать в школе

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Какой язык программирования надо втюхивать в школе

Post by Lavr »

imsushka wrote:причем я тп использовал как компилятор асма.
Последний раз, когда я что-то писал на Паскале, я его тоже использовал, как компилятор асма. :wink:
Мне нужен был пример работы с ЖК дисплеем через ЛПТ-порт, ну и образец нашел на Паскале.

Посмотрел я, а там лишь графический экран открыли на Паскале... остальное почти всё на асме.
Захотелось мне в образец отсебятинки добавить, а Паскалю то так не нравится, то иначе... :-?

Плюнул я тогда на его придирки и написал всё в нём на асме вызовами ДОС АПИ.
А когда наигрался, то подумал:"ну можно сказать, что на ПАСКАЛЕ написал!" :ebiggrin:
iLavr
Andnor
Fanat
Posts: 80
Joined: 01 Jan 2023 11:37

Re: Какой язык программирования надо втюхивать в школе

Post by Andnor »

begin и end в паскале — это да, сомнительное решение. Но в целом, если воспринимать их как аналоги { } в Си, коими они и являются, нет в них ничего особенно плохо. Может и не идеально, но и не совсем плохо.

А вот в Basic сомнительной и вредной фигни гораздо больше, из-за чего серьёзные программисты на него даже не смотрят, да и начинающим он не подходит:
  • Отсутствие объявления переменных и странные умолчания — да, понимаю, наследие древних диалектов Фортрана где тип определялся по первой букве переменой, но всё-таки...
  • Очень странное объявление функций в QBasic (и наверное в Quick тоже, будем далее писать QB, имея ввиду оба), они скрываются из вида и нужно куда-то нажимать, чтобы на них посмотреть.
  • REM для комментариев. Если уж Begin/End ты считаешь недостатком, то REM куда хуже, поскольку комментарии нужны постоянно. В хорошем коде они могут быть вообще через строчку. В то время как операторные скобки встречаются не так часто.
  • Наследие восьмибитных бейсиков с gosub и goto. Может и не является недостатком именно QB, где есть и более современный синтаксис, но при поиске литературы по BASIC, начинающий программист скорее наткнётся на что-то где описан бейсик с номерами строк и вполне возможно так в QB и начнёт писать с лапшой из goto.
Тогда как Pascal хорош тем, причём именно для начинающих, что в нём писать в плохом стиле сложнее чем в хорошем. Например переменные объявлять вообще обязательно, метки тоже надо объявлять, благодаря чему соблазн устроить лапшу из goto меньше, begin/end позволяют лучше видеть структуру кода, разделение функций и процедур помогает избегать побочного эффекта в функциях и позволяет хотя бы понять, что это такое и так далее.

В дальнейшем, когда хороший стиль и мышление уже сформированы, можно переходитть на C или наоборот на какие-нибудь более далекие от железа языки вроде OCaml или Tcl.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Какой язык программирования надо втюхивать в школе

Post by Lavr »

Andnor wrote:begin и end в паскале — это да, сомнительное решение. Но в целом, если воспринимать их как аналоги { } в Си, коими они и являются, нет в них ничего особенно плохо. Может и не идеально, но и не совсем плохо.

А вот в Basic сомнительной и вредной фигни гораздо больше, из-за чего серьёзные программисты на него даже не смотрят, да и начинающим он не подходит:

 Всё остальное...
  • [*] Отсутствие объявления переменных и странные умолчания — да, понимаю, наследие древних диалектов Фортрана где тип определялся по первой букве переменой, но всё-таки...
    [*] Очень странное объявление функций в QBasic (и наверное в Quick тоже, будем далее писать QB, имея ввиду оба), они скрываются из вида и нужно куда-то нажимать, чтобы на них посмотреть.
    [*] REM для комментариев. Если уж Begin/End ты считаешь недостатком, то REM куда хуже, поскольку комментарии нужны постоянно. В хорошем коде они могут быть вообще через строчку. В то время как операторные скобки встречаются не так часто.
    [*] Наследие восьмибитных бейсиков с gosub и goto. Может и не является недостатком именно QB, где есть и более современный синтаксис, но при поиске литературы по BASIC, начинающий программист скорее наткнётся на что-то где описан бейсик с номерами строк и вполне возможно так в QB и начнёт писать с лапшой из goto.
Тогда как Pascal хорош тем, причём именно для начинающих, что в нём писать в плохом стиле сложнее чем в хорошем. Например переменные объявлять вообще обязательно, метки тоже надо объявлять, благодаря чему соблазн устроить лапшу из goto меньше, begin/end позволяют лучше видеть структуру кода, разделение функций и процедур помогает избегать побочного эффекта в функциях и позволяет хотя бы понять, что это такое и так далее.

В дальнейшем, когда хороший стиль и мышление уже сформированы, можно переходитть на C или наоборот на какие-нибудь более далекие от железа языки вроде OCaml или Tcl.

[/quote]
Операторные скобки в ЯВУ не нужны как факт, иначе это не язык Высокого уровня, если вы помогаете компилятору.
ЯВУ отличается от языка низкого уровня тем, что приближен к естественному человеческому языку.
Но у вас мозг так проформатирован Паскалем, что вы этого понять на можете, к сожалению... :(

И мне очень странно, что совершенно не зная Basic, вы продолжаете писать здесь полный бред. :-?
REM - это атавизм, комментарий в Basic: " ' "

Если вы до такой глупости одурманены Паскалем, то хоть бы на картинки смотрели, которые вам показывают:

Image

Никаких REM-ов, как вы видите нет.
Переменные при необходимости объявляются - объявлен тип regs на картинке.
А goto есть и в Паскале, не справились вы без goto
Процедуры и функции определяются автоматически и редактируются в отдельных окнах, можно одновременно
смотреть и на вызов функции и на саму функцию.

Так что если вы не знаете Basic и валите общеизвестые глупости в одну кучу, я вам посоветовал
уже ознакомиться для начала с предметом обсуждения, а то тошнит читать и отвечать на ту бредятину,
которую вы здесь совершенно огульно пишете. :-?

Basic - он гибкий язык и совершенно правильно поддерживает все свои атавизмы, это верно с точки
зрения повторного использования кода.

А Паскаль гибкостью не отличается и содержит слишком много бредятины, совершенно не нужной
программисту, но лишь упрощающей его компилятор.
То есть на вас, как на осла, навьючили помощь компилятору в синтаксическом разборе текста программы.
Но вы гордо это называете "строгостью", потому как Паскалем вам безнадёжно испортили мозг. :(

Мои искренние сожаления... :oops:
iLavr
Andnor
Fanat
Posts: 80
Joined: 01 Jan 2023 11:37

Re: Какой язык программирования надо втюхивать в школе

Post by Andnor »

Хватит уже скриншоты кидать... Если уж хочешь поделиться, кидай файл исходника лучше. (и нет, мне не нужен, но посмотреть в принципе вид кода удобнее по тексту а не по скрину)
Операторные скобки в ЯВУ не нужны как факт, иначе это не язык Высокого уровня, если вы помогаете компилятору.
Тем не менее, операторные скобки в том или ином виде есть почти во всех известных мне ЯВУ, в том числе скриптовых, в том числе бейсике, почему-то...

Паскаль: begin / end; repeat ... until condition;
Си: { };
bash: do ... done, if ... fi и тд, зависит от составного оператора
basic: for ... to ... step ... ... next var; if ... end if; и так далее
Python: отступы

Ну то есть даже если операторные скобки — это костыль для помощи компилятору, не стоит приводить как пример именно бейсик, поскольку в нём они есть. просто разного вида для разных операторов.

Tcl — операторных скобок как таковых нет, { } используются как сильные кавычки, if expr {...} else {...} где { } объединяют фрагмент кода в одно слово. Если там операция из одной строки, то можно без них. Например объявлены процедуры do_then и do_else и переменная flag содержащая условие, тогда можно написать команду if $flag do_then else do_else на одной строке и это сработает.

Lisp — обычные скобки используются

Forth ­— как правило используются определения слов : word .. ;
REM - это атавизм, комментарий в Basic: " ' "
А, ну да, но это сокращение для REM, так же как ? — сокращение для PRINT
совершенно не зная Basic, вы продолжаете писать здесь полный бред
Я писал на этом QBasic программу для курсовой работы на первом курсе. На втором уже C и асм были. После этого писал на ZX Spectrum на нём несколько программ. Я его не то что не знаю, просто давно это было и подзабыл.
Процедуры и функции определяются автоматически и редактируются в отдельных окнах, можно одновременно
смотреть и на вызов функции и на саму функцию.
Вот в почти любом текстовом редакторе есть split view чтобы одновременно смотреть в отдельных окнах на два куска кода, причём более универсально. А то что в QB это неотключаемо и нельзя файл полностью посмотреть за один заход — серьёзный недостаток. Впрочем, наверное можно писать код в нормальном текстовом редакторе, а потом запускать компилятор в отдельном окне консоли... Или отдельного консольного компилятора в комплекте нет?
А Паскаль гибкостью не отличается и содержит слишком много бредятины, совершенно не нужной
программисту, но лишь упрощающей его компилятор.
То есть на вас, как на осла, навьючили помощь компилятору в синтаксическом разборе текста программы.
Но вы гордо это называете "строгостью", потому как Паскалем вам безнадёжно испортили мозг.
Да, в Паскале нет автовывода типов, но я в курсе что это такое и что во многих других языках это есть. И да, отсутствие автовывода облегчает жизнь компилятору. С одной стороны это вроде бы как бы и плохо, но с другой, если мы вспомним, что речь идёт о начальном обучении программированию, то становится видно, что не так уж это и плохо, а вовсе даже хорошо.

Цель начального обучения программированию — дать понимание того, как работает компьютер в принципе. Иными словами убрать из работы компьютера "магию", чтобы не было ощущения, что пользователю помогают добрые невидимые гномики, а было понятно, что там просто есть оперативная память, процессор и машинный код. И понятно это было именно на глубоком уровне, а не просто в общих чертах. Для чего нужно хотя бы примерно представлять, что делает компилятор и тд. Соответственно, если компилятор более простой и примитивный, понять как он работает проще.

Более продвинутые и высокоуровневые парадигмы, включая функциональное программирование, как правило изучаются уже позже, когда есть навыки пользования компьютером и программирования на более простых императивных языках вроде Pascal.

А зачем Basic вообще непонятно. Ему нет места в последовательности Pascal → assembler → C, → всякие разные другие языки на выбор.

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

И да, хотя Си устарел и тд, знать его должен каждый программист. Это примерно как латынь в мире медицины. Так уж вышло.

Но как и будущему медику начинать сразу с латыни не стоит. Лучше вначале изучить хотя бы один не мёртвый язык (например русский, английский или ещё какой, на котором говорят родители), потом ещё не повредит хотя бы один иностранный (например английский, немецкий, франзуский), и уже только потом латынь.
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Какой язык программирования надо втюхивать в школе

Post by Shaos »

> А зачем Basic вообще непонятно. Ему нет места в последовательности Pascal → assembler → C, → всякие разные другие языки на выбор.

В идеале последовательность должна выглядеть так С → С++ всё :roll:

Ну и асм иногда - когда надо совсем низко чото поглядеть (типо как я щас на работе вылавливаю невыровненные обращения к памяти в скомпилированной сишной проге под мипс)
Я тут за главного - если что шлите мыло на me собака shaos точка net
Andnor
Fanat
Posts: 80
Joined: 01 Jan 2023 11:37

Re: Какой язык программирования надо втюхивать в школе

Post by Andnor »

Shaos, ну я же тебе перечислил, почему C для начального обучения не подходит. Ты вместо ответа заявил, "Нет подходит", а смысл-то какой?

Вот ещё статейка есть, почему не Си:
stolyarov_2010.pdf
Си — неплохой язык для уже опытных программистов, но начинать с него не стоит.
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Какой язык программирования надо втюхивать в школе

Post by Shaos »

Поверь мне - я первокурсникам универа преподавал голимый си в начале нулевых - шло на ура как первый язык :dj:
Я тут за главного - если что шлите мыло на me собака shaos точка net
forthuser
Senior
Posts: 165
Joined: 12 Jan 2023 07:26

Re: Какой язык программирования надо втюхивать в школе

Post by forthuser »

Andnor wrote:Я бы ещё понял если бы ты за Forth топил, например. Его между асмом и Си вставить можно, тоже низкоуровневый язык, но с совершенно другой парадигмой, а бейсик ничего нового тому кто уже знает паскаль, ассемблер и Си не даст..
Форт одновременно и "низкоуровневый" и сверхвысокоуровневый смотря с какой базовой точки зрения его рассматривать.
Броуди2
т.е. язык не имеющий фактически синтаксиса, кроме его построения исходя из использования семантики слов, как первоосновы и простейший цикл Repl трансляции входного потока слов для превращения их в исполняемый код с изрядной долей возможностей "произвольного" построения
"предложений" программы за счёт метарасширяемости.

Хотя да, Форт соотносят в большей степени к парадигме использования конкатенативных языков программирования concatenative.org

P.S. FORTH (Computer program language) ещё книги по Форт.
Last edited by forthuser on 11 Feb 2023 00:11, edited 2 times in total.
forthuser
Senior
Posts: 165
Joined: 12 Jan 2023 07:26

Re: Какой язык программирования надо втюхивать в школе

Post by forthuser »

Shaos wrote:Поверь мне - я первокурсникам универа преподавал голимый си в начале нулевых - шло на ура как первый язык :dj:
Так и вопросов к Высшей математике у студентов не должно появляться,
как и любому другому предмету Вузовской программы. :)

P.S. Спросить не спросят, но понимание может и не состояться в базовой необходимости применения звёздочек, амперсандов ...
Си, конечно, хороший язык если его начинать изучать с правильных книг, как Шилда.
и иметь под рукой справочник-подсказку от Болски.
Andnor
Fanat
Posts: 80
Joined: 01 Jan 2023 11:37

Re: Какой язык программирования надо втюхивать в школе

Post by Andnor »

На C даже мне сложно писать до сих пор, хотя у меня есть кое-какой опыт. Вот кстати пример оправданного на мой взгляд применения goto. Писал код недавно, одну штуку хотел проверить:

Code: Select all

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {
	long n;
	char *errptr;
	if (argc < 3) {
		goto error;
	}
	n = strtol(argv[1], &errptr, 0);
	if (*errptr != '\0') {
		goto error;
	}
	fwrite(argv[2], n, 1, stdout);
	return 0;
error:
	fprintf(stderr, "Output `length` bytes from `data` to stdout.\n");
	fprintf(stderr, "Usage: %s length data\n", argv[0]);
	return 1;
}
Просто указатели — это ещё ничего, а указатели на указатели уже ломают мозг. Хотя справиться можно, но надо напрягаться. А в C без указателей на каждом шагу вообще никуда. Как школьник по-твоему осилит указатели на указатели, или указатели на указатели на указатели, если ему даже обычные if и for — новая концепция? Ну!
Поверь мне - я первокурсникам универа преподавал голимый си в начале нулевых - шло на ура как первый язык
После того как они изучили Pascal в школе, а не прямо с нуля.
P.S. Спросить не спросят, но понимание может и не состояться в базовой необходимости применения звёздочек, амперсандов ...
Си, конечно, хороший язык если его начинать изучать с правильных книг, как Шилда.
и иметь под рукой справочник-подсказку от Болски.
После изучения паскаля, где начать программировать можно без всяких указателей и прочих мозголомных концепций и перейти к ним уже войдя во вкус, Си зайдёт на ура. А если с нуля — вряд ли.

Си и Паскаль вообще очень похожи, просто подход разный. Паскаль более строгий и чуть дальше от ассемблера, но при этом даёт доступ и к низкому уровню, позволяя свободно манипулировать, а в Си без этого доступа к низкому уровню даже простейшие программы не идут. Например strtol или (s)scanf требуют передать им адрес переменной, поскольку передачи параметров по ссылке в Си в принципе не предусмотрено. Да, указатели её с успехом заменяют, но может всё-таки не надо это втюхивать прямо с самых первых уроков информатики?
imsushka
Maniac
Posts: 232
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: Какой язык программирования надо втюхивать в школе

Post by imsushka »

Andnor wrote:На C даже мне сложно писать до сих пор, хотя у меня есть кое-какой опыт. Вот кстати пример оправданного на мой взгляд применения goto. Писал код недавно, одну штуку хотел проверить:

еее, а вот так не правильно ?

Code: Select all

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {
	long n;
	char *errptr;
	if (argc < 3) {
		goto error;
	}
	n = strtol(argv[1], &errptr, 0);
	if (*errptr != '\0') {
error:
	    fprintf(stderr, "Output `length` bytes from `data` to stdout.\n");
	    fprintf(stderr, "Usage: %s length data\n", argv[0]);
	    return 1;
	}
	fwrite(argv[2], n, 1, stdout);
	return 0;

}
хотя и это не правильно можно было и без гото обойтись

вот оправданный гото

Code: Select all

               if ( X.buf[B_CMD] == CMD_GET ) {
                  if ( Glob.Type == 0xFF ) {

                     goto sendserialerr;

                  }
                  if ( ( Glob.Type == TYPE_INA ) ||  ( Glob.Type == TYPE_INA8 ) ) {

                     Tmp.Addr = &regs;
                     Tmp.Addr += X.buf[B_DATA1] + X.buf[B_DATA1];
                     X.buf[B_DATA0] = *Tmp.Addr;
                     Tmp.Addr++;
                     X.buf[B_DATA1] = *Tmp.Addr;
                     X.buf[B_SIZE]  = B_HEADER + 2;
                     goto sendserial;

                  }
                  if ( Glob.Type == TYPE_OUTD ) {

                     X.buf[B_DATA0] = Glob.b & 0x0F;
                     goto sendserialone;

                  }
                  if ( Glob.Type & TYPE_OUTPUT ) {

                     X.buf[B_SIZE]  = B_HEADER + 3;

                     X.buf[B_DATA2] = Glob.b & 0x0C;
                     goto left0;
                  }
                  if ( Glob.Type == TYPE_INAD8 ) {

                     X.buf[B_SIZE]  = B_HEADER + 8;

                     X.buf[B_DATA4] = regs.ain.data[4];
                     X.buf[B_DATA5] = regs.ain.data[5];
                     X.buf[B_DATA6] = regs.ain.data[6];
                     X.buf[B_DATA7] = regs.ain.data[7];
                     regs.ain.data[4] = 0;
                     regs.ain.data[5] = 0;
                     regs.ain.data[6] = 0;
                     regs.ain.data[7] = 0;
                     goto left1;
                  }
                  if ( Glob.Type & TYPE_INPUT ) {

                     X.buf[B_SIZE]  = B_HEADER + 4;

                     left1:
                     X.buf[B_DATA2] = regs.ain.data[2];
                     X.buf[B_DATA3] = regs.ain.data[3];
                     regs.ain.data[2] = 0;
                     regs.ain.data[3] = 0;

                     left0:
                     X.buf[B_DATA0] = regs.ain.data[0];
                     X.buf[B_DATA1] = regs.ain.data[1];
                     regs.ain.data[0] = 0;
                     regs.ain.data[1] = 0;
                     goto sendserial;

                  }
                  goto sendserialno;

               }
// ---- PUT ----
               if ( X.buf[B_CMD] == CMD_PUT ) {

                  if ( Glob.Type == TYPE_OUTS ) {

                     Tmp.Addr = &regs.sero.data + X.buf[B_DATA1];
                     *Tmp.Addr = X.buf[B_DATA2];
                     Tmp.Addr++;
                     *Tmp.Addr = X.buf[B_DATA3];
                     Tmp.Addr++;
                     *Tmp.Addr = X.buf[B_DATA4];
                     Tmp.Addr++;
                     *Tmp.Addr = X.buf[B_DATA5];
                     regs.sero.count = regs.sero.maxbits;

                     goto sendserialok;

                  }

                  if ( Glob.Type & TYPE_OUTPUT ) {

                     Tmp.b.lo = X.Buf[B_DATA1];
                     portout();
                     goto sendserialok;

                  }
                  goto sendserialno;

               }
// ----
               if ( X.buf[B_CMD] == CMD_SETNUM ) {

                  Glob.Addr = X.buf[B_DATA1];
                  Tmp.Addr  = ADDR_MODUL_NUM;
                  Tmp.Dat  = X.buf[B_DATA1];
                  writerom();
                  goto sendserialok;

               }
               if ( X.buf[B_CMD] == CMD_GETTYPE ) {

                  X.buf[B_DATA0] = Glob.Type;
                  goto sendserialone;

               }
               if ( X.buf[B_CMD] == CMD_GETROM ) {

                  Tmp.Addr = X.buf[B_DATA1];
                  readrom();
                  X.buf[B_DATA0] = Tmp.Dat;
                  goto sendserialone;

               }
               if ( X.buf[B_CMD] == CMD_SETROM ) {

                  Tmp.Addr = X.buf[B_DATA1];
                  Tmp.Dat = X.buf[B_DATA2];
                  writerom();
                  goto sendserialok;

               }
 
               sendserialno:
               X.buf[B_DATA0] = '-';
               goto sendserialone;

               sendserialerr:
               X.buf[B_DATA0] = '!';
               goto sendserialone;

               sendserialok:
               X.buf[B_DATA0] = '+';

               sendserialone:
               X.buf[B_SIZE]  = B_HEADER + 1;

               sendserial:

               DISABLE_INT_RA3

               X.buf[B_PREFIX] = 0xA5;
               X.buf[B_ADDR]   = Glob.Addr;
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Какой язык программирования надо втюхивать в школе

Post by Lavr »

Andnor wrote:Хватит уже скриншоты кидать... Если уж хочешь поделиться, кидай файл исходника лучше. (и нет, мне не нужен, но посмотреть в принципе вид кода удобнее по тексту а не по скрину)
Я знаю, что не нужен, поэтому и ничего не кидаю. Поскольку после вашей фразы:
Andnor wrote:Ну не QBasic же?! Нет ну серьёзно, это даже не компилятор, к тому же требует DOS для работы...
Я понял, что вы совершенно не в теме, и убеждать вас в чем-то бесполезно... :(

Но не надо мне "тыкать", я с вами водки не пил! :-?
Andnor wrote:
Операторные скобки в ЯВУ не нужны как факт, иначе это не язык Высокого уровня, если вы помогаете компилятору.
Тем не менее, операторные скобки в том или ином виде есть почти во всех известных мне ЯВУ, в том числе скриптовых, в том числе бейсике, почему-то...
Паскаль: begin / end; repeat ... until condition;
Си: { };
bash: do ... done, if ... fi и тд, зависит от составного оператора
basic: for ... to ... step ... ... next var; if ... end if; и так далее
Python: отступы
Во всех языках, в том числе русском и английском, существует какой-то синтаксис так или иначе.
Языки высокого уровня, если они хотят такими называться, должны иметь синтаксис, близкий к естественному языку.
Я это объясняю вам уже в третий раз!
В Бейсике и Python-е операторные скобки неявные и близки к естественному языку.
Так что зря вы по своей паскалевской привычке влепили там " ; " - в Basic их нет.

Поэтому я и говорю, что язык с синтаксисом, близким к естественному человеку освоить гораздо проще.
По роду своей деятельности человек может быть совершенно не связан в жизни с программированием
и ЭВМ, поэтому знать устройство её каждому совершенно не обязательно!
Но уметь пользоваться на простом уровне - для многих профессий весьма полезно.
Языки высокого уровня для того и придумали, чтобы скрыть от пользователя аппаратные особенности ЭВМ.

Я тут приводил пример человека, который физик и всю жизнь работал на Фортране, при этом Фортран его
совершенно неплохо функционировал и на IBM 360, и на IBM PC - ему совершенно не было нужды знать
устройство этих железок, и уж тем более - понятие "байт". :wink:
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Какой язык программирования надо втюхивать в школе

Post by Lavr »

imsushka wrote:...а вот так не правильно ?

Code: Select all

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {
	long n;
	char *errptr;
	if (argc < 3) {
		goto error;
	}
	n = strtol(argv[1], &errptr, 0);
	if (*errptr != '\0') {
error:
	    fprintf(stderr, "Output `length` bytes from `data` to stdout.\n");
	    fprintf(stderr, "Usage: %s length data\n", argv[0]);
	    return 1;
	}
	fwrite(argv[2], n, 1, stdout);
	return 0;

}
хотя и это не правильно можно было и без гото обойтись
вот оправданный гото
Меня всё время удивляют вот такие рассуждения" "правильный", "неправильный", "оправданный"...

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

Во времена Windows 95 ещё столкнулся я с явной ошибкой ОС, при всём кодировании по мануалам М$
у меня происходила утечка памяти и винил я в этом свои кривые руки тогда.
Ведь "Что хорошо для Windows - хорошо для всех!" - такой был лозунг тогда! :roll:

Но мне повезло тогда, помогли мне снисходительно по Интернету люди из одной софтверной фирмы,
потому что при написании кода я пользовался в том числе и их статьёй в открытом доступе.

Они объяснили мне, что да - есть такая ошибка в ОС Windows - она уже известна, поэтому они
рассказали, как ошибку обойти и прислали код одной dll из ОС Windows.

И вот тут-то я впервые был в полном шоке! :o
В коде этой dll было многократно, как в вашем примере:

Code: Select all

...
		goto error;
...
Но в конце кода был комментарий автора кода с его именем и фамилией.
В переводе на русский комментарий звучал примерно так:
"Да, я знаю, что goto не самое красивое решение, но в данном случае так проще." :wink:

С тех пор я придерживаюсь правила:"Если это проще для Windows, то мне и совсем простительно!" :ebiggrin:
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Какой язык программирования надо втюхивать в школе

Post by Lavr »

В этом топике у нас знатоки всех языков собрались, поэтому, думаю, большим оффтопом не будет,
задать вопрос именно здесь.

Подзадолбала меня одна очень часто встречающаяся
назойливая реклама:
Шарпей.PNG
Особенно два слова:"грейд" и "шарпей".
Как человек неленивый и любознательный, я посмотрел в поиске:
Грейд в системе оплаты — это группа должностей, имеющих примерно одинаковую важность для компании.
Шарпей – порода сторожевых, а в древности и бойцовых собак родом из Китая.
Но, кажется мне, это не то, что упоминается в навязчивой рекламе.
На мой взгляд, там что-то из жаргона программистов имеется в виду...

Кто бы внёс ясность по поводу значения слов "грейд" и "шарпей" в данном конкретном случае?
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Какой язык программирования надо втюхивать в школе

Post by Shaos »

это что-то из новояза по-видимому
могу предположить, что грейд это grade - класс или в общем случае уровень [знаний]
а вот что такое шарпей? пришлось обратиться к гугловому AI (который Gemini):
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net