Programavimas. Klausimai del užduočių, kurių nesuprantu C++.
mendinskis (+1455)
Imesiu si uzdavini: Duomenu failas: 1000 4 3 15 360 8 5 2 1 145 99 300 4 700 600 900 800 2 8 1 Mano kodas (dedu i pastebin): http://pastebin.com/7xansZ7P Beda ta, kad niekaip nesugalvoju kaip kintamaji k skaityti daugiau nei VIENA karta.
pakeista prieš 13 m
valdas3 (+1276)
Na lyg ir gerai nuskaito tą k. ifstream fd(CD); fd >> p >> n; for(int i=0; i<n; i++){ fd >> k; cout << k << endl; for(int i=0; i<k; i++){ fd >> A[i]; } maxx=A[0]; for(int i=0; i<k; i++){ if(maxx<A[i]){ if(maxx<=p){ maxx=A[i]; } } } } O rezultatas blogas, nes algoritmas blogas. Tu nieko daugiau nedarai kaip randi pačią brangiausią prekę ir ją parduodi Kindziuliui. Bet jei perskaitytum užduotį, tai sužinotum, kad jis kitaip perka tas prekes. P.S. Būtinai padirbėk su savo programavimo stiliumi.
pakeista prieš 13 m
mendinskis (+1455)
Greiciausiai Tu kalbi apie tai kad jis jei negali pirkti prekes is tos lentynos eina prie kitos nenusipirkes taip?
valdas3 (+1276)
#include <iostream> #include <iomanip> #include <fstream> using namespace std; const int Cmax = 50; const char CD[]="Duomenys.txt"; const char CR[]="Rezultatai.txt"; int main(){ int A[Cmax], k, p, n, maxx; int nusipirkta = 0; ifstream fd(CD); fd >> p >> n; for(int i=0; i<n; i++){ fd >> k; for(int i=0; i<k; i++){ fd >> A[i]; } maxx=0; for(int i=0; i<k; i++){ if(maxx<A[i] && A[i]<=p){ maxx=A[i]; } } p -= maxx; if (maxx!=0){ nusipirkta++; } } fd.close(); ofstream fr(CR); fr<<nusipirkta<<' '<<p; fr.close(); return 0; } Gal bus paprasčiau jei parašysiu programą. Galėjau kokią klaidą padaryti, jau naktis. Programa nuskaito eilutę, suranda brangiausią prekę, kurią Kindziulis gali įpirkti ir tada ji yra "nuperkama". Jei jis neįperka jokios prekės, tai programoje kintamasis maxx bus lygus 0 ir sakinys p -= maxx; nepakeis p reikšmės (t.y. jis nieko nepirks iš tos lentynos). Programa tada patikrina ar jis iš nusipirko prekę iš lentynos ir jei nusipirko, tai prideda 1 prie kintamojo, kuris saugo nupirktų prekių kiekį. Matosi, kad kažką panašaus darei, bet vietomis kažkaip neapgalvojai ką parašei. O gal čia dėl to, kad tu tą programą šimtus kartų perrašinėjai ir užsiliko kokių nors kodo fragmentų, kurie dabar nelabai logiškai atrodo.
mendinskis (+1455)
Aciu, labiausiai mane glumino tie ciklai ir ju skliaustai (labai sudetinga tinkamam skliauste parasyti reikalinga cikla ir t.t.)
mendinskis (+1455)
Sveiki, turiu toki uzdavini Su juo kankinuosi jau ne pirma diena. Tekstiniame faile 8 8 4 2 8 10 5 4 5 10 2 2 2 5 5 4 4 4 2 4 masyve A[] nusiskaiciau skaicius 8; 4; 2; 8; 10; 5; 4; 5. Kitame masyve B[] nusiskaiciau kita eilute 2; 2; 2; 5; 5; 4; 4; 4; 2; 4. Man reikia, kad butu abu masyvai butu tikrinami ir jei masyve A[] ir masyve B[] yra saugomos tos pacios reiksmes pvz:. A[ ] 8; 4; 2; 8; 10; 5; 4; 5 B[ ] 2; 2; 2; 5; 5; 4; 4; 4; 2; 4 jos butu ismestos is masyvo (butu ismesta abu 2-etai). Uzdarbio forume buvo siuloma kiti variantai "netikras rykiavimas ir t.t., bet ar imanomas mano metodas, nes tie man absoliuciai neaiskus.
pakeista prieš 13 m
mendinskis (+1455)
Sveiki, turiu klausima. Ar imanoma padaryti taip, kad tikrinant 2 masyvus cikle masyvo A[ i ] indeksas ne didetu, o masyvas B[ j ] indeksas didetu 1, bet po ciklo masyvo A [ i ] indeksas vel didetu 1 ir vel vyktu tikrinimas? Kitaip sakant man reikia kad vienas masyvas didetu cikle, o kitas masyvas didetu PO CIKLO tol kol tenkins kazkokia salyga.
valdas3 (+1276)
Labai neaišku ko tau iš tikro reikia. Bandau atspėti:
i = j = 0; while(kazkokia_salyga){ while(kazkokia_kita_salyga){ if (A[i] == B[j]){...} //kažkoks tai masyvų tikrinimas j++; } while(kazkokia_dar_kita_salyga){ if (A[i] == B[j]){...} //kažkoks tai masyvų tikrinimas i++; } }
O gal tau to išorinio while nereikia, nežinau.
mendinskis (+1455)
Paklausiu siek tiek kitaip. Siuos geltonus skaicius man reiktu irasyti i tekstini faila. Galvojau, kad reiktu tikrinti 2 masyvus ir jei ju reiksmes nesutampa isvesti tas reiksmes i ekrana.
leunicornsea (+17)
Dangoraižis. Naujajame dangoraižyje yra n kabinetų, sunumeruotų nuo 1 iki n. Prie kiekvieno kabineto durų reikia prikalti lenteles su to kabineto numeriu. Ant vienos lentelės užrašytas tik vienas skaitmuo. Jei kabineto numeris nevienaženklis skaičius, tai prie durų kalamos kelios lentelės. Parenkite programą, kuri apskaičiuotų, kiek reikės lentelių, norint prikalti numerius prie visų dangoraižio kabinetų durų. Pradinių duomenų faile įrašyta, kiek kabinetų yra dangoraižyje. Rezultatų faile turi būti įrašytas lentelių skaičius. Pradinis duomuo Rezultatas 16 23 Galit padėti? Jau valandą sėdžiu. Man reikia padaryti per funkcijos varda ir nesigauna, o jei paprastai darau išeina. using namespace std; int dangoraiziai(int nr, int n) {
int SK=0; SK+=1; if (SK>=9) SK+=2; return nr; } int main() { int n, nr, SK, num; ifstream fd("duom.txt"); ofstream fr("rez.txt"); fd >>n; for( int i=1; i<=n; i++) { num=dangoraiziai(nr,n); } fr <<num <<endl;
fd.close(); fr.close(); return 0; } Čia paskutinis mano bandymas buvo