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

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

Δημοσ.

Καλησπερα,η εκφωνηση της ασκησης :

Εστω η αναδρομικη σχεση
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
 

Ευχαριστω
 
Δημοσ.

Η sn δεν μπορεί να είναι και όνομα συνάρτησης και μεταβλητής

 

int sn(int n)
{
    if(n==0)
       return 1;
    else
        return an(n)+sn(n-1);
}

 

Λιγο πιο δύσκολο η αναδρομική sn() να μην χρησιμοποιεί την an() 

Δημοσ.

 

Η 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! 

Δημοσ.

Λείπει ένα ')' στην  printf("%f",sn(n);

Δες μήπως έχεις και τιποτα αόρατους χαρακτήρες στον C-editor σου αν εκανες copy-paste κώδικα απο το site

Δημοσ.

Λείπει ένα ')' στην  printf("%f",sn(n);

Δες μήπως έχεις και τιποτα αόρατους χαρακτήρες στον C-editor σου αν εκανες copy-paste κώδικα απο το site

ευχαριστω το βρηκα.. οσον αφορα την 2η υλοποιηση, θα αλλαξω μονο την sn το υπολοιπο προγραμμα θα μεινει ως εχει?

Δημοσ.

Αν θες να είναι τελείως επαναληπτική δεν πρέπει να καλείς την an (αφού η an είναι αναδρομική).

Με δυο for υπολογίζεται εύκολα . .. η με ένα τώρα που το σκέφτομαι 

Δημοσ.

Αν θες να είναι τελείως επαναληπτική δεν πρέπει να καλείς την an (αφού η an είναι αναδρομική).

Με δυο for υπολογίζεται εύκολα . .. η με ένα τώρα που το σκέφτομαι 

μισο λεπτο, στην sn μου λες δλδ οτι δν θα βαλω καθολου an?

Δημοσ.

Επαναληπτική λύση λέει.

 

Η κάλεσε από 0 μέχρι N μια άλλη an (επαναληπτική) , ή κάνε όλες τις πράξεις στη νέα S (αυτό είναι πιο γρήγορο γιατί δεν κάνεις επαναλαμβανόμενους υπολογισμούς)

Δημοσ.

οι πραξεις θα συμπεριλαμβανουν την an ομως ετσι?



το αφησα ετσι εφοσον λεει επαναληπτικα την sn

float sn(int n){
int i;
float temp=1;
for(i=0;i<n;i++){
temp=temp+an(i);
}
return temp;
}
Δημοσ.

Χρειαζομαι βοηθεια και στην παρακατω ασκηση:
  Να υλοποιηθει προγραμμα στην 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;
}

Ευχαριστω
Δημοσ.

Τι εννοείς δεν καταλαβαίνεις το έτρεξα και του εδωσα Ν=10 και τόσους τυχαίους αριθμούς παρήγαγε, 1χ1,1χ2,2χ3,2χ5,2χ6,1χ7,1χ9 δηλαδή 10 αριθμούς....

 

Τσέκαρε το παρακάτω αν κάνει αυτό που υποψιάζομαι ότι θες, λίγο πείραξα το printf της 3ης συνάρτησης και το stilish κομμάτι γτ βαρίομουν να κοιτάξω την διπλωματική μου....  :X

 

 

#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;
}

 

 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...