dim94 Δημοσ. 10 Ιανουαρίου 2013 Δημοσ. 10 Ιανουαρίου 2013 Καλησπερα,η εκφωνηση της ασκησης :Εστω η αναδρομικη σχεσηan=(3a2n-1 -1 ) / an-1 , με α0=1, που οριζει μια ακολουθια αριθμων.α)Υλοποιηστε αναδρομικη συναρτηση που παιρνει σαν ορισμα μια ακεραια τιμη και επιστρεφει την τιμη an β)Έστω S(n)=a0+a1+…+an , υλοποιηστε συναρτηση που να παιρνει σαν ορισμα μια ακεραια τιμη n και να επιστρεφει την s(n). Δωστε μια αναδρομικη και μια επαναληπτικη λυση.Παραθετω τον μεχρι τωρα κωδικα: #include<stdio.h> float an(int n); float sn(int n,float an); main() { int k,n; printf("Dwste akeraia timh: "); scanf("%d",&n); an(n); printf("%f ",an(n)); sn(n,an(n)); printf("%f", sn(n,an(n))); } float an(int n){ if(n==0) return 1; else { int t=an(n-1); return (3*t*t-1)/t; } } float sn(int n,float an){ int i; float sn=1,temp; for(i=0;i<n;i++){ temp=an(i); return sn+temp; } } Μου εμφανιζει error: .c: In function βsnβ: .c:30: error: called object βanβ is not a function Ευχαριστω
albNik Δημοσ. 10 Ιανουαρίου 2013 Δημοσ. 10 Ιανουαρίου 2013 Η sn δεν μπορεί να είναι και όνομα συνάρτησης και μεταβλητής int sn(int n) { if(n==0) return 1; else return an(n)+sn(n-1); } Λιγο πιο δύσκολο η αναδρομική sn() να μην χρησιμοποιεί την an()
dim94 Δημοσ. 10 Ιανουαρίου 2013 Μέλος Δημοσ. 10 Ιανουαρίου 2013 Η sn δεν μπορεί να είναι και όνομα συνάρτησης και μεταβλητής int sn(int n) { if(n==0) return 1; else return an(n)+sn(n-1); } Λιγο πιο δύσκολο η αναδρομική sn() να μην χρησιμοποιεί την an() ευχαριστω.. ωρα ο κωδικας μου ειναι αυτος: #include<stdio.h> float an(int n); float sn(int n); main() { int n; printf("Dwste akeraia timh: "); scanf("%d",&n); an(n); printf("%f",an(n)); sn(n); printf("%f",sn(n); } float an(int n){ if(n==0) return 1; else { int t=an(n-1); return (3*t*t-1)/t; } } float sn(int n){ int i; if(n==0) return 1; else { return an(n)+sn(n-1); } } Ομως απ το πουθενα μου εβγαλε αυτα: 13: error: expected β)β before β;β token 14: error: expected β;β before β}β token Δεν βλεπω καποιο λαθος.... ok to brhka..sorry!
albNik Δημοσ. 10 Ιανουαρίου 2013 Δημοσ. 10 Ιανουαρίου 2013 Λείπει ένα ')' στην printf("%f",sn(n); Δες μήπως έχεις και τιποτα αόρατους χαρακτήρες στον C-editor σου αν εκανες copy-paste κώδικα απο το site
dim94 Δημοσ. 10 Ιανουαρίου 2013 Μέλος Δημοσ. 10 Ιανουαρίου 2013 Λείπει ένα ')' στην printf("%f",sn(n); Δες μήπως έχεις και τιποτα αόρατους χαρακτήρες στον C-editor σου αν εκανες copy-paste κώδικα απο το site ευχαριστω το βρηκα.. οσον αφορα την 2η υλοποιηση, θα αλλαξω μονο την sn το υπολοιπο προγραμμα θα μεινει ως εχει?
albNik Δημοσ. 10 Ιανουαρίου 2013 Δημοσ. 10 Ιανουαρίου 2013 Αν θες να είναι τελείως επαναληπτική δεν πρέπει να καλείς την an (αφού η an είναι αναδρομική). Με δυο for υπολογίζεται εύκολα . .. η με ένα τώρα που το σκέφτομαι
dim94 Δημοσ. 11 Ιανουαρίου 2013 Μέλος Δημοσ. 11 Ιανουαρίου 2013 Αν θες να είναι τελείως επαναληπτική δεν πρέπει να καλείς την an (αφού η an είναι αναδρομική). Με δυο for υπολογίζεται εύκολα . .. η με ένα τώρα που το σκέφτομαι μισο λεπτο, στην sn μου λες δλδ οτι δν θα βαλω καθολου an?
albNik Δημοσ. 11 Ιανουαρίου 2013 Δημοσ. 11 Ιανουαρίου 2013 Επαναληπτική λύση λέει. Η κάλεσε από 0 μέχρι N μια άλλη an (επαναληπτική) , ή κάνε όλες τις πράξεις στη νέα S (αυτό είναι πιο γρήγορο γιατί δεν κάνεις επαναλαμβανόμενους υπολογισμούς)
dim94 Δημοσ. 11 Ιανουαρίου 2013 Μέλος Δημοσ. 11 Ιανουαρίου 2013 οι πραξεις θα συμπεριλαμβανουν την an ομως ετσι? το αφησα ετσι εφοσον λεει επαναληπτικα την snfloat sn(int n){ int i; float temp=1; for(i=0;i<n;i++){ temp=temp+an(i); } return temp; }
albNik Δημοσ. 11 Ιανουαρίου 2013 Δημοσ. 11 Ιανουαρίου 2013 Άντε να το πάρει το ποτάμι int S_new(int n) { int prev=1; int sum=1; int i=0; for(i=0;i<n;i++) { prev=(3*prev*prev-1)/prev; sum+=prev; } return sum; }
dim94 Δημοσ. 11 Ιανουαρίου 2013 Μέλος Δημοσ. 11 Ιανουαρίου 2013 Χρειαζομαι βοηθεια και στην παρακατω ασκηση: Να υλοποιηθει προγραμμα στην c που να παραγει Ν τυχαιους αριθμους με τιμες απο το 0-9 και στη συνεχεια να υπολογιζει το ιστρογραμμα τους,δηλαδη ποσες φορες εμφανιζεται ο καθενας απ αυτους.Η ασκηση με καθοδηγει να φτιαξω το προγραμμα με τις 3 συναρτησεις που εχω χρησιμοποιησει..Μου βγαινουν τοσα αστερακια οσα ειναι και το Ν και δεν καταλαβαινω το γιατι..Σας παραθετω τον κωδικα: #include<stdio.h> #include<stdlib.h> void random_vector(int array[],int N); void calculate_hist(int array[],int N,int hist[10]); void print_hist(int hist[10]); main() { int i,N,hist[10]; printf("Dwste to N"); scanf("%d",&N); int array[N]; for(i=0;i<10;i++) hist=0;// mhdenizoume thn suxnothta emfanishs twn arithmwn 0-9 random_vector(array,N); calculate_hist(array,N,hist); print_hist(hist); } void random_vector(int array[],int N){ int i; for(i=0;i<N;i++) array=rand()%10; return; } void calculate_hist(int array[],int N,int hist[]){ int i,j; for(i=0;i<N;i++){ for(j=0;j<10;j++){ if(array==j){ ++hist[j]; break; } } } return; } void print_hist(int hist[]){ int i,j; for(i=0;i<10;i++){ for(j=0;j<hist;j++){ printf("%d: ",i); printf("*"); } printf("\n"); } return; } Ευχαριστω
cyberrobot Δημοσ. 11 Ιανουαρίου 2013 Δημοσ. 11 Ιανουαρίου 2013 Τι εννοείς δεν καταλαβαίνεις το έτρεξα και του εδωσα Ν=10 και τόσους τυχαίους αριθμούς παρήγαγε, 1χ1,1χ2,2χ3,2χ5,2χ6,1χ7,1χ9 δηλαδή 10 αριθμούς.... Τσέκαρε το παρακάτω αν κάνει αυτό που υποψιάζομαι ότι θες, λίγο πείραξα το printf της 3ης συνάρτησης και το stilish κομμάτι γτ βαρίομουν να κοιτάξω την διπλωματική μου.... #include<stdio.h> #include<stdlib.h> #define bucket 10 void random_vector(int array[],int N); void calculate_hist(int array[],int N,int hist[bucket]); void print_hist(int hist[bucket]); main() { int i,N,hist[bucket]; printf("Dwste to N:\t"); scanf("%d",&N); int array[N]; for(i=0;i<bucket;i++) hist[i]=0;// mhdenizoume thn suxnothta emfanishs twn arithmwn 0-9 random_vector(array,N); calculate_hist(array,N,hist); print_hist(hist); } void random_vector(int array[],int N){ int i; for(i=0;i<N;i++) array[i]=rand()%10; return; } void calculate_hist(int array[],int N,int hist[]){ int i,j; for(i=0;i<N;i++){ for(j=0;j<bucket;j++){ if(array[i]==j){++hist[j];break;} } } return; } void print_hist(int hist[]){ int i,j; for(i=0;i<bucket;i++){ printf("%d: ",i); for(j=0;j<hist[i];j++){ printf("*"); } printf("\n"); } return; }
albNik Δημοσ. 11 Ιανουαρίου 2013 Δημοσ. 11 Ιανουαρίου 2013 Τα return στο τέλος των συναρτήσεων δε χρειάζονται
defacer Δημοσ. 11 Ιανουαρίου 2013 Δημοσ. 11 Ιανουαρίου 2013 Επίσης το calculate_hist γιατί γίνεται λίγο "ποντιακά"; Το εσωτερικό for δεν εξυπηρετεί κανένα σκοπό.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα