C++ Nybörjare behöver hjälp..

Trädvy Permalänk
Medlem
Registrerad
Sep 2016

C++ Nybörjare behöver hjälp..

Hej! nu är det så att jag har påbörjat en distanskurs i programmering och min första uppgift var att skriva ett program i C++ som frågar efter ett årligt insättningsbelopp och en räntesats och ett sparmål. Programmet ska sedan med hjälp av en iteration (loop) räkna ut hur många år det tar innan sparmålet uppnåtts. Jag har "pillat" runt lite granna och är "typ" klar.. problemet är att allt fastnar i nån form av
"infinite-loop" när den ska räkna ihop allt. jag är inget matte eller geni så jag har förmodligen gjort allt fel..
koden ser iaf ut såhär och jag hoppades på att någon av er kunde förklara för mig vad som är fel, jag vill inte att ni gör uppgiften åt mig utan bara förklarar eller ger tips då jag verkligen vill lära mig att programmera. tack i förskott!
koden ser nämligen ut såhär (en så länge)

#include <iostream>

using namespace std;

int main()
{
setlocale (LC_ALL,"swedish");

float insattning;
float ranta = ranta/100 + 1;
float sparmal;
float saldo = insattning*ranta ;
int antal_ar =0;

cout << " Ange årlig insättning: ";
cin >> insattning;

cout << " Ange ditt sparmål: ";
cin >> sparmal;

cout << " Ange den årliga räntan: ";
cin >> ranta;

while (saldo < sparmal)
{

saldo*ranta+insattning;
antal_ar++;

}

cout << " Ditt sparmål uppnås efter antal_ar år. \n Din summa är då:" << saldo;

}

Trädvy Permalänk
Medlem
Plats
Hedesunda
Registrerad
Dec 2005

Mitt tips är att du debuggar programmet och stegar igenom iteration medans du observerar variablernas värden allt eftersom du stegar igenom loopen. Färdiga lösningar lär man sig inget på.

Trädvy Permalänk
Medlem
Plats
Jönköping
Registrerad
Nov 2008

Tror det enda som ändras i din whileloop är antal_ar, därför kommer saldo alltid vara mindre än sparmal

Desktop: i7-6700k @ 4.5GHz | 32GB RAM | 500GB SSD | 2x 1TB HDD | R9 290X | Define R5
Laptop: Macbook Pro Retina -15 i5| 8GB |256GB
Mobil: Oneplus 3
Surfplatta: Nexus 10 & Ipad Air 64GB 4G
konsol: PS4 slim 1TB

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011

Några saker:
Använd CODE taggarna när du postar kod, blir mycket enklare att läsa.
Använd engelska på allting istället för att blanda svenska och engelska.
Du bör kolla in din loop, uttrycket den kollar kommer aldrig bli falskt, du ändrar inte värdet på saldo.

Stationär:Asrock P67 Extreme 4 | i5 2500K@4.5Ghz | Asus GTX 970 black Överklockad | Samsung Evo 960 1TB, 2x WD blue 5TB | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02
Laptop: Dell XPS 15 2017
Mobil: Oneplus 6 128GB

Trädvy Permalänk
Medlem
Plats
Workbench 3.1
Registrerad
Jan 2002

Återigen! Nämn aldrig att du behöver hjälp för att du går nån kurs. Då är du lämnad till intet. Säg att du vill överklocka och folk vill ta sig hem till dig tvångsmässigt och och överklocka åt dig

Trädvy Permalänk
Medlem
Registrerad
Sep 2016

@hasenfrasen: tack för svar men tyvär förstod jag inte mycket utav det
jag letar inte efter en färdig lösning, utan mer förklaring på varför min egna inte fungerar. Jag vill lära mig trots allt!

Trädvy Permalänk
Medlem
Registrerad
Sep 2016

@Goldfinger: Haha okej tack jag ska tänka på det till nästa gång x)

Trädvy Permalänk
Medlem
Registrerad
Sep 2016

@Baxtex: noterat! okej tackar, jo jag har förstår att den inte funker, men jag förstår inte varför saldot inte ändras :/

