» »

Pomoc pri nalogi

Pomoc pri nalogi

FuI2cY ::

Pozdrav,

prosil bi vas, če bi mi pomagali rešiti nalogo. nikakor je ne morem rešiti :( nova snov in še čist ne jasna. upam da bo kdo pomagal.

naloga:
Napišite razred BeriCelaStevila, ki ima statično metodo statistika, ki dobi na vhodu ime datoteke nato pa iz datoteke prebere cela števila kot izhod pa izpiše največje, najmanjše, povprečno število in vsoto vseh števil.
V primeru, da so v datoteki negativna števila pa sprožite izjemo (NapacnoStevilo).
Demonstriraj uporabo razreda in izjeme!

pa če bo še kdo utegno dodatek:
Dopolni prejšno nalogo, tako da dopišeš metodi beriTekmovalceIzDatoteke in zapisiTekmovalceVDatoteko. Metodi naj dobita na vhodu ime datoteke, nato pa shranita oz. napolnita vektor s tekmovalci, ki so v vektorju.
Demonstriraj uporabo.

hvala za pomoč že vnaprej.

boogie_xlr ::

Maš slajde in primere na lpm, je dokaj enostavno, naredi sam.

Predavanja 11
Primer 34
Primer 35

Kje se ti zatakne?

Zgodovina sprememb…

c0dehunter ::

V .cpp fajlu ne pozabi inicializirat instančnih spremenljivk:
int BeriCelaStevila::min=0;
.
.


Če še vedno ne gre, pa - kot je reku boogie_xlr - povej konkretno kje te jebe.

Čeprav nekaj men tukaj tud ni jasno - a ni nekam nesmiselno tukaj imet instančne spremenljivke in statično metodo?
I do not agree with what you have to say,
but I'll defend to the death your right to say it.

Zgodovina sprememb…

FuI2cY ::

class BeriCelaStevila
{
private:
static int vsota; // to sm dodal naknadno, ker sem videl pri tebi c0dehunter to kodo int BeriCelaStevila::min=0;če je bilo to mišljeno?

public:
/* tu sploh ne vme kak bi napisal za to statično metodo, ki dobi na vhodu ime datoteke, če je sploh prav to tk */
static ifstream Statistika (...); // 3 pikice sm dal ker ne vem ka bi not dal, če dam kr ime datoteke ne gre.
};

implementacija
int BeriCelaStevila::vsota=0;

ifstream BeriCelaStevila::Statistika()
{
int stevila;

ifstream vhod;
ofstream izhod;
vhod.open("BeriCelaStevila.txt");
izhod.open("Izpis.txt");

if (vhod.good())
{
stevila = vhod.get();
while(!vhod.eof())
{
vsota += stevila; // zaenkrat sm delo sam da mi sesteva števila skupaj, sam ne vem če je prav
}
}
vhod.close();
izhod.close();
}

Te snovi pa res ne znam :( upam, da resim do ponedeljka dopoldan ko zagovarjam

hvala za pomoc.

Zgodovina sprememb…

  • spremenil: FuI2cY ()

boogie_xlr ::

Zanimiva lekcija(glej static methods).
Glava funkcije in začetne vrstice izgledajo nekako takole:
static void statistika(string ime) throw(NapacnoStevilo) {
		fstream tok;
		tok.open(ime.c_str(),ios::in);
Naprej bo pa že šlo.

Zgodovina sprememb…

Luzhy ::

c0dehunter je izjavil:


Čeprav nekaj men tukaj tud ni jasno - a ni nekam nesmiselno tukaj imet instančne spremenljivke in statično metodo?


Pi tti prvi nalogi je navodilo men cist nejasno, pri drugi in tretji nalogi sem vsaj vedel kaj sm mogu narest.

Drugace pa kar se tice prve, sej sploh ne pise kake instancne spremenljke mors met al pa kaj, ubistvo spremenljivk sploh ne rabis, sam napises staticno metodo tipa void, ki dobi string potdatoteke v argumentu, prebres cifre, in izpises min,max,avg,sum. V glavnem programu pa sam ustvaris en objkejt in poklices poklices metodo. Navodilom bi to moralo ustrezat.

Tutankhamun ::

class BeriCelaStevila
{

public:
	static void statistika(char *imeDatoteke);

	void beriTekmovalceIzDatoteke(char *imeDatoteke);
	void zapisiTekmovalceVDatoteko(char *imeDatoteke);

private:
	typedef vector <string>	vtkm;
	
	vtkm	m_vtekmovalci;
};


void BeriCelaStevila::statistika(char *imeDatoteke)
{
	ifstream	fs;
	int			stevilo;

	int			najvecje_st	= 0;
	int			najmanjse_st	= INT_MAX;
	int			povprecno_st	= 0;
	int			vsota_st	= 0;

	int			i = 0;


	fs.open(imeDatoteke);

	while (!fs.eof())
	{
		fs >> stevilo;
		if (stevilo < 0) {
			fs.close();
			throw "NapacnoStevilo";
		}
		++i;
		
		if (stevilo > najvecje_st)  najvecje_st  = stevilo;
		if (stevilo < najmanjse_st) najmanjse_st = stevilo;
		
		vsota_st += stevilo;
	}

	fs.close();

	cout << "Najmanjsa stevilka = " << najmanjse_st << endl;
	cout << "Najvecja stevilka = "	<< najvecje_st	<< endl;
	cout << "Vsota stevil = "	<< vsota_st	<< endl;
	cout << "Povprecno stevilo = "	<< vsota_st / i << endl;
}

void BeriCelaStevila::beriTekmovalceIzDatoteke(char *imeDatoteke)
{
	ifstream	fs;
	string		tekmovalec;

	fs.open(imeDatoteke);

	while (!fs.eof()) {
		fs >> tekmovalec;
		m_vtekmovalci.push_back(tekmovalec);
	}

	fs.close();
}

void BeriCelaStevila::zapisiTekmovalceVDatoteko(char *imeDatoteke)
{
	ofstream	fs;

	fs.open(imeDatoteke);

	for(vtkm::iterator ibeg = m_vtekmovalci.begin(); ibeg != m_vtekmovalci.end(); ibeg++) {
		fs << *ibeg << endl;
	}

	fs.close();
}

int main(int argc, char* argv[])
{
	BeriCelaStevila		bs;

	try {
		BeriCelaStevila::statistika("d:\\stevilke.txt");
	} catch (char *nse) {
		cout << "Ulovljena izjema " << nse << endl;
	}

	bs.beriTekmovalceIzDatoteke("d:\\tekmovalci.txt");
	bs.zapisiTekmovalceVDatoteko("d:\\shrani_tekmovalci.txt");

	return 0;
}


Primeri datotek
stevilke.txt
5 4 3 52 6 70 8 9 5 2 1 41 18 18 5 4 3 8 9 10 22 5 4 84 6 54798 5 44 2 166 8 156
tekmovalci.txt
Tutankhamun
Deluxe7
boogie_xlr
c0dehunter
Luzhy
AMD Phenom QUAD 9950 Black Edition, 8GB

Zgodovina sprememb…

Luzhy ::

Samo dodam opombo. Pri tadrugi nalogi, ko je treba tekmovalce prebrat pa zapisat. Tisto morte nadgradit nalogo 7.2 ne pa prve iz tega sklopa :)

Pa tekmovalci, majo ime, priimek, stevilko. In potem jih je treba dodat se v vektor. Tega Deluxe7 sklepam pac da ni mogel vedet.

Tule je moja 11-02.

void beriTekmovalceIzDatoteke(string pot)
                 {
                 fstream file(pot.c_str(), fstream::in);        
                 
          	     string ime;
            	 string priimek;
             	 int stevilka;
             	 
                 while(!file.eof())
                    {
                    file >> priimek >> ime >> stevilka;
                    Tekmovalec* nov = new Tekmovalec(ime, priimek, stevilka);
                    seznam.push_back(*nov);
                    }     
                 file.close();                  
                  }
                  
               
             void zapisiTekmovalceVDatoteke(string pot)
                 {
                 fstream file(pot.c_str(), fstream::out);        
                 
          	     string ime;
            	 string priimek;
             	 int stevilka;
             	 
             	 if(file.is_open())
             	    {
                     for(int i=0; i<seznam.size(); i++)
                        {
                        file << seznam.at(i).getPriimek() << " " <<  seznam.at(i).getIme()
                             << " " << seznam.at(i).getStevilka() << endl;
                        }     
                     }
                 file.close();                  
                  }

Zgodovina sprememb…

  • spremenil: Luzhy ()

boogie_xlr ::

Luzhy je izjavil:

Tisto morte nadgradit nalogo 7.1 ne pa prve iz tega sklopa :)

Popravek, razen, če je pri tebi drugače.

Luzhy ::

Nope, nadgradit je treba 7.2, kjer smo meli nalogo s tekmovalci in vektorji.
7.1 je bila naloga s sablono razreda aritmetika.

Pa tudi v navodlih pise:

Dopolni nalogo Naloga 7.2, tako da dopišeš metodi beriTekmovalceIzDatoteke in zapisiTekmovalceVDatoteko. Metodi naj dobita na vhodu ime datoteke, nato pa shranita oz. napolnita vektor s tekmovalci, ki so v vektorju.

boogie_xlr ::

Pol pa js narobe vidim, al pa je browser čorav. :|

Že vem kje tiči zajec :)) mi smo R-IT VS...

