Just nu i M3-nätverket
Gå till innehåll

Göra ett program..


Molidor

Rekommendera Poster

Mina programmeringskunskaper börjar också bli ringrostiga, men antingen att du har även liter som float eller att du omvandlar liter till float i samband med divisionen, dvs

forbrukning = (float)liter/kordamil

men koden

forbrukning = (float)( liter/kordamil)

tror jag att det först görs en heltalsdivision och resultatet från denna görs om till ett flyttal, vilket ju blir fel resultat.

 

Finns "cast" med i kurslitteraturen, dvs omvandling från en typ till en annan med hjälp av (annan typ)?

 

Visual Studio kan jag inte.

Länk till kommentar
Dela på andra webbplatser

  • Svars 51
  • Skapad
  • Senaste svar

Hmm, vet inte om jag riktigt hängde med där. Men så jag borde börja med att deklarera liter och kordamil som en int men i uträknignen använda din

forbrukning = (float)( liter/kordamil)

?

Typas de tillfälligt om till en float då, eller vadå?

 

Lite osäker på exakta mekanismen, inte rört C/C++ på länge men i C# ger det att operationens resultat inte trunkeras till int. Testa och se vad resultatet blir i C.

 

xlocnum-problemet: Söker man på nätet får man en hel del träffar på det men jag ser ingen klarhet i det. Min fundering hamnar då i om du skapat ett projekt av rätt sort? Det är väl en console-applikation du skapar?

 

Mitt tips är enkelt, stäng ned editorn, skapa ett nytt projekt. Skapa en liten "Hello World" kod och kompilera för att se att det fungerar. Klistra sedan in din kod i det nya projektet. Del för del som du vet fungerar...

Länk till kommentar
Dela på andra webbplatser

Mina programmeringskunskaper börjar också bli ringrostiga, men antingen att du har även liter som float eller att du omvandlar liter till float i samband med divisionen, dvs

forbrukning = (float)liter/kordamil

men koden

forbrukning = (float)( liter/kordamil)

tror jag att det först görs en heltalsdivision och resultatet från denna görs om till ett flyttal, vilket ju blir fel resultat.

 

Finns "cast" med i kurslitteraturen, dvs omvandling från en typ till en annan med hjälp av (annan typ)?

 

Visual Studio kan jag inte.

 

Kan jag inte göra om både liter och kordamil till float? Så slipper jag

forbrukning = (float)liter/kordamil

alltså slipper jag "(float)". Kan det funka?

Länk till kommentar
Dela på andra webbplatser

Lite osäker på exakta mekanismen, inte rört C/C++ på länge men i C# ger det att operationens resultat inte trunkeras till int. Testa och se vad resultatet blir i C.

 

xlocnum-problemet: Söker man på nätet får man en hel del träffar på det men jag ser ingen klarhet i det. Min fundering hamnar då i om du skapat ett projekt av rätt sort? Det är väl en console-applikation du skapar?

 

Mitt tips är enkelt, stäng ned editorn, skapa ett nytt projekt. Skapa en liten "Hello World" kod och kompilera för att se att det fungerar. Klistra sedan in din kod i det nya projektet. Del för del som du vet fungerar...

 

Jo jag har också fått en del träffar när jag googlat på det, men inte lyckats förstå alls vad et handlar om.

Jag har ju komplierat samma projekt hela tiden (kan det ha med saken att göra? nje, men måste ju få kompliera väl..) utan några problem. Det här dök upp helt plötsligt. Har provat att göra nya projekt med samma kod, både genom att klippa och klistra men också genom att skriva av koden för hand (pust!). Jag ska prova med en enklare, typ "Hello world!" först - återkommer strax!

Länk till kommentar
Dela på andra webbplatser

Jo jag har också fått en del träffar när jag googlat på det, men inte lyckats förstå alls vad et handlar om.

Jag har ju komplierat samma projekt hela tiden (kan det ha med saken att göra? nje, men måste ju få kompliera väl..) utan några problem. Det här dök upp helt plötsligt. Har provat att göra nya projekt med samma kod, både genom att klippa och klistra men också genom att skriva av koden för hand (pust!). Jag ska prova med en enklare, typ "Hello world!" först - återkommer strax!

 

 

Samma sak hände.. JÄVLA SKIT!!! :angry: (sorry)

Jag har inte tid med det här!

Länk till kommentar
Dela på andra webbplatser

Samma sak hände.. JÄVLA SKIT!!! :angry: (sorry)

Jag har inte tid med det här!

 

Jadu, jag vet inget... enda... testa annan miljö eller installera om den du har...

Länk till kommentar
Dela på andra webbplatser

