» »

problem s programiranjem ulomka

problem s programiranjem ulomka

Barbara6 ::

dobila sem nalogo da moram sprogramirat naslednje(z uporabo razredov, če znaš):
Računanje z ulomki in sicer mora naloga vsebovat:
->seštevanje dveh ulomkov,
->odštevanje dveh ulomkov,
->množenje dveh ulomkov,
->deljenje dveh ulomkov.
->krajsanje ulomka
->ter uporaba evklidovega algoritma

lepo prosim za pomoč, če bi kateri to sprogramiral

Ziga Dolhar ::

Pri čem se ti zatakne?
https://dolhar.si/

_Dormage_ ::

Glede na to, da nisi povedala niti jezika v katerem rabiš rešitev dvomim, da bo kej :)

Ciklamen ::

Nihče ti tega ne bo sprogramiral na lepe oči. Vsaj nekaj interesa boš morala sama pokazati.

Je pa na internetu najbrž malo morje rešitev za to, kaj imaš ti narediti, le potruditi se je treba malo in pobrskati :)
- End of the Post ->

Barbara6 ::

ja Ciklamen sej maš prav, js bi sam prosla nekoga, da bi mi dal neko idejo, pol bom že sama naprej.
programirala bi pa v c++

urosz ::

razred ulomek bi lahko zgledal približno tak:
lastnosti: števec, imenovalec
metode: seštej, odštej, zmnoži, ...

Barbara6 ::

ja ja se strinjam :) sam sm misla, da bi dala v lastnosti:števec1, števec2,imenovalec1,imenovalec2... miliš da bi blo to prevč zakopliciran??

Vesoljc ::

Abnormal behavior of abnormal brain makes me normal...

mallard ::

En imenovalec in števec na razred bo dovolj. Za krajšanje ulomka moraš poiskat največji skupni delitelj, za kar boš uporabila Evklidov algoritem. Ostane ti samo, da se spraviš na delo, tu pa dobiš pomoč, ko se kje zatakne :)

Barbara6 ::

ok, sem pogruntala :) res vsem skupi najlepša hvala za pomoč :)

urosz ::

en imenovalec in en števec sta v razredu. če hočeš meti 2 (2 ulomka), narediš 2 instanci razreda. to je tudi glavni point objektnega programiranja

švrk ::

Malo za vajo sem se lotil te nalogice v javi. Napisal sem samo metodi seštej in množi ulomke. Zanima me če je moj pristop k nalogi pravi ali se morebiti z objekti dela kako drugače?
public class ulomek{
	private double stevec;
	private double imenovalec;
	
	public ulomek(){
		this.stevec=1.0;
		this.imenovalec=1.0;
	}
	
	public ulomek(double a, double b){
		this.stevec=a;
		this.imenovalec=b;
	}
	
	public void mnozi(ulomek a, ulomek b){
		this.stevec=a.getstevec()*b.getstevec();
		this.imenovalec =a.getimenovalec()*b.getimenovalec();
	}
	
	public void sestej(ulomek a, ulomek b){
		this.stevec=a.getstevec()*b.getimenovalec()+b.getstevec()*a.getimenovalec();
		this.imenovalec=a.getimenovalec()*b.getimenovalec();
	}
	
	public double getstevec()
	  {
	    return this.stevec;
	  }
	
	public double getimenovalec()
	  {
	    return this.imenovalec;
	  }
	
	 public void setimenovalec(double ime)
	  {
	    this.imenovalec=ime;
	  }
	 
	 public void setistevec(double ime)
	  {
	    this.stevec=ime;
	  }
	
	public String toString() {
		return this.stevec+"/"+this.imenovalec;
	}
}

sherman ::

Kak smisel ima imeti ulomek, kjer sta stevec in imenovalec "realni" stevili?

švrk ::

Kaj pa je v števcu in imenovalcu drugega kot int ali double?

sherman ::

Ma nima smisla imeti kvocient dveh realnih stevil shranjen kot dve loceni realni stevili. To ti hocem povedat. Realna stevila so obseg. No, double niso realna stevila, lahko se na to obesis, a potem imas se vecje probleme.

Ko imas ulomke, jih je dobro imeti shranjene v okrajsani obliki, torej a/b kjer je gcd(|a|, |b|) = 1. Pa konstruktor je smiselno da preveri, ce ni kak saljivec podtaknil 0 za imenovalec.

