Översätt min pythonkod till C++ :)

Permalänk
Medlem

Översätt min pythonkod till C++ :)

Tja swecers!

Detta kan likna en skoluppgift men jag kan upplysa er om att jag gör det på skoj och att jag inte har programmering på schemat om jag ska vara ärlig.

# -*- coding: ISO-8859-1 -*- from math import sqrt print "##############################" print "# PY-thagoras sats v 0.1 #" print "# Den okanda skrivs som noll #" print "##############################" print "\n INPUT:" varA = raw_input('Sida A: ') varB = raw_input('Sida B: ') varC = raw_input("Sida C: ") enhet = str(raw_input('Enhet (tex. cm): ')) print "\n----------Utraekning-----------" varA = float(varA) varB = float(varB) varC = float(varC) if varA == 0: utr1 = varC*varC-varB*varB utr2 = sqrt(utr1) print '\n\tSida A:', utr2,enhet print '\tSida B:', varB,enhet print '\tSida C:', varC,enhet elif varB == 0: utr1 = varC*varC-varA*varA utr2 = sqrt(utr1) print '\n\tSida A:', varA,enhet print '\tSida B:', utr2,enhet print '\tSida C:', varC,enhet elif varC == 0: utr1 = varA*varA+varB*varB utr2 = sqrt(utr1) print '\n\tSida A:', varA,enhet print '\tSida B:', varB,enhet print '\tSida C:', utr2,enhet else: print '\nDu maste skriva en nolla pa en sida' print "\n-------------------------------" raw_input('\nTryck ENTER for att avsluta programmet...')

Tack på förhand

Permalänk
Medlem

Tyvärr tror jag att http://forum.sweclockers.com/showthread.php?s=&threadid=55247... gäller. Försök lite själv så kan vi hjälpa till att rätta felen.

Visa signatur

Teeworlds - För dig som gillar gulliga saker med stora vapen.

Permalänk
Medlem

precis som matricks säger...

Detta är den absooluuuuta grundkursen i c++
Om du kan grunderna så klarar du detta galant på några timmar om du försöker själv, om inte annat så lär du dig dessa saker på nolltid.

Permalänk
Medlem

Hade inget att göra så jag skrev ihop detta lite snabbt till dig:

Jag gjorde några små ändringar, tex att bara en av variablerna kan vara 0, annars blir det fel..

#include <iostream.h> #include <stdlib.h> #include <string> float A, B, C; string enhet; int utr1, utr2; int main(){ cout << "##############################\n"; cout << "# PY-thagoras sats v 0.1 #\n"; cout << "# Den okanda skrivs som noll #\n"; cout << "##############################\n"; cout << "\n INPUT:"; cout << "\nSkriv in Sida A(Katet):"; cin >> A; cout << "\nSkriv in Sida B(Katet):"; cin >> B; cout << "\nSkriv in Sida C(Hypotenusa):"; cin >> C; cout << "\nSkriv in enhet (tex. cm): "; cin >> enhet; cout << "\n----------Utraekning-----------"; if (A == 0 && B != 0 && C != 0){ utr1 = (C*C)-(B*B); utr2 = sqrt(utr1); cout << "\nSida A:" << utr2 << enhet << "\n"; } else if(B == 0 && A != 0 && C !=0){ utr1 = (C*C)-(A*A); utr2 = sqrt(utr1); cout << "\nSida B:" << utr2 << enhet << "\n"; } else if(C == 0 && A != 0 && B != 0){ utr1 = (A*A)+(B*B); utr2 = sqrt(utr1); cout << "\nSida C:" << utr2 << enhet << "\n"; } else{ cout << "\nDu maste skriva en nolla pa en sida"; cout << "\n-------------------------------"; } system("PAUSE"); return 0; }

Visa signatur

jo..

Permalänk
Medlem

Ändrade lite i din kod, bland annat har du glömt

#include <math.h>

och

using namespace std;

och

