LINUX.ORG.RU

Ответ на: комментарий от GP

Консольная программа

Если ты говоришь про «Командную строку» из окон, то да, она закрывается, если не удержать фокус ожиданием ввода. Но, внезапно, на этом форуме она не к месту, а онтоповые терминалы не закроются, а будут спокойно ожидать следующей команды, прекратив выполнение предыдущей.

Плюс опять-таки, если говорить про «Запустил из терминала» и «Ткнул мышкой» - это совершенно разное поведение. Если ты сначала запустиль повершелл или КС, а потом из нее стартанешь бинарник, то после выполнения ты так же увидишь строку ожидания следующей команды.

Zhbert ★★★★★
()
Ответ на: комментарий от GP

Цензоры и запрещанты на лоре, ховайтесь, кто может.
По теме: поздравляю и long live!

novus ★☆
()
Ответ на: комментарий от andalevor

Это объясняется на месте и это не какая-то сложная концепция, чтобы откладывать «на потом» и делать ссылки вперёд.

Это необязательная часть, хотя про неё тоже рассказывают и тут нет ничего сложного.

Вот я и говорю, что надо прочитать лекцию на полтора часа.

Указатели это да. Но их и не будут в hello world пихать.

Они появятся во второй программе, где надо будет что-то ввести и с этим что сделать.

Reset ★★★★★
()
Ответ на: комментарий от Reset

При чем тут проводник? Если ты программист, то у тебя в одном окне открыт редактор, а в другом - терминал. Или редактор в терминале. Хорош уже бред выдумывать.

Не, я понял о чем он. В те времена, когда все писали на трубопаскале, результатом компиляции был файл PROGRAM.EXE. А запускали его, как ты понимаешь, отнюдь не из терминала, а двойным кликом мыши, как и все в винде. При таком запуске что екзешник, что батник просто откроются, мгновенно выполнятся и схлопнутся.

Если стартовать их из отдельного терминала как положено - все будет ок.

Zhbert ★★★★★
()
Ответ на: комментарий от andalevor

Это да. Но ведь нет реальной необходимости разбирать такую программу на первом же занятии. Обычно к этому подводят через передачу аргументов по значению и по ссылке.

Ну так можно вообще уйти в академическое изучение без реальных программ. Когда ученик не сможет полностью понимая написать «считайте два числа и их сложите» и «считайте имя и поприветствуйте пользователя». Тут уже подходим к вопросу о том, какие задания давать на лабораторных)

Плюс надо понимать, что для новичка многое абсолютно очевидное для нас (например, понятие процедуры, функции, переменной, указателя) это абсолютный тёмный лес. И с моей т.з. проще всего изначально потратить полгода и объяснить всю эту императивную базу на паскале , после чего уже показывать сишку и сразу начинать рассказывать «без утаек» с первой же лекции, база у ученика уже будет с паскаля.

Возможно, хотя для меня это не было так уже сложно

Я начал писать на сишке одновременно с паскалем, и думал, что вполне разобрался там во всех этих указателях %) Пока не понадобилось написать процедуру, которая считывает массив с клавиатуры.

И я оч долго пытался понять, почему вот такой вариант работает

int* read_ints(bool* isOk) {
   // ...
   int* arr = (int*)malloc(...)
   // ...
   return arr;
}

А вот такой вариант нет:

void read_ints(int* arr, bool* isOk) {
   arr = (int*)malloc(...)
}

Конечно, ошибка детская, но для моего тогда ещё неготового к сишке мозга это было настоящим потрясением. Из одногруппников тогда никто не мог сказать, где тут проблема, ну а после того как я узнал, почему там нужны «две звездочки» мне пришлось с пеной у рта доказывать это третьекурснику, который делал ревью на мой код %)

В целом таких «подводных камней» в сишке очень много, имхо, и сваливать их все на первокурсника это как бросать неумеющего плавать сразу в воду – выплывет, хорошо, способный чувак, ну а если нет, то и фиг с ним

