//Kääntäjäni sanoo että tässä ei ole
//mitaan virheitä, muttei siltä voi kääntää sitä.
//Joten tässä kykymys: MIKSEI VOI?
//Tämä ohjelma ratkaisee toisen asteen yhtälön
#include
#include
using namespace std;
int main()
{
cost int diskriminantti=b*b-4*a*c;
int a,b,c;
float x1=(b (sqrt(diskriminantti))/2*a;
float x2=(b-(sqrt(diskriminantti))/2*a;
coutc;
if(diskriminantti
//mitaan virheitä, muttei siltä voi kääntää sitä.
//Joten tässä kykymys: MIKSEI VOI?
//Tämä ohjelma ratkaisee toisen asteen yhtälön
#include
#include
using namespace std;
int main()
{
cost int diskriminantti=b*b-4*a*c;
int a,b,c;
float x1=(b (sqrt(diskriminantti))/2*a;
float x2=(b-(sqrt(diskriminantti))/2*a;
coutc;
if(diskriminantti
Vastaukset 16
Vanhimmat
// muuta järjestystä?
int a,b,c;
// ja kaippa noihin muuttujiin tulisi jotain sijoittaakin ennen seuraavaa?
cost int diskriminantti=b*b-4*a*c;
Jos kääntähäsi sanoo että tuossa ei ole virheitä vaihda kääntäjää :)
Et voi alustaa diskriminanttia käyttäen muuttujie abc jos niitä ei ole vielä edes esitelty, saati alustettu.
Ohjelmassasi on lukuisia kirjoitusvirheitä. (0:n tilalla o:ta, sulut puuttuvat, reaturn etc)
include rivit voisivat olla ilman tuota .h päätettä
//olenko korjanut kaiken?
//se ei toimi vieläkään
//VERSION 1.0
//Tämä ohjelma ratkaisee toisen asteen yhtälön
#include
#include
using namespace std;
int main()
{
int diskriminantti=b*b-4*a*c;
int a,b,c;
float x1=(b (sqrt(diskriminantti))/2*a);
float x2=(b-(sqrt(diskriminantti))/2*a);
coutc;
if(diskriminantti
tarkkana..
...mutta ota huomioon että olen opeskellut c :tä vain kuukauden,
Saisinko jotain vinkkejä?
Mitä kääntäjäsi sanoo kun koitat kääntää tuon ohjelman?
...mikäli vaivautuisit copypastettamaan sen virheilmoituksen, ja kuvailisit ongelman paremmin. "Tässä on jokin virhe" ei ole oikein järkevä kuvaus.
//Tässä on parannettu versio
//kääntäjä tulostaa:
// Error executing cl.exe.
ToisenAsteenYhtälö.obj - 1 error(s), 0 warning(s)
//VERSION 1.2
//Tämä ohjelma ratkaisee toisen asteen yhtälön
#include
#include
using namespace std;
int main()
{
int diskriminantti;
int a,b,c;
float x1;
float x2;
coutc;
diskriminantti=b*b-4*a*c;
x1=(b (sqrt(diskriminantti))/2*a);
x2=(b-(sqrt(diskriminantti))/2*a);
if(diskriminantti
Kyllähän tuon jo luulis kääntyvän.. pientä viilattavaa tosin on.
Esim tarkastat diskriminantin arvon neliöjuurilausekkeiden jälkeen ja negatiivisesta luvustahan ei neliöjuurta voi laskea. Toiseksi, jos en väärin muista toisen asteen lauseketta tuossa lausekkeessa on vielä vikaa.
..ei pelaa oikein. Unohda tuo esimerkki ja yritä alkuun saada tämä:
void main()
{
}
kääntymään. Sitten alat lisäämään tuosta esimerkistäsi palasia paikalleen ja katsot koska se lakkaa toimimasta.
//ongelma johtui siita
// että laitoin .h
//riittä pelkkä ja
//ilman h:ta
//VERSION 1.3
//Tämä ohjelma ratkaisee toisen asteen yhtälön
#include
#include
using namespace std;
int main()
{
int diskriminantti;
int a,b,c;
float x1;
float x2;
coutc;
diskriminantti=b*b-4*a*c;
x1=(-b (sqrt(diskriminantti))/(2*a));
x2=(-b-(sqrt(diskriminantti))/(2*a));
if(diskriminantti
voisiko joku selittää miksei .h:ta tarvita?
Se on määritelty uudessa Standardissa, että .h:ta ei kirjoteta esim. iostreamia lisätessä, mutta omiin H tiedoistoihin tulee edelleen normaalisti #include "oma.h".
Jos haluaa oikeita tuloksia, niin pikkusen pitää viilata vielä sulkeita. Eli näin:
x1=(-b (sqrt(diskriminantti)))/(2*a);
ja x2:lle samoin.
Tietysti hyviin tapoihin kuuluu ennen a:lla jakamista tutkia ettei se ole nolla. Samoin ennen neliöjuuren ottoa katsoa ettei diskriminantti ole negatiivinen.
Stanussa on määritelty, jotta .h:ta ei käytetä.
Eli
#include
esitetään
#include
using namespace std;
Mutta näistä ei kannata huolestua ennenkuin käyttää omia nimiavaruuksia.
int a,b.c;
float increment;
Ylläolevan kaltainen ja käyttämäsi määrittely ei tunnista desimaalilukua kertoimena, vaikka se toisen asteen yhtälön kannalta on täysin hyväksyttävää.
Neliöjuuri sqrt() vaatii (?) riittävän tarkkuuden saavuttamiseksi double tyypin. Voi olla, että uudet kääntäjät osaavat tehdä tyyppimuunnoksen automaattisesti, oma vanha Borland C 4.552 ei kuitenkaan osaa. Kuten se ei myöskään tunne namespace_a eikä #include_a ilman .h päätettä.
Ohjelmasi hermostuu siitä, jos yhtälöllä on imaginääriset juuret. Pitää tehdä lopetus tällaista tapausta varten ennen x1:n ja x2:n laskentaa.(lopettava return if-silmukkaan;tästä oli täällä huomautus jo aikaisemmin)
Imaginäärisiä juuria varten headereihin pitää lisätä #include ja koodi siltä osin pitää kirjoittaa uusiksi. Mutta se on jo toinen juttu.