Apua ohjelmaan

Hei.

Täytyisi Visual Studio 2005:lla tehdä luokka nimeltä murtoluku, jossa jäsenfunktiona olisi Lisää kohta jossa ottaisi parametrina toisen murtoluvun, palauttaisi itsensä ja parametrina saamansa murtoluvun summan.

Kuinka pääsisin alkuun, olisin kovasti kiitollinen sillä olen vastaalkaja.

Avuista kiitollisena,

Heluna
141224
Äänestä

Muut lukivat myös

Vastaukset 14

Vanhimmat

Yleensä ohjelmointiin pääsee alkuun lukemalla kirjallisuutta mitä on tarjolla. Etsi siitä oppikirjasta luku luokista niin varmasti löytyy vastaus.

Alkuun pääset kun ymmärrät mitä luokat ovat, mitä jäsenfunktiot ovat ja mikä referenssi on. Nekin löytyy siitä kirjasta.

Ja jos ei kirjaa ole niin netistä löytyy varmasti tietoa, esim. täältä http://cpp.mureakuha.com/cppohje/cpp01.htm

Äänestä

en aio ratkaista harjoitustehtäviäsi, jotain pientä vinkkiä voin antaa:

Murtoluku (ML) koostuu osoittajasta (O) ja nimittäjästä (N). Molemmat ovat kokonaislukuja.

Eli ensin luot luokan jossa ovat nuo kaksi elementtiä:

class ML{
int O; //osoittaja
int N; //nimittäjä
ML Lisää(ML a); //ynnätään ML a itseensä ja palautetaan tulos murtolukuluokan muodossa
} ML;

Murtolukulaskentaa perustuu siihen että että löydetään suurin yhtenäinen nimittäjä(SYT) (sen jälkeen yhteenlasku on pelkästään osittajien yhteenlasku).

SYT voidaan laskea faktoroinnilla mutta tietokonemaailmassa se on kömpelöä. Helpompi on Eukliden algoritmi:

int euklides(int a, int b)
{
if(b == 0)
{
return a;
}
else
{
return euklides(b, a%b);
}
}

(a ja b ovat tietysti ne molemman murtoluvun nimittäjät). Funktio palauttaa SYT (jos aloittelijana ihmettelet miten tuo toimii, sitä kutsutaan rekursiiviseksi algoritmiksi, eli funktio kutsuu toistuvasti itseään kunnes joku ehto täyttyy).

Nyt meillä on työkalut, eli ollaan bisneksessä:

1) Määritellään pääohjelmassa
ML a, b, c; //murtoluvut a ja b sekä niiden summa c
2) Voidaan edetä kolme erillaista linjaa pitkin. a) hienostunein ratkaisu (operator overloading), eli sanotaan että luokalle ML "+"-merkki tarkoittaa jotain muuta kuin mitä se muuten C++kielessä tarkoittasi; Tällöin voisit suoraan kirjoittaa: MLc = MLa + MLb; b) Luokan jäsenfunktiona (tämä on ilmeisesti se tapa millä on oletettu että ratkaiset ongelman). c) Käyttämällä C-koodia (ilman jäsenfunktioita). Selostan vaihtoehto b:

ML a,b,c; // tilaa murtoluvuille, c on summa
int SYL; // suurin yhtenäinen nimittäjä
int helpotus; //tarvitaan myöhemmin, SYL olisi kelvannut

SYL= euklides(a.N, b.N);
c.N = SYL; //puhdistetaan myöhemmin
c.O = a.N/SYL* a.O + b.N/SYL* b.O; //tässä se yhteenlasku tapahtui!

//sitten siivotaan, c voidaan ehkä pelkistää?
// Pienempi yhtenäinen nimittäjä?

helpotus=euklides (c.O,c.N); //täten saat avaimen redusointiin
c.O = c.O/helpotus;
c.N = c.N/helpotus;

Se siitä. Ohjelmallisesti ei kovin vaativa tehtävä, matemaarisesti hieman vaikeampi. Kuka tuollaisia harjoitustehtäviä jakelee?

Äänestä
  • Yhteenlaskun pitäisi varmaan mennä näin:

    c.O = b.N/SYL* a.O a.N/SYL* b.O;

    Äänestä

  • mutta eiköhän tuo vastaus ainakin auta tappamaan aloittelijan halut edes opetella ohjelmointia ;P

    heh.

    Äänestä

  • Ihan perustehtäviä DI-opinnoissa..

    Äänestä

Kannattaisi hankkia joku Visual Studiota käsittelevä opaskirja.

Sinulla on toivottavasti jo Visual Studio projekti avoinna, uusi luokka tehdään näin:

Solution Explorerista valitse Add / Class ja annat luokalle nimeksi Murtoluku.cs. Näin saat luokan rungon.

Lisää namespacen sisään ja ennen luokan konstruktoria jäsenmuuttuja murtoluku ja samalla sille mahdolliset getterit ja setterit, näin:

