συνεχεια τυπωνει 1, γτ?

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
babis91
Δημοσιεύσεις: 9
Εγγραφή: 27 Δεκ 2005 22:22

συνεχεια τυπωνει 1, γτ?

Δημοσίευση από babis91 » 30 Μαρ 2009 22:12

Καλησπερα παιδια.Χρειαζομαι λιγο help με ενα προγραμμα στη c.

Κώδικας: Επιλογή όλων

#include <stdio.h>
int power&#40;int k,int n&#41;;
int main&#40;&#41;
&#123;
    int k,n;
    printf&#40;"Ayto to programma ypologizei tis rizes olon twn pragmatikwn arithmwn\n"&#41;;
    printf&#40;"H riza enos arithmou mporei na graftei kai d=k^&#40;1/n&#41;\n"&#41;;
    printf&#40;"\n"&#41;;
    printf&#40;"dwse dio times gia to k kai to n\n"&#41;;
    printf&#40;"k&#58; "&#41;;
    scanf&#40;"%d",&k&#41;;
    printf&#40;"n&#58; "&#41;;
    scanf&#40;"%d",&n&#41;;
    printf&#40;"k^&#40;1/n&#41;=%d\n",power&#40;k,1/n&#41;&#41;;
    system&#40;"pause"&#41;;
    return 0;
&#125;
    int power&#40;int k,int n&#41;
    &#123;int i,d=1;
    for&#40;i=0;i<n;i++&#41;
    d=d*k;
    return d;
&#125;
Μπορειτε να μου πειτε γτ οτι αριθμο και να δωσω τυπωνει 1 ???

Άβαταρ μέλους
nirvana
Δημοσιεύσεις: 241
Εγγραφή: 01 Σεπ 2005 18:28
Τοποθεσία: Αγ. Παρασκευή

συνεχεια τυπωνει 1, γτ?

Δημοσίευση από nirvana » 30 Μαρ 2009 22:58

Δεν εχω χρονο να σου το κανω να τρέχει σωστα αλλά...
2 προβλήματα που είδα αμέσως
α) Μην βάζεις παντού int. Πραγματικό αριθμό δεν θές?
Βαλε την συνάρτηση να γυρνάει float και την τελευταία printf αντι %d => %f.

β) Δες τι αριθμούς περνάς στην συνάρτηση: Εστω οτι δίνω k=4 και n=2 εσυ μες την function του λες for(i=0; i<1/2; i++) κανε ταδε. Οπότε δεν μπαίνει καν στην for και σου γυρναει το d=1 όπως το έχεις αρχικοποιήσει. ;)

Πάντως δεν είναι ευκολο να υλοποιήσεις αυτή τη συνάρτηση μονος. Σκέψου π.χ. οτι για την τεταρτη ρίζα του 17 π.χ. πρέπει να βρές εναν αριθμο που όταν τον υψώνεις στην 4η δύναμη να σου δείνει 17. Δεν είναι πολύ έυκολο. Δεν νομίζω πως έτσι όπως το πας θα βγάλεις κάτι. Καλύτερα να βρεις κάτι έτοιμο.

μπορείς πάντα να χρησημοποιήσεις αυτό:

Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <math.h>
int main&#40;&#41;
&#123;
    float k,n;
    float apotelesma=0;
    printf&#40;"Ayto to programma ypologizei tis rizes olon twn pragmatikwn arithmwn\n"&#41;;
    printf&#40;"H riza enos arithmou mporei na graftei kai d=k^&#40;1/n&#41;\n"&#41;;
    printf&#40;"\n"&#41;;
    printf&#40;"dwse dio times gia to k kai to n\n"&#41;;
    printf&#40;"k&#58; "&#41;;
    scanf&#40;"%f",&k&#41;;
    printf&#40;"n&#58; "&#41;;
    scanf&#40;"%f",&n&#41;;
    apotelesma=pow&#40;k,1/n&#41;;
    printf&#40;"k^&#40;1/n&#41;=%f\n",apotelesma&#41;;
    return 0;
&#125;
Τελευταία επεξεργασία από το μέλος nirvana την 30 Μαρ 2009 23:26, έχει επεξεργασθεί 1 φορά συνολικά.

babis91
Δημοσιεύσεις: 9
Εγγραφή: 27 Δεκ 2005 22:22

συνεχεια τυπωνει 1, γτ?

Δημοσίευση από babis91 » 30 Μαρ 2009 23:20

nirvana έγραψε:Δεν εχω χρονο να σου το κανω να τρέχει σωστα αλλά...
2 προβλήματα που είδα αμέσως
α) Μην βάζεις παντού int. Πραγματικό αριθμό δεν θές?
Βαλε την συνάρτηση να γυρνάει float και την τελευταία printf αντι %d => %f.

β) Δες τι αριθμούς περνάς στην συνάρτηση: Εστω οτι δίνω k=4 και n=2 εσυ μες την function του λες for(i=0; i<1/2; i++) κανε ταδε. Οπότε δεν μπαίνει καν στην for και σου γυρναει το d=1 όπως το έχεις αρχικοποιήσει. ;)
α)οταν βαζω στην τελευταια printf αντι για %d => %f τοτε γυρναει αποτελεσμα 0,0000 :-?

β)στο παραδειγμα που λες ισχυει οτι το i<1/2 αφου το εχω αρχικοποιησει, γιατι δεν συνεχιζει παρακατω στο d=d*k ???

σορρυ για το πριξιμο αλλα ειμαι νεος στην C κ δεν ξερω πολλα :)

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

συνεχεια τυπωνει 1, γτ?

Δημοσίευση από dva_dev » 30 Μαρ 2009 23:26

Εχεις τη δήλωση int power(int k, int n)

Δίνει ο χρήστης το 2 (n=2)
Καλείς την power(k, 1/n) -> power(k, ???) πόσο;
Καλείται η power με k, n=0 γιατί;

Άβαταρ μέλους
nirvana
Δημοσιεύσεις: 241
Εγγραφή: 01 Σεπ 2005 18:28
Τοποθεσία: Αγ. Παρασκευή

συνεχεια τυπωνει 1, γτ?

Δημοσίευση από nirvana » 30 Μαρ 2009 23:36

α) εμένα προσωπικά ο gcc μου γυρνάει -0.007788.
β) το κεφάλι μου είναι λίγο σουπα και δεν μπορώ να το σκεφτώ. Πάντως έκανα το πάνω μηνυμα edit και έχει έναν κώδικα που ισχύει. Αν το θες για προσωπική χρήση και όχι για καμιά εργασία μην σπας το κεφάλι σου. Δεν έχει νόημα. Χρησιμοποίησε αυτο. Και για του λόγου το αληθές κοίτα και μια υλοπόιηση της τετραγωνικής ριζας. http://www.dreamincode.net/code/snippet244.htm.

Φαντάσου να πρέπει να υπολογίσεις οποιαδήποτε ριζα και όχι μονο την τετραγωνική στην function. Εγω δεν θα είχα το κουράγιο να το κάνω. :p

babis91
Δημοσιεύσεις: 9
Εγγραφή: 27 Δεκ 2005 22:22

συνεχεια τυπωνει 1, γτ?

Δημοσίευση από babis91 » 30 Μαρ 2009 23:42

Εχεις τη δήλωση int power(int k, int n)

Δίνει ο χρήστης το 2 (n=2)

Καλείς την power(k, 1/n) -> power(k, ???) πόσο;
αφου ο χρηστης εχει δωσει το n=2 αρα και η power δεν θα αλλαξει σε power(k,1/2) ???

Καλείται η power με k, n=0 γιατί;
το n δεν εχει ηδη γινει 1/2 απο πριν?


@nirvana δυστηχος το θελω για μια εργασια στη σχολη.......