float A, B, C, utr1, utr2;
(Så att man kan få decimaler i svaret

#include <iostream> #include <stdlib.h> #include <string> #include <math.h> using namespace std; float A, B, C, utr1, utr2; string enhet; int main(){ cout << "##############################\n"; cout << "# Pythagoras sats v 0.1 #\n"; cout << "# Den okanda skrivs som noll #\n"; cout << "##############################\n"; cout << "\njINPUT:"; cout << "\nSkriv in Sida A (Katet): "; cin >> A; cout << "\nSkriv in Sida B (Katet): "; cin >> B; cout << "\nSkriv in Sida C (Hypotenusa): "; cin >> C; cout << "\nSkriv in enhet (tex. cm): "; cin >> enhet; cout << "\n----------Utraekning-----------\n"; if (A == 0 && B != 0 && C != 0){ utr1 = (C*C)-(B*B); utr2 = sqrt(utr1); cout << "\nSida A: " << utr2 << enhet << "\n"; cout << "\nSida B: " << B << enhet << "\n"; cout << "\nSida C: " << C << enhet << "\n"; } else if(B == 0 && A != 0 && C !=0){ utr1 = (C*C)-(A*A); utr2 = sqrt(utr1); cout << "\nSida A: " << A << enhet << "\n"; cout << "\nSida B:" << utr2 << enhet << "\n"; cout << "\nSida C: " << C << enhet << "\n"; } else if(C == 0 && A != 0 && B != 0){ utr1 = (A*A)+(B*B); utr2 = sqrt(utr1); cout << "\nSida A: " << A << enhet << "\n"; cout << "\nSida B: " << B << enhet << "\n"; cout << "\nSida C: " << utr2 << enhet << "\n"; } else{ cout << "\nOBS! ETT FEL HAR INTRAFFAT!\nDu maste skriva en nolla i A, B eller C.\nAlternativt sa har du inte skrivit siffror i A, B eller C.\n"; } cout << "\n-------------------------------"; cout << "\n\n"; system("PAUSE"); return 0; }

Permalänk

system("PAUSE > nul");

Visa signatur

"90% av att vara smart är att veta sina begränsningar. De återstående 10 procenten är att veta att man måste gå utanför dessa begränsningar."
Hjälp till att öka kunskapen.
FirefoxMyths

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av RikkiAnderzoni

system("PAUSE > nul");

Hm den där har jag inte sett förut, vilken fördel har den över den "vanliga"?

system("PAUSE");

Permalänk
Citat:

Ursprungligen inskrivet av Fe|ix
Hm den där har jag inte sett förut, vilken fördel har den över den "vanliga"?

system("PAUSE");

Att man slipper "Press any key to continue"

(Och ja, det är "nul", inte "null" )

Visa signatur

"90% av att vara smart är att veta sina begränsningar. De återstående 10 procenten är att veta att man måste gå utanför dessa begränsningar."
Hjälp till att öka kunskapen.
FirefoxMyths

Permalänk
Medlem

Tycker att '0' för att beskriva ett okänt tal är ett fullhax, finns snyggare sätt att lösa det på.

Permalänk
Medlem

Byt ut <stdlib.h> mot <cstdlib> och <math.h> mot <cmath>

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av geeken
Ändrade lite i din kod, bland annat har du glömt

#include <math.h>

och

using namespace std;

och

float A, B, C, utr1, utr2;
(Så att man kan få decimaler i svaret

Sorry, hade inte math.h med pga att jag använde standard-mallen i dev c++, det var även därför som det var .h-verisionerna av biblioteken. Anledningen till att jag inte hade utr1 och 2 som float var att jag inte kom ihåg hur man reglerade antalet decimaler..men med närmare eftertanke så borde åtminstone utr1 ha vart float för att få ett exaktare svar..

Visa signatur

jo..

Permalänk
Medlem

if (A == 0 && B != 0 && C != 0){ massa kod...

tycker att det är snyggare att skriva:

if (!A && B &&C){

... kanske är personligt..

Visa signatur

Plan9 fan. In glenda we trust.

Permalänk

Översatt till Python:

# -*- coding: ISO-8859-1 -*- from math import sqrt def gethypo(side1, side2): return sqrt(side1**2. + side2**2.) def getkat(side1, side2): return sqrt(side1**2.-side2**2.) print u"""\ ############################## # Pythagoras sats v 0.5 # ##############################""" print u""" Mata in längden på två av sidorna. Som flyttal med punkt som decimalavskiljare. """ side1 = input('Sida 1: ') side2 = input('Sida 2: ') print u"Vill du ha ut hypotenusan(h), altså den snea sidan, eller en katet(k)." typ = str(raw_input("Svarstyp [h] ")) print u"""\n----------Uträkning-----------""" print side1 print side2 if typ == "k": print "%.2f" % (getkat(side1, side2),) else: print "%.2f" % (gethypo(side1, side2),) print "-------------------------------" raw_input('\nTryck ENTER for att avsluta programmet...')

Den skriver nu ut med två decimaler, jag höll på att göra en version som bedömmer precicsion av input av bara farten, men det skulle förlängt koden en del.

Meh, kunde inte klåta bli, här är en version som tar viss hänsyn till värdesiffror:

# -*- coding: ISO-8859-1 -*- from math import sqrt print u"""\ ############################## # Pythagoras sats v 1 # ##############################""" def gethypo(side1, side2): return sqrt(side1**2. + side2**2.) def getkat(side1, side2): return sqrt(side1**2.-side2**2.) def getprec(fstr): splitstr = fstr.split(".") if splitstr[0] == 0: return len(splitstr[1]) else: return len(''.join(splitstr)) def useprec(floatie, prec): splitstr = str(floatie).split('.') return prec - len(splitstr[0]) print u""" Mata in längden på två av sidorna som flyttal med punkt som decimalavskiljare.Värdesiffror avgörs av sidan med flest värdesiffror angivna, resultat utan decimaler förkortas dock ej. """ side1_raw = raw_input('Sida 1: ') side2_raw = raw_input('Sida 2: ') side1 = float(side1_raw) side2 = float(side2_raw) prec = max((getprec(side1_raw), getprec(side2_raw))) print u"Vill du ha ut hypotenusan(h), altså den snea sidan, eller en kateder(k)." typ = str(raw_input("Svarstyp [h] ")) print u"""\n----------Uträkning-----------""" print "%.*f" % (int(useprec(side1, prec)), side1) print "%.*f" % (int(useprec(side2, prec)), side2) if typ == "k": kat = getkat(side1, side2) print "%.*f" % (int(useprec(kat, prec)), kat) else: hyp = gethypo(side1, side2) print "%.*f" % (int(useprec(hyp, prec)), hyp) print "-------------------------------" raw_input('\nTryck ENTER for att avsluta programmet...')

Visa signatur

Python-IRC på svenska: #python.se

Permalänk
Medlem

Känns lite onödigt att tex skriva ut Sida A: osv i varje if-sats-del så jag lägger de utanför.

#include <string> #include <iostream> #include <cmath> using namespace std; int main(){ float varA, varB, varC, svar; string enhet; cout << "#############################\n" << "# PY-thagoras sats v 1 #\n" << "# Den ok„nda skrivs som 0 #\n" << "#############################\n" << endl; do{ cout << "Ge A, B och C, en sida måste vara 0 (ex --> 3 0 5)\n> "; cin >> varA >> varB >> varC; }while(varA > 0 && varB > 0 && varC > 0); //Skriver ut tills någon är 0 cout << "Ge enhet (ex --> cm)\n> "; cin >> enhet; if(varA == 0 && varB != 0 && varC != 0) varA = sqrt(varC*varC - varB*varB); else if(varA != 0 && varB == 0 && varC != 0) varB = sqrt(varC*varC - varA*varA); else if(varA != 0 && varB != 0 && varC == 0) varC = sqrt(varA*varA + varB*varB); cout << "\nSida A: " << varA << enhet << "\nSida B: " << varB << enhet << "\nSida C: " << varC << enhet << endl; system("PAUSE"); return 0; }

Permalänk
Citat:

Ursprungligen inskrivet av dagle

tycker att det är snyggare att skriva:

if (!A && B &&C){

... kanske är personligt..

Nej! Det där strider nog förmodligen mot alla coding guidelines som existerar!

Att använda float som boolesk-typ är ju (även fast det kanske fungerar) så fel att det tar sjukt i ögonen!

Visa signatur

"Mies saa kaatua mutta ei karata." -- Adolf Ehrnrooth IR 7, Äyräpää 1944.