[C++] 2013 okt. Emelt Info érettségi 4. feladat (programozás) Sürgős:/ Valaki tud segíteni?
Segítenétek kijavítani az "ellenorozott" függvényt? (7.részfeladat)
Valszeg abban van a hiba, mert a program lefut, viszont a vizsgalt.txt-ben csak egy sor jelenik meg, ami a jarmu.txt elso sora.
#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
using namespace std;
struct rendszam{
vector<int> datum;
string rendszam;
};
void beolvas(vector<rendszam> &rendszamok);
int x_ora_munka(vector<rendszam> rendszamok);
void kilistaz(vector<rendszam> v);
bool eleme(int x, vector<int> v);
vector<rendszam> ellenorzott_jarmuvek(vector<rendszam> rendszamok);
void kat_db_coutter(vector<rendszam> rendszamok);
int h_m_s_to_s(int h, int m, int s);
string max_ido_kul(vector<rendszam> rendszamok);
void rendsz_beker(string &ismrendszam);
void lehetsegesek_kilistaz(vector<string> v);
vector<string> lehetseges(vector<rendszam> rendszamok, string ismrendszam);
vector<rendszam> ellenorzott(vector<rendszam> rendszamok);
void kiirat(vector<rendszam> v);
int main()
{
vector<rendszam> rendszamok;
string ismrendszam;
beolvas(rendszamok);
cout<<"2. feladat:"<<endl;
cout<<"Ma "<<x_ora_munka(rendszamok)<<" ora hoszat dolgoztak az ellenorzest vegzok."<<endl;
cout<<"3. feladat:"<<endl;
kilistaz(ellenorzott_jarmuvek(rendszamok));
cout<<"4. feladat:"<<endl;
kat_db_coutter(rendszamok);
cout<<"5. feladat:"<<endl;
cout<<"A leghosszabb forgalommentes idoszak: "<<max_ido_kul(rendszamok)<<endl;
cout<<"6. feladat:"<<endl;
rendsz_beker(ismrendszam);
lehetsegesek_kilistaz(lehetseges(rendszamok, ismrendszam));
kiirat(ellenorzott(rendszamok));
return 0;
}
void beolvas(vector<rendszam> &rendszamok){
ifstream fin("jarmu.txt");
if(fin.is_open()){
string sor;
while(getline(fin, sor)){
rendszamok.push_back(rendszam());
istringstream adatok(sor);
int szam; string aktualis_rendszam;
for(int i=0;i<3;i++){
adatok>>szam;
rendszamok[rendszamok.size()-1].datum.push_back(szam);
}
adatok>>aktualis_rendszam;
rendszamok[rendszamok.size()-1].rendszam=aktualis_rendszam;
}
}else{
cout<<"A jarmu.txt nem talalhato!"<<endl;
}
}
int x_ora_munka(vector<rendszam> rendszamok){
return rendszamok[rendszamok.size()-1].datum[0]-rendszamok[0].datum[0];
}
void kilistaz(vector<rendszam> v){
for(int i=0;i<v.size();i++){
cout<<v[i].datum[0]<<" ora: "<<v[i].rendszam<<endl;
}
}
bool eleme(int x, vector<int> v){
int i=0;
while(i<v.size() && x!=v[i]){
i++;
}
return i<v.size();
}
vector<rendszam> ellenorzott_jarmuvek(vector<rendszam> rendszamok){
vector<rendszam> ell_j; vector<int> orak;
for(int i=0;i<rendszamok.size();i++){
if(!eleme(rendszamok[i].datum[0],orak)){
orak.push_back(rendszamok[i].datum[0]);
ell_j.push_back(rendszamok[i]);
}
}
return ell_j;
}
void kat_db_coutter(vector<rendszam> rendszamok){
int a=0,b=0,k=0,m=0;
for(int i=0;i<rendszamok.size();i++){
switch (rendszamok[i].rendszam[0]){
case 'B' : b++;
break;
case 'K' : k++;
break;
case 'M' : m++;
break;
default : a++;
}
}
cout<<b<<"db autobusz, "<<k<<"db kamion, "<<m<<"db motor es "<<a<<"db szemelygepkocsi haladt el az ellenorzo pont elott."<<endl;
}
int h_m_s_to_s(int h, int m, int s){
return h*3600+m*60+s;
}
string max_ido_kul(vector<rendszam> rendszamok){
if(rendszamok.size()>=2){
int max = h_m_s_to_s(rendszamok[1].datum[0],rendszamok[1].datum[1],rendszamok[1].datum[2])-h_m_s_to_s(rendszamok[0].datum[0],rendszamok[0].datum[1],rendszamok[0].datum[2]), maxi=0;
for(int i=1;i<rendszamok.size()-1;i++){
if(max<h_m_s_to_s(rendszamok[i+1].datum[0],rendszamok[i+1].datum[1],rendszamok[i+1].datum[2])-h_m_s_to_s(rendszamok[i].datum[0],rendszamok[i].datum[1],rendszamok[i].datum[2])){
max=h_m_s_to_s(rendszamok[i+1].datum[0],rendszamok[i+1].datum[1],rendszamok[i+1].datum[2])-h_m_s_to_s(rendszamok[i].datum[0],rendszamok[i].datum[1],rendszamok[i].datum[2]);
maxi=i;
}
}
string maxdif;
ostringstream vissza(maxdif);
vissza<<rendszamok[maxi].datum[0]<<":"<<rendszamok[maxi].datum[1]<<":"<<rendszamok[maxi].datum[2]<<" - "<<rendszamok[maxi+1].datum[0]<<":"<<rendszamok[maxi+1].datum[1]<<":"<<rendszamok[maxi+1].datum[2];
maxdif=vissza.str();
return maxdif;
}else{
return "Ma csak egy jarmu haladt el az ellenorzo pont elott.";
}
}
void rendsz_beker(string &ismrendszam){
cout<<"Adja meg a rendszamot!"<<endl;
getline(cin, ismrendszam);
while(!(isalpha(ismrendszam[0]) || ismrendszam[0]=='*' ) || ismrendszam.size()!=7){
cout<<"Rossz rendszamot adtal meg! Ird be ujra:"<<endl;
getline(cin, ismrendszam);
}
}
void lehetsegesek_kilistaz(vector<string> v){
cout<<"Lehetseges rendszamok: "<<endl;
if(v.size()!=0){
for(int i=0;i<v.size();i++){
cout<<" "<<v[i]<<endl;
}
}else{
cout<<"Nincs egyezes!"<<endl;
}
}
vector<string> lehetseges(vector<rendszam> rendszamok, string ismrendszam){
vector<string> lehetseges_rendszamok;
for(int i=0;i<rendszamok.size();i++){
bool egyezes=true;
for(int j=0;j<rendszamok[i].rendszam.size();j++){
if(ismrendszam[j]!='*'){
if(ismrendszam[j]!=rendszamok[i].rendszam[j]){
egyezes=false;
}
}
}
if(egyezes){
lehetseges_rendszamok.push_back(rendszamok[i].rendszam);
}
}
return lehetseges_rendszamok;
}
vector<rendszam> ellenorzott(vector<rendszam> rendszamok){
vector<rendszam> vizsgalt/*(1,rendszamok[0])*/;
vizsgalt.push_back(rendszamok[0]);
int date = h_m_s_to_s(rendszamok[0].rendszam[0],rendszamok[0].rendszam[1],rendszamok[0].rendszam[2]);
for(int i=1;i<rendszamok.size();i++){
if(date+300<h_m_s_to_s(rendszamok[i].rendszam[0],rendszamok[i].rendszam[1],rendszamok[i].rendszam[2])){
date=h_m_s_to_s(rendszamok[i].rendszam[0],rendszamok[i].rendszam[1],rendszamok[i].rendszam[2]);
vizsgalt.push_back(rendszamok[i]);
}
}
return vizsgalt;
}
void kiirat(vector<rendszam> v){
ofstream fout("vizsgalt.txt");
for(int i=0;i<v.size();i++){
if(v[i].datum[0]<10){
fout<<"0";
}
fout<<v[i].datum[0]<<" ";
if(v[i].datum[1]<10){
fout<<"0";
}
fout<<v[i].datum[1]<<" ";
if(v[i].datum[2]<10){
fout<<"0";
}
fout<<v[i].datum[2]<<" "<<v[i].rendszam<<endl;
}
}
A segítségért előre is köszi(:
Aki hasznos megoldást ad, annak megadom a 100%ot.
UI.: Tudom, hogy pár dolgot meg lehet oldani szebben, de most nem ez a lényeg.
Azért ha megnézed itt a követelményeket, világosan látszik, hogy ez kicsit több, mint "néhány programozási tétel". Mire idáig eljut egy ember a nulláról, az nem kevés. Az más kérdés, hogy egy érdeklődő diák sokszor lényegesen több időt szán az egyéni gyakorlásra és magasabb szintre jut el programozásból, mint a középiskolai követelmény. Ezzel én is így voltam gimnazista koromban. De ez nem azt jelenti, hogy a követelmény alacsony! Csak azt, hogy népszerű a tantárgy, és sokan nem elégszenek meg a tananyaggal.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!