Pa nekonsistenten si z oklepaji. Predvidevam da so bili eni generirani avtomatsko, druge si pa ti pisal.

mallard ::

švrk ::

No potem se pa naj najde junak in napiše kako se to pravilno naredi(vsaj metodi množi in seštej).

boogie_xlr ::

int main(int argc, char** argv)
{
    ulomek a(2,4);
    ulomek b(1,3);
    ulomek c;
    c = a + b;
    ulomek d;
    d = a * c;
    std::cout << c << std::endl;
    return 0;
}
kako pa drugače...

Zgodovina sprememb…

ERGY ::

Mogoče za začetek...

class Fraction
{
      public:
             //konstruktorji
             Fraction(): numerator(0), denominator(1) {}
             Fraction(int i): numerator(i), denominator(1) {}
             Fraction(int i, int j): numerator(i), denominator( j == 0 ? j = 1 : j) {}
             Fraction(const Fraction& fr):
                     numerator(fr.numerator),
                     denominator(fr.denominator) {}
             
             //metode
             Fraction show() const;
             const Fraction& simplify();

             //preoblozeni operatorji
             bool operator==(const Fraction& fr) const;
             Fraction operator-() const;
             Fraction& operator=(const Fraction& fr);
             Fraction& operator+=(const Fraction& fr);
             Fraction& operator*(const Fraction& fr);
             const Fraction operator+(const Fraction& fr) const;
      private:
              int numerator;
              int denominator;

};

KaRkY ::

Nekako tako se meni zdi najbolj prav.
import java.util.Objects;

public class Ulomek {
  private final int stevec;
  private final int imenovalec;

  public Ulomek(final int stevec, final int imenovalec) {
    if (imenovalec == 0)
      throw new IllegalArgumentException("Imenovalec nesme biti null.");

    final int deljitelj = najvecjiSkupniDeljitelj(stevec, imenovalec);

    this.stevec = stevec / deljitelj;
    this.imenovalec = imenovalec / deljitelj;
  }

  public Ulomek deli(final Ulomek u) {
    return new Ulomek(getStevec() * u.getImenovalec(), getImenovalec() * u.getStevec());
  }

  @Override
  public boolean equals(final Object obj) {
    if (this == obj)
      return true;
    if (obj == null)
      return false;
    if (!getClass().equals(obj.getClass()))
      return false;

    final Ulomek other = (Ulomek) obj;

    return getStevec() == other.getStevec() && getImenovalec() == other.getImenovalec();
  }

  @Override
  public int hashCode() {
    return Objects.hash(getStevec(), getImenovalec());
  }

  public Ulomek mnozi(final Ulomek u) {
    return new Ulomek(getStevec() * u.getStevec(), getImenovalec() * u.getImenovalec());
  }

  public Ulomek odstej(final Ulomek u) {
    return pristej(new Ulomek(-u.getStevec(), u.getImenovalec()));
  }

  public Ulomek pristej(final Ulomek u) {
    return new Ulomek(getStevec() * u.getImenovalec() + u.getStevec() * getImenovalec(), getImenovalec() * u.getImenovalec());
  }

  @Override
  public String toString() {
    return String.format("%d/%d", getStevec(), getImenovalec());
  }

  private int gcd(final int a, final int b) {
    if (b == 0)
      return a;
    return gcd(b, a % b);
  }

  private int najvecjiSkupniDeljitelj(final int a, final int b) {
    if (a < b)
      return gcd(b, a);
    else
      return gcd(a, b);
  }

  public int getStevec() {
    return stevec;
  }

  public int getImenovalec() {
    return imenovalec;
  }
}

When you look long into an abyss, the abyss looks into you


Vredno ogleda ...

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

Naloga iz Putka - UPM

Oddelek: Programiranje
242211 (1547) NejcSSD
»

krajšanje ulomkov

Oddelek: Programiranje
81422 (1354) Karak
»

Funkcije in prenos po referenci

Oddelek: Programiranje
141850 (1556) xordie
»

[Naloga][Java] Ulomki

Oddelek: Programiranje
62660 (2508) SkIDiver
»

[C++] Ulomek: +, -, *, /

Oddelek: Programiranje
82769 (2664) Vesoljc

Več podobnih tem