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

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

  1. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    K10
    ненужный мусор. Слова имеющие отношение только к либам. В длл-ях ни импов, ни @xx нет

    PS хрена себе тут рост. пойду-ка отседова.
     
  2. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    beginner
    Не знаю, что ты имеешь ввиду под "классическим" Паскалем, но на делфи можно так

    Код (Text):
    1. procedure SomeProc(A1: Byte; A2: Byte = 11; A3: Byte = 22);
    2. begin
    3. //
    4. end;
    5.  
    6. SomeProc(12);
    7. SomeProc(12, 34);
    8. SomeProc(12, 34, 56);
    также есть overload
     
  3. vitvort

    vitvort New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2008
    Сообщения:
    1
    Здравствуйте уважаемые форумчане! Меня интересует программирование Сим-карт мобильных телефонов, что это такое и с чем его едят? С чего начать, для чего это нужно? Дайте пожалуйста источник информации, желательно подробный и доступный для понимания. Спасибо!
     
  4. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    не смог сдержаться
    Даешь учить гуиле. Оч распространен, оч прост (меня про него не спрашивать. простые ланги не учу. не интересно)
    Даешь учить МЛ (мета-ланг) со потомки. Оч перспективен, щас много на нем рубят.

    XshStasX
    Ыгу. и проца ничего в еах не возвращает. А флоаты, ой, реалы в чем возвращаются?
     
  5. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    vitvort
    А ответ как в этой свалке спама искать буишь?
     
  6. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    K10
    Это функция (процедура) с параметрами по умолчанию. В ней всего 3 параметра, два из которых заданных по умолчанию.
    Я имел ввиду сделать свою функцию, в которой заранее не известно сколько будет параметров, их может быть и 5 и 55.
    пример на С
    Код (Text):
    1. int myFunc(char c1, char* s, ...) {
    2. // чтото делаем
    3. };
    4.  
    5. myFunc('a', "stroka 1", 1, 0.02, hFile);
    6. myFunc('a', "stroka 2", 1, "abc", 0.05, 25);
    7. Ну и наиболее частый в реальной работе пример:
    8. myFunc('a', "x=%d, y=%c, z=%p, i=%f, y=%s", 1, 'a', &var1, 0.09, "stroka");
    Ессно подобных параметров может быть скока угодно.

    K10
    пример множественного кейса я выложил в посте под #135.
    Единственный минус, требуется следить, что бы значения не пересекались, для этого можно сделать вообще вложенный switch. Все просто :)
     
  7. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    beginner
    Код (Text):
    1. procedure MyFunc; stdcall;
    2. asm
    3.   POP EAX
    4.   // 1-й параметр, что-то делаем
    5.   POP EAX
    6.   // 2-й параметр, что-то делаем
    7.   ...
    8.   POP EAX
    9.   // N-й параметр, что-то делаем
    10. end;
    11.  
    12. вызов:
    13.   asm
    14.     PUSH Param
    15.     PUSH Param
    16.     ...
    17.     PUSH Param
    18.     CALL MyFunc
    19.   end;
    :)
    Нет такого, чего нельзя сделать на Делфи :)

    это один if...then и один НЕмножественный case
     
  8. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    K10
    Это асм-вставка, это не паскаль!!
    Мне пожалуйста на паскале только!!

    в посте 135 нет ни одного if-then, там только switch-case.

    И еще
    В вашем примере нужно обязательно указывать кол-во параметров, которые передаются в функцию, или хотя бы указывать завершающий параметр, который прекратит извлекать их из стека.
    На С указывать кол-во параметров не обязательно. :-P
     
  9. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Да я так, показать что нет ничего невозможного :) Если серьезно, то кроме wsprintf сложно придумать, когда могут понадобится функции с неограниченным переменным числом параметров.

    Код (Text):
    1. switch ((c>=10)&&(c<=40)) {
    2. case TRUE: Sleep(1); break;
    3. };
    Это case из двух булевых значений true и false - не более чем извращенная запись if...then...else
    Далее идет уже настоящий case
    Код (Text):
    1. switch (c) {
    2. case 1: Sleep(1); break;
    3. case 2: Sleep(1); break;
    4. case 3: Sleep(1); break;
    5. }
     
  10. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    В таких функциях один из первых обязательных параметров должен явно или неявно(в случае wsprintf) определять количество последующих опциональных параметров. Иначе как функция узнает сколько параметров вытаскивать из стека?
     
  11. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    K10
    тот же самый множественный кейс, то в другой форме записи
    а вы чего ожидали, что будут такие же операторы, как на паскале? :)
    я ж не требую от вас написать на паскале выражение max = a>b?a:b;
    потому что на паскале нет такой конструкции, а есть только if-then-else.

    Согласитесь, что без использования асма - написать на паскале (делфи) функцию с переменным числом параметров не представляется возможным.
    1:0 в пользу Сишников :-P
     
  12. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    beginner
    кажется с 7й версии дельфи ввели тринарный условный оператор

    функция с переменным числом параметров тоже есть, через variant-массивы, например функция format, аналог sprintf
     
  13. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    GoldFinch
    хм... делфи в роли догоняющего?
    т.е. делфи берет фичи из языка С и применяет их к себе?
    а есть что то такое, что бы С взяло из делфи?
     
  14. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    это не множественный кейс, это два разных кейса, один из которых - форма записи if...then
    Код (Text):
    1. if (a >= 10) AND (a <= 40) then Sleep(1) else
    2.   begin
    3.   case a of
    4.     1 : ...
    5.     2 : ...
    6.     end;
    7.   end;
    так что 1:1, нету у вас множественного кейса :)
     
  15. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    http://ru.wikipedia.org/wiki/%D0%9D%D0%B5%D0%BE%D0%BA%D0%B0%D1%82%D0%B0%D1%81%D1%82%D1%80%D0%BE%D1%84%D0%B8%D0%B7%D0%BC

    Если теория по ссылке выше будет доказана, то да.

    А так - нет
     
  16. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    K10
    Код (Text):
    1. for (int x=100, int y=150, int z=200; ((z+x)!=(x+y)); x+=10,y-=15) {
    2.     // что то делаем
    3. }
    Тоже самое, вы в паскале не можете в цикле for писать сразу несколько начальных данных, не можете сделать произвольное прирощение цикла, и не можете убрать любой из параметров цикла for.
    Можете только заменить одну строку на языке С десятью строчками на языке паскаль :)
    так что 2:1
     
  17. SII

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

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    beginner
    Вот пример из документации по ФриПаскалю, который будет работать и в Дельфях:

    Код (Text):
    1. function Average (Row : array of Integer) : Real;
    2. var
    3.   i : Longint;
    4.  Temp : Real;
    5. begin
    6.   Temp := Row[0];
    7.   for i := 1 to High(Row) do
    8.   Temp := Temp + Row[i];
    9.   Average := Temp / (High(Row)+1);
    10. end;
    Так что возможность передачи переменного числа параметров имеется. Однако даже если б её не было, в любом случае это не было б однозначным 1:0 в пользу сишников, потому что подобные конструкции зачастую представляют очень большую опасность, а вот польза от них в большинстве случаев весьма сомнительна.

    GoldFinch
    Никогда про таковой не слышал. Но даже если он есть, использовать не стану: запутывает программу, как и соответствующий оператор Си. Ну а от нажатия несколько лишних клавиш у меня руки не отвалятся, так что лучше обычный if-then-else.

    Единственное, что мне действительно не нравится в Паскале/Дельфях по сравнению с Си -- это невозможность выйти из функции и вернуть значение одним оператором (аналогично return). Правда, в последней версии Дельфей (2009 вроде) такую возможность наконец-то обеспечили, судя по имеющейся инфе.

    beginner
    Считаете, что расширение языка конструкциями, аналогичными имеющимися в других языках -- это признак недоразвитости языка? Ну тогда вспомните про Си, который кучу всего заимствовал и превратился в Си++.

    И кстати, почему тогда не сказать, что Си, как и Паскаль, взяли управляющие структуры (не синтаксис, а семантику) у Алгола? Ведь ни Си, ни Паскаль не являются первыми языками высокого уровня.

    Кстати, то, что в Си любой массив индексируется только целыми числами и только начиная с 0, является довольно большим недостатком, ведь нередко "логические" индексы не начинаются с нуля или вообще не являются целыми числами. Что на низком уровне любой индекс переводится в смещение относительно начала массива, это понятно, но мне не нравится, когда заботиться об этом должен я, а не компилятор.
     
  18. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    beginner
    да о чем речь вообще -- суслику понятно, что синтаксич. конструкции языков разные, так что неясно в чем спор? спорить можно не о синаксич. различиях в конструкциях языков, а по поводу юзабильности самих языков.

    до кучи давайте еще упомянем дельфовую
    Код (Text):
    1. with NameOfRecord do begin
    2.     recordField1 = blabla;
    3.     recordField2 = blablabla;
    4. end
    что-то в этом духе, вспомнил по памяти. и что теперь, это знак того что делфя круче си(++) ? бред;)

    SII
    +1 !
     
  19. SII

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

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    beginner
    А вот это, извините, уже полная ерунда. Потому что подобная запись на Си очень запутывает программу, затрудняет её отладку и понимание. Ну а никакой выгоды, не считая уменьшения количества нажатых клавиш, это не даёт: на выходе получается один и тот же код (конечно, при условии одинакового качества компиляции; однако преимущества Интел С++ над Дельфями в плане оптимизации является достоинством интеловского компилятора, а не самого языка).

    В общем, основная масса доводов в пользу Си сводится к тому, что в нём надо меньше давить на клаву, что лично для меня не является сколько-нибудь заметным преимуществом. А вот резкое падение читабельности кода при таком подходе -- это не просто недостаток, это недостаток катастрофический. Особенно заметен, конечно, в Си++: попробуй продерись через стандартные библиотеки, например.
     
  20. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    Код (Text):
    1. {$apptype console}
    2. program fuckoff;
    3. const
    4.     crt = 'msvcrt.dll'; n = #$0A#$0D;
    5.  
    6. procedure printf (str:pchar);cdecl; overload; external crt;
    7. procedure printf (str:pchar; val:integer);cdecl; overload; external crt;
    8. procedure printf (str:pchar; val:double);cdecl; overload; external crt;
    9.  
    10.  
    11. begin
    12.    printf ('Hello'+n);
    13.    printf ('%x '+n,$12345678);
    14.    printf ('%f '+n, sin(pi / 2));
    15. end.
    beginner обьявить и отьюзать ф-кцию нет проблема.

    Код (Text):
    1. int myFunc(char c1, char* s, ...) {
    2. // чтото делаем
    3. };
    Ток вот здесь придеться оч много гемору иметь =)))