Επειδη ο κωδικας που δινω δεν τον κοβω για πολυ σωστο αν εχετε να προτεινετε κατι αλλο που να χρησιμοποιειται ο τυπος k^(1/n) πειτε το.......

babis91
Δημοσιεύσεις: 9
Εγγραφή: 27 Δεκ 2005 22:22

συνεχεια τυπωνει 1, γτ?

Δημοσίευση από babis91 » 30 Μαρ 2009 23:55

Τελικα θα χρησιμοποιεισω τον κωδικα του nirvana να τελειωνουμε γτ πονεσε κ το κεφαλι μου :D
Ευχαριστω ολους σας για την βοηθεια!!!!!!!

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

συνεχεια τυπωνει 1, γτ?

Δημοσίευση από dva_dev » 31 Μαρ 2009 00:39

Να σου πως καλά θα κάνεις. Είναι να πονοκεφαλιάζουμε βραδιάτικα;

Ο επόμενος που θα χρειαστεί κάτι αντίστοιχο, αν δεν έχει πονοκέφαλο, ίσως να του φανεί χρήσιμο και το http://en.wikipedia.org/wiki/Nth_root_algorithm . Βέβαια αυτό απαιτεί διάβασμα συνεπώς μακρυά από εμάς.

Αν έχει πρόβλημα στο τι σημαίνει int και float ή double όσον αφορά τις διαιρέσεις και τις παραμέτρους ίσως ο παρακάτω κώδικας να του διευκρινίσει μερικά σημεία.
(edited)

Κώδικας: Επιλογή όλων

#include <stdio.h> 
#include <stdlib.h>

void testINT&#40;int param&#41;;
void testFLOAT&#40;float param&#41;;

int main&#40;&#41; 
&#123;
	int int1 = 3;
	int int2 = 2;
	float float1 = 3.0;
	float float2 = 2.0;

	printf&#40;"%d/%d=%f\n", int1,	 int2,  &#40;float&#41;&#40;int1/int2&#41;&#41;;
	printf&#40;"%f/%f=%f\n", float1, float2, &#40;float&#41;&#40;float1/float2&#41;&#41;;
	printf&#40;"%d/%f=%f\n", int1,   float2, &#40;float&#41;&#40;int1/ float2&#41;&#41;;
	printf&#40;"%f/%d=%f\n", float1, int2,   &#40;float&#41;&#40;float1/int2&#41;&#41;;

	int intX = int1/int2;
	float floatX = float1/float2;
	
	printf&#40;"intX = %d\n", intX&#41;;
	printf&#40;"floatX = %f\n", floatX&#41;;

	printf&#40;"calling testINT&#40;intX&#41;; "&#41;; testINT&#40;intX&#41;;
	printf&#40;"calling testINT&#40;floatX&#41;; "&#41;; testINT&#40;floatX&#41;;

	printf&#40;"calling testFLOAT&#40;intX&#41;; "&#41;; testFLOAT&#40;intX&#41;;
	printf&#40;"calling testFLOAT&#40;floatX&#41;; "&#41;; testFLOAT&#40;floatX&#41;;

    system&#40;"pause"&#41;; 
    return 0; 
&#125;

void testINT&#40;int intParam&#41;
&#123;
	printf&#40;"intParam=%d\n", intParam&#41;;
&#125;

void testFLOAT&#40;float floatParam&#41;
&#123;
	printf&#40;"floatParam=%f\n", floatParam&#41;;
&#125;

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

συνεχεια τυπωνει 1, γτ?

Δημοσίευση από virxen75 » 31 Μαρ 2009 12:23

Μην ξενάτε ότι ισχύει και το α^y=exp(y*log(a))

ένα απλό παράδειγμα

Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <math.h>

void main&#40;&#41;&#123;
float vasi=4.0f;
float ekuetis=1.0f/2.0f;
printf&#40;"tetragoniki riza toy 4=4^&#40;1/2&#41;=%f",exp&#40;ekuetis*log&#40;vasi&#41;&#41;&#41;;
&#125;

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης