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; }
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.
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
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.
okei kiitoksia paljon :D
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?
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.
Ehkä aloittelijalle järkevämpi ratkaisu olisi tarkistaa if-lauseella, pitäisikö tulostaa ylimääräinen nolla.
ei vaan en käytä stdio:ta vaan iostreamia, kyllä mie tuon printf funktiolla osaan mutta haluan opetelle iostreamilla :P
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?
Aihe on jo aika vanha, joten et voi enää vastata siihen.