Pereiti prie turinio

mendinskis

Nariai
  • Pranešimai

    401
  • Užsiregistravo

  • Lankėsi

  • Atsiliepimai

    0%

Reputacijos išklotinė

  1. Patinka
    mendinskis sureagavo į wi_lius C++ programavimo uzdaviniai   
    Per sudėtingai mąstai. Tau tereikia suskaičiuot kiek kokių turi veržlių ir kiek kokių turi varžtų. Tada atimi vieną iš kito ir žinai kiek trūksta.
  2. Patinka
    mendinskis sureagavo į wi_lius C++ programavimo uzdaviniai   
    Šitose eilutėse yra pora klaidų. Pabandyk pasiimti popierių ir nuosekliai vykdyti kiekvienos eilutės veiksmus bei žiūrėti, kokias kintamųjų reikšmes gauni:

    fd >> A[j]; maxx=A[0]; if(maxx<A[i]){ if(maxx<=p){ maxx=A[i]; } }
     
    O šiaip tokiu būdu skaičiuoti netgi dar protingiau, nei apie kurį aš tau sakiau, nes gali išsiverti ir be masyvo. Tau užtenka žinoti, ar skaičius, kurį dabar nuskaitei, yra didesnis už prieš tai buvusius. Jeigu perskaitęs du skaičius išsirenki didžiausią, tai perskaitęs trečią ir palyginęs jį su prieš tai buvusiu didžiausiu gausi didžiausią iš pirmų trijų skaičių. Perskaitęs m-tąjį skaičių ir palyginęs jį su didžiausiu iš pirmų (m-1) narių gausi didžiausią skaičių iš pirmųjų m narių.
     
    Be to, nelabai supratau ką norėjai tokia eilute pasakyti, nes į vieną masyvo elementą telpa tik vienas skaičius

    A[0]= 15; 360; 8
     
    Ir, žinoma, reikia nepamiršti teisingai sudėti įtraukas, nes dabar teko skaityti tavo kodą trigubai ilgiau nei būtų tekę teisingai išlygiavus.
  3. Patinka
    mendinskis sureagavo į wi_lius C++ programavimo uzdaviniai   
    Nuskaito nesąmones, nes nebėra ką skaityti. O nebėra ką skaityti, nes su pirmu for'u pasieki failo galą.
     
    Pabandysiu pailiustruoti, kaip vyksta skaitymas (skliausteliuose parašyta, kokiam kintamajam priskirta reikšmė, žvaigždutė – reikšmė nenuskaityta):

    1000(p) 4(n) 3(A[0]) 15(*) 360(*) 8(*) 5(A[1]) 2(*) 1(*) 145(*) 99(*) 300(*) 4(A[2]) 700(*) 600(*) 900(*) 800(*) 2(A[3]) 8(*) 1(*)<skaitymo kursorius>
    Ir čia tai ką nuskaitei po pirmo for'o. Kai paleidi antrą for'ą, skaitymo kursorius jau būna pabaigoje, todėl nėra ką skaityti.
     
    Norėčiau pakartoti du gerus patarimus: failą skaitai tik vieną kartą ir perskaitai tik tiek, kiek tau reikia šiuo metu.
     
    Pati užduotis sako: Kindziulis prieina prie vienos lentynos ir išsirenka brangiausią prekę; tada jis nueina prie kitos lentynos ir vėl išsirenka brangiausią prekę; vėl eina prie kitos lentynos... O tu nori padaryti taip: Kindziulis nueina prie pirmos lentynos, tada prie antros, ..., tada prie n-tos. Po to kindziulis išsirenka brangiausią prekę iš pirmos lentynos, tada išsirenka iš antros, ..., tada iš n-tos.
     
    Kada tau reikia išrinkti brangiausią lentynos prekę? Kai esi prie tos lentynos. Tai kodėl taip ir nepadarius?
     
    Nežinau, ar kažkas tave taip primokė, kad iš pradžių nusiskaitytum visą failą, bet tai ne visada yra geriausias variantas, o kai kuriais atvejais ir iš viso neįmanomas.
     
    Tai kaipgi reiktų skaityti failą?

    1000(p) 4(n) 3(k) 15(A[0]) 360(A[1]) 8(A[2]) <išsirenki brangiausią prekę ir jos kainą išminusuoji> 5(k) 2(A[0]) 1(A[1]) 145(A[2]) 99(A[3]) 300(A[4]) <išsirenki brangiausią prekę ir jos kainą išminusuoji> 4(k) 700(A[0]) 600(A[1]) 900(A[2]) 800(A[3]) <išsirenki brangiausią prekę ir jos kainą išminusuoji> 2(k) 8(A[0]) 1(A[1]) <išsirenki brangiausią prekę ir jos kainą išminusuoji>
    Taip galėsi skaityti ir atlikti skaičiavimus vienu metu bei tereikės viso labo dviejų for ciklų, esančių vienas kitame.
  4. Patinka
    mendinskis sureagavo į mantys89 C++ programavimo uzdaviniai   
    Pirmiausia pabandyk spausdinti reikšmes kurias gauni iš failo, o tada žiūrėk ar jos sutampa. Problema gali būti ir tarpai tarp skaičių arba nematomi simboliai :) Beja C++ masyvai yra nuo nulio, tai visada geriau ir daryk visus masyvus nuo nulio, nes kai pradedi ką nors keisti prasideda klaidos.
  5. Patinka
    mendinskis sureagavo į wi_lius C++ programavimo uzdaviniai   
    Norimo ilgio masyvus būtų galima pasidaryti su pointer'iais ir dinamine atmintimi, bet geriau su tuo net neprasidėk. Kaip ir minėjo, darai masyvus 50 vnt. ilgio.
     
     
     
    Reikėtų:

    fd >> skaicius; fd.ignore('\n');
    Tada nuskaitytų skaičių eilutėje, visus kitus duomenis toje pačioje eilutėje ignoruotų ir pereitų į kitą eilutę.
     
     
     
    Tokio dalyko nėra, nes tiesiog paprasčiau viską pasidaryti su ciklais.
     
    O šiaip labai bloga idėja skaityti dalį failo, o po to vėl iš naujo skaityti tą patį failą, nes skaitymas iš failo yra gana ilga operacija. Vykdydamas programą nuskaitai iš failo duomenų tiek kiek tau reikia dabartiniu momentu, su jais atlieki veiksmus ir po visko skaitai iš failo toliau. Tik kraštutiniais atvejais skaitai tą pačią failo eilutę ar net simbolį du kartus.
     
    Užduoties neskaičiau, bet kažkas minėjo, kad skaičiavimams atlikti tau reikia tik vienos eilutės duomenų. Vėliau tuos pačius skaičiavimus atlieki su kita eilute. Jeigu taip yra, tai ir skaityk po vieną eilutę, o ne viską iš karto. Kam tau sukišti visą informaciją į atmintį, jei ji tau nereikalinga? Programavime yra taip: naudoji kažko tiek, kiek tau reikia esamu momentu (nebent sunku nustatyti maksimalų dydį, tada naudoji su zapasu).
     
    Kitas variantas, kad nereikėtų skaityti į kelis masyvus — nuspręsti, kad pirmas masyvo elementas saugos duomenų skaičių, o kiti elementai bus duomenys. Tada:

    //3 15 360 8 A[0] = 3; A[1] = 15; A[2] = 360; A[3] = 8; for (int i = 1; i <= A[0]; i++) { cout << A[i] << endl; }
  6. Patinka
    mendinskis sureagavo į Cibulinskis C++ programavimo uzdaviniai   
    Nemanau, kad čia racionalu kiek vienai lentynai kurti po atskirą masyvą. Juk tau iš kiekvienos lentynos reikia tik vieno skaičiaus, kuris būtų didžiausias, bet ne didesnis už turimą pinigų sumą, todėl tik jį ir įsirašyk į masyvą. Šitame uždavinyje tau nereikia kaupti visų pradinių duomenų, nes tau iš kiekvienos eilutės reikia tik vieno vienintelio skaičiaus. Siūlyčiau darant nuskaitymą iš karto patikrinti kuris skaičius atitinka sąlygą ir tik jį ir įsirašyti į masyvą.
  7. Patinka
    mendinskis sureagavo į Sportlich Informatikos VBE 2013   
    Pažymi ašį, atsidarai kontekstinį meniu, pasirenki formatuoti ašį ir prie ašies parinkčių nustatatai pagrindinį vienetą į 0,2 (jeigu reikia, pasimodifikuoji maksimalią ir minimalią reikšmes).
  8. Patinka
    mendinskis gavo reakciją nuo SofteriZ Sveiki, uždarbiečiai   
    Kariunas megstantis isgert? Cia tas pats kaip pilotas bijantis aukscio.
  9. Patinka
    mendinskis gavo reakciją nuo SofteriZ Sveiki, uždarbiečiai   
    Kariunas megstantis isgert? Cia tas pats kaip pilotas bijantis aukscio.
  10. Patinka
    mendinskis sureagavo į Silke C++ programavimo uzdaviniai   
    Galėtum daryti su string tipu, bet puikiai pamenu šią užduotį – čia asmens kodai, užtenka ir paprasčiausio skaidymo skaitmenimis, kurį turėjai kažkada daryti.
  11. Patinka
    mendinskis sureagavo į rimcx C++ programavimo uzdaviniai   
    "return kazkas;" gali naudoti visose funkcijose išskyrus void tipo. "void" reiškia, kad funkcija negrąžina jokios reikšmės.
  12. Patinka
    mendinskis sureagavo į rimcx C++ programavimo uzdaviniai   
    Ne. void tipo funkcija negrąžina jokios reikšmės. T.y tu negali daryti
    int kintamasis=void_tipo_funkcija();
  13. Patinka
    mendinskis sureagavo į hafnis1324 C++ programavimo uzdaviniai   
    Siulau internete kur nors pasiskaityt isviso kas per daiktas tas masyvas, kaip viskas veikia, kaip pasiekt elementus, o jau tada daryt kazka.
    http://www.cplusplus.com/doc/tutorial/arrays/
     
    uzdarbis o ne uzdarbis[max] cikle.
  14. Patinka
    mendinskis sureagavo į Torafter C++ programavimo uzdaviniai   
    Nu jei masyvo neindeksuosi tai bus klaida, tai taip iseina kad tau reikia rasyti uzdarbis. Nors tu pagalvok kam tau to masyvo, jeigu tu jo apart to kart kai nuskaitai daugiau niekada nebenaudosi.
  15. Patinka
    mendinskis sureagavo į Torafter C++ programavimo uzdaviniai   
    Nu kaip as tau sakiau, naudoji kintamojo dydzio masyvu visu pirma, o visu antra, tai tu net neapibrezti to i, pagal kurio dydi darai masyva, gali buti kad tas i neigiamas, todel ir luzta.
  16. Patinka
    mendinskis sureagavo į Silke C++ programavimo uzdaviniai   
    Darykis fiksuoto dydžio masyvą ir nereiks jaudintis. Šiaip jau jei užduotis būtų su masyvais, tai būtų nurodyti maksimalūs duomenų kiekiai. (pvz. ne daugiau 1000).
  17. Patinka
    mendinskis sureagavo į Torafter C++ programavimo uzdaviniai   
    dabar tu darai: int i; // apsibreziai i, o tai reiskia tik tiek, kad atmintyje kazkokiu adresu buvo uzzymeta "stai cia stovi i", o tos vietos turinys paliktas, todel ten gali buti belekokie bitukai, kurie automatiskai is to i padaro kazkoki integeri. double masyvas[i]; ///////////////////// blogiausiu atveju darai: int i = 10; double masyvas[i]; siuo atveju i yra kintamasis, todel cia yra "variable size array"; /////////////////////////// ka tau reiketu daryti #define max 100 int main() { double masyvas[max]; } Arba gali koki: const int max = 100; int main() { double masyvas[max]; }
  18. Patinka
    mendinskis sureagavo į Torafter C++ programavimo uzdaviniai   
    #define max 100
     
    tai yra preprocesoriaus komanda ir ji tau ta 100 tiesiog ihardcodina, o
     

    const int max = 100
     
    tai tau dinamiskai ikelia tai 100, bet is esmes tai jos daro ta pati.
     
    O konstanta tai siaip apibrezia, kad tas tavo daiktas yra pastovaus dydzio ir nekis (nu nieko naujo is matematikos nepadaryta cia), yra dalyku kurie paremti tuo, kad kazkuri ju dalis yra pastovaus dyziu.
  19. Patinka
    mendinskis sureagavo į Torafter C++ programavimo uzdaviniai   
    Nu istikruju tai masyvo cia net nereik

    #include <iostream> using namespace std; int main() { int n, skani, kiekis = 0; double svoris = 0, tmp; cin >> n; for(int i=0;i<n;i++) { cin >> tmp; cin >> skani; if((tmp>=1) && (skani==1)) { svoris+=tmp; kiekis++; } } }
     
    Jeigu vistik nori su masyvu, tai:
     

    #include <iostream> #define max 100 using namespace std; int main() { int n, kiekis = 0; double svoris = 0; double zuvys[max][2]; cin >> n; //nusiskaitai zuvis for(int i=0;i<n;i++) { cin >> zuvys[i][0]; cin >> zuvys[i][1]; } //praiteruoji masyva ieskodamas ko tau reikia for(int i=0;i<n;i++) { if((zuvys[i][0]>=1)&&(zuvys[i][1]==1)) { kiekis++; svoris+=zuvys[i][0]; } } }
     
    nu bet su masyvu ilgiau ir siaip, prasciau.
  20. Patinka
    mendinskis sureagavo į Torafter C++ programavimo uzdaviniai   
    stulepliai ten atrodo taip
     
    X0 1
    0
    1
    2
    3
    4
    5
    6
    ...
     
    Tai pirmame stulpelyje (indexas jo yra 0) yra saugomas svoris, o antrajame (indexas 1) yra saugomas jos skanumas, tai viskas lyg ir tvarkoj cia.
     
    int kaip pavyzdi paroziau. Konkreciai siuo atveju tai taip, ten double turetu buti. Nes masyve reikia saugoti 2 reiksmes, t.y. svori ir skanuma, todel kai yra [2], "kiekvienas indexiukas saugo 2 skaicius", zuyvs[x][0] ir zuvys[x][1].
    Nu cia dvi dimensijos, tai cia labai poziurio reikalas kaip tu i tai paziuresi, gali tai matyti kaip:
     
    X0 1
    0
    1
    2
    3
    4
    5
    6
     
    arba
     
    X0 1 2 3 4 5 6
    0
    1
     
    Viska apibendrinant, tai duomenu matrica "zuvys" su pateiktu pavyzdiu adrodo taip:
     

    0 1 0 1.5 1 1 2.1 1 2 0.5 0 3 3.5 1 4 0.5 1 5 4.12 0
     
    Tai pazydziui kreipdamiesi zuvys[3][1] , mes imame reiksme esancioje eiluteje su indexu 3 ir stulpelyje su indexu 1, tai gauname "1";
    pvz2 imadmi zuvys[4][0], mes paimame reiksme esancia eiluteje indexu 4, stulpelyje indexu 0, ir tai yra "0.5"
  21. Patinka
    mendinskis sureagavo į Valdas3 C++ programavimo uzdaviniai   
    Nereikia jam sukti galvos su dvimačiais masyvais ir visokiomis matricomis :D . Ir iš vis, tai turbūt nėra mokyklinės programos dalis. Tad geriau būtų sukurti du atskirus masyvus. Arba geriausia jų nenaudoti iš vis :D .
  22. Patinka
    mendinskis gavo reakciją nuo ROKIDO Anglų VBE 2013   
    Palaukit kaireje? Garantuoti? visada desneje rasydavau.
  23. Patinka
    mendinskis gavo reakciją nuo ROKIDO Anglų VBE 2013   
    Palaukit kaireje? Garantuoti? visada desneje rasydavau.
  24. Patinka
    mendinskis sureagavo į austi 2013 anglu iskaita   
    Aš esu B, tačiau sužinoti galiu ir A ir B :) Nes daug pažįstamų susitaria kleisti žinią iš ryto, tad kai tik sužinojau iš karto parašau čia. Manau visi tokiu principu turėtų vadovautis. Girdėjau, kad šiais metais gali būti monologe paveikslėliai, kuriuos reikės lyginti, tačiau čia tik kalbos tarp mokinių.
  25. Patinka
    mendinskis sureagavo į austi 2013 anglu iskaita   
    Sveiki. Galėsiu įdėti temas, kai tik sužinosiu ryte ;)
×
×
  • Pasirinkite naujai kuriamo turinio tipą...