» »

Pomoč pri programiranju v C++

Pomoč pri programiranju v C++

zweistein ::

Zdravo, jaz pa moram narediti implementacijo iskanja minimalnega vpetega drevesa po Primovem algoritmu. Ali lahko kdo pove samo to, kako začeti? Poti med vozlišči bi definiral z matriko, ampak ne vem, kje naj definiram matriko. V konstruktorju?

XsenO ::

Poglej tukaj in v povezavah na koncu
Prim algorithm @ Wikipedia
1 + 1 = 1

eXoo ::

Ker je že ime teme takšno, ne bom odpiral nove. Zanima me pa naslednja naloga (nek star kolokvij za vajo). In sicer :

Napišite program*, ki bo omogocal primerjavo znakov za omejitev hitrosti. V ta namen napišite
razred ZnakOmejitev, ki ima lastnost hitrost (celo število). Prekrijte operatorje < (manjše) in
== (enako). Operatorja vracata true oz. false glede na hitrost. Prekrijte še operatorja za vnos
>>

(vnos hitrosti) in izpisa
<<
(primer izpisa: Omejitev 70).

Ok, naredim razred, prekrijem operatorja < in == , tukaj se pojavi težava, ker nevem kdaj naj vračata true kdaj false (kako naj bi to bilo odvisno od hitrosti?) in pa potem spet ne vem kako naj bi prekril operatorja za vnos
>> 
in izpis
<<
. Naloga mi je čisto nejasna zato sprašujem, če mi lahko kdo pojasni kako naj bi to zgledalo. Hvala.

Vesoljc ::

class ima spremenljivko hitrost, po kateri naredis primerjavo:

class ZnakOmejitev {
public:
int hitrost;
public:
int operator < (class ZnakOmejitev &znak)
{
    // ce je "moja" hitrost manjsa od drugega, vrnem true
   return this->hitrost < znak.hitrost;
}
};


za cin/cout si pa poglej recimo tole:
http://www.codersource.net/c/c-miscella...

notr pac dobis string stream, ki ga bos moral "preparsat" da dobis ven string (ime znaka recimo) ter int za hitrost. to potem vpises v svoj class
Abnormal behavior of abnormal brain makes me normal...

ERGY ::

Vesoljc je izjavil:

class ima spremenljivko hitrost, po kateri naredis primerjavo:


class ZnakOmejitev {
public:
int hitrost;
public:
int operator < (class ZnakOmejitev &znak)
{
// ce je "moja" hitrost manjsa od drugega, vrnem true
return this->hitrost < znak.hitrost;
}
};


za cin/cout si pa poglej recimo tole:
http://www.codersource.net/c/c-miscella...

notr pac dobis string stream, ki ga bos moral "preparsat" da dobis ven string (ime znaka recimo) ter int za hitrost. to potem vpises v svoj class



Če je že razred, potem naj bo hitrost private.

Groove ::

class ZnakOmejitev
{
private:
    int hitrost;
public:
    bool operator<(const ZnakOmejitev &z1) const
    {
          return hitrost < z1.hitrost;
    }
    bool operator==(const ZnakOmejitev &z1) const
    {
          return hitrost == z1.hitrost;
    }
    friend ostream& operator<<(ostream &izpis, const ZnakOmejitev &z1)
    {
          izpis << z1.hitrost;
          return izpis;
    }
    friend istream& operator>>(istream &vnos, ZnakOmejitev &z1)
    {
          vnos >> z1.hitrost;
          return vnos;
    }
};


Tako nekako :)

Zgodovina sprememb…

  • spremenil: Groove ()

eXoo ::

Hvala za pomoč.

Zanima me, kaj je sploh smisel prekrivanja operatorjev? A ni to skregano z matematiko pol? Ali se sploh rabi to v praksi?

Senitel ::

Zakaj pa skregano z matematiko?
Recimo da imaš tip:
class Racionalno
{
  public:
    int Stevec;
    int Imenovalec;
}

Kako boš sedaj napisal operatorje, da boš k tem tipom lahko prišteval cela števila (int), števila s plavajočo vejico (float) in druge elemente tipa "Racionalno"?

Sergio ::

void add (int)

Tko? :).

To, da imas +, je pac kozmetika, ki te lahko -mocno- ugrizne v rit. IMHO.
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

Senitel ::

Operator gor al dol, še vedno imaš overloading. Ali boš pisal: addint(int), addfloat(float), addracionalno,...? :)

eXoo ::

Hvala za informacije. Imam pa že nov problem :

Program se mi ulovi v neskončni loop :

