Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Kehamassi indeksi arvutamine märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
mine lehele eelmine  1, 2, 3  järgmine
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
Ho Ho
HV Guru
Ho Ho

liitunud: 16.02.2002




sõnum 28.01.2012 22:05:39 vasta tsitaadiga

C's on stringide võrdluseks strncmp funktsioon ning sääraselt staatilisse massiivi scanf'iga lugemine lõppeb heal juhul vajalike andmete üle kirjutamisega, halvemal programmi crashimisega.

Sama asi c++'s oeks oluliselt töökindlam implementeerida. Prindid std::cout'iga, loed std::cin'iga ning ka võrdlusi saad teha otse =='ga eeldusel, et char*'i asemel kasutad std::string'i.

Kinda-OT'ish:
C++ on tegelikult üks pagana võimas asi ning üks töö- ja lollikindlamaid keeli üldse kui kasutada standardteeki + smart pointereid ning exceptioneid. C++11'ga tuleb veel kamaluga ülifancyt nänni juurde ning mul tekib juba vägisi soov ka oma koduleht php/pythoni asemel selles kirjutada icon_biggrin.gif

_________________
Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity"
Kommentaarid: 106 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 86
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
estplayer
HV kasutaja

liitunud: 15.10.2008




sõnum 30.01.2012 22:03:09 vasta tsitaadiga

Suur aitäh teie kõigi abi eest! Te olete kindlasti juba tüdinud minu algaja lihtsatest probleemidest, kuid äkki suudate veel natuke aidata. Kuidas lisada C++'s komakohti? C's ma seda oskasin, C++ kohta ei tea. Näide siis selline:


