Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Lisää vanhoja pääsykokeita :P

Sivun loppuun

newc [10.05.2010 17:58:31]

#

Tässä ois lisää pääsykokeita tällä kerralla ois 2003 ja sen jälkeen olis viel 6 niitä toivottavasti joku avulias auttais minua, kun haluan niin oikeasti päästä opiskelemaan tätä tuonne helsinkiin

Mulla tulee paljon nuita samoja virheitä voisko joku selittää miksi :(. Aloitin c++ opiskelun pari kk sitten
-------------------------------------------

Warning 4 warning C4700: uninitialized local variable 'tyyli' used c:\users\asus\documents\visual studio 2008\projects\yo tehtävä 2003\yo tehtävä 2003\yoteht2003.cpp 36
Warning 3 warning C4700: uninitialized local variable 'pituus' used c:\users\asus\documents\visual studio 2008\projects\yo tehtävä 2003\yo tehtävä 2003\yoteht2003.cpp 26
Warning 2 warning C4244: '=' : conversion from 'float' to 'int', possible loss of data c:\users\asus\documents\visual studio 2008\projects\yo tehtävä 2003\yo tehtävä 2003\yoteht2003.cpp 58
Warning 1 warning C4244: '=' : conversion from 'double' to 'float', possible loss of data c:\users\asus\documents\visual studio 2008\projects\yo tehtävä 2003\yo tehtävä 2003\yoteht2003.cpp 44

ja Itse koodi

#include <iostream>

using namespace std;

#define Tuomareita 5
#define MaxKilp 60
#define Pituuskerroin 2.0
#define PisteAika 4

int main()
{
	int nro, lkm, tuomari, aika;
	float pituus, tyyli, tyylisumma, parastyyli, huonointyyli, voittopist;
	float pisteet [MaxKilp+1];


	/* Luetaan kilpailijat */
	lkm = 0;
	voittopist = 0;
	cout << "Syota makihyppytulokset, pituudeksi 0 lopettaaksesi" << endl;
	do
	{
		cout << "Anna kilpailijan nro " << lkm+1 << "pituus tyyli1 tyyli2...tyyli5: " << endl;
		&pituus;

		 if (pituus != 0)
		{
		// pituus 0 on lopetusmerkki //
		lkm++;
		// Luetaan tyylipisteet, summataan kaikkien tuomarien tyylipisteet luettaessa, muistetaan paras ja huonoin tyyliarvostelu //
		parastyyli = 0;
		huonointyyli = 20;
		tyylisumma = 0;
		for (tuomari = 0; tuomari < Tuomareita; tuomari++)
		{
			tyylisumma = tyylisumma + tyyli;
			if (tyyli < huonointyyli)
				huonointyyli = tyyli;
			if (tyyli > parastyyli)
				parastyyli = tyyli;
		} // for //
		/* lasketaan pisteet pituudesta ja tyyleista
		* tyylipisteet = summa - huonoin - paras */
		pisteet [lkm] = pituus * Pituuskerroin + tyylisumma - huonointyyli - parastyyli;

		// pidetaan ylla parasta kokonaistulosta //
		if (pisteet [lkm] > voittopist)
			voittopist = pisteet [lkm];

		 } // if //

	}while ((pituus != 0) && (lkm < MaxKilp));

	// tulostetaan ajat //
	for (nro = 1; nro <= lkm; nro++)
	{
		// lasketaan lahtoaika ja tulostetaan //
		aika = (voittopist - pisteet[nro]) * PisteAika;
		cout << "Kilpailija " << nro << "lahtee " << aika/60 << aika%60;

	}

	return 0;

}

Metabolix [10.05.2010 18:03:32]

#

Etkö yhtään osaa englantia? Ilmoituksissa lukee suoraan, mistä on kyse. Kaksi sensimmäistä: et ole alustanut muuttujia "tyyli" ja "pituus". Kolmas: sijoitat rivillä 58 float-tyyppisen arvon int-muuttujaan, jolloin desimaaliosa putoaa pois. Neljäs: sijoitat rivillä 44 double-tyyppisen arvon float-muuttujaan, jolloin sen tarkkuus pienenee.

newc [10.05.2010 18:09:24]

#

Osaan enkkua mutten c kieltä kunnolla vielä... Tajuan kyllä mitä ne tarkoittaa mutta ongelmana on etten osaa korjata sitä vaikka olen kaikkea kokeillu varsinkin nuo 2 viimesintä siis se float to double ja int

Metabolix [10.05.2010 18:26:51]

#

Itse asiassa kahden ensimmäisen ongelma taitaa olla siinä, että et lainkaan lue käyttäjältä syötettä. Tämä on aika kriittinen virhe, joka minusta viittaa siihen, ettet ole kunnolla käynyt mielessäsi läpi ohjelman toimintaa. Jos et nyt suoraan löydä virhettä, lue jokainen rivi ja mieti, mitä siinä pitäisi tapahtua ja mitä oikeasti tapahtuu. Voit vaikka kirjoittaa muistiin, mitä muuttujien arvot eri kohdissa ovat, ja muista, että ne eivät muutu itsestään!

Kahdesta jälkimmäisestä taas ei ole pakko välittää, jos ohjelma toimii oikein. Voit kuitenkin käyttää tyypinmuunnoksia, joista kerrotaan täkäläisen C++-opassarjan toisessa osassa. Kyseisen opassarjan lukeminen taitaisi muiltakin osin olla paikallaan.

newc [10.05.2010 18:40:18]

#

okei kiitoksia paljon :D

newc [11.05.2010 14:07:27]

#

Nyt ilmeni toinen ongelma sain ne kaikki nyt ettei tuu warning eikä erroreita mutta kun printtaan sen ulos niin tuo ei tulosta sitä tulosta min.sekuntti muodossa vaaan se tulee näin:
Kilpailija 1 lähtee 015
kilpailija 2 lähtee 061
jne..

haluaisin että se printaa sen näin:
Kilpailija 1 lähtee 00.16
Kilpailija 2 lähtee 00.00
Kilpailija 3 lähtee 01.02
jne..

Niin miten tuon voin korjata?

Laitinen [11.05.2010 14:39:40]

#

Uskon, että voit itsekin ymmärtää, miksi pistettä väliin ei tule. Oikea ongelma sinulla on kuitenkin siinä, että esimerkiksi luvusta 0 ei tule stringinpätkää 00 itsestään - sille täytyy tehdä jotain. Kivasti asian voit tehdä printf-funktiolla:

#include <cstdio>

int main() {
        int a = 0, b = 12;
        printf("Aika: %02d:%02d\n",a,b);
        b = 9;
        printf("Aika: %02d:%02d\n",a,b);
        return 0;
}

Hyvä ajatus on pohtia mitä printf tässä tekee, ja miksi se tulostaa asiat niin kuin haluat. Netistä löytyy varmasti lisäinfoa.

Metabolix [11.05.2010 14:42:02]

#

Ehkä aloittelijalle järkevämpi ratkaisu olisi tarkistaa if-lauseella, pitäisikö tulostaa ylimääräinen nolla.

newc [11.05.2010 14:45:03]

#

ei vaan en käytä stdio:ta vaan iostreamia, kyllä mie tuon printf funktiolla osaan mutta haluan opetelle iostreamilla :P

Laitinen [11.05.2010 14:53:30]

#

newc kirjoitti:

ei vaan en käytä stdio:ta vaan iostreamia, kyllä mie tuon printf funktiolla osaan mutta haluan opetelle iostreamilla :P

Mikäs siinä. Pari if-lausetta kehiin ja piste väliin. Mikä tarkalleen on mielestäsi ongelmasi?


Sivun alkuun

Vastaus

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

Tietoa sivustosta