naloga :
/*Napišite razred HranilnikBesed, ki vsebuje seznam besed (string) in ime hranilnika. Za seznam
uporabite vector. Razredu dopišite naslednje metode:
a. vrniIme, ki vrne ime hranilnika.
b. dodajBesedo, na vhodu dobi besedo in jo doda v seznam.
c. izDatoteke, ki na vhodu dobi ime datoteke. Besede iz datoteke zapišite v seznam besed
(v vsaki vrstici datoteke je ena beseda).
d. vDatoteko, ki dobi na vhodu ime datoteke, kamor zapiše vse besede iz seznama.*/

#ifndef _HRANILNIKBESED_H_
#define _HRANILNIKBESED_H_

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <cstdlib>
#include <fstream>
#include <stdlib.h>

using namespace std;

class HranilnikBesed {
private :
	vector <string> seznam_besed;
	string ime_hranilnika;

public:
	HranilnikBesed(string ime) : ime_hranilnika(ime)   {} 
	~HranilnikBesed() {}
	
	string vrniIme() {
		return ime_hranilnika;
	}
	void dodajBesedo(string dodaj) {
		seznam_besed.push_back(dodaj);
	}
	void izDatoteke(string ime_datoteke) {
		string niz;
		ifstream datoteka;
		datoteka.open(ime_datoteke);
		if(!datoteka) {
			cout << "Napaka, datoteka ni odprta! " << endl;
		}
		while(datoteka.good()) {
			getline(cin,niz);
			seznam_besed.push_back(niz);
		}
		datoteka.close();
	}

	void vDatoteko(string ime_datoteke) {
		ofstream datoteka;
		datoteka.open(ime_datoteke);
		while(datoteka.good()) {
			for (int i=0; i<seznam_besed.size(); i++)
			{
				datoteka << seznam_besed.at(i);
				cout << seznam_besed.at(i);
			}
		} 
		datoteka.close();
	}
};
#endif // _HRANILNIKBESED_H_


neskončna zanka se mi pojavi v metodi : izDatoteke, ki na vhodu dobi ime datoteke. Besede iz datoteke zapišite v seznam besed (v vsaki vrstici datoteke je ena beseda).

hvala.

overlord_tm ::

Probaj datoteka.getline(). Sicer mi je C++ bolj spanska vas, ampak imam obcutek da ker klices samo getline, ti stvar ko pride do EOF ne nastavi falga v razredu datoteka, ampak verjetno kje drugje. Stane te nic ce probas ;)

Groove ::

#include <vector>
#include <iostream>
#include <fstream>
using namespace std;

class HranilnikBesed
{
    private:
        vector <string> seznam_besed;
        string ime_hranilnika;
    public:
        HranilnikBesed(){};
        ~HranilnikBesed(){};
        string vrniIme()
        {
            return this -> ime_hranilnika;
        };
        void dodajBesedo(string beseda)
        {
            seznam_besed.push_back(beseda);
        };
        void izDatoteke(char ime_datoteke[])
        {
            ifstream vhod(ime_datoteke);
            if (!vhod.good())
            {
                cout << "Vhodna datoteka ne obstaja." << endl;
            }
            else
            {
                while(!vhod.eof())
                {
                    string beseda = "";
                    vhod >> beseda;
                    dodajBesedo(beseda);
                }
            }
            vhod.close();
        };
        void vDatoteko(char ime_datoteke[])
        {
            ofstream izhod(ime_datoteke);
            for(unsigned int i = 0; i < seznam_besed.size(); i++)
            {
                if(i + 1 == seznam_besed.size()) // da ti na koncu datoteke ne doda prazne vrstice
                    izhod << seznam_besed.at(i);
                else
                    izhod << seznam_besed.at(i) << endl;
            }
            izhod.close();
        };
};

int main()
{
    HranilnikBesed besede;
    besede.izDatoteke("besede.txt");
    besede.vDatoteko("krneki.txt");
    return 0;
}

eXoo ::

Deluje.Hvala.

amacar ::

eXoo, in kakšno je tvoje pravo ime? Da se spoznamo med sotrpini in si lahko kaj pomagamo :-D


Vredno ogleda ...

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

c++ rabim pomoč konstuktorji

Oddelek: Programiranje
61098 (793) Snowflake2
»

c++ vaja

Oddelek: Programiranje
6894 (627) 66speeder66
»

[C#] Kopiranje osebe iz seznama v drug seznam

Oddelek: Programiranje
51491 (1352) Presidente
»

[c] Enaki datoteki

Oddelek: Programiranje
71033 (893) Spura
»

Pomoc pri nalogi

Oddelek: Programiranje
152008 (1814) FuI2cY

Več podobnih tem