int main()
{
    int P;
    std::string Y;
    int V;
   
    std::cout << "Sisestage pikkus meetrites: \n";
    std::cin >> P;
   
    std::cout << "Sisestage uue ühiku kood (alj, ver, kyn, toll, jalg, jard, lii): \n";
    std::cin >> Y;
   
    if (Y == "alj")
    {
          V = (P * 5572);
          std::cout << P << "m = " << V << " alj \n";
     }


Tahaksin nüüd, et V ilmuks 2 kohta peale koma.
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 26
tagasi üles
vaata kasutaja infot saada privaatsõnum
Ho Ho
HV Guru
Ho Ho

liitunud: 16.02.2002




sõnum 30.01.2012 22:04:50 vasta tsitaadiga

http://www.cplusplus.com/reference/iostream/manipulators/setprecision/

Seal lehel on üldse palju head infot.

_________________
Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity"
Kommentaarid: 106 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 86
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
estplayer
HV kasutaja

liitunud: 15.10.2008




sõnum 31.01.2012 01:16:57 vasta tsitaadiga

Nii, järgmine probleem. Pean arvutama kasutaja isikukoodi põhjal tema soo ja vanuse. Praegult on nii palju tehtud:


#include<iostream>
#include<string>

int main()
{
    std::string I;
    std::cout << "Sisestage isikukood: \n";
    std::cin >> I;
    std::cout << "Isikukoodi " << I << " andmed: \n";
   
    std::string str1;
    str1 = I.substr (0, 1);
    str1.c_str();
    int sugu = atoi(str1.c_str());
   
    if(sugu == 1 || sugu == 3 || sugu == 5)
    {
            std::cout << "*mees \n";
            }
           
            else if(sugu == 2 || sugu == 4 || sugu == 6)
            {
                 std::cout << "*naine \n";
                 }
                 
                 std::string str2;
                 str2 = I.substr (1, 7);
                 str2.c_str();
                 int p2ev = atoi(str2.c_str());
                 std::string str3;
                 str3 = I.substr (1, 5);
                 str3.c_str();
                 int kuu = atoi(str3.c_str());
                 std::string str4;
                 str4 = I.substr (1, 3);
                 str4.c_str();
                 int aasta = atoi(str4.c_str());
                 
                 if(p2ev == 01 - 31 || kuu == 01 - 12 || aasta == 00 - 99)
                 {
                         std::cout << "s[ndis " << p2ev << "." << kuu << "." << aasta << "\n";
                         }
                 
                       
                system("pause");
                return 0;
                }


Saan aru, et selle päeva, kuu ja aasta koha peal on midagi väga valesti. Praegult ütleb mulle ainult, kas on mees või naine.
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 26
tagasi üles
vaata kasutaja infot saada privaatsõnum
Ho Ho
HV Guru
Ho Ho

liitunud: 16.02.2002




sõnum 31.01.2012 01:38:29 vasta tsitaadiga

Probleem on, et sa ei saa sedasi vahemikke võrrelda. Näiteks p2ev == 01 - 31 tõlgendub seal kui 1-31 ehk võrreldakse, kas p2ev muutujas on väärtus -30 icon_smile.gif

Pead võrdlema eraldi nii alumist kui ülemist otsa, a'la suurem-võrde 1'st ja väiksem-võrdne 31'st

_________________
Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity"
Kommentaarid: 106 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 86
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
estplayer
HV kasutaja

liitunud: 15.10.2008




sõnum 21.03.2012 22:56:09 vasta tsitaadiga

Tere! On järjekordne probleem. On selline programm:

#include<iostream>
using namespace std;
int main()
{
   int P, N = 2;
   cout << "Sisestage arv: \n";
   cin >> P;
   for (N = 2; N <= P - 1; N++)
   {
      if (P % N == 0)
      {
         cout << P << " ei ole algarv. \n";
         break;
      }
   }
   if (N == P)
   {
         cout << P << " on algarv \n";
    }
   system("pause");
   return 0;
}


Nüüd oleks vaja see edasi teha selleks, et kui arv ei ole algarv, siis ütleks kõik selle arvu jagajad (peale 1 ja arvu iseenda). Endal kahjuks pole aimugi kuidas seda teha icon_confused.gif
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 26
tagasi üles
vaata kasutaja infot saada privaatsõnum
Ho Ho
HV Guru
Ho Ho

liitunud: 16.02.2002




sõnum 21.03.2012 23:31:59 vasta tsitaadiga

No siis lihtsalt selle asemel, et välja kirjutada et pole algarv kirjutad järjest välja kõik nood arvud millega ta jagub.

Muidu kui natuke viitsid nuputada on võimalik su algarvude otsimise algoritmi röögatult palju kiiremaks teha mõningase lisa mälukulu arvelt. Omal ajal panin Pascalis vana P1@188MHz otsima kõik arvud 2-1000000 mõne sekundiga vs sinu stiilis otsing mis võttis 2-100k puhul juba mitu minutit icon_razz1.gif

_________________
Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity"
Kommentaarid: 106 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 86
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
estplayer
HV kasutaja

liitunud: 15.10.2008




sõnum 07.04.2012 23:22:53 vasta tsitaadiga

Nüüd siis vaja selline programm teha, mis küsib kasutajalt arvu ning genereerib kõigepealt nii mitu juhuslikku arvu (vahemikus 1 kuni miljon) kui kasutaja sisestas ning seejärel paneb need kasvavasse järjeokrda. For example:
input: 5.
output:
Juhuslik jada:
1276, 305, 7, 28, 2000.
Järjestatud jada:
7, 28, 305, 1276, 2000.

Praegult on nii palju tehtud:

#include <stdlib.h>
    #include <iostream>
    using namespace std;
    int main()
    {
    const int MAX_SIZE = 100;
    int numbers[MAX_SIZE];
    int numElements;
    cout << "Enter number: \n";
    cin >> numElements;
    srand(static_cast<unsigned int>(time(0)));
    int array[numElements];
    cout << "Random numbers: \n";
    for(int i = 0; i < numElements; i++){
            array[i] = (rand()%1000000) + 1;
            cout << array[i] << ",";
            if(i == numElements){
                 cout << "i";
                 }
                 }
                 system("pause");
                 return 0;
                 }

Nüüd ma ei tea ainult kuidas seda kasvavasse järjekorda panna. Bubble sort oleks vist kõige lihtsam viis, aga ei oska seda kasutada hästi.
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 26
tagasi üles
vaata kasutaja infot saada privaatsõnum
Ho Ho
HV Guru
Ho Ho

liitunud: 16.02.2002




sõnum 08.04.2012 12:07:18 vasta tsitaadiga

std::sort icon_wink.gif


Samuti on sul koodi treppimine kergelt öeldes katki

_________________
Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity"
Kommentaarid: 106 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 86
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
estplayer
HV kasutaja

liitunud: 15.10.2008




sõnum 08.04.2012 16:23:59 vasta tsitaadiga

Ho Ho kirjutas:
std::sort icon_wink.gif


Samuti on sul koodi treppimine kergelt öeldes katki

Jah, koodi treppimine on katki, kuid millegipärast soovitati koodi kirjutamisel kasutada Dev-C++ ning see teebki koodi selliseks. Ise avastasin alles hiljuti Microsoft Visual C++, sellega hulga mõnusam kirjutada.
Aga sortimiseks peame kasutama ühte neist: Insertion · Selection · Bubble · Shell · Merge · Heap · Quick · Quick3
Bubble pidi vist kõige lihtsam olema, aga ei oska seda implementida sinna.
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 26
tagasi üles
vaata kasutaja infot saada privaatsõnum
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 08.04.2012 17:11:55 vasta tsitaadiga

Mida sa oled teinud selleks, et mullitamist realiseerida? icon_smile.gif Wikis on pseudokoodis näited olemas - ei ole väga keeruline seda C-sse ju tõlkida. Kui sa kuskilt otsast pihta ei hakka, ega ta siis valmis ka ei saa. Seega näita senitehtu välja ja räägi oma probleemidest.
_________________
Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
estplayer
HV kasutaja

liitunud: 15.10.2008




sõnum 08.04.2012 18:08:24 vasta tsitaadiga

Proovisin siis kuidagi mullsorti kasutada.

    #include <stdlib.h>
    #include <iostream>
    using namespace std;
    int main()
    {
    const int MAX_SIZE = 100;
    int numbers[MAX_SIZE];
    int numElements;
    cout << "Enter number: \n";
    cin >> numElements;
    numElements <= MAX_SIZE;
    srand(static_cast<unsigned int>(time(0)));
    cout << "Random numbers: \n";
    for(int i = 0; i < numElements; i++){
            numbers[i] = (rand()%1000000) + 1;
            cout << numbers[i] << ",";
            if(i == numElements){
                 cout << "i";
                 }
                 }
    int exchanges;
    int temp;
    cout << "\nSorted numbers: \n";
    for(int i = 0; i < numElements; i++){
            if(numbers[i] > numbers[i + 1]){
                          temp = numbers[i];
                          numbers[i] = numbers[i +1];
                          numbers[i + 1] = temp;
                          exchanges++;
                          cout << temp << ",";
                          }
                          }
           
                                       
                 
                 system("pause");
                 return 0;
                 }


Ei tulnud just väga hästi välja. Kuid ise ei taipa ka päris hästi, mis siin viga on.
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 26
tagasi üles
vaata kasutaja infot saada privaatsõnum
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 08.04.2012 18:19:51 vasta tsitaadiga

Põhimõtteliselt teeb su kood praegu mullisordis ühe iteratsiooni. Korrektses mullisordis on kaks tsüklit - sisemine ja välimine. Sul on hetkel olemas ainult sisemine, mis kõnnib mööda massiivi ja vahetab vastavalt vajadusele elemente omavahel - see on täitsa õige, aga ühe korra massiivist üle käies saame halvima stsenaariumi korral täpselt ühe elemendi õigesse kohta paika.

Lisaks peab olema ka välimine tsükkel, mis sisemist tsüklit kordab senikaua, kuni ühtegi kohavahetust enam massiivis ei tehtud (järelikult on siis kõik juba õiges järjekorras). Selle üle arvepidamiseks oled sa juba muutuja exchanges loonud, kuid ei tee sinna kogutud infoga hetkel midagi.

Seega mine loe wikit uuesti, vaata minu kommentaari ja nuputa edasi. icon_smile.gif

PS. sorteerimise ajal massiivi elementide väljatrükkimine vist suurt tulu ei anna .. mõistlik oleks lõpus massiiv välja sülitada, kui ta juba sorditud on.

PPS. code tag on postituses hea, syntax on parem. icon_smile.gif

_________________
Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
estplayer
HV kasutaja

liitunud: 15.10.2008




sõnum 09.04.2012 00:06:18 vasta tsitaadiga

Suur tänu, sain selle korda icon_smile.gif Läheksin nüüd korraks tagasi ühe teise programmi juurde.
c++:
  1.  
  2. #include<iostream>
  3. using namespace std;
  4. int main()
  5. {
  6.     int P, i = 2;
  7.     cout << "Sisestage number: \n";
  8.     cin >> P;
  9.     for (i = 2; i <= P; i++)
  10.         {
  11.         if(i == P)
  12.                 {
  13.                         goto END;
  14.                 }
  15.                 if (P % i == 0)
  16.                 {
  17.                  goto THEEND;
  18.                  }
  19.                
  20.             }
  21. THEEND:
  22. cout << P << " jagub arvudega: " << P << ",";
  23.         for (i = 2; i <= P; i++)
  24.         {
  25.                 if(P % i == 0)
  26.                 {
  27.                         cout << P / i << ",";
  28.                 }
  29.         }
  30. END:
  31.         if(i == P)
  32.         {
  33.         cout << "Algarv\n";
  34.         }
  35.             system("pause");
  36.             return 0;
  37.            
  38.         }
  39.  

Küsimus oleks, kuidas ma saan teha nii, et pärast viimast numbrit prindib "." mitte ",".
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 26
tagasi üles
vaata kasutaja infot saada privaatsõnum
Ho Ho
HV Guru
Ho Ho

liitunud: 16.02.2002




sõnum 09.04.2012 01:07:06 vasta tsitaadiga

Tüüpiliselt sellistel puhkudel olen ma kirjutanud esimese väljnudi tsükli väliselt ning tsükli sees eraldusmärke (sinu puhul komad) väljundist enne (ehk siis sul cout << ", " << p/i; ) ja peale tsükli lõppemist siis lõpumärgi, kui seda vaja on. Standardvahenditega seda koma seal lõpus "üle kirjutada" ei saa.


Muidu noist goto'dest saaks seal vägagi lihtsa vaevaga lahti. Kui veel pisut lisamälu tarbida ning kõik prinditavad väärtused kusagil alles hoida enne väljastust saaks ka koodi hulga vähemalt 2x lühemaks ning lihtsamini jälgitavaks icon_smile.gif

_________________
Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity"
Kommentaarid: 106 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 86
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
estplayer
HV kasutaja

liitunud: 15.10.2008




sõnum 06.05.2012 23:33:29 vasta tsitaadiga

Aitäh abi eest icon_smile.gif Nüüd uus programm juba. Kuidas ma saaksin teha nii, et programmi käivitades näitab viite esimest raamatut, kui kasutaja vajutab "j" tähte, näitab viite järgmist, kui vajutab "e" tähte, näitab viite eelmist ning kui vajutab "v" tähte, siis väljub programmist?
c++:
  1.  
  2. #include<iostream>
  3. #include<string>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.         struct BOOK
  9.         {
  10.                 string NAME;
  11.                 int YEAR;
  12.                 int PAGES;
  13.                 string FIRSTNAME;
  14.                 string LASTNAME;
  15.                 string LANGUAGE;
  16.                 bool READ;
  17.                 int SCORE;
  18.         };
  19.        
  20.         BOOK lotr1, hobbit, EG, LS, HP, Time, GOT, EotW, GH, SR, Dragon, Dune, Game, Eragon, Eldest, Brisingr;
  21.         lotr1.NAME = "Fellowship of the ring";
  22.         lotr1.YEAR = 1954;
  23.         lotr1.PAGES = 531;
  24.         lotr1.FIRSTNAME = "John Ronald Reuel";
  25.         lotr1.LASTNAME = "Tolkien";
  26.         lotr1.LANGUAGE = "eng";
  27.         lotr1.READ = true;
  28.         lotr1.SCORE = 10;
  29.         hobbit.NAME = "Hobbit";
  30.         hobbit.YEAR = 1937;
  31.         hobbit.PAGES = 310;
  32.         hobbit.FIRSTNAME = "John Ronald Reuel";
  33.         hobbit.LASTNAME = "Tolkien";
  34.         hobbit.LANGUAGE = "eng";
  35.         hobbit.READ = true;
  36.         hobbit.SCORE = 10;
  37.         EG.NAME = "Ender's Game";
  38.         EG.YEAR = 1985;
  39.         EG.PAGES = 357;
  40.         EG.FIRSTNAME = "Orson Scott";
  41.         EG.LASTNAME = "Card";
  42.         EG.LANGUAGE = "eng";
  43.         EG.READ = true;
  44.         EG.SCORE = 10;
  45.         LS.NAME = "Lost Symbol";
  46.         LS.YEAR = 2009;
  47.         LS.PAGES = 639;
  48.         LS.FIRSTNAME = "Dan";
  49.         LS.LASTNAME = "Brown";
  50.         LS.LANGUAGE = "eng";
  51.         LS.READ = true;
  52.         LS.SCORE = 8;
  53.         HP.NAME = "Harry Potter and the Philosopher's Stone";
  54.         HP.YEAR = 1997;
  55.         HP.PAGES = 309;
  56.         HP.FIRSTNAME = "Joanne";
  57.         HP.LASTNAME = "Rowling";
  58.         HP.LANGUAGE = "eng";
  59.         HP.READ = true;
  60.         HP.SCORE = 9;
  61.         Time.NAME = "A brief history of time";
  62.         Time.YEAR = 1988;
  63.         Time.PAGES = 256;
  64.         Time.FIRSTNAME = "Stephen";
  65.         Time.LASTNAME = "Hawking";
  66.         Time.LANGUAGE = "eng";
  67.         Time.READ = true;
  68.         Time.SCORE = 10;
  69.         GOT.NAME = "Game of thrones";
  70.         GOT.YEAR = 1996;
  71.         GOT.PAGES = 672;
  72.         GOT.FIRSTNAME = "George Raymond Richard";
  73.         GOT.LASTNAME = "Martin";
  74.         GOT.LANGUAGE = "eng";
  75.         GOT.READ = true;
  76.         GOT.SCORE = 8;
  77.         EotW.NAME = "Eye of the world";
  78.         EotW.YEAR = 1990;
  79.         EotW.PAGES = 688;
  80.         EotW.FIRSTNAME = "Robert";
  81.         EotW.LASTNAME = "Jordan";
  82.         EotW.LANGUAGE = "eng";
  83.         EotW.READ = true;
  84.         EotW.SCORE = 10;
  85.         GH.NAME = "The Great Hunt";
  86.         GH.YEAR = 1990;
  87.         GH.PAGES = 660;
  88.         GH.FIRSTNAME = "Robert";
  89.         GH.LASTNAME = "Jordan";
  90.         GH.LANGUAGE = "eng";
  91.         GH.READ = true;
  92.         GH.SCORE = 8;
  93.         Dragon.NAME = "The Dragon Reborn";
  94.         Dragon.YEAR = 1991;
  95.         Dragon.PAGES = 628;
  96.         Dragon.FIRSTNAME = "Robert";
  97.         Dragon.LASTNAME = "Jordan";
  98.         Dragon.LANGUAGE = "eng";
  99.         Dragon.READ = true;
  100.         Dragon.SCORE = 9;
  101.         SR.NAME = "The Shadow Rising";
  102.         SR.YEAR = 1992;
  103.         SR.PAGES = 1001;
  104.         SR.FIRSTNAME = "Robert";
  105.         SR.LASTNAME = "Jordan";
  106.         SR.LANGUAGE = "eng";
  107.         SR.READ = true;
  108.         SR.SCORE = 10;
  109.         Dune.NAME = "Dune";
  110.         Dune.YEAR = 1965;
  111.         Dune.PAGES = 412;
  112.         Dune.FIRSTNAME = "Frank";
  113.         Dune.LASTNAME = "Herbert";
  114.         Dune.LANGUAGE = "eng";
  115.         Dune.READ = true;
  116.         Dune.SCORE = 9;
  117.         Game.NAME = "Beginning C++ through game programming, third edition";
  118.         Game.YEAR = 2011;
  119.         Game.PAGES = 410;
  120.         Game.FIRSTNAME = "Michael";
  121.         Game.LASTNAME = "Dawson";
  122.         Game.LANGUAGE = "eng";
  123.         Game.READ = true;
  124.         Game.SCORE = 10;
  125.         Eragon.NAME = "Eragon";
  126.         Eragon.YEAR = 2002;
  127.         Eragon.PAGES = 509;
  128.         Eragon.FIRSTNAME = "Christopher";
  129.         Eragon.LASTNAME = "Paolini";
  130.         Eragon.LANGUAGE = "eng";
  131.         Eragon.READ = true;
  132.         Eragon.SCORE = 7;
  133.         Eldest.NAME = "Eldest";
  134.         Eldest.YEAR = 2005;
  135.         Eldest.PAGES = 668;
  136.         Eldest.FIRSTNAME = "Christopher";
  137.         Eldest.LASTNAME = "Paolini";
  138.         Eldest.LANGUAGE = "eng";
  139.         Eldest.READ = true;
  140.         Eldest.SCORE = 6;
  141.         Brisingr.NAME = "Brisingr";
  142.         Brisingr.YEAR = 2008;
  143.         Brisingr.PAGES = 748;
  144.         Brisingr.FIRSTNAME = "Christopher";
  145.         Brisingr.LASTNAME = "Paolini";
  146.         Brisingr.LANGUAGE = "eng";
  147.         Brisingr.READ = true;
  148.         Brisingr.SCORE = 7;
  149.  
  150.         FILE *Library;
  151.         Library = fopen("BOOK", "r");
  152. cin.ignore();
  153. return 0;
  154. }
  155.  

