Hjälp med c++ multiplicera talen mellan två tal

Permalänk

Hjälp med c++ multiplicera talen mellan två tal

ag är rookie/n00b/korkad på C++ men försöker få ihop ett program för en uppgift. Börjar bli om möjlig dummare än jag redan är.

I programmet matar man in två tal, ex 3 och 5. Talen ska sen adderas, multipliceras eller räkna ut kvadratsumman på. Jag har löst allt utom multiplikationen.

Kör med "If" och det ser ut som nedan; (det är "m" jag har problem med, ger svaret 25 när jag matar in 3 och 5 så jag har förstått den gånger 5 med 5, inte det jag ville).
Hade blivit grymt tacksam om någon kan hjälpa mig, förklara vad jag gjort fel eller just nu vad som

----
int berakna (int tal1, int tal2, char op)
{
int summa = 0;
if (op == 'a')
{
for (int x = tal1; x <= tal2; x++)
{
summa += x;
}
}
if (op == 'm')
{
for (int x = tal1; x <= tal2; x++)
{
summa = 1;
summa= x*x;
}
}
if (op == 'k')
{
for (int x = tal1; x <= tal2; x++)
{
summa = summa+(x*x);
}
}

return summa;

=============================>
Programkörningen
=============================>

Programmet räknar ut två tal du anger.
Mata in två heltal:
3 5
Beräkning som ska göras: a = Addera, m = Multiplicera eller k = Kvadratsumman:
m
Du har valt räknesätt "m"
Resultatet av beräkningen är: 25

Process returned 0 (0x0) execution time : 6.066 s
Press any key to continue.
_

Permalänk
Medlem

Jag tror du vill kolla upp lite hur en for-loop fungerar.

Sedan sätter du summa = x*x, så det kommer bli kvadraten av x, vilket är tal2 till slut.

Permalänk

@wargreymon: Jag har bara rört ihop allt nu och har gått in i väggen med multiplikationen.

Permalänk
Medlem
Skrivet av keyserswe:

@wargreymon: Jag har bara rört ihop allt nu och har gått in i väggen med multiplikationen.

Kräver uppgiften for-loopar? För annars tänk bara hur du normalt skulle skriva upp en uträkning.

Permalänk
Medlem
Skrivet av keyserswe:

ag är rookie/n00b/korkad på C++ men försöker få ihop ett program för en uppgift. Börjar bli om möjlig dummare än jag redan är.

I programmet matar man in två tal, ex 3 och 5. Talen ska sen adderas, multipliceras eller räkna ut kvadratsumman på. Jag har löst allt utom multiplikationen.

Kör med "If" och det ser ut som nedan; (det är "m" jag har problem med, ger svaret 25 när jag matar in 3 och 5 så jag har förstått den gånger 5 med 5, inte det jag ville).
Hade blivit grymt tacksam om någon kan hjälpa mig, förklara vad jag gjort fel eller just nu vad som

----
int berakna (int tal1, int tal2, char op)
{
int summa = 0;
if (op == 'a')
{
for (int x = tal1; x <= tal2; x++)
{
summa += x;
}
}
if (op == 'm')
{
for (int x = tal1; x <= tal2; x++)
{
summa = 1;
summa= x*x;
}
}
if (op == 'k')
{
for (int x = tal1; x <= tal2; x++)
{
summa = summa+(x*x);
}
}

return summa;

=============================>
Programkörningen
=============================>

Programmet räknar ut två tal du anger.
Mata in två heltal:
3 5
Beräkning som ska göras: a = Addera, m = Multiplicera eller k = Kvadratsumman:
m
Du har valt räknesätt "m"
Resultatet av beräkningen är: 25

Process returned 0 (0x0) execution time : 6.066 s
Press any key to continue.
_

Får man fråga varför du gör For-loopar för detta?

Skickades från m.sweclockers.com

Permalänk

@PoXe: Som sagt, jag är rookie på det och det är en uppgift. Har använt while-loopar innan. Tänkte det vad det enklaste och addering och kvadratsumman gick bra. Är grymt tacksam för alla ledtrådar jag kan få för jag är helt fast nu

Permalänk
Medlem

@keyserswe:
Flytta summa = 1 till utanför loopen och spar värdet från varje loop.

Permalänk

@wargreymon: Tänkte jag ska i programmet kunna mata in vilka tåv tal som helt, så jag tänkte det var lättast eller mest logiskt med en for-loop. Fast jag kanske har tänkt HELT fel?

Permalänk
Medlem

@keyserswe: Ska du addera/multiplicera två tal, eller alla tal mellan två tal? Din trådtitel och första inlägg säger olika, därav förvirringen i tråden.

Permalänk
Hedersmedlem
Skrivet av keyserswe:

@wargreymon: Tänkte jag ska i programmet kunna mata in vilka tåv tal som helt, så jag tänkte det var lättast eller mest logiskt med en for-loop. Fast jag kanske har tänkt HELT fel?

Loopar används ju för att göra saker flera gånger. Vilken uträkning måste man göra flera gånger för att räkna ut t ex 3 * 5?
När du väl har två variabler med rätt värde så är det ju bara att sätta en * mellan dem så har du svaret, även i C++.

(Man kan ju förstås räkna det som 5+5+5 eller 3+3+3+3+3 genom att loopa, men det känns ganska orimligt.)

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
Mobil: Moto G200

Permalänk
Medlem
Skrivet av keyserswe:

@PoXe: Som sagt, jag är rookie på det och det är en uppgift. Har använt while-loopar innan. Tänkte det vad det enklaste och addering och kvadratsumman gick bra. Är grymt tacksam för alla ledtrådar jag kan få för jag är helt fast nu

Håller med @wargreymon.

Hur hade du skrivit upp uträkningen i vanlig hederlig enkel matte?
Dina villkor i IF-statementsen trigger ju rätt, så gör bara med tal1 emot tal2 vad du hade gjort på ett papper.

Jag tror att looparna ställer till det för dig här.
Loopar är bättre att använda när du ska göra flera uträkningar än att bara hantera två tal som här.
Skulle du lägga in delvärden exempelvis i en multiplikation i en lista eller liknande, t.ex 32*111, så att 1*111 är första värdet i listan, 111, 2*111 är andra värdet i listan, 222 osv.. Då är loopar toppen.

Skickades från m.sweclockers.com

Permalänk

@perost: Sorry, jag är rörig just nu. Jag ska ange två tal, sen ska samtliga tal inklusive dom talen multipliceras.
Anger jag t.ex 1 och 5, ska programmet räkna 1*2*3*4*5

Permalänk
Hedersmedlem
Skrivet av keyserswe:

@perost: Sorry, jag är rörig just nu. Jag ska ange två tal, sen ska samtliga tal inklusive dom talen multipliceras.
Anger jag t.ex 1 och 5, ska programmet räkna 1*2*3*4*5

I "m"-loopen så sätter du svaret till 1 varje loop, sedan till x*x.
Eftersom sista loopen körs med x = tal2 så kommer svaret alltid vara tal2 * tal2

Det du vill rent matematiskt är att multiplicera "summa" (som kanske bör ha annat namn i detta fall) med x i varje loop, och att bara sätta den till 1 en gång, utanför alla loopar.

För att sätta a = a * x i C++ kan man köra antingen exakt så, eller "a *= x".

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
Mobil: Moto G200

Permalänk
Medlem

Oavsett vad du vill göra, så den här loopen

for (int x = tal1; x <= tal2; x++)
{
summa = 1;
summa= x*x;
}

I den kommer summa alltid att vara tal2 * sig självt, oavsett hur många gånger loopen kör.

Summa = 1;

Den här hardcodear summa till 1 varje iteration av loopen. Den vill du nog inte ha inne i loopen. Eftersom du ger summa ett nytt värde på nästa rad gör den här raden inget utan slöar i teorin bara ner programmet.

Summa = x*x;

Du vill nog ta med värdet summa har sedan förra iteration?
I sådana fall funkar

Summa = summa + (x*x) ;

?

Skickades från m.sweclockers.com

Permalänk

@PoXe: Den körde jag med kvadratsumman men om man ska multipliera 3*4*5 som jag ska göra här, ska det blir 60. Jag tänker nog helt fel på hur jag ska lösa multipliceringen.

Permalänk
Medlem
Skrivet av keyserswe:

@perost: Sorry, jag är rörig just nu. Jag ska ange två tal, sen ska samtliga tal inklusive dom talen multipliceras.
Anger jag t.ex 1 och 5, ska programmet räkna 1*2*3*4*5

Ah, då är vi med!

Det du gör nu är att du ersätter ju summa = x*x i varje loop. Det du vill göra är att sätta summa = tal1 innan for-loopen, sedan initiera x (dåligt namn) till tal1 + 1; x <= tal2 och x++ som du har nu är förfarande korrekt. Men du vill sätta summa = summa * x inne i loopen.

Notera att om tal2 är större än tal1 kommer summan bli tal1, men nu kan vi ju ta för givet att man alltid matar korrekt.

Permalänk

@Thomas: Låter som en plan, ska bara komma på hur. Jag är noob på detta

Permalänk
Medlem

Du kan med fördel dela upp koden i flera enklare funktioner också, t.ex. en funktion som enbart summerar ett intervall som du sen kan anropa från berakna-funktionen. Det gör att koden blir enklare att testa och resonera kring.

Permalänk
Medlem

I for-loopar brukar det vara ganska tacksamt att använda räknarvariabeln (I ditt fall x) i uträkningen. I exemplet kommer ju x starta på värdet 3, nästa gång 4 och till sist 5, det kan du ju använda dig utav i uträkningen. Kolla över det här stycket en gång till och fundera över vad som faktiskt händer i koden.

for (int x = tal1; x <= tal2; x++) { summa = 1; summa= x*x; }

Sedan som många andra redan sagt så behöver du flytta ut din variabel för summa utanför loopen annars skriver du över värdet med 1 varje gång loopen körs.

Permalänk

@wargreymon: Då är jag med på tåget med haha, tröga jag fattade efter din förklaring

Gjorde:

if (op == 'm') { summa = tal1; for (int x = tal1 + 1; x <= tal2; x++) summa = summa*(x); {

Rann på som en kall öl en fredag och fungerade, tackar och bugar