Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   *Флейм* | Учить или не учить - вот в чём вопрос! (http://forum.oszone.net/showthread.php?t=43357)

Max009 05-01-2005 00:11 285841

*Флейм* | Учить или не учить - вот в чём вопрос!
 
Nicronomicom Software:

Пока я дельфи знаю ооооочень плохо.

Какие у неё возможности?

Продолжать ли мне её изучать?


Vladimir Vorfolomeev 05-01-2005 15:43 285989

Возможности у Delphi большие. Но есле ты только начинаеш учить, советую учить например delphi .net
так как в наше время все быстрее и быстрее переходят на .net. И изучать старые версии компиляторов
сейчас не актуально, на себе уже знаю. Вот сам недавно начел изучать .net. Интересно что будет
через пару лет, исчезнет платформа net или нет.

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

На твоем месте я бы выбрал C# или Pascal (Delphi).


Savant 05-01-2005 18:06 286011

Max009
Найди руководство по языку Object Pascal. Уясни, что такое классы и объекты, как наследуются свойства и методы. Только потом можно переходить к изучению VCL, иначе многое будет не очень понятно.

Surround 09-01-2005 21:06 287053

Лучше изучить сначала Delphi, а потом C :)

Savant 09-01-2005 21:10 287057

Surround
Эх, с Delphi на С/С++ потом довольно сложно будет переходить. По собственному опыту знаю. В Си и приемы несколько другие.

Surround 09-01-2005 22:48 287076

Savant
ну я как бы по приходящему опяту и мыслению мозга. Делфи визуальней, попроще, Си - повыше. Просто после Си делфи изучать как то, имхо, бессмысленно, а начать с Си бывает сложновато

Savant 09-01-2005 22:55 287081

Surround
Цитата:

Делфи визуальней, попроще, Си - повыше
Тогда уж пониже. Ведь когда-то Си был призван облегчить и ускорить работу программистов, писавших на ассемблере, сохраняя все возможности и преимущества низкоуровнего программирования. А начинать все равно с чего. Я начал с ассемблера например :). Главное все изучать последовательно, а не перескакивать с одной темы на другую, правда на это терпения надо немерено :rotate: .

Surround 09-01-2005 23:30 287091

Цитата:

Тогда уж пониже
а повыше разума :type:

frizzn 12-01-2005 10:48 287807

Max009
Цитата:

Продолжать ли мне её изучать?
А это зависит от того, что ты хочешь получить в итоге. Поделись, плз, намерениями

Max009 16-01-2005 22:56 289156

Возможно ли вообще вставить в Delphi 3D Анимацию?
Назначение- не могу определённо сказать. Просто хочу хочу создать
что-нибудь новое. Например можно ли сотворить с помощью Delphi проигрыватель музыки или видео?

---------------------------------------------------

Компьютер позволяет решать проблемы,
которые до изобретения компьютера не существовали!

Savant 17-01-2005 06:57 289220

Max009
Цитата:

Возможно ли вообще вставить в Delphi 3D Анимацию?
А почему нет? 3Д анимация реализуется посредством API (DirectX либо OpenGL, кому на чём приятней). Есть хороший сайт [1], посвященный созданию игр на Delphi, ну а какие игры сейчас без 3Д? Там Вы можете найти кучу полезных примеров и компонентов.
[1] - http://delphigfx.mastak.ru/

Цитата:

... хочу создать что-нибудь новое. Например можно ли сотворить с помощью Delphi проигрыватель музыки или видео?
Сотворить нельзя, а написать можно. И опять же... А почему нельзя? В простейшем случае все сводится к управлению объектом Windows Media Player'а.

frizzn 18-01-2005 03:20 289554

Max009
Цитата:

Возможно ли вообще вставить в Delphi 3D Анимацию?
Возможно
Цитата:

можно ли сотворить с помощью Delphi проигрыватель музыки или видео?
Тоже можно.
Только не для этого Delphi создавалась. А для чего? Смотрим в библиотеку компонентов.:wow: А там у нас в основном базы данных. :puke:
Ну тогда смело машем рукой на стандартные компоненты и начинаем поглядывать в сторону разнокалиберных API. Удивляемся и приходим к выводу, что все эти API рассчитаны на использование C/C++.:idontnow: Но нам и это не страшно. Мы героически крепим своим программам костыли и ходули, чтобы они не спотыкались. Мы читаем документацию Platform SDK держа напоготове емкость 0.5л
Блин, народ, не морочьте себе голову, учите нормальные языки. Если выучишь С - легче будет выучить С++. Выучишь С++ - легко освоишь любой современный язык.:super: Самое трудное в С - это понять его основы. Берем в руки Кернигана&Ричи, разбираемся. Если что-то непонятно - спрашиваем на форуме. Если стесняемся - пишем мне на мыло (см. профиль), постараюсь объяснить подробно.