Ma arvan, et pean mingit moodi kasutama seda FILE vist, kuid ei tea kuidas.
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 26
tagasi üles
vaata kasutaja infot saada privaatsõnum
Ho Ho
HV Guru
Ho Ho

liitunud: 16.02.2002




sõnum 07.05.2012 11:29:44 vasta tsitaadiga

gah. Loodan sügavalt, et mõtlesid sellise raamatuinfo koodis kasutamise välja iseeseisvalt ja ei võtnud mingist õpetusest. Kui võtsid siis viska see kiirelt minema ja otsi midagi normaalset.

Esiteks tee selgeks funktsioonid kuhu näiteks söödad sisse structi reference'i ning parameetrite soovitud väärtused ning too kopeerib sinna reference'i muutujatesse nood parameetrid. Või veel "õigem" oleks seda teha klassidega. Saab ka structile constructorit kirjutada kuid see ei pruugi mõnele väga meeldida stiili poolest.
See tehtud siis võta uuri välja mida kujutavad endast ette konteinerid. Ideaalis lahendaksin säärase ülesande vektoritega kuid saaks ka massiividega hakkama, ehkki tulemus poleks nii "puhas" ning oleks mõnevõrra keerukam.
Neid kaht kombineerides saad selle rakenduse tehtud max ~35 koodireaga ning saadav kood on ka reaalselt kasutatav kuna ei pea manageerima eri nimega muutujaid vaid saad lihtsalt konteineri indeksi järgi hetke asukohta arvestada ning konteineris edasi-tagasi liikuda.