Trädvy Permalänk
Medlem
Plats
Örebro
Registrerad
Jan 2010
Skrivet av Arthon92:

@Baxtex: noterat! okej tackar, jo jag har förstår att den inte funker, men jag förstår inte varför saldot inte ändras :/

Hur sparar du ett nytt värde i en variabel?

i7 6700k @ 4.6GHz | NH-U12S | ASUS Maximus VIII Gene | EVGA 1080 FTW | 16GB Corsair Vengeance 3000MHz | Samsung 850 Evo M.2 250GB, 840 250GB, 840 EVO 120GB | 2x2TB | Silverstone TJ08B-E | XB271HU | QX2710 | U2412M | Filco Majestouch MX Brown TKL

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011

@Arthon92:

Jag är ingen C++ programmerare, men det ser inte ut som att du tilldelar saldo variablen något. Du gör bara

saldo*ranta+insattning;

Stationär:Asrock P67 Extreme 4 | i5 2500K@4.5Ghz | Asus GTX 970 black Överklockad | Samsung Evo 960 1TB, 2x WD blue 5TB | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02
Laptop: Dell XPS 15 2017
Mobil: Oneplus 6 128GB

Trädvy Permalänk
Medlem
Registrerad
Sep 2016

@era909: var vänlig att utveckla ditt svar

Trädvy Permalänk
Medlem
Registrerad
Dec 2011

while (saldo < sparmal) { saldo*ranta+insattning; antal_ar++; }

Kolla på den koden.
Du vill köra loopen medans saldo är mindre än sparmal, men du varken ökar eller minskar någon av dem. Hur ska den då komma ut ur loopen?

antal_ar++;
ökar sin egen variable med 1

saldo*ranta+insattning;
gör dock endast en beräkning utan att spara den någonstans.

| i7 4770k | VI Hero | 780 Classified | AX860 | XL2420T |

Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Okt 2011
Skrivet av Arthon92:

Hej! nu är det så att jag har påbörjat en distanskurs i programmering och min första uppgift var att skriva ett program i C++ som frågar efter ett årligt insättningsbelopp och en räntesats och ett sparmål. Programmet ska sedan med hjälp av en iteration (loop) räkna ut hur många år det tar innan sparmålet uppnåtts. Jag har "pillat" runt lite granna och är "typ" klar.. problemet är att allt fastnar i nån form av
"infinite-loop" när den ska räkna ihop allt. jag är inget matte eller geni så jag har förmodligen gjort allt fel..
koden ser iaf ut såhär och jag hoppades på att någon av er kunde förklara för mig vad som är fel, jag vill inte att ni gör uppgiften åt mig utan bara förklarar eller ger tips då jag verkligen vill lära mig att programmera. tack i förskott!
koden ser nämligen ut såhär (en så länge)

#include <iostream>

using namespace std;

int main()
{
setlocale (LC_ALL,"swedish");

float insattning;
float ranta = ranta/100 + 1;
float sparmal;
float saldo = insattning*ranta ;
int antal_ar =0;

cout << " Ange årlig insättning: ";
cin >> insattning;

cout << " Ange ditt sparmål: ";
cin >> sparmal;

cout << " Ange den årliga räntan: ";
cin >> ranta;

while (saldo < sparmal)
{

saldo*ranta+insattning;
antal_ar++;

}

cout << " Ditt sparmål uppnås efter antal_ar år. \n Din summa är då:" << saldo;

}

Du måste säga vad som ska få det nya värdet t.ex. saldo = saldo*ranta+insattning; annars kommer den bara räkna ut det och sedan kasta bort det.

Corsair Vengeance LPX 2x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Trädvy Permalänk
Medlem
Registrerad
Sep 2016

@Cas: okej! tack så mycket, jag tror jag fattar, har dock en totalt hjärnsläpp nu och vet inte hur jag ska spara det nya värdet :S

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011

@Arthon92:

Svårt att veta vad du kan. Vet du vad en variabel är? Hur den funkar?

Du kan tänka dig en variabel som hink/låda som du kan stoppa saker i.