Fizzika ★★
()
Ответ на: комментарий от Reset

Мы сейчас говорим только о Паскале. Точка.

Программы, уровня Hello World, созданные как в 90е в TurboPascal, так и сейчас в FreePascal-е - консольные.

Так вот, эту консоль закрывается операционной системой. После окончания выполнения программы.

Чтобы увидеть надпись Hello World!, нужно было специально использовать команду ожидания нажатия любой клавиши.

GP
()
Последнее исправление: GP (всего исправлений: 1)
Ответ на: комментарий от Reset

а Си с "операторами cin >> … и cout << … "

Кстати, а ученикам рассказывают тут про объекты и перегрузку операций?)

Хотя такая «магия» конечно выглядит намного лучше, чем сишная (и с ней ты с меньшей вероятностью отстрелишь себе ногу)

Fizzika ★★
()
Ответ на: комментарий от Reset

Они появятся во второй программе, где надо будет что-то ввести и с этим что сделать.

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

З.Ы. Что думаете на счёт Rust как первого языка? Нужные концепции присутствуют, hello world пишется без int и include (правда делают ссылку вперёд на макросы, да). Есть модули. Не надо знакомить с указателями во второй же программе.

andalevor ★★★
()
Ответ на: комментарий от GP

Угомонись уже, никто ничего не закрывает.

$ cat hello.pas
program hello;
begin
   writeln('Hello');
end.
$ fpc hello.pas 
Free Pascal Compiler version 3.2.0+dfsg-8build2 [2020/08/23] for x86_64
Copyright (c) 1993-2020 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling hello.pas
Linking hello
4 lines compiled, 0.1 sec
$ ./hello 
Hello
$ # консоль на месте!
Reset ★★★★★
()
Ответ на: комментарий от GP

Это и сейчас так.

Не пользуйся виндой, делов-то.

Zhbert ★★★★★
()
Ответ на: комментарий от GP

Так вот, эту консоль закрывается операционной системой. После окончания выполнения программы.

Это зависит от того, как ты запускаешь свой бинарник, ну. Если ты как виндузоид тыркаешь в него мышкой - да. Если как белый человек запускаешь его из терминала - просто видишь выхлоп и все.

Zhbert ★★★★★
()
Ответ на: комментарий от Fizzika

ну а после того как я узнал, почему там нужны «две звездочки»

Это да. Если начинаются указатели на указатели на указатели, то мозг может быстро закипеть.

andalevor ★★★
()
Ответ на: комментарий от GP

А выше тебе говорят, что если ты «программист», то вряд ли ты тыркаешь в него мышкой, скорее всего у тебя уже открыт терминал, на котором ты тестишь выполнение программы.

Zhbert ★★★★★
()

Красавчик, чо. До ста минимум.

ilovewindows ★★★★★
()
Ответ на: комментарий от GP

Программы, уровня Hello World, созданные как в 90е в TurboPascal, так и сейчас в FreePascal-е - консольные.

Ты как думаешь, сколько настоящих консольных программ, которые повсеместно используются в любых операционных системах, «ожидают нажатия клавиши»?

Так вот, эту консоль закрывается операционной системой. После окончания выполнения программы.

Да, если ты её запускаешь двойным кликом в проводнике. Или как ты там привык в своей винде делать.

Но это подход полностью неправильный. Консольную программу нужно запускать (унязапна) в консоли. А для этого в той же free pascal IDE есть шорткат.

Fizzika ★★
()
Ответ на: комментарий от GP

Мы сейчас говорим только о Паскале.

Паскали бывают разные, например, для mikroРascal © Crt нинужен.

quickquest ★★★★★
()
Ответ на: комментарий от Fizzika

Тем, что даже для полного понимания простой программы «считай имя пользователя с клавиатуры и выведи ‘Привет, ${username}’» нужно уже знать про модель памяти и указатели.

Поэтому нужно учить новой версии Си под названием C++, а старый Си давно бы уже пора закопать. В C++ можно писать вообще без голых указателей и есть аргументы по ссылке. Сложность всего C++ не имеет значения потому что знать весь C++ не обязательно.

X512 ★★★★★
()
Ответ на: комментарий от Fizzika

Видел я код чуваков, которые с Java начинают – там такой кромешный ужас с одними статическими методами, что уж лучше бы они писали это на паскале

Я с асма начинал =) Сейчас на джаве пишу, норм =)

Проблема в том, что эта императивщина на ту же джаву натягивается как сова на глобус.

Поначалу, пока нет понимания объекта, да, руки тянутся сделать «Класс», в который наколбасить статических методов и дергать их как обычный процедуры/функции. Эдакое просто группирование функций. Со временем проходит, и становится наоборот, когда начинаешь думать объектами.

Так что уж лучше пусть новички начинают с хорошего и академически спроектированного императивного языка (такого как паскаль), а когда поймут его ограничения и недостатки, дорога им будет везде открыта, хоть в питончег, хоть в джаву

У паскаля для обучения есть много плюсов: понятие программы, функции (процедуры) и разделения кода на эти самые функции/процедуры. В принципе, это самое важное, если ты никогда не программировал вообще. Натянуть потом на это понятие объектов гораздо проще, чем с нуля пытаться все это понять.

Zhbert ★★★★★
()
Ответ на: комментарий от Reset

Лоол. А ты умеешь читать, что я пишу?

Ты сам создал консоль, из нее и запустил - естественно она сама не закроется.

Если консоль создается родительским процессом, то она закрывается при окончании выполнения этого процесса.

GP
()
Ответ на: комментарий от GP

Если консоль создается родительским процессом, то она закрывается при окончании выполнения этого процесса.

Раскрой поподробнее, о каком «родительком процессе» ты толкуешь в призме запуска только что скомпилированного PROGRAM.EXE.

Zhbert ★★★★★
()
Ответ на: комментарий от Zhbert

Требование к программе для сдачи зачета - программа должна запускаться двойным щелчком по иконке с EXE файлом

(C) Не мое

GP
()
Ответ на: комментарий от GP

Требование к программе для сдачи зачета - программа должна запускаться двойным щелчком по иконке с EXE файлом

А она не запускается разве? Запускается.

Zhbert ★★★★★
()
Ответ на: комментарий от GP

Какое это отношение имеет написанию консольных программ и обучению программированию? Никакого! Ты высосал сейчас это из пальца, чтобы оправдать свой прокол с uses crt, который НЕ нужен для обучения паскалю. Вот вообще не нужен, можно рассказать весь паскаль и ни разу не сказать о существовании этого crt.

Reset ★★★★★
()
Ответ на: комментарий от GP

Я не хочу тебе объяснять основы работы ОС Windows.

Мне и не надо их объяснять, я ее с 3.11 версии знаю. Ты на вопрос ответь - запускается или нет.

Zhbert ★★★★★
()
Ответ на: комментарий от andalevor

Если начинаются указатели на указатели

В Обероне они запрещены.

X512 ★★★★★
()
Ответ на: комментарий от GP

Ты идиот? Думаешь я не знаю, что он там есть?

Reset ★★★★★
()
Ответ на: комментарий от Zhbert

что если ты «программист», то вряд ли ты тыркаешь в него мышкой, скорее всего у тебя уже открыт терминал, на котором ты тестишь выполнение программы.

В DOS, где изначально работал Паскаль, открыть консоль рядом с редактором было нельзя, многозадачности не было.

X512 ★★★★★
()
Ответ на: комментарий от X512

В DOS

Ну допустим. Но чем DOS в данном случае отличается от заранее запущенного терминала, в котором ты стартуешь бинарник?

Zhbert ★★★★★
()
Ответ на: комментарий от Zhbert

