BloodDonor89 Δημοσ. 25 Ιανουαρίου 2014 Δημοσ. 25 Ιανουαρίου 2014 (επεξεργασμένο) Καλησπερα, εχω κατι ασκησεις απο την σχολη, αλλα εχω κολλησει σε μια, δεν θεωρω οτι ειναι κατι δυσκολο, αλλα τωρα ειλικρινα εχω κολλησει... Λοιπον... πρεπει το προγραμμα να κανεις την ακολουθει πραξη: 1/2*1/3*1/4*1/5*1/6*1/7*1/8*1/9*1/10 αυτη η πραξη ομως να γινει με for. Δοκιμαζω να κανω αυτο. δηλαδη με διπλη for αλλα δεν μου βγαινει, οταν το τρεχω μου βγαζει αποτελεσμα 0. #include <stdio.h> int main (void) { int p, i, p1; p=1; p1=1 for (i=1; i<=10; i++) { p1=p/i; for (i=2; i<=10; i++) p=p/i*p1; } printf("%f", p); } δοκιμασα παρα πολλες παραλαγες. Ακομα κι ο πολλαπλασιασμος να γινει ακριβως πριν την print. αλλα αυτο νομιζω πως ειναι μαθηματικο λαθος. δοκιμασα κι αυτο #include <stdio.h> int main (void) { int p, i; p=1; for (i=1; i<=10; i++) p=1/p*1/p; printf("%f", p); } αλλα ουτε αυτο εβγαλε καποιο αποτελεσμα... Καθε συμβουλη ειναι δεκτη. Επεξ/σία 25 Ιανουαρίου 2014 από BloodDonor89
geomagas Δημοσ. 25 Ιανουαρίου 2014 Δημοσ. 25 Ιανουαρίου 2014 Θέλεις το γινόμενο των 1/i, όπου i από 2 έως και 10. Δεν χρειάζεσαι διπλό for. Ένα p που αρχικά είναι 1, και το οποίο πολλαπλασιάζεις κάθε φορά με 1/i.
Moderators Kercyn Δημοσ. 25 Ιανουαρίου 2014 Moderators Δημοσ. 25 Ιανουαρίου 2014 (επεξεργασμένο) #include <iostream> using namespace std; int main(int argc, char **argv) { float prod= 1.0; for (int i = 2; i <= 10; i++) prod *= 1.0/i; cout << "Result: " << prod << endl; return 0; } Σου βγάζει 0 γιατί στη C++ (και στη C, και αυτό που έχεις γράψει είναι C) οι πράξεις μεταξύ 2 μεταβλητών ίδιου τύπου δίνουν αποτέλεσμα τον ίδιο τύπο. Δηλαδή, αν διαιρέσεις μια int με μια άλλη int, το αποτέλεσμα θα είναι int. Που σημαίνει ότι αν int x = 3 και int y = 5, τότε x/y = 0, όχι 0.6. Επεξ/σία 26 Ιανουαρίου 2014 από Kercyn 1
BloodDonor89 Δημοσ. 25 Ιανουαρίου 2014 Μέλος Δημοσ. 25 Ιανουαρίου 2014 Ναι σωστα, C γραφω. Μπερδευτηκα απο το προγραμμα με το οποιο γραφω. Εννοεις δηλαδη καπως ετσι; { int i; float p; p=1; for (i=2; i<=10; i++) p=p*1/i; printf("%f", p); }
Moderators Kercyn Δημοσ. 25 Ιανουαρίου 2014 Moderators Δημοσ. 25 Ιανουαρίου 2014 Ναι, αυτό πρέπει να σου δουλεύει. Το 1/i άλλαξέ το σε 1.0/i, γιατί και το 1 και το i είναι int, οπότε θα σου επιστρέψουν int.
BloodDonor89 Δημοσ. 25 Ιανουαρίου 2014 Μέλος Δημοσ. 25 Ιανουαρίου 2014 0.0000000 μου εμφανιζει οταν τρεχει.
Moderators Kercyn Δημοσ. 25 Ιανουαρίου 2014 Moderators Δημοσ. 25 Ιανουαρίου 2014 int i; float p = 1.0; for (i = 2; i <= 10; i++) p = p * 1.0/i; printf("%.15f\n", p); Αυτό μου δίνει αποτέλεσμα 0.000000275573200. Το .15 στην printf του λέει με πόση ακρίβεια να εκτυπώσει το p.
BloodDonor89 Δημοσ. 25 Ιανουαρίου 2014 Μέλος Δημοσ. 25 Ιανουαρίου 2014 ωραιος....τωρα μου το εβγαλε μια χαρα. Δεν χρειαζοταν να βαλω 1.0/i Σ ευχαριστω πολυ...
Timonkaipumpa Δημοσ. 25 Ιανουαρίου 2014 Δημοσ. 25 Ιανουαρίου 2014 int indx; int max_number = 10; double p = 1.0; for (indx = 2; indx <= max_number; indx++) p *= (double) indx; double result = 1/p; 1
gon1332 Δημοσ. 26 Ιανουαρίου 2014 Δημοσ. 26 Ιανουαρίου 2014 Εναλλακτικά: #include <stdio.h> #include <float.h> #define ERROR DBL_MAX double magic(int from, int to); int main(void) { double m; if (ERROR == (m = magic(2, 10))) printf("ERROR: \"to\" must be larger than \"from\"\n"); else printf("%.15lf\n", m); return(0); } double magic(int from, int to) { if (to == from) return(1.0 / to); else if (to < from) return(ERROR); return((1.0 / to) * magic(from, to - 1)); }
παπι Δημοσ. 26 Ιανουαρίου 2014 Δημοσ. 26 Ιανουαρίου 2014 #include <iostream> using namespace std; int main(int argc, char **argv) { float prod= 1.0f; for (float i = 2.f; i <= 10.f; i+= 1.f) prod *= 1.0f/i; cout << "Result: " << prod << endl; return 0; }
migf1 Δημοσ. 26 Ιανουαρίου 2014 Δημοσ. 26 Ιανουαρίου 2014 Αν σε ενδιαφέρει ο συνδυασμός ακρίβειας και ταχύτητας, δοκίμασε με τον κώδικα που σου έδωσε παραπάνω ο Timonkaipumpa. Αν μάλιστα δεν σε ενδιαφέρει να είναι generic, δηλαδή στοχεύει μονάχα στην συγκεκριμένη άσκηση και μόνο, τότε δεν χρειάζεσαι ούτε να είναι double η μεταβλητή. Δηλαδή... ... float prod = 1.f; for (int i=2; i < 11; i++) { prod *= i; } printf( "%.15f\n", 1.f/prod ); ... //Έξοδος: // 0.000000275573192 1
Timonkaipumpa Δημοσ. 26 Ιανουαρίου 2014 Δημοσ. 26 Ιανουαρίου 2014 Θα μπορούσε να είναι και int indx = 0; int max_number = 10; double p = 1.0; for (; indx <= max_number; indx++, p *= (double) indx); double result = 1/p;
migf1 Δημοσ. 26 Ιανουαρίου 2014 Δημοσ. 26 Ιανουαρίου 2014 (επεξεργασμένο) Θα μπορούσε να είναι και int indx = 0; int max_number = 10; double p = 1.0; for (; indx <= max_number; indx++, p *= (double) indx); double result = 1/p; Κάνεις ένα τζάμπα iteration ή μου φαίνεται; float prod = 1.f; for (int i=1; ++i < 11; prod *= i); printf( "%.15f\n", 1.f/prod ); ή ... float prod = 1.f; int i = 10; while (prod *= i, i-- != 1); printf( "%.15f\n", 1.f/prod ); EDIT: http://www.insomnia.gr/topic/515793-εχω-κολλησει-σε-μια-ασκηση-της-c/page-2#entry52939719 Επεξ/σία 26 Ιανουαρίου 2014 από migf1 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα