Teade

Collapse

Foorumi reeglid.

Foorumi reeglistik on uuendatud. Palume tutvuda ja arvesse võtta.
See more
See less

C++ harjutamine

Collapse
X
 
  • Filter
  • Kellaaeg
  • Show
Clear All
new posts

    C++ harjutamine

    Alustasin siis c++ progremis keele õppimisega(varsti läheb niikuinii vaja,sest peagi tuleb hakata arvutiteenindust õppima).
    nagu dev c++ abist aru saada ja example programmidest, panin kokku selle koodijupi(Hello,world programm juba selge ja arusaadav):
    Kood:
    #include <iostream>
    
    using namespace std;
    void start();
    void vastus();
    int x,y,n,a,b;
    char c;
         void start()
    {
        x = 10;
        y = 2;
        n = 0;
        
        cout << "arvutus,leia arvud" << endl;
        cout << "20=x*y" << endl;
        cout << "varjandid:a(x*y),b(x+y)" << endl;
        cout << "" << endl;
        cin >> c;
        
        
        a = x*y;
        b = x+y;
        }
        
        void vastus()
        {
         cout << "Kirjuta vastus:" << endl;
                     cin >> n;
        
             if (n==a)
             {
                      cout<<"õige!" << endl;
                      start();
            }
            if (n==b)
            {
                     cout << "vale!" << endl;
                     start();
                     }
                    
                     
             }
        int main()
        {
          cout<<"ok"<< endl; 
          start(); 
            return 0;
            }
    küsimus siis selles,et kuidas teha nii, et kui keegi trükib sisse a,siis trükib õige, kui b siis trükib vale.(muidugi võib seda koodi vigadest puhastada,igatahes compiler vigu ei leidnud),programmi sisu üle ei mõelnud,tahtsin ainult harjutada,siis järgmise saab jiba parema teha.endale tundub,et midagi on ülearu või puudu juba selles koodis.
    tel 53729764

    #2
    Ma sügavalt kahtlen et arvutiteenindajal läheb vaja oskust programmerida keeles C++ aga endale tuleb kindlasti kasuks, kui huvi pakub :P

    Kood:
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char **argv)
    {
        char c;
    
        cout << "Sisesta yks t2ht: ";
        cin >> c;
    
        if(c == 'a')
        {
             cout << "6ige!";
        }else if(c == 'b')
        {
            cout << "Vale!"
        }
    
        return 0;
    }

    Comment


      #3
      siis oli mul üleliigset seal vist nati rohkem.

      aga ei saa aru, mis on kasu sellest
      int main (int argc, char **argv)

      funkab ju ka kui int argc, char **argv sealt vahelt ära kustutada



      ja sai ameti nimi nati valesti pandud:arvutitehnik peaks olema ja muidugi huvitab ka :P

      edit:
      kirjutasin uue koodi,mida plaanis edasi arendada veel,kuid tekkis väike probleem:
      Kood:
      #include <iostream>
      
      using namespace std;
      
      void start();
      
      void next();
      
      void next1();
      
      int a,b;
      
      void start ()
      {
      
        cout<<"2 * 4 = ?"<<endl;
      
        cout<<""<<endl;
      
        cout<<"Sisesta vastus"<<endl;
      
        cin>>a;  
          
          if (a == 8)
                   {
                    cout<<"oige"<<endl; 
                    next ();
                   }
      
          else if (a<8)
      
                   {
                    cout<<"Vale"<<endl;
                    start ();  
                   }
      
          else if (a>8)
        
                   {
                    cout<<"Vale"<<endl;
                    start ();   
                  
             }
      
      }
      
      void next()
      {
               {
        cout<<"5 * 2 = ?";
      
        cout<<""<<endl;
      
        cout<<"Sisesta vastus"<<endl;
      
        cin>>b;
       
       
          if (b == 10)
      
                   {
                    cout<<"oige"<<endl;
                    start ();    
                            }
      
          else if (b<10) 
                   {
                    cout<<"Vale"<<endl;
                    next ();    
                       } 
        
          else if (b>10)
      
                   {
                    cout<<"Vale"<<endl;
                    next ();    
                       } 
        
      }        
      
              
      int main()
      {
        cout<<"See on mu esimene programm."<<endl;
       
        cout<<"Sisu on selline selleparast,et nii oli koige lihtsam."<<endl;
      
        cout<<"Sa pead leidma oige vastuse ulesandele ja selle siis sisse trükkima."<<endl;
       
        cout<<""<<endl;
      
        start ();
        return 0;
      }
                
      kui käivitan ja kirjutan esimese ülesande vastuseks 2,tuleb vale ja kui nt 9 tuleb ka vale. niii peakski olema,kuid kui panen 8 tuleb ka vale,kuigi peaks tulema vastuseks õige.sama jama ka järgmise koodiga+ kui panen vastuseks 10,tuleb vastus kahekordselt(ehk siis 1 ja 0 eest,oleks vaja,et see oleks 10 ja tuleks üks vastus).
      loodan,et kood on arusaadav.
      tel 53729764

      Comment


        #4
        1) int argv ja char **argv funktsiooni main( ) deklaratsioonis näitavad, mitu ja millised võtmed antud programmile anti. Nt. Programminimi -võti1 -võti2.

        2) Üldiselt on nii, et kui tahad, et keegi aitaks sul oma koodist viga leida, vms. siis pead tegema kõik selleks et teistele oleks sinu kood võimalikult hästi arusaadav. Antud kood seda kahjuks pole. Mõtlen just vormindamise osa. Uuri googlest: C++ coding style.

        3) Soovitav oleks funktsioonid, mis ei vaja argumente defineerida kujul void func( void ); Vähendab vigade tekkimise võimalust.

        4) Viga sinu koodis on selles, et oled teinud muutujad a,b kasutades andmetüüpi char. Tegelikult kasutatakse täisarvude puhul andmetüüpi int. Char on 1 bait. Int 4 baiti. Muide, kuna int on 4 baiti, siis on maksimaalne arvu suurus 0 ... 32 000 (umbes täpselt) või -16 000 ... 16 000 (samuti umbes).

        Comment


          #5
          Sind aitab, kui uurid välja, mida programm tegelikult klaviatuurilt loeb: lisa õigesse kohta rida:

          cout << "Sisestati: " << a << std::endl;

          Ilmselt kasutad teeki iostream valesti, kus nimelt, uuri käsiraamatust või google-st - ma peast ei hakka oletusi tegema, kuna ise seda ei kasuta. Soovitan üles otsida Bruce Eckel&#39;i "Thinking in C++".

          Muutujaid /a/ ja /b/ saad defineerida ka funktsiooni sees. Sellega väldid nende juhuslikku kasutamist programmi muudes osades.

          Üldse on C++-i omal käel raske selgeks saada.
          If you think education is expensive, try ignorance.

          Comment


            #6
            koodi vea leidsin ülesse,nagu qratman ütles:kasutasin int funktsiooni asemel char
            tel 53729764

            Comment


              #7
              Nii ta on, Bruce Eckel&#39;i "Thinking in C++" peetakse üheks parimaks C++ raamatuks (neti rahva seas loomulikult).

              Et asja selgeks saada peab huvi ja järjepidavust olema. Nimetatud raamatu mahtu nähes võib see küll päris ära ehmtada, et C++ on nii "suur" keel. Tegelikult IMO pole asi üldsegi nii hull. Vaja on ära õppida algul kõige põhilisem: kuidas üldse süntaks välja näeb, funktsioonid, if-else, while, andmetüübid, klassid (andmed ja meetodid), veel mõni taoline asi ja võibki juba vaikselt midagi looma hakata (mänge, rakendusi). Edasised oskused tulevad juba koodi kirjutades ja muidugi tasapisi C++&#39;i juurde õppides.

              Comment


                #8
                Kui alustad progemisega täitsa algusest, siis väga kasulik oleks enne pascali või kasvõi visual basicu vms peal harjutada. C-keel on suhteliselt riistvaralähedane ja seetõttu on oht väga kergelt teha selliseid vigu, mida on väga raske avastada. Sinna alla käivad igasugused vead pointeritega, massiivide ülelaadimised jne. Kui juba tunned ennast progemises kindlalt ja oskad kõiki erandjuhtusid ka ette näha ja ka nende vastu kontrollid kirjutada, siis alles võta c kätte. Siis tuleb juurde õppida veel pointeritega aritmeetika; kui väga hästi tahad asja osata, siis ka pointeritega andmetüübid, st linked-listid jne. Süntaksi muutus on suhteliselt lihtne; begin asemel { kirjutamise õpib kiiresti ära.

                Comment


                  #9
                  kui tõsine soov progemist õppida, siis pigem alustax javaga & Bruce Eckel "Thinking in Java" & hoiduks pascalist ning väga suure kaarega käix mööda VB&#39;st.. parem kohe alguses hakata omandama viisakaid võtteid, kui hiljem kulutada aega ümberõppimisele.

                  (Edsger W. Dijkstra "Teaching BASIC should be a criminal offense.")

                  Comment

                  Working...
                  X