mrcnn 18-01-2005 08:10 289586

frizzn
У меня есть вопрос:
При чтении Кернигана&Ричи я так и не смог понять конструкцию внутри этой функции
Код:

/* getbits:  get n bits from position p */
  unsigned getbits(unsigned x, int p, int n)
  {
      return ((x >> (p+1-n)) & ~(~0 << n));
  }

особенно непонятна вторая часть этой конструкции, а именно ~(~0 << n)


Savant 18-01-2005 11:35 289641

frizzn
Цитата:

Если что-то непонятно - спрашиваем на форуме
И у меня вопрос :) (точнее, задание из теста):
Найдите недопустимую запись вещественной константы:
* 12.3e+2
* 1.23
* .1f
* 0x3F

Да они ведь все допустимые... Я прям внаглую присваивал double a=...; А затем printf("%f\n",a); Конечно, смущает 0x3F, но это неправильный ответ (либо сами ответы неправильные :) ). Да и компилятор warning'ов не надавал...

mrcnn 18-01-2005 12:11 289652

Savant

0x3F

0x - значит шестнадцатеричное число
3f не является вещественным числом, это целое число, при переводе в 10-тичную систему - 63

и еще по теме 0 перед числом значит что это восмеричная система счисления, поэтому запись числа в виде 09 будет ошибкой, поскольк 9 нет в этой системе счисления.

frizzn 18-01-2005 15:56 289722

Вложений: 1
mrcnn
Смотрим:
Код:

/* getbits: получает n бит, начиная с p-й позиции */
unsigned getbits(unsigned x, int p, int n)
{
return (x >> (p+1-n)) & ~(~0 << n);
}

Что это такое хотели сделать тов. Ричи и Керниган?
Цитата:

Для иллюстрации некоторых побитовых операций рассмотрим функцию getbits(x, p, n), которая формирует поле в n битов, вырезанных из x, начиная с позиции p, прижимая его к правому краю. Предполагается, что 0-й бит - крайний правый бит, а n и p- осмысленные положительные числа. Например, getbits(x,4,3) вернет в качестве результата 4, 3 и 2-й биты значения x, прижимая их к правому краю.
Понятно. Рассмотрим их пример, как он будет работать на 32-разрядном IBM-совместимом компъютере:
Красивое выражение
Код:

(x >> (p+1-n)) & ~(~0 << n)
делает две вещи:
1) Сдвигает побитно переменную х на (p+1-n) бит вправо.
2) Оставляет только нужные n бит, а остальные отрезает.
Выглядит это примерно так (переменная х у нас будет равна например 357) (см. аттач, на форуме форматирование вставок кода глюкает :(

mrcnn 18-01-2005 21:16 289817

frizzn
спасибо!
объяснение очень понятное, несмотря на то, что в своем примере вы вытащили 3 бита с 5, а не с 4 позиции ;-)

Savant 18-01-2005 21:20 289820

раззе? а по-моему аж с 3-его бита по 1-й... А, не... все верно, вырезано с 4-го по 2-й

frizzn 19-01-2005 02:30 289894

Savant
Цитата:

а по-моему аж с 3-его бита по 1-й... А, не... все верно, вырезано с 4-го по 2-й
Тут все от шрифта зависит, надо моноширинный ставить. Я этот пример сначала в тэге {CODE} пытался положить, так там такое получилось... :insane:

mrcnn 19-01-2005 08:33 289932

Отсчет битов ведется с 0, поэтому утверждение "вы вытащили 3 бита с 5, а не с 4 позиции"' было ошибочно.

Savant 19-01-2005 19:06 290123

Цитата:

Цитата frizzn
Тут все от шрифта зависит, надо моноширинный ставить. Я этот пример сначала в тэге {CODE} пытался положить, так там такое получилось...

Я тут подумал, мож тэг {code} поменять, чтоб он выглядел
как-нибудь так? А к кому этим обращаться?

frizzn 19-01-2005 19:22 290129

Надо топик в Forums OSzone.net » Общий » О сайте и форуме создать.

Savant 20-01-2005 09:06 290295

Эээ.... такой вопросик: а в чём, собственно, различие двух следующих вызовов функций (на Си)?
Код:

::GetWindowText(hWnd,str,n);
 
  GetWindowText(hWnd,str,n);

Ну и, соответственно, что предпочтительнее? :)