(CSV) failist võid ka muidugi seda infot lugeda kuid iseenesest pole see antud funktsionaalsuse vajaduste juures väga oluline kuidas täpselt teed.


Üks asi mida pead silmas pidama on, et standardvahendeid kasutades pead kasutama sisestamiseks ka enterit, lihtsalt j'i vajutades ei jõua kusagile ning tuleb vajutada j+enter.

_________________
Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity"
Kommentaarid: 106 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 86
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
estplayer
HV kasutaja

liitunud: 15.10.2008




sõnum 21.05.2012 21:14:45 vasta tsitaadiga

Nii mässasin natuke vektorite ja konteineritega ja sain sellise tulemuse:
c++:
  1.  
  2. #include <iostream>
  3. #include <string>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. struct BOOK
  9. {
  10.         string NAME;
  11.         int YEAR;
  12.         int PAGES;
  13.         string FIRSTNAME;
  14.         string LASTNAME;
  15.         string LANGUAGE;
  16.         bool READ;
  17.         int SCORE;
  18.  
  19.         // constructor
  20.         BOOK( const string name, int year, int pages, string firstname, string lastname, string language, bool read, int score )
  21.                 : NAME(name), YEAR( year ), PAGES( pages ), FIRSTNAME( firstname ), LASTNAME( lastname ), LANGUAGE( language ), READ( read ), SCORE( score ) {}
  22. };
  23.  
  24. int main()
  25. {
  26. vector <BOOK> container;
  27.  
  28.  
  29. container.push_back( BOOK( "Eragon", 2002, 509, "Christopher", "Paolini", "eng", true, 7 ) );
  30. container.push_back( BOOK( "Eldest", 2005, 668, "Christopher", "Paolini", "eng", true, 6 ) );
  31. container.push_back( BOOK( "Brisingr", 2008, 748, "Christopher", "Paolini", "eng", true, 7 ) );
  32. container.push_back( BOOK( "Fellowship Of The Ring", 1954, 531, "John Ronald Reuel", "Tolkien", "eng", true, 10 ) );
  33. container.push_back( BOOK( "The Hobbit", 1937, 310, "John Ronald Reuel", "Tolkien", "eng", true, 10 ) );
  34. container.push_back( BOOK( "Ender's Game", 1985, 357, "Orson Scott", "Card", "eng", true, 10 ) );
  35. container.push_back( BOOK( "The Lost Symbol", 2009, 639, "Dan", "Brown", "eng", true, 8 ) );
  36. container.push_back( BOOK( "Harry Potter and the Philosopher's Stone", 1997, 309, "Joanne", "Rowling", "eng", true, 8 ) );
  37. container.push_back( BOOK( "A Brief History of Time", 1988, 256, "Stephen", "Hawking", "eng", true, 10 ) );
  38. container.push_back( BOOK( "Game of Thrones", 1996, 672, "George Raymond Richard", "Martin", "eng", true, 8 ) );
  39. container.push_back( BOOK( "Eye of the World", 1990, 688, "Robert", "Jordan", "eng", true, 10 ) );
  40. container.push_back( BOOK( "The Great Hunt", 1990, 660, "Robert", "Jordan", "eng", true, 8 ) );
  41. container.push_back( BOOK( "The Dragon Reborn", 1991, 628, "Robert", "Jordan", "eng", true, 9 ) );
  42. container.push_back( BOOK( "The Shadow Rising", 1992, 1001, "Robert", "Jordan", "eng", true, 10 ) );
  43. container.push_back( BOOK( "Dune", 1965, 412, "Frank", "Herbert", "eng", true, 9 ) );
  44. container.push_back( BOOK( "Beginning C++ Through Game Programming, 3rd Edition", 2011, 410, "Michael", "Dawson", "eng", true, 10 ) );
  45.  
  46.         for( size_t i = 0; i < container.size(); ++i )
  47.         {
  48.                  BOOK &book = container[i];
  49.                  cout << "Book Name : " << book.NAME<< "\nPublished : " <<  book.YEAR << "\nPages : " <<  book.PAGES << "\nAuthor : " <<  book.FIRSTNAME << " " <<  book.LASTNAME << "\nLanguage : " <<  book.LANGUAGE << "\nRank : " <<  book.SCORE << "/10";
  50.                 cout << "\nOn Shelf : ";
  51.                 if ( book.READ == true)
  52.                         cout << "Read\n\n";
  53.                 else
  54.                         cout << "Not read\n\n";
  55.                 X:
  56.                 if((i+1)%5==0)
  57.                 {
  58.                         cout << "Vajuta "j", et näha viite järgmist raamatut, "e" et näha viite eelmist raamatut ja "v", et väljuda programmist.\n";
  59.                         string g;
  60.                         cin >> g;
  61.                         if(g == "j")
  62.                         {
  63.                                 i++;
  64.                                 if(i>5)
  65.                                 {
  66.                                         goto X;
  67.                                 }
  68.                         }
  69.                         else if (g == "e")
  70.                         {
  71.                                 i--;
  72.                                 if(i>5)
  73.                                 {
  74.                                         goto X;
  75.                                 }
  76.                                
  77.                         }
  78.                         else if (g == "v")
  79.                         {
  80.                                 goto Y;
  81.                         }
  82.                         cin.ignore();
  83.                 }       
  84.         }
  85.         Y:
  86. return 0;
  87. }
  88.  

