fentg.com

ФОРУМЪТ на ФЕНОВЕТЕ на НТГ
Дата и час: Нед Апр 11, 2021 6:48 am

Часовете са според зоната UTC + 2 часа [ DST ]


Правила на форума


Натиснете за да видите правилата



Напиши нова тема Отговори на тема  [ 26 мнения ]  Отиди на страница Предишна  1, 2, 3
Автор Съобщение
 Заглавие: Re: Млад разработчик...
МнениеПубликувано на: Пон Яну 13, 2014 8:39 pm 
Offline
Аватар

Регистриран на: Чет Ное 27, 2008 12:06 am
Мнения: 111
Преди да се стигне до Обектно ориентираният вариант на C , е много полезно да си напълно наясно с C. Иначе има вероятност да изтървеш много полезни неща, които обикновено са застъпени в С. В С се учат най-добре указателите, както и как работят callBack функцийте. Тоест учиш се как реално са застъпени нещата на по-ниско ниво. Според мен най-добрата практика е да се учи С , което е в основата на всеки съвременен програмен език, след това Асемблер, за да се види как точно програмата работи в паметта и да се разгледа подробно стека, и накрая чак да се застъпи ООП. В противен случай отиваш на нещо , което е на доста високо абстрактно ниво и освен програмки за някви Операционни системи друго не можеш да правиш. C-то е езикът, който ти позволява да пишеш и за микроконтролери и за микропроцесори. :) Даже ако си достатъчно добър на С , използвайки структури от данни , може да се правят нещо като класовете в C++ , естествено няма ги ключовите думи , но все пак.

mitko написа:
Pulse написа:
Ако се научи C , всеки друг език от там нататък се усвоя за по-малко от месец на доста по-добро ниво. Обратната ситуация не важи. :)


Е ако беше казал C++, щеше да се съглася, но от C да преминеш на някой обектно ориентиран език, не е най-лесната задача, защото концепциите на процедурното и обектно ориентираното програмиране са доста различни. Направо трябва да си смениш начина на мислене, за да преминеш от 1-то на другото.

_________________
Ако нямаш приятели в живота, все едно да живееш в къща върху пясък!
Изображение
http://www.vergov.com


Върнете се в началото
 Профил  
 
 Заглавие: Re: Млад разработчик...
МнениеПубликувано на: Пон Яну 13, 2014 10:46 pm 
Offline

Регистриран на: Сря Ное 19, 2008 5:48 pm
Мнения: 513
Не ме разбирай погрешно, разбирам че C-то е в основата на C++ и че ако искаш да си добър, без да знаеш C добре, няма смисъл да пристъпваш към обектно ориентираното програмиране, но казвам че дори да знаеш C перфектно, ще ти е трудно да навлезеш добре в някой обектно ориентиран език, имам предвид че само C не е достатъчно. Докато ако знаеш C++ добре, тогава вече ще ти е сравнително лесно да пристъпиш към кой да е език, защото на практика за да знаеш C++ добре, трябва да знаеш и C добре. Тогава вече наистина ще ти е доста-по лесно, защото другите OOП езици като Java и C# са доста по-улеснени за програмистите, за сметка на производителност и памет. Също имат и доста повече ограничения, които на C++ ги няма.

Иначе за Асемблер мисля че, може да се погледне от интерес, но не ти е чак толкова нужен за да програмираш обектно ориентирано, все пак имаме достатъчно добра капсулация и не е чак толкова фатално ако не знаеш някои неща на по-ниско ниво. Не е нужно да знаеш как се правят моливи, за да рисуваш.

_________________
Toва което не може да се опише с думи, се описва с музика.


Върнете се в началото
 Профил  
 
 Заглавие: Re: Млад разработчик...
МнениеПубликувано на: Вто Яну 14, 2014 12:55 am 
Offline
Аватар

Регистриран на: Чет Ное 27, 2008 12:06 am
Мнения: 111
mitko написа:
Не ме разбирай погрешно, разбирам че C-то е в основата на C++ и че ако искаш да си добър, без да знаеш C добре, няма смисъл да пристъпваш към обектно ориентираното програмиране, но казвам че дори да знаеш C перфектно, ще ти е трудно да навлезеш добре в някой обектно ориентиран език, имам предвид че само C не е достатъчно. Докато ако знаеш C++ добре, тогава вече ще ти е сравнително лесно да пристъпиш към кой да е език, защото на практика за да знаеш C++ добре, трябва да знаеш и C добре. Тогава вече наистина ще ти е доста-по лесно, защото другите OOП езици като Java и C# са доста по-улеснени за програмистите, за сметка на производителност и памет. Също имат и доста повече ограничения, които на C++ ги няма.

