Pereiti prie turinio

Rekomenduojami pranešimai

Sveiki, galbūt kas nors galėtumėt padėt su viena dalim c++ užduoties, niekaip nesigauna. Po foto rasit reikalavimą.

 

Tekstinio failo bulves.txt pirmoje eilutėje ūkininkas įrašė natūralųjį skaičių n – kiek kartų buvo registruotos dienos, kada kastos bulvės ir kiek bulvių maišų prikasta tą dieną. Likusiose n eilučių įrašyta po du natūraliuosius skaičius, atskirtus tarpais. Pirmasis skaičius reiškia dienos numerį, antrasis – kiek maišų bulvių prikasta. Dienos sąraše gali kartotis ir eina ne iš eilės.

http://www.ipix.lt/images/034ae81cf9e9b490db97d167b26e505c.png

Parašyti funkcija void, tekstiniame rezultatų faile spausdinanti didėjančiai tų dienų, kai ūkininkas kasė bulves, numerius ir kiek bulvių tą dieną prikasė. Vienai dienai skiriama viena eilutė

 

Vat niekaip nesuprantu kokią tą funkciją parašyt. Suprantu kai liepia visas vieno masyvo reikšmes apskaičiuot, o čia pavienes nelabai įsivaizduoju kaip apskaičiuot. Kiek išmastau tai reikia dirbti ir su dienų masyvu?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

int bulves[n];

bulves[diena-1] += bulve;

Tik negalėsi rikiuoti masyvo tada,bet vistiek gali rikiavimo principu pasinaudoti norint surašyti juos į failą.

tokiu atveju sukant ciklą reikia patikrinti ar ta dieną daugiau nei 1 maisas ir tada bus aišku spausdinti ar ne.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

gali susikurt du kintamusiuos ir tada maždaug taip

{
for(int j =0;j<10;j++)
  A[j]=0;

ifstream fd(bulves.txt);
fd >> n
int x,y;
for(int i=0; i <n;i++){
   fd >> x >> y; A[x]+=y;
}
}

maždaug vienas masyvas, jį nusinulini, o tada susikuri du kintamuosius, pirmas nuskaito dieną(masyvo numerį) ir tada į A[x] (masyvo vieta yra diena) o tada sudedi su y(bulvių maišų kiekis).

Kaip dėl veikimo nežinau, pabandyk taip :)

Redagavo Reserved
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dėkui visiems padėjusiems, susitvarkiau :) Dar norėčiau paprašyti galbūt kas nors permestumėt akį per šį lengvą kodą: Kodas, paskutinėje rezultatų eilutėje gaunu ne 258.50, bet 228.50 ir niekaip neatrandu kur kas blogai.

Užduotis: 2666b847a522d3a412ac7febc701112d.png

 

pasitikrink duomenu faila

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Patikrinau, viskas veikia, kaip ir sakė taskiukas, turėtum pasitikrinti duomenų failą, paskutinę eilutę.

 

Norėčiau pakomentuoti tavo parašytą programą.

Kad aiškiau būtų, įkelsiu tavo kodą čia (gali ir pats pataisyti, tiesiog paspaudi mygtuką su užrašu < >

#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cmath>
#include <string>
using namespace std;
const char CDfv[]="duomenys.txt";
const char CRfv[]="rezultatai.txt";
const int CMax=100;
void skaityti(int & n, int A[], int B[], double C[], double D[]);
void nariai(int n, int A[], int B[], int S[]);
void pinigai(int n, int A[], int B[], double C[0], double D[], double P[]);
void rasyti(int n, int S[], double P[]);
int main ()
{
setlocale(LC_ALL, "Lithuanian");
int n;
int A[CMax];
int B[CMax];
double C[CMax];
double D[CMax];
int S[CMax];
double P[CMax];
skaityti(n,A,B,C,D);
nariai(n,A,B,S);
pinigai(n,A,B,C,D,P);
rasyti(n,S,P);
return 0;
}
void skaityti(int & n, int A[], int B[], double C[], double D[])
{
ifstream fd(CDfv);
fd>>n;
for(int i=0;i<n;i++)
fd>>A[i]>>B[i]>>C[i]>>D[i];
fd.close();
}
void nariai(int n, int A[], int B[], int S[])
{
for(int i=0;i<n;i++)
S[i]=A[i]+B[i];

}
void pinigai(int n, int A[], int B[], double C[0], double D[], double P[])
{
for(int i=0;i<n;i++)
P[i]=(A[i]*C[i])+(B[i]*D[i]);
}
void rasyti(int n, int S[], double P[])
{
ofstream fr(CRfv);
for(int i=0;i<n;i++)
fr<<S[i]<<" "<<fixed<<setprecision(2)<<P[i]<<endl;
fr.close();
}

 

Tavo kodas per sudėtingas tokiai užduočiai, jei mokytoja nereikalauja atlikti kitaip, rašai programą paprastai ir optimizuotai, kad pats suprastum ką parašei po kurio laiko.

 

Toliau, čia darbas su failais vyksta, Tau nereikia naudoti bibliotekos iostream , nes nieko neišvedi į ekraną.

O kadangi nieko į konsolę neparašai, metam lauk funkciją setlocale(LC_ALL, "Lithuanian").

Mums taip pat nereikia <string> bibliotekos, kadangi nenaudoji string kintamųjų.

Dar iš tavo programos metam cstdlib biblioteką, nes iš jos tu nieko nenaudoji.

Kadangi tavo užduotyje nereikia sudėtingesnių matematinių operacijų (kaip skaičiaus kėlimą, šaknies traukimą ar kt. trigonometrinių funkcijų), trinam ir cmath biblioteką.

 

Viską suprastinus gaunam gražų kodą, pateikiu mano parašytą kodą

#include <fstream>
#include <iomanip>

using namespace std;

const char CDfd[] = "Duomenys.txt";
const char CDfr[] = "Rezultatai.txt";

int main() {
int kiek;
ifstream fd(CDfd);
ofstream fr(CDfr);

fd >> kiek; // nusiskaitome kiek šeimų

for(int i = 0; i < kiek; i++) { // nuskaitome kiekvieną šeimą
   	int vaikai, suaug;
   	float vk, sk, viso;

   	fd >> suaug >> vaikai >> sk >> vk;
   	viso = suaug*sk + vaikai*vk;

   	fr << (vaikai + suaug) << " " << fixed << setprecision(2) << viso << endl;
}

fd.close();
fr.close();
return 0;
}

 

Naudokis į sveikatą! :)

post-107982-0-65754100-1455309633_thumb.png

main.txt

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