Du har koden

while (saldo < sparmal) { saldo*ranta+insattning; antal_ar++; }

Det du säger här är

Så länge saldo är mindre än sparmal
saldo*ranta+insattning
antal_ar = antal_ar +1

Du behöver på något sätt göra så att saldo INTE är mindre än sparmal för att få loopen att sluta iterera. Du bör alltså göra något med antingen saldo eller sparmal variablen.

Stationär:Asrock P67 Extreme 4 | i5 2500K@4.5Ghz | Asus GTX 970 black Överklockad | Samsung Evo 960 1TB, 2x WD blue 5TB | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02
Laptop: Dell XPS 15 2017
Mobil: Oneplus 6 128GB

Trädvy Permalänk
Medlem
Plats
Hedesunda
Registrerad
Dec 2005

Hjärnsläpp får man i början, det är helt normalt. Svaret på din fråga finns i svaret som gavs ovanför "hjärnsläppet". Variabeln till vänster om likhetstecknet blir tilldelat det som finns till höger om likhetstecknet.

T.ex:
a = 1
b = 2
c = 3
b = b + c (b blir 5)
d = a + b (d blir 6)

Trädvy Permalänk
Medlem
Registrerad
Sep 2016

@hasenfrasen: aha okej tack så mycket! det sjuka är att jag kollad på det svaret och jag provade runt lite med det men jag har fortfarade inte löst det... jag känner hur min iq bara blir lägre för varje gång jag ändrar något i koden >.<
jag vet att det här är uppenbart och lätt för andra men just nu(jämt) förstår jag inget tyvär

Trädvy Permalänk
Medlem
Plats
Örebro
Registrerad
Jan 2010
Skrivet av Arthon92:

@era909: var vänlig att utveckla ditt svar

Du ville inte ha en lösning skrev du så jag ställde en fråga som förhoppningsvis får dig att tänka på rätt sätt för att lösa problemet.

Nu har du redan fått det rätta svaret i inläggen efter.

i7 6700k @ 4.6GHz | NH-U12S | ASUS Maximus VIII Gene | EVGA 1080 FTW | 16GB Corsair Vengeance 3000MHz | Samsung 850 Evo M.2 250GB, 840 250GB, 840 EVO 120GB | 2x2TB | Silverstone TJ08B-E | XB271HU | QX2710 | U2412M | Filco Majestouch MX Brown TKL

Trädvy Permalänk
Medlem
Registrerad
Maj 2002

Dum fråga kanske, men den här raden:

float ranta = ranta/100 + 1

Kan man skriva så, kommer C++ fatta hur man menar och göra om "ranta" till en multipel så fort "ranta" får ett värde? Kanske bara är min OCD som spökar nu men det hade känts bättre för mig om räntemultiplikationsfaktorn (puh) fått sin egen variabel.

Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2007
Skrivet av PHJ:

Dum fråga kanske, men den här raden:

float ranta = ranta/100 + 1

Kan man skriva så, kommer C++ fatta hur man menar och göra om "ranta" till en multipel så fort "ranta" får ett värde? Kanske bara är min OCD som spökar nu men det hade känts bättre för mig om räntemultiplikationsfaktorn (puh) fått sin egen variabel.

Koden kommer kompilera, eftersom variabeln ranta kommer börja existera efter =. Däremot så är ranta oinitierad vid det tillfället, så dess värde är odefinierat. Tilldelningen kommer i detta fall bara dela det odefinierade värdet med 100 och lägga till 1, vilket resulterar i ett annat odefinierat värde. Detta är alltså garanterat inte vad man vill, och en bra kompilator kommer varna om att ranta är oinitierad i detta fall.

Trädvy Permalänk
Medlem
Plats
Hedesunda
Registrerad
Dec 2005

Om du kan formulera problemet i ditt huvud exakt vad det är du vill åstadkomma, kommer kodskrivandet helt automagiskt. Snöa inte in på själva kodskrivandet utan lös problemets logik först av allt. Det där med lådor och vad man stoppar i dem kan vara en väg.