Jadu, jag vet inget... enda... testa annan miljö eller installera om den du har...

 

FIck svar från min lärare - han hade heller ingen aning..... Men han skulle kolla på det, jag skickade filen. Får vänta och se helt enkelt.

 

Men jag behöver fortfarande lösa ett par saker när (om?) programmet funkar igen. Det ena är att förbrukningen ska redovisas i decimaltal. Jag har ju inte kunnat prova om era förslag funkar ännu, som sagt. Det andra är att man anger vilken bilmodell man kört genom att välja siffran 1 2 eller 3. Varje siffra är ju en bilmodell då såklart. Men när detta redovisas sedan så står det ju bilmodell "2" om nu 2an är vald, istället för vad bilen egentligen heter t.ex Mercedes. Förstår nån vad jag svamlar om?

Länk till kommentar
Dela på andra webbplatser

Det andra är att man anger vilken bilmodell man kört genom att välja siffran 1 2 eller 3. Varje siffra är ju en bilmodell då såklart. Men när detta redovisas sedan så står det ju bilmodell "2" om nu 2an är vald, istället för vad bilen egentligen heter t.ex Mercedes. Förstår nån vad jag svamlar om?
Då måste du ha något i programmet som dels innehåller bilmärkena och dels kod som kan översätta från ett nummer till ett bilmärke. Är array/vektor något bekant, står det något i boken om det?
Länk till kommentar
Dela på andra webbplatser

Då måste du ha något i programmet som dels innehåller bilmärkena och dels kod som kan översätta från ett nummer till ett bilmärke. Är array/vektor något bekant, står det något i boken om det?

 

Jag har hört det och det finns med i min bok, men det är ingenting som vi varken har eller ska läsa..

Länk till kommentar
Dela på andra webbplatser

Bilmärkena kan lagras som olika strängar (string). Hittar du då hur du kan spara bilmärkena i programmet?

Länk till kommentar
Dela på andra webbplatser

Bilmärkena kan lagras som olika strängar (string). Hittar du då hur du kan spara bilmärkena i programmet?

 

Ja det finns med i boken och det finns med på en sida som vi ska läsa (eller ska ha läst.. jag har haft lite svårt att läsa varenda sida noggrant eftersom jag jobbar). Ska läsa igenom det! Tack tack!

 

O så ska jag prova att installera om VS, hoppas det funkar då..

Länk till kommentar
Dela på andra webbplatser

Ja det finns med i boken och det finns med på en sida som vi ska läsa (eller ska ha läst.. jag har haft lite svårt att läsa varenda sida noggrant eftersom jag jobbar). Ska läsa igenom det! Tack tack!

 

O så ska jag prova att installera om VS, hoppas det funkar då..

 

Nu funkar VS igen!

Det där med "string" har ju rört till och "förstört" allt i mitt program B) .. hur ska nu min IF-ELSE-sats funka? Jag hade ju sagt "IF (valdbil == 1)" men nu måste jag väl ta bort valdbil och ersätta med string.. korrekt?

 

Däremot funkar programmet fortfarnade inte särskilt bra.

Bil 1 har en maxförbrukning på 1,0 men programmet svarar "ovanligt hög förbrukning" oavsett om den dragit 0,2 eller 5,0L.

Bil 2 (max 0,9) och Bil 3 (0,8) har både "normal förbrukning" oavsett om det är 0,2 eller 5,0L.. hopplöst :thumbsdown:

Länk till kommentar
Dela på andra webbplatser

Här är delar av koden

 

string volvo = "1", opel = "2", saab = "3";

int valdbil;
float forbrukning, kordamil, liter;

 

Ska det vändas på kanske, dvs 1 = "volvo"?

 

cout << "\nAnge bilmodell (1-3):  ";		
cin >> valdbil;						
cout << " 1. Volvo\n 2. Opel\n 3. Saab\n\n";

 

cout << "\n\nBIL\n";
cout <<	valdbil;

 

if (valdbil == 1)				
{							
if (forbrukning <= 1,0)			
cout << "\n**Normal br\x84nslef\x94rbrukning**";
else if (forbrukning >= 1,0)			
cout << "\n**Ovanligt h\x94g br\x84nslef\x94rbrukning**\n\n";
}

Länk till kommentar
Dela på andra webbplatser

Det där med "string" har ju rört till och "förstört" allt i mitt program B) .. hur ska nu min IF-ELSE-sats funka? Jag hade ju sagt "IF (valdbil == 1)" men nu måste jag väl ta bort valdbil och ersätta med string.. korrekt?
Du använder siffrorna ända tills du ska göra en utskrift, först då använder du dina strings.

 

