Permalänk
Medlem

Akut C++ hjälp 2!

Nu behöver jag lite hjälp igen med den här uppgiften igen... Allt finns där nu, och behöver bara fin justeras lite....

Någon som kan test köra koden, och se vad det är för fel?

När man matar in 2 lika tal så ska det tex stå:

Hopp 1 och 2 var lika långa, Hopp 1 och 3 var lika långa, Hopp 2 och 3 var lika långa... osv
Men det gör det inte...

Jag kommer vara mycket tacksam till den som fixar detta...

#include <iostream> using namespace std; int main() { double hopp[3], medellangd, hopp4=0, hopp5; int langst; cout << "Skriv in resultatet fr\x86n f\x94rsta l\x84ngdhoppen i meter: \n"; cin >> hopp[0]; cout << "Skriv in resultatet fr\x86n andra l\x84ngdhoppen i meter: \n"; cin >> hopp[1]; cout << "Skriv in resultatet fr\x86n tredje l\x84ngdhoppen i meter: \n"; cin >> hopp[2]; //***************************************************************************** // Hämtar ut det hopp som är länst if (hopp[0] > hopp[1] && hopp[1] > hopp[2] ) langst = 0; else if (hopp[1] > hopp[2]) langst = 1; else if (hopp[2] > hopp[1]) langst = 2; else if ( hopp[0] == hopp[1] && hopp[1] == hopp[2] ) langst = -1; else if ( hopp[0] == hopp[1] ) langst = -2; else if ( hopp[1] == hopp[2] ) langst = -3; else { cout<<"Det blev fel!"; return -1; } // Skriver ut vilket hopp som var längst if ( langst >= 0 ) cout << endl << "L\x84ngsta hoppet var hopp "<<langst+1; else switch ( langst ) { case -1: cout << endl << "Alla hopp var lika l\x86nga"; langst = 0; break; case -2: cout << endl << "Hopp 1 och 2 var lika l\x86nga"; langst = 0; break; case -3: cout << endl << "Hopp 2 och 3 var lika l\x86nga"; langst = 1; break; default: cout<<"Det blev fel!"; return -1; break; } cout<<": "<<hopp[langst]; //***************************************************************************** // Räknar ut medellängden på hoppen och skriver ut det medellangd = (hopp[0] + hopp[1] + hopp[2]) / 3; cout << endl << "Medellängden på hoppen var: " << medellangd <<"\n"; //***************************************************************************** //Räknar ut skillnade mellan hoppen if (hopp[0] > hopp4) hopp4=hopp[0]; if (hopp[1] > hopp4) hopp4=hopp[1]; if (hopp[2] > hopp4) hopp4=hopp[2]; hopp5=10000; if (hopp[0] < hopp5) hopp5=hopp[0]; if (hopp[1] < hopp5) hopp5=hopp[1]; if (hopp[2] < hopp5) hopp5=hopp[2]; cout << "Skillnade mellan det kortaste och l\x84ngsta hoppet \x84r: " << hopp4 - hopp5 << endl << endl; //***************************************************************************** return 0; }

Permalänk
Medlem

d kanske inte räknar ut exakt samma saker som du har räknat ut med d räknar iaf ut d du skriver till skärmen

har gjort om din kod på mitt sätt hoppas du fattar..annars e d bara o fråga

#include <iostream.h> #include <conio.h> #include <iomanip.h> int main() { int antal, maxhopp; int max = 0, min = 1000; double *hopp, summa = 0; cout << "Antal hoppare: "; cin >> antal; hopp = new double[antal]; for (int i = 0; i < antal; i++) { cout << "Resultat f\x94r hopp " << (i+1) << " i meter: "; cin >> hopp[i]; if (hopp[i] < 0) { --i; continue; } if (hopp[i] > max) { max = hopp[i]; maxhopp = i; } if (hopp[i] < min) min = hopp[i]; summa += hopp[i]; } // Fungerar bara om det är två likadana hopp... om fler än två deltagare hoppar // lika långt så skriver den ut alla möjliga kombinationer.. kan dock ändras genom att // alla likadana hopp sparas i en array och sen skrivs ut med en for loop :) for (int i = 0; i < antal; i++) { for (int s = (i+1); s < antal; s++) { if (hopp[i] == hopp[s]) cout << "Hopp " << (i+1) << " och hopp " << (s+1) << " var lika långa." << endl; } } cout << endl << "L\x84ngsta hoppet var hopp " << maxhopp << ": " << max << " meter." << endl; cout.setf(ios::fixed); cout << endl << setprecision(2) << "Medellängden på hoppen var: " << (summa/antal) << " m." << endl; cout << endl << "Skillnade mellan det kortaste och l\x84ngsta hoppet \x84r: " << (max-min) << " m." << endl; getch(); return 0; }

Visa signatur
Permalänk
Medlem
Citat:

Ursprungligen inskrivet av kajo
d kanske inte räknar ut exakt samma saker som du har räknat ut med d räknar iaf ut d du skriver till skärmen

har gjort om din kod på mitt sätt hoppas du fattar..annars e d bara o fråga

...

Hehe... den koden kanske var lite för advancerad för mig Det jag håller på med är en inlämnings uppgift till C++ kurs A... Men tack ändå!

-----------------------

Tänkte om det går att renovera min kod, kan ju inte va så stora fel på den...

Permalänk
Medlem

Här är en ny version av koden... Funkar nästan nu. Matar jag in samma tal på andre och tredje hoppet (mata tex in 3,4,4) så står det "Hopp 2 och 3 är lika: 4" Men det funkar inte om jag matar in samma tal på första och andre hoppet (tex 4,4,3), då står det "Längsta hoppet var hopp 2", så ska det inte vara!

#include <iostream> using namespace std; int main() { double hopp[3], medellangd, hopp4=0, hopp5; int langst; cout << "Skriv in resultatet fr\x86n f\x94rsta l\x84ngdhoppen i meter: \n"; cin >> hopp[0]; cout << "Skriv in resultatet fr\x86n andra l\x84ngdhoppen i meter: \n"; cin >> hopp[1]; cout << "Skriv in resultatet fr\x86n tredje l\x84ngdhoppen i meter: \n"; cin >> hopp[2]; //***************************************************************************** // Behöver hjälp HÄR!!! =) // Hämtar ut det hopp som är länst if (hopp[0] > hopp[1] && hopp[1] > hopp[2] ) langst = 0; else if (hopp[1] > hopp[2]) langst = 1; else if (hopp[2] > hopp[1]) langst = 2; else if ( hopp[0] == hopp[1] && hopp[1] == hopp[2] && hopp[0] == hopp[2] ) langst = -1; else if ( hopp[0] == hopp[1] ) langst = -2; else if ( hopp[1] == hopp[2] ) langst = -3; else if ( hopp[0] == hopp[2] ) langst = -4; else { cout<<"Det blev fel!"; return -1; } // Skriver ut vilket hopp som var längst if ( langst >= 0 ) cout << endl << "L\x84ngsta hoppet var hopp "<<langst+1; else switch ( langst ) { case -1: cout << endl << "Alla hopp var lika l\x86nga"; langst = 0; break; case -2: cout << endl << "Hopp 1 och 2 var lika l\x86nga"; langst = 0; break; case -3: cout << endl << "Hopp 2 och 3 var lika l\x86nga"; langst = 1; break; case -4: cout << endl << "Hopp 1 och 3 var lika l\x86nga"; langst = 0; break; default: cout<<"Det blev fel!"; return -1; break; } cout<<": "<<hopp[langst]; //***************************************************************************** // Räknar ut medellängden på hoppen och skriver ut det medellangd = (hopp[0] + hopp[1] + hopp[2]) / 3; cout << endl << "Medell\x84ngden p\x86 hoppen var: " << medellangd <<"\n"; //***************************************************************************** //Räknar ut skillnade mellan hoppen if (hopp[0] > hopp4) hopp4=hopp[0]; if (hopp[1] > hopp4) hopp4=hopp[1]; if (hopp[2] > hopp4) hopp4=hopp[2]; hopp5=10000; if (hopp[0] < hopp5) hopp5=hopp[0]; if (hopp[1] < hopp5) hopp5=hopp[1]; if (hopp[2] < hopp5) hopp5=hopp[2]; cout << "Skillnade mellan det kortaste och l\x84ngsta hoppet \x84r: " << hopp4 - hopp5 << endl << endl; //***************************************************************************** return 0; }

Permalänk

jag skulle ha gjort en struktur innehållande längden på hoppet, och vilken nummer det var, sedan är det bara att sortera de i storleksordning, med avseende på längden. Då slipper du nästa alla if-sattser

Visa signatur

Nisse

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av NisseNord
jag skulle ha gjort en struktur innehållande längden på hoppet, och vilken nummer det var, sedan är det bara att sortera de i storleksordning, med avseende på längden. Då slipper du nästa alla if-sattser

strukturer och sorteringsalgoritmer e d första man lär sig i programmering B i gymnasiet..han e bara på A men annars är strukturer ganska smart

tycker att man borde kunna förstå min kod med bara prog A kunskaper...
kan säga att när jag skriver
*hopp
och sen
hopp = new double[antal] så menar jag att jag inte vet hur stor arrayen hopp ska vara... det bestäms av antal..sen när jag kan antal kan jag bestämma storleken... man kan inte skriva hopp[antal] så länge antal inte är en konstant.. och är det en konstant så kan man inte ändra värdet dvs inte mata in nåt nytt Det ända som kan va lite svårt

Visa signatur