private double _OmaSalainenLuku = Double.MinValue;
public double OmaSalainenLuku
{
get { return _OmaSalainenLuku; }
set { _OmaSalainenLuku = value; }
}

Lisää konstruktorin jälkeen, mutta namespacen sisään tuo kaivattu Lisaa-jäsenfunktio, näin:

public double Lisaa ( double dVal )
{
return _OmaSalainenLuku dVal;
}

Fiksua olisi muuttaa oletuskonstruktori sellaiseksi jolle pitää antaa alkuarvo, eli näin:

public Murtoluku ( double dVal )
{
_OmaSalainenLuku = dVal;
}

Luokkaa käytetään näin:

Murtoluku mluku = new MurtoLuku( 4.711 );
Console.WriteLine( mluku.Lisaa( 47.11 ).ToString() );

Äänestä
  • Paskaa kyllä jauhaat!

    Äänestä

  • Tee vain C :lla, C#:llä et tee mitään.

    Äänestä

  • juovuksissa? kirjoitti:

    Paskaa kyllä jauhaat!

    Mitäs vikaa ratkaisussani oli mielestäsi?

    Väitän että kääntyy ja toimii, vaikken sitä koodissa testannutkaan. Kirotusvirhe on tietenkin saattanut jonnekin lipsahtaa.

    Äänestä

  • Onneton kieli kirjoitti:

    Tee vain C :lla, C#:llä et tee mitään.

    Basic, tulkki.

    Kysyjä ilmoitti käyttävänsa Visual C , minne nyt haaraudutaan?

    Jos käyttää VC suurin vaikeus on graafisen kättöliittymän rakentaminne MFC:n avulla. Tästä ette ilmeisesti tiedä mitään, "consol"tyyppisillä alkioilla luulette tietävänne jotain.

    6 vastausta, 5 koiranoksennusta!

    Äänestä

  • M. Urtoluku kirjoitti:

    Mitäs vikaa ratkaisussani oli mielestäsi?

    Väitän että kääntyy ja toimii, vaikken sitä koodissa testannutkaan. Kirotusvirhe on tietenkin saattanut jonnekin lipsahtaa.

    "Mitäs vikaa ratkaisussani oli mielestäsi?"

    Kaikki, koska siinä ei ole murtolukuja.

    http://fi.wikipedia.org/wiki/Murtoluku

    Äänestä

  • __--_-- kirjoitti:

    "Mitäs vikaa ratkaisussani oli mielestäsi?"

    Kaikki, koska siinä ei ole murtolukuja.

    http://fi.wikipedia.org/wiki/Murtoluku

    lisää????

    Annettu ratkaisu on hyvä ja hienostonut.

    Äänestä

  • on sama kuin kirjoitti:

    Basic, tulkki.

    Kysyjä ilmoitti käyttävänsa Visual C , minne nyt haaraudutaan?

    Jos käyttää VC suurin vaikeus on graafisen kättöliittymän rakentaminne MFC:n avulla. Tästä ette ilmeisesti tiedä mitään, "consol"tyyppisillä alkioilla luulette tietävänne jotain.

    6 vastausta, 5 koiranoksennusta!

    Kysyjä ilmoitti käyttävänsä Visual Studio 2005:tä, jonka pääkielet ovat C# ja Visual Basic .NET.

    Koska keskustelurymän aiheet ovat 'keskustele C, C ja C#-kielistä', niin on kaikki syy olettaa että tässä haettiin C#-ratkaisua.

    C#:issa Console.WriteLine on näppärä, koska sillä saa console-sovelluksessa ulostuksen suoraan ruudulle ja graafisen UI:n (Windows Forsm / ASP.NET) tapauksessa debug-moodissa tekstin Output-ikkunaan. Helppo testata luokan toimivuus.

    Äänestä

  • Visual Studio 2005 kirjoitti:

    Kysyjä ilmoitti käyttävänsä Visual Studio 2005:tä, jonka pääkielet ovat C# ja Visual Basic .NET.

    Koska keskustelurymän aiheet ovat 'keskustele C, C ja C#-kielistä', niin on kaikki syy olettaa että tässä haettiin C#-ratkaisua.

    C#:issa Console.WriteLine on näppärä, koska sillä saa console-sovelluksessa ulostuksen suoraan ruudulle ja graafisen UI:n (Windows Forsm / ASP.NET) tapauksessa debug-moodissa tekstin Output-ikkunaan. Helppo testata luokan toimivuus.

    mitkä ihmeen pääkielet? minun visual studio 2005:lla ainakin käännetään c:ta ja c :aa eikä mitään muuta

    Äänestä

Kommentoi aloitusta


Heluna60 kirjoitti:

Hei.

Täytyisi Visual Studio 2005:lla tehdä luokka nimeltä murtoluku, jossa jäsenfunktiona olisi Lisää kohta jossa ottaisi parametrina toisen murtoluvun, palauttaisi itsensä ja parametrina saamansa murtoluvun summan.

Kuinka pääsisin alkuun, olisin kovasti kiitollinen sillä olen vastaalkaja.

Avuista kiitollisena,

Heluna

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu