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

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

Δημοσ. (επεξεργασμένο)

Καλησπέρα καταρχήν,

 

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

 

Λοιπόν, τρέχοντας το πρόγραμμα παίρνω διάφορες τιμές σε έναν μονοδιάστατο πίνακα R.

Εδώ οι τιμές δλδ. το i είναι από 1-100000 δηλαδή 100000 τιμές (νούμερα).

Αυτά τα νούμερα κυμαίνονται ας πούμε μεταξύ -300 και 300 όλα ακέραια.

 

Θέλω να μου κάνει print σε ένα αρχείο για τα νούμερα αυτά και πόσες φορές εμφανίζεται το καθένα.

Δηλαδή μια μορφή κάπως έτσι:

 

-300 0

-299 2

-288 3

.

.

.

299 4

300 1

 

Μπορεί να βοηθήσει κάποιος?

Επεξ/σία από p4rasite
Δημοσ.

δεν ειπες σε ποιο σημειο κολησες ομως

 

Έχω 100.000 τιμές (σ'έναν πίνακα) και θέλω να μου τυπώνει σε ένα αρχείο την κάθε τιμή (νούμερο) μία φορά με άυξουσα σειρά και δίπλα να μου εμφανίζει το frequency, δλδ πόσες φορές βρέθηκε αυτό το νούμερο.

 

π.χ αν είχα [-2,0,0,1,3,1,1,1]

 

να τυπώνει:

-2___1

-1___0

0___2

1___4

2___0

3___1

 

ελπίζω να το εξήγησα καλύτερα τώρα :rolleyes:

Δημοσ.

Αυτή είναι η άσκηση:

 

Δημιούργησε ένα πρόγραμμα το οποίο θα εκτελεί τυχαίο περίπατο για Ν=1000 βήματα σε μια διάσταση. Υπολόγισε την μετατόπιση R για αυτά τα Ν βήματα και πραγματοποίησε 100 000 επαναλήψεις.

Βρες την μέση μετατόπιση <R> και την κατανομή του R.

 

κι αυτό έχω κάνει μέχρι στιγμής

>#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 100
#define K 100000

int main()

{ 
   int R_,run,N_run,max,a,min,seed,R[K];
   N_run=K;
   max=0;
   min=0;
   a=0;
   double R_average,;
   R_average=0.;
   seed=12521;
   srand(seed);
   FILE*myfile=fopen("Askisi4(1000).txt","w");
  
for(int i=0;i<K;i++)
        {
       R[i]=0;
        }
int x,y,Dx,Dy,plegma[N],steps,N_steps;
double random_number;

N_steps=1000;

for(x=0;x<N;x++)  
   { 
    plegma[x]=0;
   }

 for(run=0;run<N_run;run++)
{
int random_number1;
random_number1=rand();

x=(int)(100*(double)random_number1/((double)RAND_MAX+1.));

plegma[x]=1;
//printf("x= %d\n",x);

Dx=0;
srand(run);

   for(steps=0;steps<N_steps;steps++)
  { 
    
    random_number=((double)rand())/((double)RAND_MAX+1.);
    plegma[x]=0;
    if(random_number<0.50) 
    {
      x=x+1;
      Dx=Dx+1;
    }
    else if(random_number>=0.50 && random_number<1.00) 
    {
     x=x-1;
     Dx=Dx-1;
    }

    if(x<0) x=x+N;
    else if(x>=N) x=x-N;

 plegma[x]=1;
 
 }
 R_=(Dx);
 R_average=R_average+((double)R_)/((double)N_run);
 R[run]=R_;
}

for(int i=0;i<K;i++)
     {
    printf("%d\n",R[i]);
    fprintf(myfile,"%d\n",R[i]);
     }
printf("\n\nR_average= %lf\n",R_average);

fclose(myfile);
 
 system("PAUSE");	
 return 0;
}

 

Στην ουσία έχω βρεί τις τιμές για το R δλδ έναν πίνακα R[100000]

Επίσης ξέρω ότι η κατανομή γίνεται εύκολα σε Oracle αλλά πρέπει να γίνει σε C.

Η γραφική παράσταση δε μας ενδιαφέρει, αλλά μας ενδιαφέρει να έχουμε τις διαφορετικές τιμές που πήρε το R και πόσες φορές πήρε καθεμία απ'αυτές. Αυτό το κομμάτι κώδικα δεν ξέρω πώς να γράψω.

Δημοσ.

Πολύ εύκολο.

Έστω ότι οι (ακέραιες) τιμές που περιέχει ο R ανήκουν στο διάστημα [Α,Β].

 

1) Φτιάξε έναν πίνακα SFreq με πλήθος στοιχείων Β-Α+1, ήτοι int SFreq[b-A+1].

Kάθε στοιχείο του θα αντιστοιχεί σε μια μοναδική τιμή του [Α,Β] και

θα κρατά την συχνότητα (έναν μετρητή) με την οποία εμφανίζεται η τιμή αυτή στον R.

Aρχικά όλα τα στοιχεία του SFreq είναι 0.

 

2) Σαρώνεις τον R. Για κάθε τιμή του R που συναντάς,

αυξάνεις τον μετρητή που της αντιστοιχεί στον SFreq κατά 1.

Στο τέλος της σάρωσης ο SFreq περιέχει την συχνότητα με την

οποία εμφανίζεται κάθε διαφορετικό στοιχείο του R.

 

3) Το πλήθος των διαφορετικών τιμών που περιέχει ο R,

είναι το πλήθος των στοιχείων του SFreq που δεν έχουν μηδενική συχνότητα :

σαρώνεις τον SFreq και μετράς πόσα στοιχεία του δεν είναι μηδενικά.

 

Και παρεμπιπτόντως, πού κάνετε random walks;

 

-

Δημοσ.

Και παρεμπιπτόντως, πού κάνετε random walks;

 

Καταρχήν ευχαριστώ πολύ για τη βοήθεια, θα το δοκιμάσω και θα ενημερώσω αν έχω κάποιο πρόβλημα.

 

Random walks κάνουμε στο μεταπτυχιακό της Νανοτεχνολογίας και Νανοεπιστημών στο Α.Π.Θ.

Δημοσ.

Υπέθεσα (σωστά λοιπόν !) ότι έχει σχέση κάποια σχέση με τον τομέα υλικών.

Ξέρω ότι με random walks και δίκτυα ασχολείται ο Αργυράκης (εκείνοι οι τυπάδες στο ισόγειο).

 

Καλή επιτυχία.

 

-

Δημοσ.

Υπέθεσα (σωστά λοιπόν !) ότι έχει σχέση κάποια σχέση με τον τομέα υλικών.

Ξέρω ότι με random walks και δίκτυα ασχολείται ο Αργυράκης (εκείνοι οι τυπάδες στο ισόγειο).

 

Καλή επιτυχία.

 

-

 

Πράγματι, καλά κατάλαβες :rolleyes:

 

Ευχαριστώ και πάλι, εντάξει το έκανα!

Ήξερα ότι είναι εύκολο, αλλά είχα κολλήσει και δε μου έβγαινε με τίποτα.

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

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

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

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

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

Σύνδεση

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

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