Иначе за Асемблер мисля че, може да се погледне от интерес, но не ти е чак толкова нужен за да програмираш обектно ориентирано, все пак имаме достатъчно добра капсулация и не е чак толкова фатално ако не знаеш някои неща на по-ниско ниво. Не е нужно да знаеш как се правят моливи, за да рисуваш.


Абсолютно прав си! След С се пристъпва към C++ и след това всичко друго е лесно и просто (като изключим функционалното програмиране, там се изисква повече математика отколкото логика и е малко по-шантово). А иначе не ти трябва асемблер , за да програмираш с ООП език, и включването ми относно асемблер беше точно, това което си писал, че трябва да го познаваш, колкото да разбираш как работи софтуера върху хардуера.

_________________
Ако нямаш приятели в живота, все едно да живееш в къща върху пясък!
Изображение
http://www.vergov.com


Върнете се в началото
 Профил  
 
 Заглавие: Re: Млад разработчик...
МнениеПубликувано на: Съб Фев 01, 2014 1:32 pm 
Offline

Регистриран на: Съб Яну 25, 2014 11:22 am
Мнения: 1
Ето решението на задачата за спиралата:
Код:
main()
{
// stp - steps in 1 direction; cs - current step in this direction;
// dir - direction -> 0 is toUp, 1 is toRight, 2 is toDown, 3 is toLeft;
// cns - if it's time to change/increase/ the number of steps;

unsigned i, n, a[30][30], dir=0, r, c, cs=0, stp=1, cns=0;

printf("N=");
scanf("%u",&n);

r = n/2+1; // start row position;
c = (n+1)/2; // or c = n-n/2; start column position;

for(i=1;i<=n*n;i++)
  {
   a[r][c]=i;
   if(cs<stp)cs++;
   else
   {cs = 1;
    stp += cns; // or if(cns)stp++;   
    cns = (cns+1)%2;
    dir = (dir+1)%4;
   }
   switch(dir)
   {
    case 0 : r--; break;
    case 1 : c++; break;
    case 2 : r++; break;
    case 3 : c--; break;         
   }
  }

  printf("\n");
  for(r=1;r<=n;r++)
   {
    for(c=1;c<=n;c++)   
     printf("%4u",a[r][c]);
    printf("\n\n");
   }   

getch();     
}


Върнете се в началото
 Профил  
 
 Заглавие: Re: Млад разработчик...
МнениеПубликувано на: Съб Фев 01, 2014 9:36 pm 
Offline
Администратор
Аватар

Регистриран на: Нед Ное 02, 2008 5:30 pm
Мнения: 3550
Код:
...
c = (n+1)/2; // or c = n-n/2; start column position;
...
stp+=cns; // or if(cns)stp++;   
...

Много интересно, особено при второто, как просто си спестихме едно if-че...
/по хрумване на Никито - Lightning00Blade/

А също интересно е при първото как и двете конструкции работят равностойностно:
Код:
c = (n+1)/2;
или
Код:
c = n-n/2;
коя е по-сигурна?

_________________
Изображение


Върнете се в началото
 Профил  
 
 Заглавие: Re: Млад разработчик...
МнениеПубликувано на: Съб Фев 01, 2014 11:16 pm 
Offline

Регистриран на: Сря Ное 19, 2008 5:48 pm
Мнения: 513
Двете конструкции работят равностойно, защото имаме целочислено делене и при първия вариант като добавим 1-ца към n се получава закръгляне нагоре при делене на 2 на нечетните числа, а при втория вариант когато делим n на 2 закръгляме към по малкото число, но резултата го вадим от n и затова пак се получава, все едно закръгляме към по-голямото, защото това което вадим от n става с 1-ца по малко и резултата става с 1-ца по-голям.

Код:
c = (n+1) / 2;
ми се вижда по-четимо и по-разбираемо, но от друга страна другия вариант работи и когато n достигне на последното число от обхвата на unsigned, докато (n+1)/2 ще работи до 1 число по малко :rofl:

_________________
Toва което не може да се опише с думи, се описва с музика.


Върнете се в началото
 Профил  
 
Покажи мненията от миналия:  Сортирай по  
Напиши нова тема Отговори на тема  [ 26 мнения ]  Отиди на страница Предишна  1, 2, 3

Часовете са според зоната UTC + 2 часа [ DST ]


Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Превод: Ioan Filipov