Προς το περιεχόμενο

C++


jmallen3

Προτεινόμενες αναρτήσεις

Δημοσ.

Έχψ μια άσκηση που θέλει να δίνει ο χρήστης ένα ποσό σε δραχμές και να μετατρέπει το προγραμμα σε Ευρώ και λεπτά του Ευρώ.Δηλαδή θα εμφανίζεται στο τέλος αν δωσει σαν είσοδο 5000 ο χρήστης αυτό: 14 Ευρώ αι 67 λεπτά.Το πρόβλημα μου ειναι οτι δεν ξέρω πως να βγαίνει το υπολοιπο της διαιρεσης. πχ: 5000/340,75=14,67. Αυτό το 67 για τα λεπτά πως γίνεται να εμφανίζεται?

Δημοσ.

Η απλούστερη λύση είναι να χρησιμοποιήσεις την modf() από το <cmath> header. Χρησιμοποιείται όπως γράφω παρακάτω. Θα πάρει σαν είσοδο τον αριθμό που θέλεις, θα επιστρέψει το δεκαδικό κομμάτι στην fractional και θα βάλει το ακέραιο τμήμα εκεί που δείχνει ο &integral.

 

>float integral, fractional;

fractional = modf(14.67, &integral);

Δημοσ.

δεν έγινε κατι με τον πάνω τρόπο.Στο Arithmetic operators που με έστειλε ο Hαldol δεν βρήκα κάτι γιατι με το συθμβολο % δεν βγάζει σωστο αποτελεσμα.

Δημοσ.

Τι εννοείς δεν έγινε κάτι; Περιέλαβες το <cmath>, έφτιαξες τον κώδικά σου με την modf() και δεν παίρνεις το αναμενόμενο αποτέλεσμα; Δώσε παραπάνω πληροφορίες.

Δημοσ.

το πρόγραμμα οπως το εχω τωρα ειναι ετσι και λειπει το κενο στη μεταβλητη 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);
   }        

Δημοσ.

Πρώτο λάθος, γράφεις C ενώ στο θέμα σου λες για C++.

 

Έπειτα χρησιμοποιείς integers για να κάνεις διαίρεση. Το δεκαδικό μέρος τι θα γίνει; Χρειάζεσαι μεταβλητές float γι αυτή τη δουλειά. Φτιάξε αυτά πρώτα. Για τη C το αντίστοιχο header file με αυτό που σου έδωσα πριν, είναι το <math.h>. Η συνάρτηση είναι η ίδια.

Δημοσ.

Καταρχάς δηλωσε το L σαν float.

Μετά πες:

L = D / 340.75 - E;

 

Και αυτό είναι λάθος. Πρώτα υπολογίζεται η παράσταση και μετά ανατίθεται στην L. Δηλαδή στον κώδικά σου πάλι χρησιμοποιείς integer για τη διαίρεση. Το σωστό θα ήταν:

 

>L = (float)D/340.75 - E;

Δημοσ.

εκανα αυτο που λεει ο bnvdarklord και το μονο προβλημα ειναι οτι τα λεπτα τα εμφανιζει ετσι:0,67 ενω εγω θέλω χωρίς το ''0,''.

αυτο με τη συναρτηση και το math.h δεν εχω καταλαβει πως να το φτιαξω :blink:

Δημοσ.

εκανα αυτο που λεει ο bnvdarklord και το μονο προβλημα ειναι οτι τα λεπτα τα εμφανιζει ετσι:0,67 ενω εγω θέλω χωρίς το ''0,''.

αυτο με τη συναρτηση και το math.h δεν εχω καταλαβει πως να το φτιαξω :blink:

 

Quick 'n' dirty solution: πολλπλασίασε τα λεπτά επί 100 και στην printf() τύπωσέ τα ως %.0f.

Δημοσ.

Και αυτό είναι λάθος. Πρώτα υπολογίζεται η παράσταση και μετά ανατίθεται στην L. Δηλαδή στον κώδικά σου πάλι χρησιμοποιείς integer για τη διαίρεση. Το σωστό θα ήταν:

 

>L = (float)D/340.75 - E;

 

Γιατί; Αφου ο διαιρέτης ειναι double int/double θα δωσει double, και μετα double - int θα δώσει double. Η κανω λαθος; :huh:

Δημοσ.

Quick 'n' dirty solution: πολλπλασίασε τα λεπτά επί 100 και στην printf() τύπωσέ τα ως %.0f.

 

το εκανα αυτο και βγαζζει σωστα αποτελεσματα σε ολες τις τιμες που εχω να εκτελεσω απο την ασκηση εκτος απο οταν βαλω 4000000000 βγαζει λαθος αποτελεσματα με αρνητικο προσημο

Δημοσ.

Quick 'n' dirty solution: πολλπλασίασε τα λεπτά επί 100 και στην printf() τύπωσέ τα ως %.0f.

 

το εκανα αυτο και βγαζζει σωστα αποτελεσματα σε ολες τις τιμες που εχω να εκτελεσω απο την ασκηση εκτος απο οταν βαλω 4000000000 βγαζει λαθος αποτελεσματα με αρνητικο προσημο

Το 4000000000 είναι εκτός ορίων για int... Δοκίμασε με long.

 

--Edit:

Δοκίμασε με "long int" ή "unsigned int" και με "long long int"

Δημοσ.

Γιατί; Αφου ο διαιρέτης ειναι double int/double θα δωσει double, και μετα double - int θα δώσει double. Η κανω λαθος; :huh:

 

Όχι ακριβώς. Θα γίνει ακέραια διαίρεση. Το int/double θα δώσει int. Δοκίμασε να τρέξεις κάτι σαν printf(10/3.0); να δεις τι αποτέλεσμα θα βγάλει.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...