Принципи на програмирането със С++

Последно мнение 05-13-2010 13:16 от nikitta. 59 отговори.
Страница 4 от 4 (60 обекта) < Предишна 1 2 3 4
Сортиране на постовете: Предишна тема Следваща тема
  • 03-04-2009 8:32 в отговор на

    • iv_2007
    • Топ 10 за потребители
      Жена
    • Регистриран на 02-03-2008
    • Мнения 1 843
    • Точки 29 925

    За: Принципи на програмирането със С++

    karolin@:
    int KodOp

    int KodOp;

    karolin@:
    }
      default:cout<<"\n\t Zadali ste nesyshtestvuvashta operaciq.Natisnete ENTER.\n";


      default:cout<<"\n\t Zadali ste nesyshtestvuvashta operaciq.Natisnete ENTER.\n";

     // getch(); тъй като не съм сигурна каква е идеята ви за този оператор, той може да е и след голямата скоба на съставния оператор, но default е част от select.
    }

     

    http://iv2007.web.officelive.com/default.aspx
    • Точки: 5
  • 03-04-2009 13:36 в отговор на

    • hristov_b
    • Топ 50 за потребители
      Мъж
    • Регистриран на 10-18-2007
    • Мнения 82
    • Точки 1 605

    За: Принципи на програмирането със С++

           karolin@, за да работи програмата Ви е необходимо оше:

      1. махнете реда cout<<"\nYor choise;";ch=getche();

      2. Махнете default:" от 4 - тия ред отдолу;

      3. Тъй като KodOp е от тип int , трябва да махнете и апострофите на цифричките след case;

       4. Разместете местата на редовете ViewList(pFirst) и clrscr();

      5. След горните 4 промени програмата ще заработи, но данните за всеки един студент ще се долепват. Необходимо е да ги разделите и подредите в колони, като вмъкнете setw(число) преди извеждането на данните във ViewList. Последното е манипулатор и изисква библиотеката <iomanip.h>

       Краят на Вашите мъки  наближава !

    • Точки: 20
  • 03-04-2009 20:31 в отговор на

    • karolin@
    • Топ 200 за потребители
      Жена
    • Регистриран на 02-16-2009
    • Мнения 16
    • Точки 225

    За: Принципи на програмирането със С++

    След промените стигнах до следния вид

    #include <iostream.h>
    #include <conio.h>
    #include <string.h>
    #include <iomanip.h>

    struct student {
     int number;
     char name[30];
     double mark;
     student *pNext;
    }
      *pFirst=NULL,*p;

    //------------------------------------
    void DobStud(int number,char name[],double mark)
    {student *p;
      p = new student;
      p->number=number;
      strcpy(p->name,name);
      p->mark=mark;
      p->pNext = pFirst;
      pFirst = p;
    }

    //----------------------------------
    void ViewList(student *p)
    {//student *p=pFirst;
     if (p == NULL) cout<<"prazen spisyk\n";
     else while (p != NULL)
      {cout<<setw(4)<<p->number<<setw(30)<<p->name<<setw(8)<<p->mark<<endl;
      p=p->pNext;
      }
    }

    //-----------------------------------
    student *SearchName(char name[30])
    {student *p=pFirst;
     if (p == NULL) cout<<"\n prazen spisyk";
     else while (p != NULL)
      {if (strcmp(p->name,name)==0) return p;
      p=p->pNext;
      }
      return NULL;
    }

    //----------------------------------------
    void DelName(char name[30])
    {student *p=pFirst,*q=p;
      if (p == NULL) cout<<"\n prazen spisyk";
      else {while ((strcmp(p->name,name)!=0)&&(p!=NULL)){q=p; p=p->pNext; }
      if (p==NULL) cout<<"\n ne e nameren student";
     else{if(p==pFirst) pFirst=p->pNext;
        else q->pNext=p->pNext;
        delete p;
       }
      }
    }

    //------------------------------------------
    void SelectSortName()

    {student *p=pFirst,*q,*t,*r;char min[30]; t = new student;
     while(p->pNext!=NULL)

      { strcpy(min,p->name);r=p;    q=p->pNext;
     //opredelqne na minimalniq element

     while(q!=NULL)
     {if(strcmp(q->name,min)<0){strcpy(min,q->name);r=q;}

       q=q->pNext;
      }

      //razmestvane
      t->number=r->number;strcpy(t->name,r->name);t->mark=r->mark;
      r->number=p->number;strcpy(r->name,p->name);r->mark=p->mark;
      p->number=t->number;strcpy(p->name,t->name);p->mark=t->mark;

     p=p->pNext;
     }

    }

    //-----------------------------------------
    void main ()
    {
      int number;
      char name[30];
      double mark;
      int KodOp;
    do{
     clrscr();
     ViewList(pFirst);
     cout<<"\t  MENJU NA IZPYLNQVANITE OPERACII:\n";
     cout<<"\t\t1 - dobavq danni za nov student\n";
     cout<<"\t\t2 - tyrsene dannite za student\n";
     cout<<"\t\t3 - iztrivane dannite za student\n";
     cout<<"\t\t4 - sortirane dannite za student\n";
     cout<<"\t  Posochete operaciq ili 0 za prekratqvane:"; cin>>KodOp;
     switch (KodOp)
     {case 0 : break;
      case 1 : cout<<"\n number =";cin>>number;
         cout<<"\n name =";cin>>name;
         cout<<"\n mark =";cin>>mark;
         DobStud(number,name,mark);
         break;
      case 2 : cout << "\n name =";cin >> name;
         p=SearchName(name);
         cout<<endl;
         cout<<setw(4)<<p->number<<setw(30)<<p->name;
         cout<<setw(8)<<p->mark<<endl;
         break;
      case 3 : cout << "\n name =";cin >> name;
         DelName(name);break;
      case 4 : SelectSortName();
         break;
      default : cout<<"\n\t Zadali ste nesyshtestvuvashta operaciq.Natisnete ENTER.\n";
      getch();
     }
      }while(KodOp!=0);
    }

    Програмата тръгва но дава някакви бъгове, който не ми харесват :(

     

    • Точки: 20
  • 03-05-2009 12:23 в отговор на

    • karolin@
    • Топ 200 за потребители
      Жена
    • Регистриран на 02-16-2009
    • Мнения 16
    • Точки 225

    За: Принципи на програмирането със С++

    Вече си предадох програмата. Искам да изкажа искрените се благодарности на всички, които помагаха. Wink

    • Точки: 5
  • 03-07-2009 19:00 в отговор на

    • ilarionov
    • Топ 50 за потребители
      Мъж
    • Регистриран на 10-08-2007
    • Мнения 145
    • Точки 2 065

    За: Принципи на програмирането със С++

    В зависимост от предназначението си, в С++ имаме 3 библиотеки за вход и изход на данни.


    1. 
    <iostream> Конзола

      - istream - чете се от поток (входен)

      - ostream - запис в потока (изход)

      - iostream - чете и записва

     

    2.  <fstream> Работи с файловете от диска
      -
    ifstream - чете се от файл (входен)

      - ofstream - запис във файл (изход)

      - fstream - чете и записва файлове

     

    3.  <sstream> Низове – String

      - istringstream - въвеждане на низове - наследник на istream

      - ostringstream - изход на символен низ

      - stringstream - вход/изход на низове



    <sstream> е библиотека, специализирана за работа с низове, докато с другите две библиотеки, въвеждаме и извеждаме данни, съобразно вътрешното представяне на данните в нашата програма (int, float, double).

    Кирил Иларионов
    Категоризирано под следните тагове: , ,
    • Точки: 5
  • 03-13-2009 16:59 в отговор на

    • iv_2007
    • Топ 10 за потребители
      Жена
    • Регистриран на 02-03-2008
    • Мнения 1 843
    • Точки 29 925

    За: Принципи на програмирането със С++

    hristov_b:
    как да се направи функция за сравнение

    Следващият код е от интернет и сортира създадения конкретен списък по два начина: като се вземе под внимание изписването на буквите и без този параметър. За повече подробности може да се посети този сайт: http://www.cplusplus.com/reference/stl/list/sort.html

    #include <iostream>
    #include <list>
    #include <string>
    #include <cctype>
    using namespace std;

    // comparison, not case sensitive.
    bool compare_nocase (string first, string second)
    {
      unsigned int i=0;
      while ( (i<first.length()) && (i<second.length()) )
      {
        if (tolower(firstIdea)<tolower(secondIdea)) return true;
        else if (tolower(firstIdea)>tolower(secondIdea)) return false;
        ++i;
      }
      if (first.length()<second.length()) return true;
      else return false;
    }

    int main ()
    {
      list<string> mylist;
      list<string>::iterator it;
      mylist.push_back ("Ani");
      mylist.push_back ("ani");
      mylist.push_back ("Anton");

      mylist.sort();

      cout << "mylist contains:";
      for (it=mylist.begin(); it!=mylist.end(); ++it)
        cout << " " << *it;
      cout << endl;

      mylist.sort(compare_nocase);

      cout << "mylist contains:";
      for (it=mylist.begin(); it!=mylist.end(); ++it)
        cout << " " << *it;
      cout << endl;
      system("pause");
      return 0;
    }

    А следващата функция определя нарастващ ред на сортиране само на числовото поле. Според мен може да се настрои и за поле от клас string.

    bool compi(const tElem &p, const tElem &q)
    {
         if (p.num<q.num) return true;
         if (p.num>q.num) return false;
         return false;
        
     }

    http://iv2007.web.officelive.com/default.aspx
    • Точки: 20
  • 03-14-2009 16:01 в отговор на

    • hristov_b
    • Топ 50 за потребители
      Мъж
    • Регистриран на 10-18-2007
    • Мнения 82
    • Точки 1 605

    За: Принципи на програмирането със С++

    Предлагам решение на задачата на karolin@, като се използва библиотеката STL, но се приложи за списък, чиито елементи са с определен стуктура. Използвам решението предложено от iv_2007, но го адаптирам при използване на стуктура ( типизиран елемент). Опростена е функцията за сравняване. Ако желаем да се сортира по номер ( тип int ) се ползва функцията cmp. Ако желаем да сортираме по оценки ( тип double) се ползва функцията cmp1. Ако желаем да сортираме по име се ползва функцията cmp2. Ако желаем сортирането да е в низходящ ред - обръщаме знака на неравенството.
    #include <iostream>
    #include <list>
    #include <string>

    using namespace std;

    struct tElem{int num;
                 string name;
          double mark;
                }rec;
    bool cmp(const tElem p,const tElem q)
    {return p.num<q.num;
    }
    bool cmp1(const tElem p,const tElem q)
    {return p.mark<q.mark;
    }
    bool cmp2(const tElem p,const tElem q)
    {return p.name>q.name;
    }

    int main ()
    {
      list<tElem> mylist;
      list<tElem>::iterator it;
      rec.num=8; rec.name="Vlado";rec.mark=5.70;
      mylist.push_back (rec);
      rec.num=5; rec.name="Bobi";rec.mark=4.50;
      mylist.push_back (rec);
       rec.num=3; rec.name="Asen";rec.mark=5.50;
      mylist.push_back (rec);

      mylist.sort(cmp2);

      cout << "mylist contains:"<<endl;
      for (it=mylist.begin(); it!=mylist.end(); it++)
        cout << it->num<<" " <<it->name<<" "<<it->mark<<endl;
      cout << endl;
      system("pause");
      return 0;
    }


    Следващи възможности за усъвършенстване на програмата са : създаване на шаблон за сортираща функция и сортиране по два признака едновременно.

    Категоризирано под следните тагове: , ,
    • Точки: 5
  • 12-16-2009 23:55 в отговор на

    • gigi4ka
    • Няма ранг
    • Регистриран на 12-16-2009
    • Мнения 1
    • Точки 20

    За: Принципи на програмирането със С++

     iskam da popitam za slednata zada4a poneje mn ne razbiram :

    Dadeni sa dve desetcifreni celi chisla. Da se napishe programa na C++ koqto namira sumata na dvete cisla?

     

    ako nqkoi moje da mi pomogne moje da pi6e i na ginka_17@abv.bg 

    Blagodarq Vi predvaritelno!

    • Точки: 20
  • 12-17-2009 14:44 в отговор на

    • d_georgieva
    • Топ 100 за потребители
      Жена
    • Регистриран на 10-17-2007
    • Мнения 37
    • Точки 860

    За: Принципи на програмирането със С++

     виж това

    http://nikolay.kirov.be/2009/CSCB410/lecture03.html

    Ако искаш да се почувстваш богат, просто преброй всичките свои неща, които не си купил с пари
    • Точки: 20
  • 03-11-2010 17:48 в отговор на

    • static
    • Няма ранг
    • Регистриран на 03-11-2010
    • Мнения 3
    • Точки 45

    За: Принципи на програмирането със С++

     http://trance.bergon.net/Documents/cpp.tar.gz

    Ето ви един учебник за C++

    • Точки: 20
  • 03-11-2010 18:48 в отговор на

    • iv_2007
    • Топ 10 за потребители
      Жена
    • Регистриран на 02-03-2008
    • Мнения 1 843
    • Точки 29 925

    За: Принципи на програмирането със С++

    Здравейте колеги, написала съм 2 варианта на структурирания тип data. Какъв трябва да е според вас размера на променливата z в двата случая? На какво се дължи разминаването в очакванията?

    struct data

    {

      int k;

      char ch[10];

    }z;

     

    struct data

    {

      int k;

      char ch[20];

    }z;

     

    Ще уточня, че използвам среда Dev C++.

    http://iv2007.web.officelive.com/default.aspx
    • Точки: 20
  • 03-12-2010 8:44 в отговор на

    • Avatara
    • Топ 75 за потребители
      Мъж
    • Регистриран на 04-10-2008
    • Мнения 56
    • Точки 1 280

    За: Принципи на програмирането със С++

    Здравейте,

    Следя с интерес темата. Ако ми позволите бих вметнал нещо, което би било от полза за всички, които ползват C++.

    Преди всичко държа да подчертая че между C, C++ и C# съществуват съществени различия, които не са само в синтаксиса. C# е много по-близък като философия до Delphi, отколкото до C. Неразбирането на различията може да доведе до доста забавни недоразумения.

     Ето един пример, който нагледно илюстрира основната слабост на езика: 

     ПРИМЕР:

    1. Обикновенна програма:

    int index = 0;
      size_t arraySize = ...; // нещо си ...
      for (size_t i = 0; i != arraySize; i++)
      array[index++] = BYTE(i);

    ... и как изглежда тя в действителност:

    1. 0000000140001040     mov byte ptr [rcx+rax],cl
    2. 0000000140001043     add rcx,1
    3. 0000000140001047     cmp rcx,rbx
    4. 000000014000104A     jne wmain+40h (140001040h)

    2. Същото, но написано "елегантно":

    int index = 0;
    for (size_t i = 0; i != arraySize; i++)
      {
        array[index] = BYTE(index);
        ++index;
      }

    ... и как изглежда в действителност:

    1. 0000000140001040     movsxd rcx,r8d
    2. 0000000140001043     mov byte ptr [rcx+rbx],r8b
    3. 0000000140001047     add r8d,1
    4. 000000014000104B     sub rax,1
    5. 000000014000104F     jne wmain+40h (140001040h)

    Както сами може да се убедите от така приложения пример програмата ни едва ли е станала "по-бърза". на практика сме позволили да се получават труднооткриваеми грешки в резултат на "препълване".

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

    Още по-забавно е, че това, което в момента се представя като най-голямата новост в ADO.NET технологиите, на практика е познато на професионалните програмисти от преди десетина години. Визирам технологията MIDAS, която е включена още в Delphi 3 (към момента е известна като Datasnap).

    Не е важно на какъв език пишем една програма (това важи с пълна сила за параметри като бързодействие и надежност). Важно е да анализираме детайлно получения резултат за да оптимизираме процеса на разработка и да не се налага да се червим пред потребителите. От фирми като Microsoft, Embarcadero, IBM и др. отдавна са разбрали тази простичка истина.

    Понякога за да се открие топлата вода е нужно да се опариш. Stick out tongue

    С най-добри пожелания

    Avatara

    P.S. Този пример едва ли ще откриете в учебниците. Просто много неща се премълчават в интерес на "общи концепции".

    Все пак темата е за сновополагащите принципи на програмиране с конкретен програмен език, нали? Wink

    Закачам се.

     

     

     

    Може и да съм грозен, но имам мнение по въпроса ...
    • Точки: 20
  • 03-12-2010 9:02 в отговор на

    • ilarionov
    • Топ 50 за потребители
      Мъж
    • Регистриран на 10-08-2007
    • Мнения 145
    • Точки 2 065

    За: Принципи на програмирането със С++

    Да, семейството на C езиците е обвързано с асемблера

    и конкретната компютърна архитектура.

     

    От там са и главоболията както с генерирания асемблерски код

    така и с представянето на данните.

     

    Е този проблем не стои ако се генерира изпълним код за виртуална машина,

    например JVM. 

    Кирил Иларионов
    Категоризирано под следните тагове:
    • Точки: 20
  • 03-12-2010 19:30 в отговор на

    • Avatara
    • Топ 75 за потребители
      Мъж
    • Регистриран на 04-10-2008
    • Мнения 56
    • Точки 1 280

    За: Принципи на програмирането със С++

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

    Бъдещето е на виртуалните технологии. Самият факт, че .NET се наложи толкова бързо, го доказва по безпорен начин.

     

    Може и да съм грозен, но имам мнение по въпроса ...
    • Точки: 5
  • 05-13-2010 13:16 в отговор на

    • nikitta
    • Няма ранг
    • Регистриран на 02-09-2009
    • Мнения 2
    • Точки 10

    За: Принципи на програмирането със С++

     #include <iostream>
    #include <stack>
    using namespace std;

    int main()
    {
        stack <int> s;
        int n,a,x;
        cin >>n;
        for (int i=1;i<=n;i++)
        {
            cout << "x=";
            cin >> x;
            s.push(x);
        }
        cout<<"a=";
        cin>>a;bool dali=false;


        while (( !s.empty()) && (!dali))
        {
            dali=a==s.top();
            s.pop();

        }

        if (dali) cout << "yes"; else cout<<"no";

        return 0;
    }

    • Точки: 5
Страница 4 от 4 (60 обекта) < Предишна 1 2 3 4
www.teacher.bg 2007 - 2008