Nüüd probleem selline, et "j", "e" ja "v" vajutamisel ei toimi soovitud tegevused. Aitäh!
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 26
tagasi üles
vaata kasutaja infot saada privaatsõnum
Ho Ho
HV Guru
Ho Ho

liitunud: 16.02.2002




sõnum 21.05.2012 21:44:53 vasta tsitaadiga

Never ever ei tohiks tsüklimuutuja väärtust muuta kusagil mujal kui tsükli päises.
Samuti for tsükkel ei kõlba säärase voojuhtimise jaoks. Pigem tee miski lõpmatu tsükkel (while (true)) ning sinna sisse sisendi küsimine ning sellele vastavalt käitumine. Tsüklist saad break'iga välja. Ei mingeid goto'sid pole seal juures samuti tarvis.

_________________
Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity"
Kommentaarid: 106 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 86
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
neros
HV Guru
neros

liitunud: 26.11.2003




sõnum 22.05.2012 07:58:12 vasta tsitaadiga

Nõustun eelkõneleja seisukohaga. Kuna juba C++'i kasutada, siis miks mitte juba OOP teed minna. Kõigepealt soovitaks tekitada näiteks BookCollection klassi, kus on funktsioon Add, mis võtab parameetriteks samad väärtused mis su structi constructor. Saaks ära jätta inetud container.push_back(BOOK(...)); read ning asendada näiteks Books.Add(...);

