Начало программирования.

Тема в разделе "WASM.BEGINNERS", создана пользователем Heineken, 22 ноя 2008.

  1. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    GoldFinch
    это азы для программирования на паскале.
    Зачем фигней забивать голову, когда в Си есть переменные, константы, функции и операторы и их четко можно различить между собой. Чего не скажешь о паскале.
    На си, в данном случае, это будет считаться за переменную и никак иначе.
    если написать S=Pi()*r*r; то Pi() - функция, все четко и ясно.

    Кстати на паскале можно вот так вот вольно использовать функции в математических выражениях?
     
  2. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    И у меня очень-очень много неосмысленных названий и функций и переменных в черновиках. Осмысливать каждое черновое название? Которое я уберу к чертям через одну минуту? Нет уж, увольте... Это пусть Pascalщики делают. Я их лучше буду по наличию или неналичию скобок в конце различать.
    ...А осмысленные названия даю готовому продукту.
     
  3. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Да ни фига там нельзя. Там надо переменной присвоить значение функции (ну или через вызов функции определить эту переменную, я уже забыл, как), а потом эту переменную использовать в выражениях.
    Суть в том, что без введения такой переменной не обойтись. Вот это главное. Это я помню чётко.
     
  4. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Меж тем неплохой подход.
    Виктор Суворов в своём "Аквариуме" пишет так- если разведчик получает задание, он убирает его в самый дальний ящик письменного стола и идёт делать абы что, только не это задание. Если он сделает больше- о задании никто и не вспомнит.
    В общем, я примерно также поступаю всегда. А всё потому, что задания сплошь непонятные.
    ...Сделать так, чтобы данные, поступающие из интернета в определённую программу "разветвлялись" и дублировались во входной поток моей доморощенной программы. (Написанной на С, к слову)
    C чего начать? Я самому себе-то не могу толком вопрос сформулировать, не то, что сделать его понятным людям... Вот и я не знаю... Вроде как к крякерству привела меня дорога...
    И первый свой кряк вчера я уже сделал. Хотя нет, второй. Первым я просто обошёл проверку ключа. А теперь я нашёл принцип, по которому ключ и номер подходят друг к другу. То есть не изменял код программы Вот одна из возможных комбинаций kzz A4AA, а вот сам кряк. http://wasm.ru/article.php?article=ollydbg01
    Проверьте, кто не верит.
     
  5. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    к продолжению к теме о юзабилити паскаля и Си
    Допустим надо получить промежуточный результат какого-то выражения.
    на си рядом с этим выражением вставляем описание переменной и присваиваем ей этот промежуточный результат.
    Удостоверяемся под отладкой, что все работает как надо и удаляем эту переменную.
    На паскале надо же прокрутить весь текст наверх, там в раздел переменных вставить эту временную переменную, проверить под отладкой, а потом не забыть бы ее удалить оттуда ;)
    Сколько лишних действий... лучше их потратить на проработку алгоритма :)
     
  6. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    на мой взгляд сабж лучше начинать изучать с какого-либо строго-типизированного ЯП поддерживающего только процедурное программирование (интерпретируемого или компилируемого -- разницы нет), без указателей, c поддержкой передачи аргументов по ссылке и по значению, без разграничения понятия _функция_ и _процедура_, без ф-ций с переменным числом аргументов, без оператора запятая, с поддержкой "обычного" цикла for, с вольной формой объявления и инициализации переменных (т.е. чтобы было разрешено как что-то в духе int x; так и int x = 10;), с богатой либой рантайм-исполнения...

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

    ах да, с Си-подобным синтаксисом.
     
  7. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    А в С куда хочешь, туда и вставляй, хоть к чёрту, хоть к дьяволу.
     
  8. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    С утра было можно. Почитайте описание синтаксиса паскаля. Там написано чтото вроде
    <операнд> ::= <результат_вызова_функции> | ...

    Насчет Pi - в Си инструкция fldpi генерится только ассемблерной вставкой, как и другие встроенные константы FPU.
     
  9. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    amvoz
    отбросив экспрессивную окраску суждения, получаем: "си гуан*, потому что я так сказал".
    доказательств же от вас нет:)
     
  10. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Можно так. Пишем

    #include <stdio.h>
    printf ("%d", выражение);
    getchar ();

    Предполагаем естественно, что выражение совпадает с "%d"
    Без введения дополнтельной переменной. Поучилось- закомментировываем или удаляем эти строки и работаем дальше.
    Суть: вариантов куча.
     
  11. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Преимущества того, что переменную можно где хочешь объявить, см. выше, в сообщении номер 185
     
  12. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    varnie
    Классический Си от Кернигана и Риччи рекомендует вставлять описания всех переменных в начало функции.
    когда вольности этого языка позволяют определить переменную в любом месте кода. Ответственность за побочные действия ложатся на кодера. Честно говоря, никогда не встречал, что бы из-за места определения переменной вылезла какая то гадость :)
    Потому можно не боятся и вставлять переменные куда угодно, лишь бы не нарушало читабельность кода, но это приходит с опытом. Я стараюсь придерживаться этого стандарта, и вставлять основные переменные в начало кода функции.
    Единственно, что следует внимательно читать все предупреждения компилятора. И это кстати хорошая привычка :)
     
  13. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Чтобы чтото делать на практике, хорошо бы сначала изучить теорию, иначе форменный быдокодинг получается, человек пишет int main() {return 5;} , запускает, и видит что прога работает, код возврата - 5. При этом не появляется никакого понимания почему надо писать именно так, а не иначе. И весь приобретенный опыт - на уровне "надо написать так-то чтобы было то-то".
     
  14. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    А вот ещё: в С все функции по определению внешние. Я когда с Pascal на С перешёл, написал такую вещь (по паскалевски):

    ima_funktsii () {
    1111ima_funktsi () {
    };
    }

    То есть 1111ima_funktsi я из другой программы вызвать не смогу. Хорошо, меня просвятили. Теперь всегда так пишу:

    1111ima_funktsi () {
    };


    ima_funktsii () {
    1111ima_funktsi ()
    }

    И никаких проблем.
    Наверное, подобный подход возможен в Pascal. Да только в учебнике Рапакова и Ржеуцкой у меня написано:
    "В Turbo Pascal допускается любой уровень вложенности процедур и функций". И красивая такая схемка. И я, дурик, писал функцию в функцию... Пот холодный пробивает.
     
  15. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Это камень в ваш собственный огород. Пример: насколько я помню, в Pascal есть оператор (?) writeln. То есть если что-то выводится на экран и нужно это что-то увидеть, необходимо такой оператор написать. Я писал и с успехом. И не понимал- как рабтает этот оператор.
    ...Перейдя на C и столкнувшись с тем, что там аналог getchar () работает не всегда так, как бы мне хотелось, я просто вынужден был углубиться в "Учение о буферизации"
    Зато теперь я понимаю, что getchar (), зачем getchar () и как сделать так, чобы всё было нормально и чтотакое буфер.
    И зучая Pascal, я не то, чтобы не отвечал на эти вопросы- они просто не приходили мне в голову. Ведь writeln не давал сбоев. Само по себе это хорошо. Но это не подстигнуло меня к более подробному изучению буфера и механизму действия таких вот команд.
    ...Вот, я вынужден был изучить теорию. То, о чём Вы говорили.
     
  16. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    GoldFinch
    что бы писать на любом языке - нужно изучить теорию.
    Вопрос тока в том, что легче дастся в обучении, паскаль или си?
    Мне кажется, что все таки Си. Там мало писанины поначалу, подключил хедер, написал мейн и вперед, определяй переменные по ходу дела, пиши код. Он конечно получится ужасным поначалу, но уже со второй-третьей программой, научатся структурировать код вручную.
    Когда как на паскале нужно описать блок переменных, потом, если нужно добавить переменную - нужно листать наверх и добавлять ее. Потом, если нужно поменять тип переменных - опять нужно листать на самый верх. Все это очень будет утомлять новичка. Когда как Си в этом плане гибок и удобен.
     
  17. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    beginner
    Ну так я тоже не холиварю :) Фанатом Паскаля я не являюсь и прекрасно знаю о существовании у него недостатков. Однако у Си этих недостатков куда больше, и, что важнее, они куда существеннее.

    Не совсем корректный подход, если уж на то пошло, потому что берут не только друг у друга, а ещё и со стороны (в конце концов, ООП не в Си и не в Паскале возникло). Ну а что Дельфи ряд средств заимствовал у Си++, спорить глупо. Точно так же как глупо объявлять, что из-за заимствований Дельфи хуже. Как глупо говорить, что Паскаль-де -- это чисто учебный язык. Он создавался как учебный, но в нынешнем виде (а Дельфи де-факто стандарт) -- это далеко не только учебный язык.

    amvoz
    1. Для Вас -- достоинство, для меня -- безразлично.
    2. Ум дисциплинирует любая "логическая" деятельность, и от языка здесь мало что зависит.
    3. Читабельность, держащаяся на комментариях, -- бред. Комментировать надо назначение и параметры функций, а не каждую строчку кода.

    beginner
    Поставьте при вызове функции (), если Вам так хочется. Что мешает? И разбираться тут не с чем, между прочим: либо ты знаешь, что представляет из себя данная функция или переменная, либо не знаешь. В первом случае разбираться не надо, а во втором надо разбираться по-любому независимо от наличия ().

    Если Вы этого не понимаете, это не значит, что это непонятно Н. Вирту. Процедура это, процедура.

    Опять-таки, говорите за себя, а не за всех. Лично у меня никогда не возникало подобной путаницы.

    А какая разница? Если человек знает, что в res будет занесено случайное число, ему будет глубоко плевать, является Random фукцией или переменной. Важен смысл значения.
     
  18. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    amvoz
    осмелюсь заметить, что writeln и getchar - это совершенно разные операторы или функции.
    первый для вывода информации, второй - для ввода.
     
  19. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    SII
    Огласите список недостатков Си пожалуйста!
    //===========================
    ну если вы такой знаток паскаля, чем отличается вызов процедуры от вызова функции?
    //===========================
    тогда такой пример
    Весь код постировать получается обьемно, но есть участок кода, и там стоит среди прочего кода этот:
    ........
    res := VarOrFunc;
    ...........
    который участвует в каких-то вычислениях, но возникает ошибка.
    Вполне резонные вопросы: VarOrFunc- это функция или переменная?
    Если переменная - то нужен код, где она вычисляется. Если функция - то нужен код этой функции, который вполне может быть в другом файле.

    Когда как на Си зададут один единственный вопрос:
    res = VarOrFunc();
    Код функции VarOrFunc в студию.

    Керниган с Риччи видать были поумнее чутка, придумали просто функцию и все. Без всяких процедур и заморочек :) Функция, которая может возращать значение, а может и не возращать :) все зависит от типа функции.
     
  20. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Да без проблем. Спасибо, что поправили. Важно, что и то и другое используется для одного и того же- чтобы задержать на экране сообщение. Или в Pascal readln, не помню уж.