Permalänk

Hjälp med C++ (Nästan klar)

Hej, jag håller på med en kod, och har kört fast. Koden har många funktioner kvar som ska in, men just nu har jag fastnat på en grej.

Användaren ska mata in två tal, a och b, t.ex. 2 och 5. Är det ett större tal först så byter programmet värde på dessa. Sedan ska alla talen i mellan dessa räknas ut. Mellan 2 och 5, har vi 3 och 4. I slutet av programmet ska summan beräknas ut av alla talen, dvs 2+3+4+5. Men nu har jag fastnat på hur jag ska få programmet att räkna ut alla talen som står i mellan det inmatade talen. På något sätt ska jag få in uträkningen n(n+1)/2, men vet inte hur.

Först så sorterar jag dessa så att minsta värdet står först. Sedan tror jag det smartaste sättet att räkna ut detta på är en for-loop. Är riktigt trött i huvudet just nu och allt känns väldigt rörigt. Någon som har en ide hur jag får ut detta. Behöver få ut antalet tal i mellan dessa sedan räkna ut summan? Är under kapitlet funktioner så arrays och dyl får inte användas inte heller globala blabla.

#include <iostream> using namespace std; void sort(float &tal1, float &tal2); int main() { float a,b; int vald, end, start; cout << "Ge två tal : " << endl; cout << "Skriv in ett tal \n"; cin >> a; cout << "Skriv in ett tal till \n"; cin >> b; if (a>b) { sort(a,b); } cout << a << endl; cout << b << endl; int sum = 0; for (int a=start; b<=end; a++) { sum = a + 1; } cout << sum; } void sort(float &tal1, float &tal2) { float temp = tal1; tal1 = tal2; tal2 = temp; }

Permalänk
Skrivet av Pamudas:

#include <iostream> using namespace std; int main() { int a = 2; int b = 5; for(int i = a+1; i < b; i++) { cout << i; } return 0; }

Relativt simpel fix på ditt problem antar jag.
Är det detta som du vill? Skriver alltså ut 3, 4 nu.

Precis, tack. Nu är bara problemet att jag ska räkna ut alla dessa tal, 2+3+4+5. Vet att den matematiska formeln är n(n+1)/2.

Permalänk

För att räkna ut summan mellan två tal så skulle jag göra på följande vis:

int lowestNumber = 2; int highestNumber = 5; int sumOfNumbersInBetween = 0; for(int i = lowestNumber ; i <= highestNumber ; ++i) { sumOfNumbersInBetween += i; }

Permalänk
Medlem

int a = 2; int b = 5; int x = ((b+a)*(b-a+1))/2;

Visa signatur

..:: RiJo ::..
Computer: Lenovo X300
Platform: Gentoo

Permalänk

Är klar med allt nu, men kan inte få den att skriva ut svaren, vart ligger felet?

#include <iostream> #include <math.h> using namespace std; void sort(float &tal1, float &tal2); int main() { float x,y; int sum, i, a, m,val; cout << "Give to numbers: " << endl; cout << "Type one number \n"; cin >> x; cout << "Type another number \n"; cin >> y; if (x>y) { sort(x,y); } cout << x << " och " << y << endl; cout << "Choose between a, m and k! " << endl; cin >> val; if (val == 'a') { sum = 0; for( int i = x ; i <= y ; i++ ) sum +=i; cout << "Sum = "<< sum <<endl; } else if (val == 'm') { sum = 1; for (int i = x+1; i < y; i++) { sum *= i; cout << "Sum = "<<sum<<endl;} } else if(val == 'k') { for (int i = x; i <= y; i++) sum += i * i; } return 0; } void sort(float &tal1, float &tal2) { float temp = tal1; tal1 = tal2; tal2 = temp; }

Permalänk

Ok om du inte skriver ut något så kanske det beror på att du inte kommer i din if-elseif sats på slutet. Så pröva att lägga till ett else på slutet där du skriver ut något så ser du att du kanske inte kommer in.

Sedan så skulle jag försöka att använda rätt typ till rätt sak. Vad menar jag med detta då? Jo, att din inparameter val är nu deklarerad som int men du ber användaren skriva in en bokstav. Så antingen bör du använda dig av typen char eller std::string (om du använder string glöm inte att inkludera string, #include <string>) då dessa finns till för det ändamålet. Nu kommer det kanske visserligen bli rätt i alla fall eftersom du jämför med '<bokstav>' vilket blir en char som seden uppgraderas till en int vid jämförelsen. men för tydlighetens skulle så skulle jag nog ändra. Detta blir faktiskt också orsaken till ditt fel. cin vet inte vad den skall göra när du säger att den skall sätta en bokstav i en behållare för heltal. Om du deklarerar val som char så borde det gå bättre.

Det är också en väldigt bra ide att alltid initiera sina variabler.

Sedan ser jag också ett potentiellt problem med hur du blandar typer.

for( int i = x ; i <= y ; i++ ) sum +=i; cout << "Sum = "<< sum <<endl;

x har du tidigare deklarerat som float detta gör att om x är 2.99999 så kommer i initialiseras till 2. Du behöver inte deklarera i som int i din for-loop du kan skriva

for( float i = x ; i <= y ; i += 1.0f ) sum +=i; cout << "Sum = "<< sum <<endl;

Permalänk

Vill du bara hitta det största och minsta av två värden så rekommenderar jag std::max och std::min funktionerna som finns i algoritm biblioteket.

#include <iostream> // för std::cout #include <algorithm> // för std::max och std::min int main() { std::cout << "Input two numbers: " << std::endl; unsigned int x; std::cout << "Type first number" << std::endl; std::cin >> x; unsigned int y; std::cout << "Type second number" << std::endl; std::cin >> y; unsigned int high = std::max(x, y); // Hitta det största av två värden unsigned int low = std::min(x, y); // Hitta det minsta av två värden // Alternativ med For-loop unsigned int sum = 0; for (unsigned int i = low; i <= high; ++i) { sum += i; } std::cout << "The sum between " << low << " and " << high << " is : " << sum << std::endl; // Alternativ utan for-loop (mycket snabbare vid stora tal) unsigned int sum2 = ( (high + low)*(high - low + 1) )/2; std::cout << "The sum between " << low << " and " << high << " is : " << sum2 << std::endl; return 0; }