Teiseks, while loop. Use it. Love it.

Kolmandaks, funktsioonid. Use them. Love them. Üldiselt on reegel selline, et "funktsioon peaks tegema ühte asja" ilma naeruväärseks mineva abstraheerimiseta. Klassid peaks tegema väga konkreetseid asju. Kusagil oli isegi videoloeng selle kohta, üritan tänase päeva jooksul üles leida... kui õnnestub.

Poolikult pole mõtet programmerimist õppida - hiljem kahetsed. Pigem natuke rohkem vaeva näha alguses ja õppida korralikku koodi kirjutama kui pärast spagetist pannkooke teha.

_________________
GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt.
Kommentaarid: 48 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum
Ho Ho
HV Guru
Ho Ho

liitunud: 16.02.2002




sõnum 22.05.2012 09:04:35 vasta tsitaadiga

tsitaat:
Kõigepealt soovitaks tekitada näiteks BookCollection klassi, kus on funktsioon Add, mis võtab parameetriteks samad väärtused mis su structi constructor. Saaks ära jätta inetud container.push_back(BOOK(...)); read ning asendada näiteks Books.Add(...);
Antud olukorras ei pea säärast mõttetu lisakihi tegemist eriti mõttekaks. Saaks veel aru, kui tolle konteineri otsas tehtaks miskit keerukamat kui lisamine-väljastus kuid hetkel seda ei ole ning kogu asi taanduks sisuliselt add(...) vs push_back(...) peale kus mõlemal on praktiliselt samad parameetrid. Spetskonteineri puhul saaks veel küll raamatu constructori sinna add'i sisse ära peita kuid isiklikult ei näe sel erilist mõtet.