Du får kolla upp lite mer om strings. Hur det ska se ut för att du ska kunna skriva ut ett bilmärke.

Länk till kommentar
Dela på andra webbplatser

Du använder siffrorna ända tills du ska göra en utskrift, först då använder du dina strings.

 

Du får kolla upp lite mer om strings. Hur det ska se ut för att du ska kunna skriva ut ett bilmärke.

 

Det står inte så mycket värdefullt i boken faktiskt..

Så jag tänkte vara lite fiffig och stoppa in "redovisningstexten" i IF-satsen. På så vis blev det ju superenkelt att skriva ut bilmärket. MEN då kom ju nästa problem (såklart..). Det skrivs inte ut någon kommentar om förbruknigen för bil 1, om den är normal eller hög. Men för bil 2 så kvarstår problemet att förbrukningen är hög, oavsett om den är 5.6L eller 0.2L. Det är alltså fel åt alla möjliga håll, trots att koden är identisk för Bil1 och 2..

Har jag försökt med något omöjligt eller går det att fixa?

 

if (valdbil == 1)											
{
cout << "\n\nBIL\n";				
cout <<	"Volvo";

cout <<	"\n---";

cout <<	"\n\nMIL\n";					
cout <<	kordamil;

cout <<	"\n---";							
cout << "\n\nLITER\n";				
cout << liter;			

cout <<	"\n---";

cout <<	"\n\nF\x99RBRUKNING (L/mil)\n";
cout <<	forbrukning;

cout << "\n\n";	

if (forbrukning <= 1,0)												
cout << "\n**Normal br\x84nslef\x94rbrukning**";	

else if (forbrukning >= 1,0)		//Är parantesen och "if" efte else onödigt? Räcker det med "else" ?		
cout << "\n**Ovanligt h\x94g br\x84nslef\x94rbrukning**\n\n";
}

Länk till kommentar
Dela på andra webbplatser

Ja, det blev ju bra med bilmärkena också.

 

Det räcker bra med bara else i det fallet. Se hur det blir om du bara har det.

För tydlighets skull så är det bra att använda klamrar efter if och else även om de bara omfattar en rad/sats.

Länk till kommentar
Dela på andra webbplatser

Ja, det blev ju bra med bilmärkena också.

 

Det räcker bra med bara else i det fallet. Se hur det blir om du bara har det.

För tydlighets skull så är det bra att använda klamrar efter if och else även om de bara omfattar en rad/sats.

 

Det gjorde ingen skillnad för resultatet iaf.

 

Bil 1 har normal förbrukning oavsett.

Bil 2 & 3 har hög förbrukning oavsett.

 