frizzn 20-01-2005 12:04 290339

Это C++. В C оператора разрешения области видимости ( :: ) нет.
Если в одном пространстве имен есть глобальная функция FuncName() и она перекрыта локальной функцией FuncName(), то форма вызова ::FuncName() вызывает глобальную, а FuncName() - локальную функцию.

Код:

#include "stdafx.h"
 
  namespace OSzone {
          int GetWindowText(HWND hWnd, LPTSTR str, int n)
          {
                  ::MessageBox(NULL,"This is OSzone::GetWindowText()","",0);
                  return 0;
          }
         
          void CallMyGetWindowText()
          {
                  // Вызывает OSzone::GetWindowText()
                  GetWindowText(NULL,NULL,0);       
          }
 
          void CallWinAPIGetWindowText()
          {
                  // Вызывает обычный GetWindowText()
                  ::GetWindowText(NULL,NULL,0);
          }
  }       
 
 
  int APIENTRY WinMain(HINSTANCE hInstance,
                                          HINSTANCE hPrevInstance,
                                          LPSTR lpCmdLine,
                                          int nCmdShow)
  {
          OSzone::CallMyGetWindowText();
          OSzone::CallWinAPIGetWindowText();
          return 0;
  }

Или тоже самое с переменными:
Код:

#include "stdafx.h"
 
  int i = 5; // глобальная переменная
 
  int main()
  {
          int i = 0; // Локальная переменная
          for (; i < 10; ++i)
          {
                  ::i++;
          }
          printf("i = %d, ::i = %d", i, ::i);
          return 0;
  }


Savant 20-01-2005 12:22 290346

frizzn, супер. Мгновенно врубился. Правда пока не знаю как это использовать (с функциями-то понятно, а с переменными... хм... запутаться легко, проще наверно разные имена давать).
Это у меня тут такие вопросы пошли, поскольку я за Си вцепился. У меня просто по нему весьма поверхностные знания (в основном из ДОСа). За день съел томик Кернигана с Ричем, а потом ушел в кодинг. Видно надо почитать еще и про С++
Кстати, frizzn, ты не мог бы посмотреть на следующий код с точки зрения оптимизации?
Код:

int Pos(char* s1, char* s2) { // Ищет вхождение строки s1 в строку s2
    for(int i=0;s2[i++]!='\0';) {
        if (s2[i]==s1[0]) {
            for(int k=1;(s1[++k]!='\0')&&(s1[k]==s2[i+k]);) ;
            if (s1[k]=='\0') return i;
        }
    }
    return 0;
}


frizzn 20-01-2005 14:55 290384

  1. Когда ничего не найдено, надо возвращать такое число, которое явно покажет, что ничего не найдено. Напр. -1 ( 0 - это первый символ)
  2. Никогда так не пиши:

    :maniac:

    Код:

    for(int i=0;s2[i++]!='\0';)
Т.е. должно получиться вроде такого:
Код:

int Pos(const char str[], const char pattern[])
  {
          int i,j,k;
          for (i = 0; str[i] != '\0'; ++i)
          {
                  if (str[i] == pattern[0])
                  {
                        // Сравниваем str и pattern пока они равны и не закончились
                        for (j=i+1,k=1; str[j] == pattern[k] && pattern[k] != '\0'; ++k, ++j)
                                  ;
                        // Если досравнивались до того, что pattern закончился, а наши
                        // строки до сих пор равны - значит мы нашли! Возвращаем позицию.
                          if (pattern[k] == '\0')
                                  return i;
                  }
          }
          // Не нашли :(
          return -1;
  }


Savant 20-01-2005 15:43 290393

Thanks, frizzn. Дааа, с ошибкой return 0; соглашусь, уж слишком я привык к Object Pascal. Абсолютно согласен с const char в заголовке. А вот что не так с for(int i=0;s2[i++]!='\0'; )? Переменная i увеличивается после ее использования в качестве индекса. Побочных действий нет.

Через 2 минуты

Аааааа... Я балда! :durak: :down: :down: :down:
Все, догнал....
Если бы совпадение было на первом символе (m.e. на s2[0]), то ни фига бы не нашлось.

Спасибо за помощь :beer:


Время: 19:47.

Время: 19:47.
© OSzone.net 2001-