jmallen3 Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 Έχψ μια άσκηση που θέλει να δίνει ο χρήστης ένα ποσό σε δραχμές και να μετατρέπει το προγραμμα σε Ευρώ και λεπτά του Ευρώ.Δηλαδή θα εμφανίζεται στο τέλος αν δωσει σαν είσοδο 5000 ο χρήστης αυτό: 14 Ευρώ αι 67 λεπτά.Το πρόβλημα μου ειναι οτι δεν ξέρω πως να βγαίνει το υπολοιπο της διαιρεσης. πχ: 5000/340,75=14,67. Αυτό το 67 για τα λεπτά πως γίνεται να εμφανίζεται?
MitsakosGR Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 Πήγαινε εδώ και δες το "Arithmetic operators ( +, -, *, /, % )" για το σύμβολο "%"
Haldol Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 Η απλούστερη λύση είναι να χρησιμοποιήσεις την modf() από το <cmath> header. Χρησιμοποιείται όπως γράφω παρακάτω. Θα πάρει σαν είσοδο τον αριθμό που θέλεις, θα επιστρέψει το δεκαδικό κομμάτι στην fractional και θα βάλει το ακέραιο τμήμα εκεί που δείχνει ο &integral. >float integral, fractional; fractional = modf(14.67, &integral);
jmallen3 Δημοσ. 25 Νοεμβρίου 2010 Μέλος Δημοσ. 25 Νοεμβρίου 2010 δεν έγινε κατι με τον πάνω τρόπο.Στο Arithmetic operators που με έστειλε ο Hαldol δεν βρήκα κάτι γιατι με το συθμβολο % δεν βγάζει σωστο αποτελεσμα.
Haldol Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 Τι εννοείς δεν έγινε κάτι; Περιέλαβες το <cmath>, έφτιαξες τον κώδικά σου με την modf() και δεν παίρνεις το αναμενόμενο αποτέλεσμα; Δώσε παραπάνω πληροφορίες.
jmallen3 Δημοσ. 25 Νοεμβρίου 2010 Μέλος Δημοσ. 25 Νοεμβρίου 2010 το πρόγραμμα οπως το εχω τωρα ειναι ετσι και λειπει το κενο στη μεταβλητη L που συμβολιζει τα λεπτα του ευρω: >#include <stdio.h> #include <stdlib.h> int main (void) { int D,E,L; printf ("Dwse to poso se draxmes:\n"); scanf ("%d",&D); E=D/340,75; L= printf ("Oi %d draxmes antistoixoyn se:%d Euro kai %d lepta\n",D,E,L); system("pause"); return(0); }
bnvdarklord Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 Καταρχάς δηλωσε το L σαν float. Μετά πες: L = D / 340.75 - E;
Haldol Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 Πρώτο λάθος, γράφεις C ενώ στο θέμα σου λες για C++. Έπειτα χρησιμοποιείς integers για να κάνεις διαίρεση. Το δεκαδικό μέρος τι θα γίνει; Χρειάζεσαι μεταβλητές float γι αυτή τη δουλειά. Φτιάξε αυτά πρώτα. Για τη C το αντίστοιχο header file με αυτό που σου έδωσα πριν, είναι το <math.h>. Η συνάρτηση είναι η ίδια.
Haldol Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 Καταρχάς δηλωσε το L σαν float. Μετά πες: L = D / 340.75 - E; Και αυτό είναι λάθος. Πρώτα υπολογίζεται η παράσταση και μετά ανατίθεται στην L. Δηλαδή στον κώδικά σου πάλι χρησιμοποιείς integer για τη διαίρεση. Το σωστό θα ήταν: >L = (float)D/340.75 - E;
jmallen3 Δημοσ. 25 Νοεμβρίου 2010 Μέλος Δημοσ. 25 Νοεμβρίου 2010 εκανα αυτο που λεει ο bnvdarklord και το μονο προβλημα ειναι οτι τα λεπτα τα εμφανιζει ετσι:0,67 ενω εγω θέλω χωρίς το ''0,''. αυτο με τη συναρτηση και το math.h δεν εχω καταλαβει πως να το φτιαξω
Haldol Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 εκανα αυτο που λεει ο bnvdarklord και το μονο προβλημα ειναι οτι τα λεπτα τα εμφανιζει ετσι:0,67 ενω εγω θέλω χωρίς το ''0,''. αυτο με τη συναρτηση και το math.h δεν εχω καταλαβει πως να το φτιαξω Quick 'n' dirty solution: πολλπλασίασε τα λεπτά επί 100 και στην printf() τύπωσέ τα ως %.0f.
bnvdarklord Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 Και αυτό είναι λάθος. Πρώτα υπολογίζεται η παράσταση και μετά ανατίθεται στην L. Δηλαδή στον κώδικά σου πάλι χρησιμοποιείς integer για τη διαίρεση. Το σωστό θα ήταν: >L = (float)D/340.75 - E; Γιατί; Αφου ο διαιρέτης ειναι double int/double θα δωσει double, και μετα double - int θα δώσει double. Η κανω λαθος;
jmallen3 Δημοσ. 25 Νοεμβρίου 2010 Μέλος Δημοσ. 25 Νοεμβρίου 2010 Quick 'n' dirty solution: πολλπλασίασε τα λεπτά επί 100 και στην printf() τύπωσέ τα ως %.0f. το εκανα αυτο και βγαζζει σωστα αποτελεσματα σε ολες τις τιμες που εχω να εκτελεσω απο την ασκηση εκτος απο οταν βαλω 4000000000 βγαζει λαθος αποτελεσματα με αρνητικο προσημο
MitsakosGR Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 Quick 'n' dirty solution: πολλπλασίασε τα λεπτά επί 100 και στην printf() τύπωσέ τα ως %.0f. το εκανα αυτο και βγαζζει σωστα αποτελεσματα σε ολες τις τιμες που εχω να εκτελεσω απο την ασκηση εκτος απο οταν βαλω 4000000000 βγαζει λαθος αποτελεσματα με αρνητικο προσημο Το 4000000000 είναι εκτός ορίων για int... Δοκίμασε με long. --Edit: Δοκίμασε με "long int" ή "unsigned int" και με "long long int"
Haldol Δημοσ. 25 Νοεμβρίου 2010 Δημοσ. 25 Νοεμβρίου 2010 Γιατί; Αφου ο διαιρέτης ειναι double int/double θα δωσει double, και μετα double - int θα δώσει double. Η κανω λαθος; Όχι ακριβώς. Θα γίνει ακέραια διαίρεση. Το int/double θα δώσει int. Δοκίμασε να τρέξεις κάτι σαν printf(10/3.0); να δεις τι αποτέλεσμα θα βγάλει.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.