Pereiti prie turinio

C++ programavimo uzdaviniai


Rekomenduojami pranešimai

Man atrodo, kad tada tas pats butu kaip i<n. Viliau, internete nerandu info apie identacija. Kas tai yra? Ir kodel ji bloga pas mane?

 

Gali būti, detaliai užduoties neperžiūrėjau.

 

Dėl indentacijos, tai reikia su įtraukom padirbėt, kad kodas vizualiai maloniau skaitytųsi.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Man atrodo, kad tada tas pats butu kaip i<n. Viliau, internete nerandu info apie identacija. Kas tai yra? Ir kodel ji bloga pas mane?

https://en.wikipedia.org/wiki/Indent_style

 

Kiekvienas gilesnis blokas turi būti pastumtas vis dešiniau pagal tam tikrą, fiksuotą plotį (2 tarpai, 4 tarpai, 1 TAB ir pan.). Viena esminių minimaliai įskaitomo kodo savybių. O pas tave tai pastumta, tai ne...

 

int main() {
   int dummy = 1;
   if (dummy == 2) {
       printf("OMG WAT");
   }
}

void something() {
   while (true) {
       if (true) {
           printf("True is still true, all's right with the world");
       }
   }
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki, turiu viena klausima del duomenu skaitymo is failo. Uzduotis:

Noreciau suzinoti ar yra tokia galimybe, kad i masyva butu irasoma tiek nariu (siuo atveju kainu), koks pirmoje eiluteje yra skaicius(siuo atveju prekiu kiekis)? pvz:. Siuo atveju butu 3 (tai man reiketu 3 laisvu vietu masyve), 5(reiktu 5 laisvu vietu masyve), 4(reiktu 4 laisvu vietu masyve), ir t.t.

post-80785-0-35204300-1372944368_thumb.png

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki, turiu viena klausima del duomenu skaitymo is failo. Uzduotis:

Noreciau suzinoti ar yra tokia galimybe, kad i masyva butu irasoma tiek nariu (siuo atveju kainu), koks pirmoje eiluteje yra skaicius(siuo atveju prekiu kiekis)? pvz:. Siuo atveju butu 3 (tai man reiketu 3 laisvu vietu masyve), 5(reiktu 5 laisvu vietu masyve), 4(reiktu 4 laisvu vietu masyve), ir t.t.

 

Tau reikia, kad mayvas turėtų 50 vietų, nes toki yra n (lentynų skaičius) apribojimai.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tau reikia, kad mayvas turėtų 50 vietų, nes toki yra n (lentynų skaičius) apribojimai.

Taip, bet greiciausiai mano klausimo formuluote truputeli bloga. As noriu suziniti kaip nuskaityti is tekstinio failo duomenis, kai pats pirmas skaicius turi buti kitame masyve. Na pavyzdziui

3 15 360 8
5 2 1 145 99 300

As noriu, kad pirmi eilutes skaiciai 3 ir 5 butu masyve(tarkime K[]), o skaiciai 15; 360; 8 butu kitame tarkim A[] masyve.

Redagavo mendinskis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Taip, bet greiciausiai mano klausimo formuluote truputeli bloga. As noriu suziniti kaip nuskaityti is tekstinio failo duomenis, kai pats pirmas skaicius turi buti kitame masyve. Na pavyzdziui

3 15 360 8
5 2 1 145 99 300

As noriu, kad pirmi eilutes skaiciai 3 ir 5 butu masyve(tarkime K[]), o skaiciai 15; 360; 8 butu kitame tarkim A[] masyve.

 

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ą.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

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ą.

Taip tavo budas daug racionalesnis. Taciau man idomu suzinoti kaip nuskaityti taip kaip as sakiau, kad nebutu problemu velesniuose uzdaviniuose :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Taip, bet greiciausiai mano klausimo formuluote truputeli bloga. As noriu suziniti kaip nuskaityti is tekstinio failo duomenis, kai pats pirmas skaicius turi buti kitame masyve. Na pavyzdziui

3 15 360 8
5 2 1 145 99 300

As noriu, kad pirmi eilutes skaiciai 3 ir 5 butu masyve(tarkime K[]), o skaiciai 15; 360; 8 butu kitame tarkim A[] masyve.

 

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.

 

 

fd >> skaicius;

fd.ignore();

 

Sita koda imeti i cikla, kuris sukasi tiek kartu, kiek yra eiluciu, arba i toki, kuris eina iki failo pabaigos.

 

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ę.

 

 

Na gal jau yra minciu? Internete radau kazka panasaus su ciklais, bet manau, kad turi buti daug paprastesnis budas. Juk C++ kalboje turi buti f-ja, kuri gebetu skaityti tik norimus narius is tekstinio failo.?

 

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;
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Viliau, aciu uz issamu atsakyma, bet nemanau, kad paskutinis Tavo pasiulytas budas yra teisingas. Kiek suprantu Tu pats prisiskyriai, kad

A[0] = 3;
A[1] = 15;
A[2] = 360;
A[3] = 8;

ir jei pakeisciau nors viena skaiciu tekstiniame faile jau programa tinkamai neveiktu.

 

Tai tu tuos visus duomenis ir nusiskaitysi iš failo, čia tik parodžiau kaip atrodytų masyvas po nuskaitymo.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jei pirmas skaičius indikuoja, kiek skaičių eis po jo, tai pirma nuskaitai jį (tarkim, kintamasis m), o tada, aišku, ciklas nuskaityti kitiems.

 

Aišku, dar yra .getline(), bet ten jau labiau su stringais tvarkantis. Tavo duotuose uždaviniuose būtent yra nurodoma, kiek skaičių bus kiekvienoje eilutėje.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tiesa sakius as taip ir dariau

#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
const int Cmax = 50;
const char CD[]="Duomenys.txt";
const char CR[]="Rezultatai.txt";
void Skaitymas(int & p, int & n, int A[], int K[], int & sum);
   int main(){
   int p, n, A[Cmax], K[Cmax], sum=0;
   Skaitymas(p, n, A, K, sum);
}
void Skaitymas(int & p, int & n, int A[], int K[], int & sum){
ifstream fd(CD);
   fd >> p >> n;
   for(int i=0; i<n; i++){
           fd >> A[i];
           fd.ignore(50,'\n');
           //cout << A[i] << endl; // nusiskaitau pirmus kiekvienos eilutes skaicius 3; 5; 4; 2.
   }
   for(int i=1; i<=A[0]; i++){ // Cikla suku iki 1-ojo nario t.y. 3.
           fd >> K[i];            // viska rasau i nauja masyva
           cout << K[i] << endl;

   }
fd.close();
}

Taciau isvedus i ekrana gaunu

19945325; -1; 36.

Pats ieskojau internete ir radau kad visas daroma su while ciklais. Bet ar yra kitas (paprastesnis) budas?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aisku, bet kodas veikia blogai, nes meta neegzistuojancias reikmes :) Kazkas negerai tikriausiai...

 

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.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

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