Zgodovina sprememb…

Tutankhamun ::

No če so podatki o tekmovalcu zapisani v eni vrstici, ni potrebe po kšni strukturi pa komplicirat preveč... Edin če so pri kakšni nalogi spet kšna drugačna navodila :P

V moji kodi samo zamanjaj vrstico 63
fs >> tekmovalec;

S to kodo
getline(fs, tekmovalec);
AMD Phenom QUAD 9950 Black Edition, 8GB

Zgodovina sprememb…

FuI2cY ::

Hvala vsem za pomoč.

Pa res je bilo treba 7.1 nalogo dopolnit, sploh nisem opazo. Sem mel napisano 7.1 pa sm dol zbriso pa kr avtomatsko napisal prejšno nalogo :D sorry :(

Tutankhamun vprašal bi še samo glede izjeme ko ne dela, če vpišem negativno številko v datoteko.

Hvala vsem še enkrat.

Zgodovina sprememb…

  • spremenil: FuI2cY ()

boogie_xlr ::

Enostavno vržeš izjemo, ko pride do negativnega števila.
if (stevilo < 0) throw NeznanoStevilo("Stevilo je manjse od 0!");

Primere teh izjem maš tudi pri podatkovnih strukturah.

Tutankhamun ::

Ne dela ti izjema :).
Če js kej dobr vem, moreš compilerju podat stikalo za vklop C++ izjem. Mislm da ni kr ukloplen. Kateri compiler pa uporabljaš?
V Visual studio, se to uklopi Enable C++ Exceptions, stikalo je /EHsc.
g++ pa mislm da mu moreš podat stikalo -fhandle-exceptions
AMD Phenom QUAD 9950 Black Edition, 8GB