Eks niisama näpuharjutuse mõttes see halba ei teeks kuid kindlasti tuleb silmas pidada, et liigne abstraktsioon ei ole sugugi mitte hea.


Muus osas nõustun, eriti funktsioonide ning korralikult asjade selgeks tegemise koha pealt. Miski üldise koodi vorminduse standardi võiksid ka omale selgeks teha ning seda kasutada. Säärased allcaps structide-muutujate nimed c++ koodis tahavad silmi peast kratsima panna.

_________________
Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity"
Kommentaarid: 106 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 86
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
neros
HV Guru
neros

liitunud: 26.11.2003




sõnum 22.05.2012 09:22:59 vasta tsitaadiga

Näpuharjutuse jaoks ma mõtlesingi icon_razz1.gif Kui mul on mingi programm mis üle ühe faili ei nõua et loetav püsida, ei hakka ka abiklasse ehitama, pole lihtsalt mõtet kui kiirelt midagi tarvis meisterdada, vähemalt C++'ga. C#'ga oleks vastasel juhul liiga palju staticuid vaja ja staticute nägemine mujal kui extensionmethodites ajab lihtsalt segadusse (on erandeid muidugi). Ning jällegi abstraheerimise poole pealt - liiga palju head asja on paha küll, aga alustajale on sobilik just seetõttu, et saab vähemalt asja natuke selgemaks.

As for all-caps nimetused... esimest korda koodist üle lastes tekkis koheselt küsimus "oot, mis konstandikasutus see selline on" aga uuesti vaadates tuli välja et hoopis structi construct icon_lol.gif

_________________
GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt.
Kommentaarid: 48 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum
estplayer
HV kasutaja

liitunud: 15.10.2008




sõnum 11.06.2012 23:20:09 vasta tsitaadiga

