Evo kod i sledeći put nemoj na PP :D
Trudio sam se da odradim školski i da ne komplikujem previše mada...
Školski bi bilo da ne koristiš vektore već povezane liste i da ne koristiš stringove već pokazivač na char.
Zašto? Da bi naučio kako rade :) Barem je nas Laslo Kraus tako terao.
E sad da objasnim princip:
Čim se nešto eksplicitno navodi da treba da se radi u cpp, to me odmah asocira na OOP.
Pošto iz txt datoteke uzimaš podatke za svaku osobu, bilo mi je logično da napravim jednu klasu osoba sa pomenutim atributima.
U programiranju šta god da radiš, prvo odradiš unos podataka pa tek onda obradu (naravno ako je to izvodljivo).
Prvo sam iščitao sve podatke iz fajla, uneo ih u listu (vektor) i onda sam radio obradu (tvoje pod a i b).
Kod izgleda ovako:
Code:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
#define M 0
#define Z 1
class Osoba
{
string ime, prezime;
int godine, pol;
friend ostream& operator<< (ostream& d, const Osoba& o)
{
return d << o.ime << ' ' << o.prezime << ' '
<< o.godine << ' ' << o.pol;
}
public:
explicit Osoba(string i, string p, int g, int pp)
{
ime = i; prezime = p; godine = g; pol = pp;
}
string getIme()const { return ime; }
string getPrez()const { return prezime; }
int getGod()const { return godine; }
int getPol()const { return pol; }
};
int main()
{
ifstream fajl("KORISNIK.DAT");
if(!fajl.is_open())
{
cout << "Ne mogu da otvorim fajl KORISNIK.DAT\n\a";
system("PAUSE"); return 1;
}
string ime, prez; int god, pol;
vector <Osoba> o;
while(!fajl.eof())
{
fajl >> ime >> prez >> god >> pol;
o.push_back(Osoba(ime,prez,god,pol));
}
cout << "Zenske osobe od 21 - 30 god:\n"
<< "----------------------------" << endl;
for(unsigned int i=0; i<o.size(); i++)
if(o[i].getGod()>=21&&o[i].getGod()<=30&&o[i].getPol()==Z)
cout << o[i] << endl;
cout << "----------------------------\n\n\n";
unsigned int br=0, zb=0;
for(unsigned int i=0; i<o.size(); i++)
if(o[i].getPol()==Z){ br++; zb+=o[i].getGod(); }
cout << "Broj zenskih osoba: " << br << endl;
cout << "Prosecna starost: " << (zb==0?0:(float)zb/br) << endl;
system("PAUSE");
return 0;
}
Uz izvorni kod ti šaljem i KORISNIK.DAT datoteku čiji sadržaj možeš da izmeniš.
Kod radi pod uslovom da su podaci u KORISNIK.DAT datoteci ispravni. Znači da ne bude recimo 's' na mestu godina neke osobe. Ako su podaci korumpirani, onda trebaš da izmeniš kod, a to ostavljam tebi.
Takođe vodi računa o tome kada menjaš fajl da na kraju datoteke ne sme da stoji prazan red inače desiće se "nešto", a po kodu bi trebao da vidiš šta to. Znači ako u datoteci imaš 12 osoba, onda moraš imati i 12 odgovarajućih redova i ni jedan više.
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D