[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.
Pontozz le ha megnyugtat, de ez így olvashatatlan.
Rendezd függvényekbe feladatonként és ne ide másolj be 100sort hanem pästebinre. Valamint nem ártana ha bőven kommentelnél, mi is értenénk mi a feladat.
Addig csak annyit vettem észre, hogy az ofstreamet nem zártad le.
Annyit mondtam, hogy aki hasznosat ad annak adok 100%ot, nem azt hogy lepontozom azt aki nem.
A másik én annyit mondtam hogy egy függvényt kell átnézni, amihez szerintem nem kell komment, ha valaki rágooglizik a feladatra.
ctrl+f el meg lehet keresni az utolsó előtti "ellenorzott" nevű függvényt azt kb. valszeg az if-el lesz valami.
Nem lehetetlent kértem szerintem.
Magyarul Kerry.
És csak a miheztartás végett:
Valahogy így néz ki egy igényesen megírt és formázott C++ program:
Valami ilyesmit dobjál te is, ha valóban szeretnél segítséget.
Neked negyedannyi idő megformázni, mint bárki másnak.
Hát nézd, harmadszor próbálok szórakozásból kihívásként tekinteni a feladatodra, de valamiért mindig elmegy a kedvem tőle.
Ez az egyik bajom az érettségivel, hogy nem kódolni tanít meg hanem gyorsan gányolni és okádani. Jobb helyen ezért akkora karót kapnál, hogy utánna műteni kellene. És ne magyarázd meg nekem hogy ez így tökéletes légyszives...
Ez hülyeség.
Egy szép rendezett kódban a hibát megtalálni is jóval jóval egyszerűbb.
És nem tart sokkal tovább már az elején igényesen megírni a feladatokat.
Nem kell objektumorientáltan, az fölösleges, de a normális felbontás, tagolás mindenképpen segít.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!