Új hozzászólás Aktív témák

  • icespeak

    csendes tag

    Hi mindenki. Szerintetek mi lehet az alábbi kóddal a probléma?

    /*
    10. A Föld felszínének egy vonala mentén egyenlő távolságonként megmértük a terep tengerszint
    feletti magasságát, és a mért értékeket egy vektorban tároljuk. Hány darab hegycsúcs van a
    mérési sorozatban?
    */

    #include <iostream>
    #include <fstream>
    #include <sstream>
    #include <vector>

    int Megszamol(const vector<int> t, int &c);
    bool ReadFromFile(const string &fname, vector<int> &t);
    void ReadFromKeyboard(vector<int> &t);
    int Read12(const string &msg, const string &errormsg);

    int main(int argc, char *argv[])
    {
    char ch;
    do{
    // Adatok beolvasása
    vector<int> t;
    bool file_ok = true;

    // Adatbevitel módja
    int v;
    if(argc>1) v = 1;
    else{
    cout << "Az adatbeolvasás módja:"<< endl
    << " SZÖVEGES FÁJL(1)"<< endl
    << " BILLENTYŰZET (2)"<< endl;
    v = Read12("Válasszon: ","Csak 1 vagy 2 közül választhat!");
    }

    // Beolvasás fájlból
    string fname;
    switch(v)
    {
    case 1 :
    if(argc<=1){
    cout << "Adja meg a szöveges fájl nevét: ";
    cin >> fname;
    }
    else fname = argv[1];

    file_ok = ReadFromFile(fname, t);
    if(!file_ok && argc>1) {
    char ch; cin >> ch;
    exit(1);
    }
    break;
    case 2 :
    cout << "Adjon meg mérési értékeket! Kilépés: quit \n";
    ReadFromKeyboard(t);
    break;
    }

    // Kiíratás
    if(file_ok)
    {
    if(Megszamol(c)) cout << "Hegycsúcsok száma:" << c << endl;
    else cout << "Nincs hegycsúcs"<< endl;

    cout << endl << "Futtassam újra? (I/N) "; cin >> ch;
    }
    }while(ch!='n' && ch!='N');

    return 0;
    }

    //Feladat: 1-es vagy 2-es beolvasása
    //Tevékenység: Billentyűzetről kizárólag két szám, az 1-es vagy a 2-es valamelyikét fogadja el
    // más adatot nem
    //Bemenő adat: string msg - a beolvasás előtt megjelenítendő üzenet
    // string error - hibás adat beírásakor megjelenítendő üzenet
    //Kimenő adat: int v - 1-es vagy 2-es szám (visszatérési értékként)
    int Read12(const string &msg, const string &errormsg)
    {
    int n;
    bool hiba = true;
    do{
    cout << msg;
    string str;
    cin >> str;
    n = atoi(str.c_str());
    hiba = (n==0 && str!="0") || n<1 || n>2;
    if(hiba) cout << errormsg << endl;
    }while(hiba);
    return n;
    }

    //Feladat: Integereket tartalmazó tömb (vector) feltöltése billentyűzetről
    //Tevékenység: Billentyűzetről olvas be egymás után integereket és helyezi el őket egy vektorban
    // addig, amíg a "quit" szót nem írjuk.
    //Bemenő adat: -
    //Kimenő adat: vector<int> t
    void ReadFromKeyboard(vector<int> &t)
    {
    int meres;
    cin >> meres;
    while(meres!="quit"){
    t.push_back(meres);
    cin >> meres;
    if (meres < 0){
    meres = 0;
    }
    }
    }

    //Feladat: Integereket tartalmazó vektor feltöltése szöveges állományból
    //Tevékenység: Megnyitja a megadott szöveges állományt (sikertelen kísérlet esetén hibát jelez)
    // majd a fájlból egymás után beolvassa az összes elválasztójelekkel határolt számot
    // és elhelyezi azokat egy vektor-ban
    //Bemenő adat: string fname - szöveges állomány neve
    //Kimenő adat: vector <int> t
    // bool ok - sikerült-e az állomány megnyitása (visszatérési értékként)
    bool ReadFromFile(const string &fname, vector<int> &t)
    {
    ifstream x(fname.c_str());
    if(x.fail()){
    cout << "Hibás fájlnév!"<< endl;
    return false;
    }

    int meres;
    x >> meres;
    while(!x.eof()){
    t.push_back(meres);
    x >> meres;
    if (meres<0){
    meres = 0;
    }
    }
    return true;
    }

    int Megszamol(const vector<int> t, int &c){
    int c=0;
    for(int i=0; i<(int)t.size(); i++){
    if(i<i+1 || i+1>i+2){
    c=c+1;
    }
    }
    return c;
    }

Új hozzászólás Aktív témák