Permalänk
Medlem

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;

}

Permalänk
Vila i frid

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å.

Permalänk
Medlem

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

Visa signatur

Desktop: R7 3700X | 32GB RAM | 4 TB SSD | RTX 3080 TI | Define R5
Laptop: Razer Blade 15 Base 2020
Mobil: Iphone 13 Pro
konsol: PS4 slim 1TB

Permalänk
Medlem

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.

Permalänk
Medlem

Å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

Visa signatur

r_wateralpha 0.3

Permalänk
Medlem

@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!

Permalänk
Medlem

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

Permalänk
Medlem

@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 :/

Permalänk
Medlem
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?

Visa signatur

i7 8700k @ 4.7GHz | NH-L12 | ASUS Z270i ROG Strix Gaming | EVGA 1080 FTW | 32GB Corsair Vengeance 3000MHz | Samsung 970 Evo M.2 500GB, 840 250GB, Crucial MX500 2TB | Loque Ghost S1 | XB271HU | QX2710 | U2412M | U2719D | Filco Majestouch 2 MX Brown TKL

Permalänk
Medlem

@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;

Permalänk
Medlem

@era909: var vänlig att utveckla ditt svar

Permalänk
Medlem

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.

Visa signatur

| 3700X | B450 Mortar Max | 2070 Super | AX860 | GL850 & UL650 |

Permalänk
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.

Visa signatur

Corsair Vengeance LPX 4x8GB 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)

Permalänk
Medlem

@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

Permalänk
Medlem

@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.

Permalänk
Vila i frid

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)

Permalänk
Medlem

@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

Permalänk
Medlem
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.

Visa signatur

i7 8700k @ 4.7GHz | NH-L12 | ASUS Z270i ROG Strix Gaming | EVGA 1080 FTW | 32GB Corsair Vengeance 3000MHz | Samsung 970 Evo M.2 500GB, 840 250GB, Crucial MX500 2TB | Loque Ghost S1 | XB271HU | QX2710 | U2412M | U2719D | Filco Majestouch 2 MX Brown TKL

Permalänk
Medlem

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

Permalänk
Medlem
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.

Permalänk
Vila i frid

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.