Pereiti prie turinio

kashiukas

Nariai
  • Pranešimai

    508
  • Užsiregistravo

  • Lankėsi

  • Laimėta dienų

    1
  • Atsiliepimai

    0%

kashiukas Pranešimai

  1. Keletas pastebėjimų:

    Jeigu skliausteliai nebūtini, dar nereiškia, kad jų neverta dėti – bent jau metodų apibrėžimuose (def) naudok skliaustelius:

    def meth(arg)

    def meth2(arg1, arg2).

     

    Jeigu metodas neturi argumentų, () nerašyk. Kviesdamas metodus taip pat, geriau uždėk skliaustus – bent man, lengviau skaitosi, o ir chaininti metodus lengviau galėsi (nereikės prirašinėŧi skliaustų) – method1(arg1, arg2).method2(arg)

     

    Class variable yra evil dalykas. Tavo atveju – nieko tokio, bet jei įsiveltų paveldėjimas, tai gali turėti problemų. Naudok class instance variables: http://stackoverflow.com/questions/3802540/difference-between-class-variables-and-class-instance-variables

     

    Perskaityk kokį nors stiliaus gidą, keletą gali rasti čia: http://forum.vilniusrb.lt/index.php/15-kodo-tvarka-ir-geros-praktikos

     

     

    Gal galėtum brūkštelti savo bandytą kodą, kai metodas nematė instance variable'o? Mestelk į kokį pastebin, jei nesunku – mažiau scrollinti šitoje temoje reikės. :-)

     

     

    Red: šiek tiek pakrapščiau, tai lyg ir veikia: http://pastebin.com/yEayVSa7

    Dar keletas pastebėjimų: kodėl visi accountai su vienodu pinu? Ne geriau padaryti, kad konstruktorius priimtų pin'ą ir saugotų jį instance variable? Kodo daug keisti nereikėtų – gali iš pin metodo returninti @pin (nors, aš geriau kodą pakeisčiau).

     

     

    Taip pat, tavo duotame pavizdyje vietoje show_balance reikia kviesti display_balance. :-)

     

     

    Sėkmės.

  2. Dabar pas mane yra toks kodas (Dalis aišku):

     

      for i := m to n do
       begin
         if ((i mod 400 = 0) OR (i mod 100 <> 0) AND (i mod 4 = 0))
           then
             WriteLn('Keliamieji metai yra: ', i);
           end;

     

    Ir kaip padaryt, kad atsakymą pateiktų taip?:

     

     

     

    O ne:

     

    ?

     

     

     WriteLn('Keliamieji metai yra: ');
     for i := m to n do
       begin
         if ((i mod 400 = 0) OR (i mod 100 <> 0) AND (i mod 4 = 0))
           then
             Write(i, ' ');
           end;
    

     

    Tik dabar bus problema, jeigu intervale nėra keliamųjų metų. Spręsčiau maždaug taip: turėčiau Boolean kintamąjį, kurio pradinė reikšmė būtų false. Jeigu metai keliamieji, tikrinčiau ar tas kintamasis false, jei false – printinčiau ('Keliamieji metai yra: ', i) ir nustatyčiau tą kintamąjį į true. Jeigu kintamasis true – printinčiau tik metus: Write(', ' i);

     

    Jeigu baigus ciklą kintamasis išlieka false – printinčiau 'Intervale keliamųjų metų nėra'.

  3. Mindf**k, reikia ieskot pavyzdziu internete, kad suprasciau.

     

     

     

    Turi failą:

    1 2 3

    4 99

     

    ir kodą:

    ifstream f("failas.txt");
    int a;
    
    f >> a; // a = 1; f.eof() = false
    f >> a; // a = 2; f.eof() = false
    .......
    f >> a; // a = 99.  f.eof() = true, nes pasiekta failo pabaiga.
    

     

    Vietoj tų 5 eilučių (o ypač, jeigu nežinai kiek faile eilučių), galima naudoti while loopą, panaudojant f.eof() funkciją:

    while(!f.eof()) { // kol f.eof() grąžina false
     f >> a; // šitas bus įvykdytas 5 kartus (jei f rodys į tą ankstesnį failą)
    }

  4. Šiaip, reikėtų naudoti IMAP, o ne POP3. Iš esmės, tai per IMAP'ą parsitrauki visus savo laiškus (tai gali trukti netrumpai), o tada importuoji juos kur nori (žinoma, serveris turėtų palaikyti IMAP uploadą). Pvz., vienas variantas yra čia: http://imap-upload.sourceforge.net/

     

    Kadangi, exportavimui tu naudosi paprastą imap downloadą (daugelis mail klientų gali pasiimti visus laiškus pasirinkus „make available offline“ ar kažką tokio), tai gmailas nieko neturėtų riboti.

  5. Aham, bandžiau pasidaryt su tuom pow, bet nelabai gaunas. Jeigu nesunku, galbūt gali konkretų pavyzdį duot? Nes man reikia kad keltų laipsiu pagal kintamajį - periodai ( čia palūkanų skaičiuoklei).

     

     

    #include <iostream>
    #include <cmath>
    
    int main(void)
    {
           double a = 15.0;
           double b = 3.0;
    
           std::cout << pow(a, b) << std::endl; // => 3375
           std::cout << pow(3.0 * 2.5, b) << std::endl; // => 421.875
    
           return 0;
    }
    

  6. Čia cpp? Daugelyje kalbų ^ reiškia XOR.

    Kelti laipsniu gali su pow(double x, double y), reikia includinti "cmath", gali tekti nurodyti -lm flagą kompiliatoriui (ant C reikia, nežinau kaip su C++).

     

    Laipsnio kėlimo funkcija dažniausiai būna pow (gali būti Math namespace), arba ** operatorius ( x ** y ).

  7. Taip as ir maniau, bet as negaliu taip padaryti, nes min yra int tipo, o au yra klases tipo objektas :)

     

     

    Kodėl negali?

    class A
    {
    private:
           int m_someint;
    public:
           A(int i) : m_someint(i) { } 
           bool operator<(int other_int)
           {   
                   return m_someint < other_int;
           }   
    };
    
    int main(void)
    {
           A a = A(3);
           if(a < 4) cout << "3 < 4\n"; // <- true
           return 0;
    }
    

     

    Šitas, kaip ir, veikia?

  8. Sveiki, uzduotyje reikia realizuoti(ir greciausiai panaudoti) bool operatoriu <. Kur galima ji panaudoti jei as apsiejau ir be jo?

    bool AutoDuomenys::operator < (const AutoDuomenys &kitas){
    return co2 < kitas.co2;
    }
    
    string SurastiMaziausia(Automobiliai *A1){
    int min = numeric_limits<int>::max(); // didziausia reiksme
    string model;
    for(A1->Pradzia(); A1->Yra(); A1->Kitas()){
    	AutoDuomenys au = A1->Imti();
    	if(au.ImtiCo2() < min && au.ImtiKategorija() == 5){
    		min = au.ImtiCo2();
    		model = au.ImtiModeli();
    	}
    }
    return model;
    }

    taip pat jei apsirasau objektus dinamiskai ar leidzia "programavimo kultura" juos istrinti main'e?

    	Automobiliai *A1 = new Automobiliai();
    Automobiliai *B1 = new Automobiliai();
    
    delete A1;
    delete B1;

    P.S sios uzduoties fragmente reiktu panaudoti bool operatoriu.

     

      if(au.ImtiCo2() < min && au.ImtiKategorija() == 5){
    

    Čia gali panaudoti bool operator<(int whatever):

     

    if (au < min && something)

  9. aš dar tik plaukioju paviršium su tais string ir char. o tai kaip tada sukeisti, kad imtų 2 simbolius ar daugiau vietoj vienos raidės ?

     

     

    Naudok std::string (tiesiog string, jeigu turi „using namespace std;“). Jis turėtų turėti append ar panašų metodą, kur gali appendinti kiek nori simbolių (t.y., appendinti stringą). Šitoje užduotyje aš naudočiau papildomą stringą (pavadinkime jį result), į kurį vis appendinčiau atitinkamą (pagal Morzės alfabetą) stringą.

     

     

    Maždaug šitaip:

    std::string text = std::string("ABCD"); // Šitą versim į Morzę
    std::string result;
    
    for(int i = 0; i < text.length(); ++i)
    {
     string code = code_for(text[i]) // code_for yra tavo parašyta funkcija, kuri grąžina stringą su simbolio atvaizdavimu Morzės alfabete. Vietoje funkcijos gali naudoti map'ą (http://www.cplusplus.com/reference/map/)
     result.append(code);
    }
    
    std::cout << result << std::endl;
    

     

    Atkreipk dėmesį, kad newline'as, tabas, tarpas irgi yra simboliai, pagalvok kaip juos koduosi: paliksi tą patį simbolį ar ignoruosi – spręsti tau.

     

     

    Mano rule of thumb, programuojant cpp: jeigu įmanoma, nenaudoti C stringų (t.y., char masyvų), o vietoje jų naudoti std::string.

     

    Red: tik dabar pamačiau, kad jau naudoji appendą, tik kita forma: +=. :-)

     

    P.S., kodą dėk tarp [ code ] kodas [/ code ] tagų (be tarpų prieš/po [ ar ]).

  10. c++ koduotė tokia nustatyta, o failas pas mane txt tipo. pabandžiau pakeisti į normalų tašką '.', tačiau jį vistiek ignoruoja. Duotas tekstas RYTO RASA rezultatas RYTO R-S-

    #include <iostream>

    #include <fstream>

    #include <string>

    #include <cstdlib>

    #include <iomanip>

    #include <sstream>

    using namespace std;

     

    void skaitymas(string &tekstas)

    {

    ifstream failas;

    failas.open("Duomenys.txt");

    string eilute;

    while(!failas.eof())

    {

    getline(failas,eilute);

    tekstas+=eilute;

    }

    failas.close();

    }

     

    void rasymas(string tekstas)

    {

    ofstream failasR;

    failasR.open("Rezultatai.txt");

    for(int i=0;i<tekstas.length();i++)

    {

    if(tekstas=='A' || tekstas=='a'){tekstas='.-';}

    }

    failasR<<tekstas;

    failasR.close();

    }

     

    int main()

    {

    string tekstas;

    skaitymas(tekstas);

    rasymas(tekstas);

    return 0;

    }

     

     

     

    Ar čia man vaidenasi, ar tu į vieną charą nori sukišti du? Ko gero, todėl ir dingsta vienas simbolis, nes į vieno simbolio vietą tu nori įdėti du simbolius.

  11. Kadangi matau tavo kodą ir klaidos pranešimus, tai galiu išburti kas negerai... :-)

    Taigi, duok kodą, klausk kodėl tas ar anas neveikia, o ne klausk „kaip parašyti visą programą“ (su mintim, kad kažkas nemokamai parašys?).

     

     

    Beje, man pačiam C pointerius (jie nuo C++ nesiskiria, tik vietoj malloc() funkcijos, naudoji operatorių new, vietoj free() – delete) išmokti padėjo, berods, šis PDF'as: pdos.csail.mit.edu/6.828/2012/readings/pointers.pdf . Pasiskaityk, gal kažkiek aiškiau pasidarys. :-)

  12. Rezultatai.txt failas po programos įvykdymo:

    9+3=12
    9-3=6
    9*3=27
    9/3=3
    ******************************
    6+3=9
    6-3=3
    6*3=18
    6/3=2
    ******************************
    8+4=12
    8-4=4
    8*4=32
    8/4=2
    ******************************
    10+5=15
    10-5=5
    10*5=50
    10/5=2
    ******************************

     

    Ką reikia pakeisti, kad būtų taip, kaip pavyzdyje?

     

    Ir dar tarpus tarp ženklų. :-P Jeigu nurodytas outputo formatas, tai ir daryk pagal jį. ;-)

  13. Tai klausimas, ar apsimoka mokytis vieną iš šių programavimo kalbų - PHP ir HTML?

     

     

    Lygini automobilį su medžiu. Trumpai tariant: HTML yra skirta atvaizduoti puslapį naršyklėje, o PHP sukasi serveryje ir generuoja HTML'ą (gali generuoti JSON, XML ar dar bala žino ką). Jeigu nori dirbti web'e, tai be HTML, greičiausiai, neapsieisi. O štai PHP galima keisti kokia nors kita programavimo kalba: jau minėtos ruby, python, etc. Taip pat, server-side gali naudoti tą patį C++ ir leisti jį per CGI, bet tai nėra pats geriausias sprendimas.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...