Премини към съдържанието

Препоръчан отговор


Здравейте аз съм на 14 имам намерения да се занимавам с програмиране и мисля да уча C++ ,но нямам никаква прецтава как защо и такаива..какво мислите за тази книга : http://www.book.store.bg/p21706/programirane-na-s-chast-pyrva-magdalina-todorova.html дали ще мога да разбера нещо?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Книгата,която искаш да прочетеш не е написано за начинаещи. И затова ако искаш да научиш програмиране от нулата тази книга (Програмиране на С++. Част първа) не е за теб.

На Бисерка Йовчева и Ирина Иванова има една книга "Първи стъпки в програмирането на C/C++", тя е много добра за начинаещи. Подробно е обяснено как да пишем, компилираме, тестваме , дебъгваме кода си.

Публикувано изображение

Публикувано изображение

Редактирано от zerocool2 (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Не е нужно да купуваш книги. Ето един много добър сайт за научаване на езика: http://www.cplusplus.com/

Не е нужно да лъжеш хората...

Редакция: Малко рязко беше. Само че само от този сайт C++ няма да научиш и ще ти останат съществени дупки в знанията, както забелязваш...

Редактирано от flare (преглед на промените)
  • Харесва ми 2

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Книгата,която искаш да прочетеш не е написано за начинаещи. И затова ако искаш да научиш програмиране от нулата тази книга (Програмиране на С++. Част първа) не е за теб.

На Бисерка Йовчева и Ирина Иванова има една книга "Първи стъпки в програмирането на C/C++", тя е много добра за начинаещи. Подробно е обяснено как да пишем, компилираме, тестваме , дебъгваме кода си.

Публикувано изображение

Публикувано изображение

имаш ли идея от кой сайт да сия поръчам ?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Не е нужно да лъжеш хората...

Редакция: Малко рязко беше. Само че само от този сайт C++ няма да научиш и ще ти останат съществени дупки в знанията, както забелязваш...

Не лъжа хората.

Modedit : моля, недейте приканва хората към нарушаване на закона - да теглят произведения защитени с авторски права !

Редактирано от Trichocephalus (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Не лъжа хората.

Затова се поправих. Но от поста ти изглеждаше, че може да научи C++ само от този сайт, което не е вярно.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Не е нужно да лъжеш хората...

Редакция: Малко рязко беше. Само че само от този сайт C++ няма да научиш и ще ти останат съществени дупки в знанията, както забелязваш...

Този сайт е много добро начало http://www.learncpp.com/

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Аз ти препоръчвам Практичен самоучител C и Практичен самоучител C++

Автор: Хърбърт Шилдт

Български издател: СофтПрес

Издател на оригинала: Osborne

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Аз ти препоръчвам Практичен самоучител C и Практичен самоучител C++

Автор: Хърбърт Шилдт

Български издател: СофтПрес

Издател на оригинала: Osborne

Колега, много програмисти, които са в час с материята, не препоръчват книгите на Хърбърт Шилдт като въведение в програмиране на C++.

Не съм програмист, но поне такива коментари открих в нета.

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Колега, много програмисти, които са в час с материята, не препоръчват книгите на Хърбърт Шилдт като въведение в програмиране на C++.

Не съм програмист, но поне такива коментари открих в нета.

Точно обратното съм чувал!

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Точно обратното съм чувал!

Произволен цитат от нета.

I started off with "C++: A Beginner's Guide" by Herbert Schildt. Now I've learnt that the general consensus is that Schildt teaches bad practices.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Няма нужда да спорите за това коя книга на какви практики учи. В общия случай аз не съм видял една която да учи изцяло на добри практики. Например в никоя книга не съм видял да пишат (0 == x) вместо (x == 0) което е много дребно, просто и очевидно нещо, спестяващо брутални грешки в петък вечер...

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Няма нужда да спорите за това коя книга на какви практики учи. В общия случай аз не съм видял една която да учи изцяло на добри практики.

Например в никоя книга не съм видял да пишат

(0 == x)

вместо

(x == 0)

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

Аз мисля, че това е така, защото стойността се присвоява за "x".

P.S. обърках знака с присвояване, в случая е равно, но според мен, логиката е същата.

Редактирано от Viiipeer (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Аз мисля, че това е така, защото стойността се присвоява за "x".

P.S. обърках знака с присвояване, в случая е равно, но според мен, логиката е същата.

това е сравнение, и е все едно дали ще сравняваш стойността на х със нула или обратното, Единствената разлика ще е (може би) много малко по-оптимален код защото вероятно х е вече в регистрите и няма да има нужда специално да се зарежда константата за да се сравнят
  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Много просто е, ако изпуснете без да искате едното равно - това се е случвало в даден момент на всеки, второто ще се компилира и което е по-лошо, даже може и да работи в някои случаи, оставяйки бомба със закъснител. Първото ще изгърми с грешка при компилация. Това е нещо дребно, не коства нищо да се прави, а доказано е мнооого полезно. Има десетки такива "дребни" нещица (нарочно избрах най-дребното), които не ги пише никъде а могат да ти спестят много мъка

  • Харесва ми 2

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Добре ,но в край на сметка коя,каква книга да взема?Аз съм напълно начинаещ ама на 100% нямам грам прецтава какви кодове какви простотии и тем подобни.но пък имам желание за това като за начало ми препоръчайте някоя книга от която да разбера нещата.И все пак съм на 14 години Благодаря Предварително

Редактирано от r0ssk0o (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Някъде из нета пишеше че книгите на Шилдт са bullschildt.

Ето това може да помогне: http://stackoverflow...-guide-and-list

Редактирано от frozener (преглед на промените)
  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

имаш ли идея от кой сайт да сия поръчам ?

Книгата не се продава online, но я има в книжарниците :)

Публикувано изображение

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Няма нужда да спорите за това коя книга на какви практики учи. В общия случай аз не съм видял една която да учи изцяло на добри практики.

Например в никоя книга не съм видял да пишат

(0 == x)

вместо

(x == 0)

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

Доколко това е добра практика е малко спорно.

Лично аз не я харесвам, защото:

  • изказът е неестествен и по-труден за четене. В повечето естествени езици структурата на изречението е „подлог, сказуемо, допълнение“. При този начин на писане имаме „допълнение, сказуемо, подлог“, което е обратното на това, което мозъкът очаква. Неслучайно тази практика е известна като „Yoda conditions“ (въпреки че изказът на Йода е по-скоро „подлог, допълнение, сказуемо“).
  • един код се чете много повече пъти и време, отколкото се пише. Затова е особено важно да е лесно четим. След време може би донякъде се привиква на този изказ, но си мисля, че това привикване би довело и до неща, като например да се пише for (int i = 0; 10 > i; i++)...
  • сравненията с константа са по-малко или най-много съпоставими по брой със сравненията с друга променлива. А тогава този метод не би помогнал, тоест сме далеч от тотално избягване на този проблем.
  • компилаторите имат възможност да откриват такива грешки и да извеждат предупреждение за това. Нещо повече, те могат да откриват грешката и в случаите на сравнение с друга променлива. Ненужно е да правим кода си по-трудно четим, след като имаме механизъм за справяне с този тип грешки.
  • лично аз нямам спомен скоро да съм правил такъв тип грешка. Струва ми се, че се случва рядко.
  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

да се пише for (int i = 0; 10 > i; i++).......

...

точно такова дефиниране не е добра практика, защо не дефинирате експлицитно променливата на цикъла заедно с другите променливи а трябва да го правите във for цикъла?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Та какво мислите за тази книга ще ме въведе ли Първи стъпки в програмирането на C/C++

Редактирано от r0ssk0o (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

изказът е неестествен и по-труден за четене.

Ами с това се свиква бързо. for примерът не ми се струва аналогичен. Освен това защо е неестествен - ами защото навсякъде пишат сравненията с константа подредени така. Което за мен е лошо обучение, защото самата операция е комутативна и не мога да си представя защо да прочета а == b е различно от b == a

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

Да, но това си е валидна конструкция и може да искаш да я използваш нарочно и понякога прави кода по-четим. Така че не е правилно да се прави на грешка, а ако е предупреждение, лесно може да се пропусне.

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

Тук си напълно прав и това е най-коварното - хората понякога спират да внимават. Имахме един случай такъв, в който присвоената стойност (идваше от хардуер), само веднъж на няколко часа работа беше грешна. И това водеше до грешно поведение в съвсем друга част на кода....

Аз не казвам че предложеният ми метод е идеален, казвам че употребата му е полезна.

Идеално би било в C/C++ оператора за присвояване да е малко по-различен - да кажем като Паскал...

Редактирано от flare (преглед на промените)
  • Харесва ми 2

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

точно такова дефиниране не е добра практика, защо не дефинирате експлицитно променливата на цикъла заедно с другите променливи а трябва да го правите във for цикъла?

Тук зависи от школата. В новите практики променливите се дефинират при първа употреба и колкото може по-локални.

Така както Test42 го написа i-то съществува само в цикъла, тоест само където се ползва. Иначе си признавам доброволно, че и аз си дефинирам променливите в началото на блока. Но пък не отричам предимствата на "дефинирай, когато ползваш" стила.

  • Харесва ми 2

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

  • Разглеждащи това в момента   0 потребители

    Няма регистрирани потребители разглеждащи тази страница.

  • Подобни теми

    • от Chris Panov
      Здравейте, 
      В момента пиша една програма, в която в една от функциите ми се налага да излезна по-рано при определено условие. Функцията връща string впрочем.
      Ето кодът:
       
      #include "stdafx.h" #include <iostream> #include <string> #include <sstream> #include <vector> #define CONSOLE_LOG(x) std::cout << x #define COMMAND_END command[0] #define COMMAND_SUM command[1] #define COMMAND_SUBTRACT command[2] #define COMMAND_CONCAT command[3] #define COMMAND_DISCARD command[4] #define COMMAND_DISPSEQ command[5] template <typename T> void top_back(std::vector<T>& v) {     v.erase(v.end() - 1); } std::string sum(std::string& x, std::string& y, std::vector<std::string>& vec) {     int xInt = atoi(x.c_str());     int yInt = atoi(y.c_str());     int result = xInt + yInt;     std::ostringstream os;     std::string strResult;     os << result;     strResult = os.str();     top_back(vec);     top_back(vec);     return strResult; } std::string subtract(std::string& x, std::string& y, std::vector<std::string>& vec) {     int xInt = atoi(x.c_str());     int yInt = atoi(y.c_str());     int result = xInt - yInt;     std::ostringstream os;     std::string strResult;     os << result;     strResult = os.str();     top_back(vec);     top_back(vec);     return strResult; } std::string concat(std::string& x, std::string& y, std::vector<std::string>& vec) {     if (atoi(x.c_str()) < 0)     {         return;     }     else {         std::string concatStr = y + x;         top_back(vec);         top_back(vec);         return concatStr;     } } void dispseq(std::vector<std::string>& vec) {     std::vector<std::string>::const_iterator iter;     for (iter = vec.begin(); iter != vec.end(); iter++)     {         std::cout << *iter << std::endl;     } } void enterSequence() {     std::vector<std::string> command =     {         "end",         "sum",         "subtract",         "concat",         "discard",         "dispseq"     };     std::vector<std::string> sequence;     std::string input;     std::string a;     std::string b;     do     {         std::cin >> input;         sequence.emplace_back(input);         if (input == COMMAND_END)         {              top_back(sequence);         }         if (input == COMMAND_SUM)         {             top_back(sequence);             a = sequence[sequence.size() - 1];             b = sequence[sequence.size() - 2];             sequence.emplace_back(sum(a, b, sequence));         }         if (input == COMMAND_SUBTRACT)         {             top_back(sequence);             a = sequence[sequence.size() - 1];             b = sequence[sequence.size() - 2];             sequence.emplace_back(subtract(a, b, sequence));         }         if (input == COMMAND_CONCAT)         {             top_back(sequence);             a = sequence[sequence.size() - 1];             b = sequence[sequence.size() - 2];             sequence.emplace_back(concat(a, b, sequence));         }         if (input == COMMAND_DISCARD)         {             top_back(sequence);             top_back(sequence);         }         if (input == COMMAND_DISPSEQ)         {             top_back(sequence);             dispseq(sequence);         }     } while (input != COMMAND_END); } int main() {     enterSequence();     std::cin.get();     std::cin.get();     return 0; } И ето проблемната функция:
       
      std::string concat(std::string& x, std::string& y, std::vector<std::string>& vec) {     if (atoi(x.c_str()) < 0)     {         return;     }     else {         std::string concatStr = y + x;         top_back(vec);         top_back(vec);         return concatStr;     } }  
      Както виждате ако стрингът x(който естествено го превръщам в интиджър) е по-малък от 0, теоритично трябва да излезна от функцията, и това е единственият начин за който се сетих, с return;, обаче пък компилаторът иска функцията да връща стойност, понеже е от тип стринг.
      Как да съчетая двете? - да връща стринг ако всичко е по план, и да излиза ако е по-малко от 0.
    • от Chris Panov
      Здравейте,
      В момента имам сериозен проблем със взимането на броят на елементи в даден вектор.
      vec.size(); и  
      sizeof(vec) / sizeof(vec[0]); не работят. Програмата те пита за брой ключове за даден тест, въвеждаш ключовете, после въвеждаш и отговорите, които са били дадени, и програмата ги сравнява и в зависимост от това колко верни отговори имаш ти дава точки. Ключовете и дадените отговори са тип char. ("A", "B", "C" etc.)
      Ето го и кода, като повечето съм го направил на коментар за да си тествам само функцията която извежда броя на елементите.
      #include "stdafx.h" #include <iostream> #include <vector> #define CONSOLE_LOG(x) std::cout << x; std::vector<char> keys = {'A', 'B', 'C', 'D', 'E'}; std::vector<char> studentAnswers; int n, points = 0; char key, answer; template <typename T> T vecSize(std::vector<T>& vec) { T size = vec.size(); return size; } /* template <typename T1> void enterKeys(std::vector<T1>& k) { CONSOLE_LOG("Please enter the number of keys: "); std::cin >> n; for (int i = 0, counter = 1; i < n, counter <= n; i++, counter++) { CONSOLE_LOG("Key " << counter << ": "); std::cin >> key; k.emplace_back(key); } } template <typename T2> void enterAnswers(std::vector<T2>& stAns) { for (int i = 0, counter = 1; i < n, counter <= n; i++, counter++) { CONSOLE_LOG("Answer " << counter << ": "); std::cin >> answer; stAns.emplace_back(answer); } } template <typename T3> void getGrade(std::vector<T3>& x, std::vector<T3>& y) { for (int i = 0; i < n; i++) { if (x[i] == y[i]) { points++; } } CONSOLE_LOG("Points: " << points); } */ int main() { /* enterKeys(keys); enterAnswers(studentAnswers); getGrade(studentAnswers, keys); */ std::cout << keys.size() << std::endl; std::cout << vecSize(keys) << std::endl; std::cin.get(); std::cin.get(); std::cin.get(); return 0; } Опитах всевъзможни начини, и пак не става. Идеята е да заместя n променливата със броя на елементите от вектора. Програмата върви по един и същи начин, защото все пак в n променливата запазваме големината на вектора, но бих искал да си го направя с функция.
      Както виждате на края на програмата си извеждам тестове. Първият, който си е по конвенционалният метод си работи сам по себе си, но пък във for цикъл не бачка.
      А вторият е функцията която съм направил. Проблемът е че ми извежда непознат символ - "�"
      Проблемът е че типът на елементите във вектора е char, защото като го направих с int тип си работеше както трябва.
      Бих бил изключително благодарен ако някой може да ме насочи и да ми бутне едно рамо :)
    • от Goshko
      Да се напише програма, която създава структура "Book" като имате следните полета - Title(заглавието на книгата), Автор(Author), Цена(Price) и уникален номер на книгата(ISBN-num). Да се ваведе цяло число n и след него n на брой данни за ученика. Да се изведе на монитора данните за книгата с цена по-висока от предварително зададена.
    • от Нели Николова
      Здравейте, имам две готови задачи, но не мога да ги компилирам. Дали може да ги проверите?
      зад.1 Да се състави програма, която да сортира едномерен масив от цели числа тип short  с име X състоящ се от 19 елемента. Сортирането да се извърши във възходящ ред чрез метода пряка селекция.
      #include <iostream>
      using namespace std;
      void sortAsc(short[]);
      int main() {
          short x[] = {123,13,23,31,1,55,36,17,8,9,10,11,6,12,14,15,16,35,184,19};
           
          sortAsc(x);
          
          return 0;
      }
      void sortAsc(short x[]){
          for(short i = 0; i < 19 ; i++) {
              for(short j = i; j < 19; j++) {
                  if(x[j] < x) {
                      swap(x[j], x);
                  }
              }    
          }
          
          for(int i=0; i<19; i++)
          {
              cout << x << endl;
          }
      }
      зад. 2 Да се състави програма,която реализира динамичен стек от реални числа тип float. Стекът да се преобразува в два нови стека, един стек P за четните и един стек O за нечетните числа от стек едно. Стековете да се извеждат на екрана.
      int main() {
          stack<float>numbers;
          stack<float>p;
          stack<float>o;
          
          for(short i = 1; i <= 200; i++) {
              numbers.push(i);
          }  
          
          numbers.push(200.64);
          numbers.push(203.34);
          
          while(!numbers.empty()) {
              int number = numbers.top();
              
              if (number % 2 == 0) {
                  p.push(number);
              } else {
                  o.push(number);
              }
              numbers.pop();
          }
          
          cout << "EVEN NUMBERS:" << endl;
          
          while(!p.empty()) {
              cout << p.top() << endl;
              p.pop();
          }
          
          cout << "ODD NUMBERS:" << endl;
          
          while(!o.empty()) {
              cout << o.top() << endl;
              o.pop();
          }
          
      }
      Много Ви благодаря :)
       
    • от Georgi Kirchev
      Здравейте имам да предам курсова работа утре ,но не мога да я реша , ще бъда изключително благодарен ако може някой да ми помогне.

      Дефинирайте клас Телевизор, който да е родител на клас Самсунг и клас Сони. Клас Телевизор да има цена и брой продадени за година в сектор private. Класовете Самсунг и Сони да имат в сектор public функции за определяне на общата сума от продажби за година (цена * брой продадени за година). Всички класове да имат конструктори по подразбиране.
       
      Благодаря предварително !
  • Дарение

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.