Aitäh abi eest! Nüüd tahaksin teha programmi, mis loob 3 4*4 massiivi ja täidab need naturaalarvudega 0 kuni 100. Siis väljastada kõik 3 massiivi ekraanile ning seejärel leida, milline neist on elementide väärtuselt suurim ning siis ka see eraldi väljastada. Omal jõul jõudsin ma kuni 3 massiivi väljastamiseni, elementide summat eriti ei oska arvutada. Samuti sooviks teada, kas seda kõike saab kuidagi lühemalt ka kirja panna? Praegult tundub mul kõik väga laialt välja kirjutatud.
c++:
  1.  
  2. #include<iostream>
  3. #include<ctime>
  4. using namespace std;
  5. #define maxN 4
  6. #define maxM 4
  7. #define maxX 4
  8. #define maxY 4
  9. #define maksa 4
  10. #define maxB 4
  11. int t[maxM][maxN];
  12. int u[maxX][maxY];
  13. int s[maksa][maxB];
  14. int n, m, x, y, a, b;
  15.  
  16. void input(){
  17.         n = 4;
  18.         m = 4;
  19.         for (int i = 0; i < m; i++)
  20.        
  21.                 for (int j = 0; j < n; j++)
  22.                 {
  23.                         t[i][j] = rand() % 100;
  24.                 }
  25.        
  26. }
  27.  
  28. void input2(){
  29.         x = 4;
  30.         y = 4;
  31.         for ( int i = 0; i < x; i++)
  32.         {
  33.                 for (int j = 0; j < y; j++)
  34.                 {
  35.                         u[i][j] = rand() % 100;
  36.                 }
  37.         }
  38. }
  39. void input3(){
  40.         a = 4;
  41.         b = 4;
  42.         for (int i = 0; i < a; i++)
  43.         {
  44.                 for (int j = 0; j < b; j++)
  45.                 {
  46.                         s[i][j] = rand() % 100;
  47.                 }
  48.         }
  49. }
  50. void output(){
  51.         for (int i = 0; i < m; i++)
  52.         {
  53.                 for (int j = 0; j < n; j++)
  54.                 {
  55.                         cout << t[i][j] << " ";
  56.                 }
  57.                 cout << endl;
  58.         }
  59. }
  60. void output2(){
  61.         for (int i = 0; i < x; i++)
  62.         {
  63.                 for (int j = 0; j < y; j++)
  64.                 {
  65.                         cout << u[i][j] << " ";
  66.                 }
  67.                 cout << endl;
  68.         }
  69. }
  70. void output3(){
  71.         for (int i = 0; i < a; i++)
  72.         {
  73.                 for (int j = 0; j < b; j++)
  74.                 {
  75.                         cout << s[i][j] << " ";
  76.                 }
  77.                 cout << endl;
  78.         }
  79. }
  80. int main()
  81. {
  82.         srand((unsigned)time(0));
  83.         input();
  84.         input2();
  85.         input3();
  86.         cout << "First matrix: \n";
  87.         output();
  88.         cout << "\n";
  89.         cout << "Second matrix: \n";
  90.         output2();
  91.         cout << "\n";
  92.         cout << "Third matrix: \n";
  93.         output3();
  94.         return 0;
  95. }
  96.  
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 26
tagasi üles
vaata kasutaja infot saada privaatsõnum
Ho Ho
HV Guru
Ho Ho

liitunud: 16.02.2002




sõnum 11.06.2012 23:27:21 vasta tsitaadiga

Tee omale funktsiooniparameetrid selgeks icon_smile.gif

Käigult kirjuatud kood, ei pruugi kompileerida kuid idee peaks enam-vähem edasi andma.
c++:
  1.  
  2. typedef int[4][4] matrix;
  3.  
  4. void input(matrix &data) {
  5.         for ( int i = 0; i < 4; i++)
  6.         {
  7.                 for (int j = 0; j < 4; j++)
  8.                 {
  9.                         data[i][j] = rand() % 100;
  10.                 }
  11.         }
  12.  
  13. }
  14. ...
  15.  
  16. matrix d1, d2;
  17. input(d1)
  18. input(d2)
  19.  
  20.  
Asja saaks kõvasti ilusamaks, kui kasutada STL'i konteinereid/templatesid ja <algorithm> headerit kuid see on vist hetkel õige pisut kaugema tuleviku teema icon_smile.gif
Säärane massiivi typedef'imine ning funktsiooni sees otse julmalt nelja kasutamine on tegelikult suht karm häkk ning reaalses koodis sedasi ei tohiks teha.

Kui koodis on miskeid tundmatuid märksõnu siis googelda ja/või küsi. Algatuseks oleks siis märksõnadeks typedef ning reference, rääkimata siis tollest samast funktsioonile input ja output parameetrite andmist.

_________________
Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity"
Kommentaarid: 106 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 86
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
neros
HV Guru
neros

liitunud: 26.11.2003




sõnum 12.06.2012 08:36:54 vasta tsitaadiga

Tegelikult saaks vähem häkiliselt kui 4 asendada igal pool nt konstandiga MAX.

Lisaks mis masiivi typedefimisel viga? typedefe kasutatakse kõikjal, ei näe põhjust, miks ka siin ei võiks

E: kuigi vectoritega saaks ilmselt funktsionaalsema koodi

_________________
GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt.


viimati muutis neros 12.06.2012 08:54:59, muudetud 1 kord
Kommentaarid: 48 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Kehamassi indeksi arvutamine mine lehele eelmine  1, 2, 3  järgmine
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.