Jag ger upp snart :( Koden är ju identisk för bilarna, bortsett från bilmärket och förbrukningen men likförbannat bli det feeeeeel.

 

Här är hela koden, är det nån som kan se nåt fel?!

 

#include <iostream>
using namespace std;

int main()
{
cout << "                       **BENSINF\x99RBRUKNING**\n\n";
cout << "                Bekr„fta alla inmatningar med Enter\n\n\n";

int valdbil;
float forbrukning, kordamil, liter;

cout << "Ange antal k\x94rda mil:  ";
cin >> kordamil;

cout << "Ange antal tankade liter:  ";
cin >> liter;

       cout << "\nAnge bilmodell (1-3):  ";
cin >> valdbil;
       cout << " 1. Volvo\n 2. Opel\n 3. Saab\n\n";	

forbrukning = liter / kordamil;									

if (valdbil == 1)
{
cout << "\n\nBIL\n";			
cout <<	"Volvo";		
cout <<	"\n---";							
cout <<	"\n\nMIL\n";				
cout <<	kordamil;				
cout <<	"\n---";				

cout << "\n\nLITER\n";				
cout << liter;		
cout <<	"\n---";

cout <<	"\n\nF\x99RBRUKNING (L/mil)\n";		
cout <<	forbrukning;								
cout << "\n\n";	


if (forbrukning >= 1,0)
cout << "\n**Ovanligt h\x94g br\x84nslef\x94rbrukning**";

else 
cout << "\n**Normal br\x84nslef\x94rbrukning**\n\n";
}



if (valdbil == 2)
{
cout << "\n\nBIL\n";
cout <<	"Opel";
cout <<	"\n---";							
cout <<	"\n\nMIL\n";		
cout <<	kordamil;				
cout <<	"\n---";								

cout << "\n\nLITER\n";		
cout << liter;
cout <<	"\n---";

cout <<	"\n\nF\x99RBRUKNING (L/mil)\n";		
cout <<	forbrukning;					
cout << "\n\n";	

if (forbrukning >= 0,9)
cout << "\n**Ovanligt h\x94g br\x84nslef\x94rbrukning**";

else 
cout << "\n**Normal br\x84nslef\x94rbrukning**\n\n";
}




if (valdbil == 3)
{
cout << "\n\nBIL\n";			
cout <<	"Saab";
cout <<	"\n---";							
cout <<	"\n\nMIL\n";			
cout <<	kordamil;				
cout <<	"\n---";								
cout << "\n\nLITER\n";				
cout << liter;			
cout <<	"\n---";

cout <<	"\n\nF\x99RBRUKNING (L/mil)\n";		
cout <<	forbrukning;				
cout << "\n\n";	

if (forbrukning >= 0,8)
cout << "\n**Ovanligt h\x94g br\x84nslef\x94rbrukning**";

else 
cout << "\n**Normal br\x84nslef\x94rbrukning**\n\n";
}


cout << "\n\n\n\n\nFina Bilar AB 2010\n";
cout << "Anna Lundberg\n\n";

return 0;
}

Länk till kommentar
Dela på andra webbplatser

En enkel regel i programmering är att man inte ska skriva samma kod mer än en gång.

Dvs forma om din kod så att du har samma text på flera ställen. Bryt isär och ha ett antal If-sats områden eller skapa strängar initialt som du använder när du skriver ut mellanfraserna.

 

Eller - skapa en funktion som du anropar med de värden som ska skrivas ut. Det är ju inte så många som är unika. En funktion som tar som inargument det unika för varje bil. Då blir det enklare.

 

Samt If -else - if - ett alternativ är att använda Switch-case

http://msdn.microsoft.com/en-us/library/k0t5wee3%28VS.80%29.aspx

Länk till kommentar
Dela på andra webbplatser

En enkel regel i programmering är att man inte ska skriva samma kod mer än en gång.

Dvs forma om din kod så att du har samma text på flera ställen. Bryt isär och ha ett antal If-sats områden eller skapa strängar initialt som du använder när du skriver ut mellanfraserna.

 

Eller - skapa en funktion som du anropar med de värden som ska skrivas ut. Det är ju inte så många som är unika. En funktion som tar som inargument det unika för varje bil. Då blir det enklare.

 

Samt If -else - if - ett alternativ är att använda Switch-case

http://msdn.microsoft.com/en-us/library/k0t5wee3%28VS.80%29.aspx

 

Jaså? Menar du "Dvs forma om din kod så att du INTE har samma text på flera ställen"?

 

"skapa en funktion som du anropar med de värden som ska skrivas ut" förstår jag intenting av :blink:

 

Jag är osäker på om switch är något vi ska läsa, det börjar nämligen på sidan 138 och det är den sista sidan vi ska läsa i kursen.

 

Så du menar att problemet med min kod är att jag har för många likadana if-satser (trots att de skiljer bilmärke och maxförbrukning?

Länk till kommentar
Dela på andra webbplatser

Menar du "Dvs forma om din kod så att du INTE har samma text på flera ställen"?
Skulle nog tro att Monshi menade det ;)

Genom att bara ha if (valdbil) {} runt de rader som skiljer sig åt medan man låter de rader som är likadana oavsett vilken bil som är vald i stället för att du som nu kopierar rader och har dem på tre ställen, så minskar risken för att det blir fel vid kopieringen och anpassningen av koden till de olika bilarna.

 

Funktioner kommer nog också senare i kursen, kan också kallas rutiner, procedurer eller metoder.

 

Bil 1 har normal förbrukning oavsett.

Bil 2 & 3 har hög förbrukning oavsett.

I Sverige har vi decimalkomma, men vad har de i USA? Vad står det i utskriften av förbrukning?

Länk till kommentar
Dela på andra webbplatser

Skulle nog tro att Monshi menade det ;)

Genom att bara ha if (valdbil) {} runt de rader som skiljer sig åt medan man låter de rader som är likadana oavsett vilken bil som är vald i stället för att du som nu kopierar rader och har dem på tre ställen, så minskar risken för att det blir fel vid kopieringen och anpassningen av koden till de olika bilarna.

 

Ja det kan jag gå med på.. det var väl en föör bra lösning för att vara sann kanske :rolleyes: Men jag kan ju inte heller lösa det på de sätt som du föreslog förut.. strings var det va?

 

Funktioner kommer nog också senare i kursen, kan också kallas rutiner, procedurer eller metoder.

 

I Sverige har vi decimalkomma, men vad har de i USA? Vad står det i utskriften av förbrukning?

 