FuI2cY ::

Sem postimal glede izjeme, bom dal primer, ce bo kdo kdaj rabil.

Primer pri moji nalogi:

Tole imam v definiciji nad razredom:

struct neznanoStevilo
{
string opis;
neznanoStevilo(const string& str) : opis(str) {}
};

V implementaciji ali .cpp datoteki:

if(stevilo < 0)
{
datoteka.close();
throw neznanoStevilo ("V datoteki imate negativno stevilo!");
}

int main:

try
{
BeriCelaStevila::Statistika("BeriCelaStevila.txt");
}
catch (neznanoStevilo ns)
{
"Izjeme: "ns.opis; // tukaj je cout drugace, sam ne vem zakaj ne gre postat, kr pise nekaj glede html oznake
}

ewo.

Tutankhamun, uporabljam Code::Blocks...super zadeva :)

Zgodovina sprememb…

  • spremenil: FuI2cY ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

python-rabim pomoč

Oddelek: Programiranje
162758 (988) rnla1973
»

C# (strani: 1 2 )

Oddelek: Programiranje
9711986 (8821) Ericssony
»

Pomoč pri programiranju v C++

Oddelek: Programiranje
141801 (1368) amacar
»

Java

Oddelek: Programiranje
335784 (4385) Spura
»

[c] Enaki datoteki

Oddelek: Programiranje
71026 (886) Spura

Več podobnih tem