На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Закрыто archimed7592 11-03-2008: Лимит страниц. Продолжаем Delphi vs C++

Страницы: (117) « Первая ... 20 21 [22] 23 24 ...  116 117  ( Перейти к последнему сообщению )  
> Delphi vs C++ , Часть 1
    Цитата trainer @
    Цитата Profi @
    Кто сделает на C++ с case'ом и без break'ов?

    ExpandedWrap disabled
      cout<<'Вы выбрали "<<(i<4?"овощи!":"фрукты!")

    остальное переписывать надо или и так понятно?

    ExpandedWrap disabled
      cout<<'Вы выбрали "<<(i<5?"овощи!":"фрукты!")

    =)

    Цитата Profi @
    Кто сделает на C++ с case'ом и без break'ов?

    Не совсем понял смысл данного условия... Почему без break?
    Сообщение отредактировано: lava -
      Цитата lava @
      Не совсем понял смысл данного условия... Почему без break?

      А почему Flex меня заставил ломать голову над тем, как реализовать template? Плюс ко всему он использовал стороннюю библиотеку!
        Цитата Profi @
        Плюс ко всему условие выполниться и при i<0 и i>9!

        ExpandedWrap disabled
          cin >> i;
          if ( i < 0 || i > 9 )
          {
          cout << "Wrong number" << endl;
          return;
          }
          cout << "Вы выбрали " << (i < 5 ? "овощи!" : "фрукты!") << endl;

        или даже

        ExpandedWrap disabled
          do
          {
          cout << "Enter correct number: ";
          cin >> i;
          }
          while ( i < 0 || i > 9 )
          cout << "Вы выбрали " << (i < 5 ? "овощи!" : "фрукты!") << endl;
          А если я введу букву?
            Вылетит =)
            Равно как и твой код.
              Цитата lava @
              Равно как и твой код.

              Уверен? ;)
                Это уже либо исключения подключать надо, либо читать строку и анализировать.

                Добавлено
                Цитата Profi @
                Уверен?

                Блин. Не дочитал - твой не вылетит.
                Ну, тогда и мне надо уже исключения ловить, а мне сейчас лень =))
                  Ну, так кто-нибудь полный код даст?
                    ExpandedWrap disabled
                      #include <iostream>
                       
                      struct PlodException {};
                       
                      struct PlodDefinition {
                          char Name[16];
                          unsigned Type;
                      };
                       
                      const int PlodsNumber = 9;
                       
                      const PlodDefinition Plods[] = {
                          {"Морковь", 0},
                          {"Картофель", 0},
                          {"Томаты", 0},
                          {"Огурцы", 0},
                          {"Капуста", 0},
                          {"Яблоки", 1},
                          {"Персики", 1},
                          {"Виноград", 1},
                          {"Абрикосы", 1},
                          {"Арбуз", 1}};
                          
                      const char* PlodTypes[] = {"овощ", "фрукт"};
                       
                      class Plod {
                          int Number;
                      public:
                          Plod() : Number(-1) { }
                          Plod(int aNumber) : Number(aNumber) { }
                          Plod(const Plod& p) : Number(p.Number) { }
                          
                          Plod& operator=(const Plod& p) { Number = p.Number; return *this; }
                          
                          void IsValid() const { if(n < 0 && n > PlodsNumber) throw PlodException(); }
                          
                          const char* GetName() const { IsValid(); return Plods[Number].Name; }
                          const char* GetType() const { IsValid(); return PlodTypes[Plods[Number].Type]; }
                      };
                       
                      std::istream& operator>>(std::istream& is, Plod& pl) {
                          try {
                              int n;
                              is >> n;
                              
                              if(n < 0 && n > PlodsNumber) throw PlodException();
                              
                              pl = Plod(n);
                          }
                          catch (...) {
                              throw PlodException();
                          }
                      }
                       
                      int main() {
                          Plod p; char c;
                          
                          try {
                              std::cin >> p;
                          }
                          catch(PlodException& err) {
                              std::cerr << "Введите верный плод";
                              std::cin >> c;
                              return 1;
                          }
                          
                          std::cout << p.GetType() << "(" << p.GetName() << ")\n";
                          
                          std::cin >> c;
                          
                          return 0;
                      }


                    Выглядит конечно немного извращенно, но определенную свободу дает :) В частности масштабируемость у программы достаточно хорошая ;)
                    Сообщение отредактировано: Мяут -
                      У тебя 57 строк (пустые не считал) у меня 31, плюс все проще и нагляднее. Прогноз работает!
                        Profi, зато я могу для каждого плода краткого описания каждого плода, добавить еще овощей и фруктов, и даже ягод, и при этом использовать очень мало изменений, а тебе придется переписывать значительную часть кода :)

                        Добавлено
                        Profi, то есть я за счет 20 дополнительных строк (хотя если бы я правильно форматировал код, их было бы гораздо больше :) ) получаю весьма мощный каркас приложения, а у тебя оно на 5 овощей и 5 фруктов заточено :D
                          так надо было c case без break, а тут ни первого ни второго :whistle:
                            Цитата Мяут @
                            Profi, зато я могу для каждого плода краткого описания каждого плода, добавить еще овощей и фруктов, и даже ягод, и при этом использовать очень мало изменений, а тебе придется переписывать значительную часть кода :)

                            Ну, я тоже мог все на классах написать. А как такой код:
                            ExpandedWrap disabled
                              program Project1;
                              {$APPTYPE CONSOLE}
                              uses
                                Variants,ComObj,ActiveX;
                              Var
                                v:variant;
                              begin
                                CoInitialize(nil);
                                v:=CreateOleObject('Word.Application');
                                v.visible:=true;
                                readLn;
                                v.quit;
                              end.
                              Alex Forth, если я могу лучше, нафига мне case/break? Я могу пользоваться всеми доступными средствами языка.
                              Profi, давай не будем давать платформо-зависимые примеры, а?
                              Цитата Profi @
                              Ну, я тоже мог все на классах написать.

                              тут дело не только в одних классах. Один массив структурок информации о плодах чего стоит :wub:
                                Цитата linuxfan @
                                P.P.P.S.: в дельфях, по крайней мере, вложенные функции обеспечивают подобие заглушек, а в плюсах с этим совсем туго.

                                В плюсах это реализовать вполне можно. Даже достаточно просто.
                                Цитата linuxfan @
                                Слабо поднять холивар C++ vs Lisp? Я тут пару месяцев назад «On Lisp» вкурил :)

                                Пока слабо :) Пока только осиливаю common lisp :)
                                Цитата Profi @
                                Ну, так кто-нибудь полный код даст?

                                Почему бы и нет (приведена калька, не использующая никакие полезные фичи c++)?
                                ExpandedWrap disabled
                                  const char *pr[]={"Морковь", "Картофель", "Помидоры", "Огурцы", "Капуста", "Яблоки", "Груши", "Сливы", "Персики", "Абрикосы"};
                                  int main()
                                  {
                                    int i;
                                    bool v = false;
                                    while (!v) {
                                      cout << "Выберите продукт:"<<endl;
                                      for (int i = 0; i < 10; ++i) cout << i << '. ' << pr[i];
                                      try {
                                        int n;
                                        if (!(cin >> n)) throw runtime_error("Надо ввести число");
                                        v = true;
                                        if (i >= 0 && i <= 4) cout << "Вы выбрали овощи!"; else
                                        if (i >= 5 && i <= 9) cout << "Вы выбрали фрукты!"; else {
                                          cout << "Введенное число не входит в список";
                                          v = false;
                                        }
                                      } catch (...) {
                                        cout << "Вы ввели не число";
                                      }
                                    }
                                    return 0;
                                  }
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (117) « Первая ... 20 21 [22] 23 24 ...  116 117
                                Закрыто archimed7592 11-03-2008: Лимит страниц. Продолжаем Delphi vs C++



                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0654 ]   [ 15 queries used ]   [ Generated: 14.08.25, 21:59 GMT ]