Nä det gör ju inte det - kursen är liksom slut :D Men jag har fått förlängt på uppgiften eftersom VS inte funkade.

 

Öh.. hmm.. vad dom har i USA :blush: öhm...

MEN VÄNTA VÄNTA VÄNTA!! JAG TROR DET FUNKAR!!!

Länk till kommentar
Dela på andra webbplatser

ÅÅÅH jag är alldeles upp i varv! Ivrig som tusan! Har provat alla möjliga sifferkombinationer för att se om det verkligen fungerar.. Och ta mig tusan - det verkar som det funkar!

 

 

STORT TACK TILL DIG CECILIA, OCH MONSHI. UTAN ER HADE DET HÄR ALDRIG NÅGONSIN GÅTT

blombukett-tack.jpg

Länk till kommentar
Dela på andra webbplatser

Ah trevligt att det fungerar! Då kan du fortsätta att utveckla det med lite fler funktioner. Lite överkurs kanske eller bara lite snyggare kod.

 

Det jag skrev tidigare, man ska inte skriva samma kod flera gånger. Det är en grundtanke. Lite generell kod, kanske inte korrekt C-kod men, säg att man har

 

int main()
{
int value;
cout << "Ett värde";
cin >> value;
if (value ==1) 
{
cout << "du har valt";
cout << "nummer ett";
}
if (value == 2)
{
cout << "Du har valt";
cout << "nummer två";
}
}

Då har vi samma sträng i båda If-satserna. Nu har jag skrivit dem lite olika utav misstag, då måste jag in koden och leta reda på raden/if-satsen det blivit fel i. Bättre då att skriva

 

 

int main()
{
int value;
String strOne = "Du har valt";
cout << "Ett värde";
cin >> value;
if (value ==1) 
{
cout << strOne
cout << "nummer ett";
}
if (value == 2)
{
cout << strOne
cout << "nummer två";
}
}

vilket gör koden lite prydligare.

 

Eller så skapar man en rutin, fast detta är väl överkurs, som tar som inargument det flexibla värdet:

void MyPrinter(string strV)
{
	cout << "Du har valt nummer" + strV;
}

som du då anropar i Main:

if (value ==1) 
{
MyPrinter("ett");
} 

OBS ! NOTERA

Detta är c-inspirerad kod, jag är inte helt säker på att det är C-kod...

 

 

Lite överkurs, lek vidare om du har tid annars kommer ni till detta lite senare i kursen kan jag lova.

 

I vilket sammanhang läses denna kurs? Grund/gymnasie/högskola?

Länk till kommentar
Dela på andra webbplatser

Ah trevligt att det fungerar! Då kan du fortsätta att utveckla det med lite fler funktioner. Lite överkurs kanske eller bara lite snyggare kod.

 

Det jag skrev tidigare, man ska inte skriva samma kod flera gånger. Det är en grundtanke. Lite generell kod, kanske inte korrekt C-kod men, säg att man har

 

int main()
{
int value;
cout << "Ett värde";
cin >> value;
if (value ==1) 
{
cout << "du har valt";
cout << "nummer ett";
}
if (value == 2)
{
cout << "Du har valt";
cout << "nummer två";
}
}

Då har vi samma sträng i båda If-satserna. Nu har jag skrivit dem lite olika utav misstag, då måste jag in koden och leta reda på raden/if-satsen det blivit fel i. Bättre då att skriva

 

 

int main()
{
int value;
String strOne = "Du har valt";
cout << "Ett värde";
cin >> value;
if (value ==1) 
{
cout << strOne
cout << "nummer ett";
}
if (value == 2)
{
cout << strOne
cout << "nummer två";
}
}

vilket gör koden lite prydligare.

 

Eller så skapar man en rutin, fast detta är väl överkurs, som tar som inargument det flexibla värdet:

void MyPrinter(string strV)
{
	cout << "Du har valt nummer" + strV;
}

som du då anropar i Main:

if (value ==1) 
{
MyPrinter("ett");
} 

OBS ! NOTERA

Detta är c-inspirerad kod, jag är inte helt säker på att det är C-kod...

 

 

Lite överkurs, lek vidare om du har tid annars kommer ni till detta lite senare i kursen kan jag lova.

 

I vilket sammanhang läses denna kurs? Grund/gymnasie/högskola?

 

 

Tack, ska läsa de du skrev lite noggrannare senare :-)

 

Nä kursen är ju slut i fredags. Det var en gymnasiekurs, fast det var längesen jag gick gymnasiet :-) Det var en otroligt basic kurs (gissar jag, med tanke på era reaktioner hehe)

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...