Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Renkaiden kokovertailu

Sivun loppuun

Teuro [25.04.2008 15:04:31]

#

Tällaista lähdin töissä pohtimaan josko täältä löytyisi hiukan apua. Tarkoituksena olisi tehdä ohjelma, jolla voisi hakea vastaavat renkaat kuin ohjelmalle syötteenä annettu rengaskoko.

Ehtoja vaihtoehdoille on seuraavasti:
1. Renkaan halkaisiaa ei nostaa kuin korkeintaan tuumalla.
2. Renkaan leveys on välillä 155 - 335
3. Renkaan leveys kasvaa aina 10 mm välein
4. Renkaan leveys on aina esim 155, 165, 175 jne...
5. Profiilisuhde on välillä 20 - 80
6. Renkaan korkeus on leveys * (profiili / 100)
7. Kehän pituus saa poiketa korkeintaan 50 mm alkuperäisestä

Miten tästä eteenpäin, jos halutaan tulokseksi vaikkapa 4 vaihtoehtoa? Käsittäkkseni ainakin seuraavaa apuohjelmaa tarvitaan.

double kehanPituus(double leveys, double profiili, double halkaisia){
  double keha = (halkaisia * 25.4 + 2 * leveys * profiili * 0.01) * 3.14;

  return keha;
}

Nyt tulisi hakea tällä kehän pituudella vastaavat renkaat. Jotenkin ei saa nyt irti oikein yhtään ajatusta, että miten tätä lähtisi ratkomaan. Kysymys saattaa tuntua oudolle ja sitä takuulla onkin. Lopuksi vielä tarkennuksena, että kyseessä ei ole koulutehtävä. En haluakaan vastausta vaan vinkin miten lähteä ratkomaan tätä.

Antti Laaksonen [25.04.2008 15:44:45]

#

Voisitko vielä tarkentaa kysymystä? Esim. anna yksi esimerkki, mitä käyttäjä tarkalleen kirjoittaa ohjelmaan ja mitä ohjelma tarkalleen tulostaa vastauksena.

Teuro [25.04.2008 16:05:42]

#

Ohjelmalle annetaan syötteenä esimerkiksi 205<enter>60<enter>16<enter>

Tämän jälkeen ohjelma hakee esim. 4 vastaavaa kehän pituutta olevaa rengasta vaikkapa taulukkoon, jonka se tulostaa. Vaikkapa näin:

Vertailurengas 205/60R16
vaihtoehto 1 215/55R16
vaihtoehto 2 225/50R16
jne...

[EDIT]Nuo koot ei siis välttämätä ole oikein en jaksanut laskea.[/EDIT]

TsaTsaTsaa [25.04.2008 16:40:04]

#

Teet renkaasta luokan, jossa on nuo tiedot ja valmiiksi laskettuna kehän pituus, jonka rengas palauttaa metodilla annaKehanPituus() ja tallennat renkaat vaikka std::vectoriin ja kun käyttäjä on syöttänyt mitat, selaat vectorin läpi ja vertaat jokaiseen siellä olevaan kehän pituuteen ja tulostat renkaan tiedot, mikäli kehän pituus on sopiva.

Jos nyt ymmärsin yhtään mitä tässä haetaan.

Teuro [25.04.2008 17:40:31]

#

Tuo toimii kyllä ihan hyvin, mutta sitten tarvitsee syöttää tuonne vektorille kamala määrä renkaita. Tuossa voisi kai käyttää jotakin toistorakennetta, mutta miten se tässä hieman tuntuu tökkivän. Meneekö se jotenkin näin:

#include <vector>

using namespace std;

class Rengas{
  private:
    int leveys;
    int profiili;
    int halkaisia;
  public:
    Rengas(int a, int b, int c){
      this -> leveys = a;
      this -> profiili = b;
      this -> halkaisia = c;
    }
};

vector <Rengas> Renkaat;

for(int a = 155; a <= 335; a+=10){
  for(int b = 20; b <= 80; b += 5){
    for(int c = 13; c <= 20; c++){
      //Tungetaan rengas vektoriin kamaa
      Renkaat.push_back(Rengas(Rengas(a, b, c)));
    }
  }
}

Mazzimo [25.04.2008 19:29:52]

#

Renkaat.push_back( Rengas(a, b, c) );

EDIT: Tietenkin main-funkkarin sisään tuo lisäys. ;)

TsaTsaTsaa [25.04.2008 20:06:51]

#

Ja vektoriin kannattaa mieluummin laittaa osoittimia renkaisiin, koska vektori sisäisesti kopioi dataa ja varsinkin isommilla luokilla se voi käydä hyvinkin raskaaksi (ja luokalle pitäisi toteuttaa kopiorakentaja).

Metabolix [25.04.2008 21:59:37]

#

TsaTsaTsaa kirjoitti:

Ja vektoriin kannattaa mieluummin laittaa osoittimia renkaisiin,

Eipä välttämättä näinkään, jos vektorin muokkaileminen ei ole aivan totaalisen aikakriittistä. Tuo osoitinten käyttö myös lisää virheiden riskiä. Tuollaisessa tilanteessa voi harkita, onko vaikkapa list tai map sopivampi. Tällä kertaa käsittääkseni dataa ei ollut tarkoitus kovasti siirrellä eikä sitä edes ole kovin paljon, joten vektori sopii tarkoitukseen loistavasti.

TsaTsaTsaa kirjoitti:

(ja luokalle pitäisi toteuttaa kopiorakentaja).

... jos automaattisesti generoitu versio ei kelpaa. Tuossa tapauksessa ei taida olla omatekoiselle mitään tarvetta, kun data on puhdasta dataa eikä sisällä esimerkiksi osoittimia tai viittauksia.

Teuro [25.04.2008 22:49:26]

#

Hieman muokattuna tuossa vektorissa on tällä hetkellä 59 alkiota, joten tuskin on tarvetta ruveta optimoimaan. Tuohon saattaa tulla vielä muutama rengas lisää. kiitos kovasti jokaiselle, joka jaksoi auttaa.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta