Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

Ar yra mokančių naudotis C++?


Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 1170 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

(redaguota)
prieš 1 valandą, Litukas parašė:

Manau gali iškart rašyti problemą, kas būtent nesigauna. Kas mokės galbūt padės ;D

Nesigauna beveik viskas :D. geriau ss numesiu. Būtų gerai jei kas išspręstų. Būčiau žiauriai dėkingas.

,,p" visur reikia double rašyt. Įvelta klaida uždaviny.

image.png.c91affa1e2ec161849d3fae90ee26ad4.png

Redaguota , nario VipasMine
Nuoroda į komentarą
Dalintis per kitą puslapį

 

Neseniai tik pradėjau mokytis funkcijas, nesimokiau dar masyvų, tad nežinau kaip teisingai viską surašyti :D Kažką pakūriau su atvaizdavimu konsolėje, atsakymas gaunamas teisingas, bet  pats kodas nėra visiškai taisyklingas. Gali pasižiūrėti kaip apskaičiuojama ir sukurti viską teisingai pagal save. 

#include <fstream>
#include <iostream>

using namespace std;

const char dataFile[] = "prekes.txt";
const char resultFile[] = "prekesRez.txt";
void Skaitymas(int &n, double &pr, double p[]);
void VidurkisPo(int n, double p[], double &vid);
double Vidurkis(int n, double p[]);
int main() {
	double p[100], pr, vid, vidPo;
	int n;
	ifstream df;
	ofstream rf;
	Skaitymas(n,pr,p);		
	vid = Vidurkis(n,p);
	cout << vid << endl;
	// Nauja prekės kaina be išvedimo
	for(int i = 0; i < n; i++){ 
		if(p[i] < vid){
			p[i] = (100+pr)*p[i]/100;
		}
	}		
	
	VidurkisPo(n,p,vid);
	cout << vid << endl;
	// Nauja prekės kaina su išvedimu
	for(int i = 0; i < n; i++){
		if(p[i] < vid){
			p[i] = (100+pr)*p[i]/100;
		}
		cout << p[i] << " ";
	}
	return 0;
}
void Skaitymas(int &n, double &pr, double p[]){
	ifstream df;
	df.open(dataFile);
	df >> n >> pr; // n - prekių kiekis, pr - pabranginimo procentas 
	for(int i=0; i < n;i++){
		df >> p[i];
	}
	df.close();
}
double Vidurkis(int n, double p[]){
	double vid;
	for(int i=0; i < n; i++){
		vid+= p[i];
	}
	vid = vid/n;
	return vid;
}
void VidurkisPo(int n, double p[], double &vid){
	vid = 0;
	for(int i = 0; i < n; i++){
		vid+= p[i];
	}
	vid = vid/n;
}

 

Redaguota , nario Litukas
Nuoroda į komentarą
Dalintis per kitą puslapį

33 minutes prieš, Litukas parašė:

 

Neseniai tik pradėjau mokytis funkcijas, nesimokiau dar masyvų, tad nežinau kaip teisingai viską surašyti :D Kažką pakūriau su atvaizdavimu konsolėje, atsakymas gaunamas teisingas, bet  pats kodas nėra visiškai taisyklingas. Gali pasižiūrėti kaip apskaičiuojama ir sukurti viską teisingai pagal save. 


#include <fstream>
#include <iostream>

using namespace std;

const char dataFile[] = "prekes.txt";
const char resultFile[] = "prekesRez.txt";
void Skaitymas(int &n, double &pr, double p[]);
void VidurkisPo(int n, double p[], double &vid);
double Vidurkis(int n, double p[]);
int main() {
	double p[100], pr, vid, vidPo;
	int n;
	ifstream df;
	ofstream rf;
	Skaitymas(n,pr,p);		
	vid = Vidurkis(n,p);
	cout << vid << endl;
	// Nauja prekės kaina be išvedimo
	for(int i = 0; i < n; i++){ 
		if(p[i] < vid){
			p[i] = (100+pr)*p[i]/100;
		}
	}		
	
	VidurkisPo(n,p,vid);
	cout << vid << endl;
	// Nauja prekės kaina su išvedimu
	for(int i = 0; i < n; i++){
		if(p[i] < vid){
			p[i] = (100+pr)*p[i]/100;
		}
		cout << p[i] << " ";
	}
	return 0;
}
void Skaitymas(int &n, double &pr, double p[]){
	ifstream df;
	df.open(dataFile);
	df >> n >> pr; // n - prekių kiekis, pr - pabranginimo procentas 
	for(int i=0; i < n;i++){
		df >> p[i];
	}
	df.close();
}
double Vidurkis(int n, double p[]){
	double vid;
	for(int i=0; i < n; i++){
		vid+= p[i];
	}
	vid = vid/n;
	return vid;
}
void VidurkisPo(int n, double p[], double &vid){
	vid = 0;
	for(int i = 0; i < n; i++){
		vid+= p[i];
	}
	vid = vid/n;
}

 

nustokit naudot lietuviskus funkciju/kintamuju pavadinimus

Nuoroda į komentarą
Dalintis per kitą puslapį

prieš 2 valandas(-ų), Litukas parašė:

Neseniai tik pradėjau mokytis funkcijas, nesimokiau dar masyvų, tad nežinau kaip teisingai viską surašyti :D Kažką pakūriau su atvaizdavimu konsolėje, atsakymas gaunamas teisingas, bet  pats kodas nėra visiškai taisyklingas. Gali pasižiūrėti kaip apskaičiuojama ir sukurti viską teisingai pagal save. 


// ...

Pretty good overall, bet turiu keliolika pastabų, kurios galbūt pravers ateity rašant gražesnį kodą ;):

  • Geriau rašyti funkcijas virš main() funkcijos. Nereikės rašinėti tiek deklaracijų.
  • Reikėtų vengti magiškų skaičių. Jeigu masyvas turi nekintamą maksimalų dydį, tai tą konstantą reikėtų apsirašyti (priežastis).
  • Nepatikrini, ar duomenų failas egzistuoja bei nepatikrini, ar int n neviršija 100 (čia ir praverstų ta konstanta, kad du kartus nerašyti to paties skaičiaus).
  • Nereikia rašyti std::endl, galima tiesiog '\n' (priežastis).
  • Nenaudočiau using namespace std (priežastis).
  • main() funkcijoje susikuri įvesties ir išvesties srautų objektus, bet nepanaudoji.
  • Sumą padalinti iš elementų skaičiaus galima iš karto return sakinyje.
  • Kad kaskart nedalint iš 100, galima procentus pasiversti į trupmeną failo skaitymo metu.
  • Keičiant kainą, sąlygą galima užrašyti vienu trejetainiu sąlyginiu operatoriumi.
  • Failų pavadinimus geriau paduoti funkcijai, o ne kurti globalias konstantas. Tam reikia naudoti konstantines nuorodas į simbolių eilutes (angl. const reference) (priežastis).
  • Nebūtina visų kintamųjų apsirašyti main() pradžioj. Pavyzdžiui, vidurkio kintamuosius galima susikuri tada kai bus ieškomas vidurkis.
  • Reikėtų susikonfigūruoti IDE, kad formatuotų kodą, ir naudoti tarpus vietoje tabuliacijų.
#include <fstream>
#include <iostream>

#define MAXLEN 100

void fprint_prices(const std::string& filename, int count, double prices[],
                   int avg_pre_inc, int avg_post_inc)
{
    std::ofstream fout(filename);

    fout << avg_pre_inc << '\n';
    fout << avg_post_inc << '\n';
    for ( int i = 0; i < count; ++i )
        fout << prices[i] << ' ';

    fout.close();
}

double average_lf(int n, double arr[])
{
    double sum = 0;
    for ( int i = 0; i < n; ++i )
        sum += arr[i];

    return sum / n;
}

void fread_prices(const std::string& filename, int& count, double& price_inc_frac, double prices[])
{
    std::ifstream fin(filename);

    if ( !fin )
        return;

    int price_inc_pr;
    fin >> count >> price_inc_pr;
    price_inc_frac = (double)price_inc_pr / 100;

    if ( count > MAXLEN )
        return;

    for ( int i = 0; i < count; ++i )
        fin >> prices[i];

    fin.close();
}

int main()
{
    int count;
    double prices[MAXLEN], price_inc_frac;

    fread_prices("data.txt", count, price_inc_frac, prices);
    double avg_pre_inc = average_lf(count, prices);
    for ( int i = 0; i < count; ++i )
        prices[i] = prices[i] < avg_pre_inc ? (1 + price_inc_frac) * prices[i] : prices[i];

    fprint_prices("result.txt", count, prices, avg_pre_inc, average_lf(count, prices));
}
Redaguota , nario Tautedorus
Nuoroda į komentarą
Dalintis per kitą puslapį

(redaguota)

 

2021-02-05 21:48, Tautedorus parašė:

Pretty good overall, bet turiu keliolika pastabų, kurios galbūt pravers ateity rašant gražesnį kodą ;):

  • Geriau rašyti funkcijas virš main() funkcijos. Nereikės rašinėti tiek deklaracijų.
  • Reikėtų vengti magiškų skaičių. Jeigu masyvas turi nekintamą maksimalų dydį, tai tą konstantą reikėtų apsirašyti (priežastis).
  • Nepatikrini, ar duomenų failas egzistuoja bei nepatikrini, ar int n neviršija 100 (čia ir praverstų ta konstanta, kad du kartus nerašyti to paties skaičiaus).
  • Nereikia rašyti std::endl, galima tiesiog '\n' (priežastis).
  • Nenaudočiau using namespace std (priežastis).
  • main() funkcijoje susikuri įvesties ir išvesties srautų objektus, bet nepanaudoji.
  • Sumą padalinti iš elementų skaičiaus galima iš karto return sakinyje.
  • Kad kaskart nedalint iš 100, galima procentus pasiversti į trupmeną failo skaitymo metu.
  • Keičiant kainą, sąlygą galima užrašyti vienu trejetainiu sąlyginiu operatoriumi.
  • Failų pavadinimus geriau paduoti funkcijai, o ne kurti globalias konstantas. Tam reikia naudoti konstantines nuorodas į simbolių eilutes (angl. const reference) (priežastis).
  • Nebūtina visų kintamųjų apsirašyti main() pradžioj. Pavyzdžiui, vidurkio kintamuosius galima susikuri tada kai bus ieškomas vidurkis.
  • Reikėtų susikonfigūruoti IDE, kad formatuotų kodą, ir naudoti tarpus vietoje tabuliacijų.

#include <fstream>
#include <iostream>

#define MAXLEN 100

void fprint_prices(const std::string& filename, int count, double prices[],
                   int avg_pre_inc, int avg_post_inc)
{
    std::ofstream fout(filename);

    fout << avg_pre_inc << '\n';
    fout << avg_post_inc << '\n';
    for ( int i = 0; i < count; ++i )
        fout << prices[i] << ' ';

    fout.close();
}

double average_lf(int n, double arr[])
{
    double sum = 0;
    for ( int i = 0; i < n; ++i )
        sum += arr[i];

    return sum / n;
}

void fread_prices(const std::string& filename, int& count, double& price_inc_frac, double prices[])
{
    std::ifstream fin(filename);

    if ( !fin )
        return;

    int price_inc_pr;
    fin >> count >> price_inc_pr;
    price_inc_frac = (double)price_inc_pr / 100;

    if ( count > MAXLEN )
        return;

    for ( int i = 0; i < count; ++i )
        fin >> prices[i];

    fin.close();
}

int main()
{
    int count;
    double prices[MAXLEN], price_inc_frac;

    fread_prices("data.txt", count, price_inc_frac, prices);
    double avg_pre_inc = average_lf(count, prices);
    for ( int i = 0; i < count; ++i )
        prices[i] = prices[i] < avg_pre_inc ? (1 + price_inc_frac) * prices[i] : prices[i];

    fprint_prices("result.txt", count, prices, avg_pre_inc, average_lf(count, prices));
}
Citata

 

2021-02-05 16:07, Litukas parašė:

 

 

 

Redaguota , nario VipasMine
Ačiū labai!
Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 1170 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

Skelbimai


×
×
  • Sukurti naują...