Но чем DOS в данном случае отличается от заранее запущенного терминала, в котором ты стартуешь бинарник?

В DOS обычно запущен редактор исходного кода (TURBO.EXE и т.п.) из которого запускают программу. Закрывать редактор чтобы запустить программу из консоли неудобно.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от X512

В DOS обычно запущен редактор исходного кода (TURBO.EXE и т.п.) из которого запускают программу. Закрывать редактор чтобы запустить программу из консоли неудобно.

ДОС - командная строка. Никаких окон там не было. Что видел юзер после запуска «из редактора» свой программы? Каюсь, я в досе не кодил.

Zhbert ★★★★★
()
Ответ на: комментарий от Zhbert

Что видел юзер после запуска «из редактора» свой программы?

Чёрный экран с выводом программы (который не консоль). После завершения программы возвращается экран редактора. Если программа быстро завершилась, то ничего видно не будет.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от X512

Чёрный экран с выводом программы (который не консоль). После завершения программы возвращается экран редактора. Если программа быстро завершилась, то ничего видно не будет.

Эвона как. Ну тогда да, надо ожидать в конце.

Zhbert ★★★★★
()
Ответ на: комментарий от Zhbert

Смотри выше требования к программам для сдачи зачета.

Чтобы запустить консоль, тебе нужно было войти в каталог программы, потом обнаружить, что в Проводнике отсутствует команда запуска Командной строки из текущей папки.

Тебе нужно было открывать ее отдельно, менять диск, папку и так далее.

Гораздо проще ведь, чтобы ОС сама создала окно терминала, да?

Тем более что процесс проверки программ должен быть унифицирован как для GUI программ, так и для консольных

GP
()
Ответ на: комментарий от Zhbert

В турбо-паскале, кстати, вывод доступен через меню debug->output, поэтому ждать ввода тоже не надо.

Reset ★★★★★
()
Ответ на: комментарий от GP

в Проводнике отсутствует команда запуска Командной строки из текущей папки

Шифт нажми, она там есть.

Гораздо проще ведь, чтобы ОС сама создала окно терминала, да?

Не понимаю этих ваших виндовых проблем.

Zhbert ★★★★★
()
Ответ на: комментарий от andalevor

Ничоси. Где как ни на ЛОРе почерпнёшь полезную инфу по венде :)

Ну дык.

Zhbert ★★★★★
()
Ответ на: комментарий от GP

Ты требования почитай к сдаче зачета…

Это те, в которых ПЗ должна быть абизатильна в *.doc? Спасибо, не надо.

Zhbert ★★★★★
()
Ответ на: комментарий от GP

Ага, миллионы мух не могут ошибаться. А требования неадекватны, в нормальных ВУЗах такого нет и сдача происходит в консоли.

Reset ★★★★★
()
Ответ на: комментарий от Zhbert

Э… Давным-давно в далекой галактике в Вузах и школах сначала изучался паскаль с консольными программами и потом Delphi c GUI программами… Но способы запуска у них должны быть одинаковыми…

GP
()
Ответ на: комментарий от GP

Изучается не паскаль, а программирование как таковое, в качестве языка может быть паскаль. GUI программу можно и через консоль запускать.

Reset ★★★★★
()
Ответ на: комментарий от GP

То есть ты хочешь сказать, что если ты написал программу как белый человек, пришел на защиту, отрыл консоль и запустил в ней как положено свою поделку, показав выхлоп преподавателю, то он не примет работу, потому что ты не «кликнул два раза»? Да ну фпердак такие «ВУЗы» и таких «преподавалетелей».

Zhbert ★★★★★
()
Последнее исправление: Zhbert (всего исправлений: 1)
Ответ на: комментарий от Reset

GUI программу можно и через консоль запускать.

Видимо, для тех «перподавателей», о которых он толкует, это вообще магия и дичь дичайшая.

Zhbert ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.