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

ligh voh8eia xreiazomai!


antonios88

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

Δημοσ.

geia xara paidia!

mou dw8hke mia ergasia kai thn exw ksekinisei.

kapou omws mesa ston kwdika kati dn paei kala!

an mporeite,rixte mia matia na mou peite ti sumvainei!:shifty:

 

o kwdikas mou einai autos(dn ton exw teleiwsei)

 

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <conio.h>

int binarySearch(int A[], int left, int right, int key, int *elements);

 

int main (void)

{

int i,diast,choice,sh;

unsigned long int A[]={0};

printf("Doste thn epithymhth diastash toy pinaka:");

scanf("%d",&diast);

printf("Doste to eidos arxikopoihshs (1:almost uniform, 2: non-uniform)\n");

scanf("%d",&choice);

printf("\n\nArxikopoihsh me times\n\n");

if (choice==1){

srand(time(NULL));

A[0] = (rand() % 100);

srand(time(NULL));

for(i = 1; i < diast; i++){

A = A[i-1]+1+(rand() % 100);

}}

else{

srand(time(NULL));

A[0] = (rand() % 100);

 

for(i = 1; i < diast; i++){

A = A[i-1]+1+(rand() % 100);

}

A[diast-1]=A[diast-2]*50;

}

printf("Arxikopoihsh me times oloklirothike\n\n");

printf("Ta stoixeia toy pinaka einai:");

//!!!!provlima meta thn 5h print ,kati ginetai!

printf("\t%d \n",A[0]);

printf("\t%d \n",A[1]);

printf("\t%d \n",A[2]);

printf("\t%d \n",A[3]);

printf("\t%d \n",A[4]);

printf("\t%d \n",A[5]);

printf("\t%d \n",A[6]);

printf("\t%d \n",A[7]);

printf("\t%d \n",A[8]);

printf("\t%d \n",A[9]);

//kai an to kanw me for ta pragmata ginontai xeirotera!!!!

for (i=0;i<diast;i++){

printf("%d",A);

}

printf("Doste ena stoixeio anazhthshs:");

scanf("\n%d\n",&sh);

 

 

}

 

int binarySearch(int A[], int left, int right, int key, int *elements)

{

return 0;

}

DD_lab2.zip

ask2(prototupo ka8hghth).zip

ask2(diko mou).zip

Δημοσ.

edw einai h askhsh!

>ΜΑΘΗΜΑ: ΕΡΓΑΣΤΗΡΙΟ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ 
ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ: 2
ΛΗΞΗ ΠΡΟΘΕΣΜΙΑΣ ΥΠΟΒΟΛΗΣ: 30/10/07 

Θεματολογία: Δυναμικοί Πίνακες, Αναζήτηση 
Υλοποιήστε τις ακόλουθες συναρτήσεις:
int binarySearch(int A[], int left, int right, int key, int *elements)
Λειτουργία: Υλοποιεί τη δυαδική αναζήτηση σε πίνακα με όρια [left..right]. key είναι 
το κλειδί αναζήτησης και elements μια μεταβλητή που περνιέται με αναφορά και μετρά
το πλήθος των στοιχείων του πίνακα που επισκέφτηκε η διαδικασία. Η συνάρτηση 
επιστρέφει τη θέση που βρέθηκε το key ή -1 αν δε βρέθηκε.
int interpolationSearch(int A[], int left, int right, int key, int *elements)
Λειτουργία: Όμοια με παραπάνω μόνο που η αναζήτηση γίνεται με παρεμβολή (interpolation search). Θυμηθείτε ότι στην παρεμβολή σαν μεσαίο στοιχείο εκλέγεται το:
mid=((double)(key-A[left])/(A[right]-A[left]))*(right-left)+left
int mixedSearch(int A[], int left, int right, int key, int *elements)
Λειτουργία: Όμοια με παραπάνω μόνο που σε κάθε φάση ο αλγόριθμος έχει 50% πιθανότητα να λειτουργήσει σαν binary search και 50% σαν interpolation search.
void displayMatrix(int A[], int length)
Λειτουργία: παίρνει σαν παράμετρο έναν πίνακα και τυπώνει τα στοιχεία του.
Η main() θα διαβάζει το επιθυμητό όριο ενός πίνακα ακεραίων και θα τον δημιουργεί. Η αρχικοποίηση του πίνακα με τιμές θα μπορεί να γίνει με δύο τρόπους (έπειτα από αντίστοιχη επιλογή του χρήστη). Στον πρώτο οι τιμές θα ακολουθούν περίπου uniform κατανομή. Πιο συγκεκριμένα το Α[0] θα αρχικοποιείται σαν τυχαία τιμή από 0...99 και ένα οποιοδήποτε στοιχείο Α[i] ως: A[i]=A[i-1]+1+τιμή τυχαία από [0...99]. Ο δεύτερος τρόπος είναι ακριβώς ίδιος με τον πρώτο, μόνο που η τελευταία τιμή του πίνακα ορίζεται σαν 50*προτελευταία τιμή. Στη συνέχεια θα εμφανίζονται τα στοιχεία του πίνακα και θα ζητείται από το χρήστη μια τιμή αναζήτησης. Στα αποτελέσματα θα εμφανίζονται: η θέση που βρέθηκε το στοιχείο και οι πράξεις (στοιχεία του πίνακα που 
ελέγχθησαν) που εκτέλεσε ο κάθε αλγόριθμος.

Πείραμα: Δημιουργήστε έναν πίνακα 100000 στοιχείων και βάλτε προς αναζήτηση το πρότελευταίο στοιχείο του. Σημειώστε τις πράξεις που εκτέλεσε ο κάθε αλγόριθμος και με τις 2 αρχικοποιήσεις. Βάσει του πειράματος ποιον αλγόριθμο θα επιλέγατε αν δεν ξέρετε εκ των προτέρων την κατανομή που ακολουθούν τα στοιχεία του πίνακα; Τεκμηριώστε σύντομα.  

Κατεβάστε το αντίστοιχο exe και τρέξτε το για να δείτε τη λειτουργία του προγράμματος που καλείστε να υλοποιήσετε. Στην παρούσα άσκηση θα πρέπει να γράψετε και μια σύντομη αναφορά όσον αφορά το πείραμα που εκτελέσατε. 

edw einai o kwdikas pou exw ftiaxei ws twra

>#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
int binarySearch(int A[], int left, int right, int key, int *elements);
int interpolationSearch(int A[], int left, int right, int key, int *elements);
int mixedSearch(int A[], int left, int right, int key, int *elements);
void displayMatrix(int A[], int length);
int main (void)
{
int i,diast,choice,sh;
unsigned long int A[]={0};
printf("Doste thn epithymhth diastash toy pinaka:");
scanf("%d",&diast);
printf("Doste to eidos arxikopoihshs (1:almost uniform, 2: non-uniform)\n");
scanf("%d",&choice);
printf("\n\nArxikopoihsh me times\n\n");
if (choice==1){
   srand(time(NULL));
       A[0] = (rand() % 100);
	srand(time(NULL));
   for(i = 1; i < diast; i++){
       A[i] = A[i-1]+1+(rand() % 100);
}}
else{
   srand(time(NULL));
       A[0] = (rand() % 100);

   for(i = 1; i < diast; i++){
       A[i] = A[i-1]+1+(rand() % 100);
}
A[diast-1]=A[diast-2]*50;
}
printf("Arxikopoihsh me times oloklirothike\n\n");
printf("Ta stoixeia toy pinaka einai:");
//!!!!provlima meta thn 5h print  ,kati ginetai!
printf("\t%d \n",A[0]);
printf("\t%d \n",A[1]);
printf("\t%d \n",A[2]);
printf("\t%d \n",A[3]);
printf("\t%d \n",A[4]);
printf("\t%d \n",A[5]);
printf("\t%d \n",A[6]);
printf("\t%d \n",A[7]);
printf("\t%d \n",A[8]);
printf("\t%d \n",A[9]);
//kai an to kanw me for ta pragmata ginontai xeirotera!!!!
for (i=0;i<diast;i++){
printf("%d",A[i]);
}
printf("Doste ena stoixeio anazhthshs:");
scanf("\n%d\n",&sh);
int mixedSearch(A, int left, int right, int key, int *elements);

}

int binarySearch(int A[], int left, int right, int key, int *elements)
{
return 0;
}
int interpolationSearch(int A[], int left, int right, int key, int *elements)
{
return 0;
}
int mixedSearch(int A[], int left, int right, int key, int *elements)
{
int y;
srand(time(NULL));
       y=(rand() % 2);
	if(y==0){	
binarySearch(A,left,right,key,*elements);
	}
	else{
interpolationSearch(A,left,right,key,*elements);
	}
return 0;
}
void displayMatrix(int A[], int length)
{
   int i;
printf("Ta stoixeia toy pinaka einai:");
   for(i = 0; i < length; i++){
       	printf(" %d ", A[i]);
}
printf("\n");
}

ama mporeite dwste mou na katalavw ti exw kanei la8os!:shock:

Δημοσ.

Από την στιγμή που το μέγεθος του πίνακα ορίζεται από τον χρήστη τότε αφού πάρεις το μέγεθος πρέπει να κάνεις.

 

int* A = new int[diast];

Δημοσ.

Η αλήθεια είναι οτί δεν πολυδιάβασα τον κώδικα σου αλλά για ρίξε μία ματιά και στην malloc συνάρτηση.Δεσμέυει δυναμικά χώρο.Ψάξε στο google θα βρεις αρκετά.

Δημοσ.

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

Δημοσ.

sas euxaristw polu paidia kai

pio polu esena bokarinho!:-)

8a psaksw na vrw sto internet gia thn malloc pws douleuei,

giati to vivlio ths c++ pou exw den epeksigei kala

pws na thn xrhsimopoihsw,gi'auto exw kollisei!tespa,8a psaksw opws mou eipate

kai an vrw ta duskola 8a sas pw!:mrgreen:

Δημοσ.



//---------------------------------------------------------------------------

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

//---------------------------------------------------------------------------

int binarySearch(int A[], int left, int right, int key, int *elements)
{
if(left > right)
return -2;
else
{
int mid = 0;
int low = left;
int high = right;
*elements = 0;
while(low < high)
{
mid = (low + high) / 2;
if(A[mid] < key) /* An to kleidi einai megalytero, tote to katw */
/* orio (low) einai i epomeni thesi apo to mid. */
low = mid + 1;
else
high = mid; /* Edw low to idio to high den einai mid-1 giati */
/* mporei to A[mid] >= key */
*elements += 1;
}
if(low < right && A[low] == key)
return low;
else
return -1;
}
}

int *createArray(int Length)
{
int i;
int *A = calloc(Length, sizeof(int));
if(!A)
return NULL;
else
{
srand(time(NULL));
A[0] = rand() % 100;
for(i = 1; i < Length; i++)
A[i] = A[i-1] + 1 + rand() % 100;
return A;
}
}

void freeArray(int *A)
{
free(A);
}
void printArray(int *A, int Length)
{
int i;
for(i = 0; i < Length; i++)
printf("%d\n", A[i]);
}
void printRandomPositionValue(int *A, int Length)
{
printf("Random value to check for key is: %d\n", A[rand() % Length]);
}

int main(int argc, char* argv[])
{
int found = -3;
int elements = 0;
int key = 0;
int *A = NULL;
A = createArray(100000);
printRandomPositionValue(A,100000);
printf("The one element of the array before last is: %d\n", A[99998]);
printf("Give me the key to search:");
scanf("%d", &key);
found = binarySearch(A,0,100000, key, &elements);
if(found < 0)
printf("Key %d is not found.\n", key);
else
printf("Key %d is found in place %d of the input A array\nTotal amount of elements searched is: %d\n", key, found, elements);
freeArray(A);
printf("Hit any key to continue....");
getch();
return 0;
}
//---------------------------------------------------------------------------

[/Code]

 

To παραπάνω πρόγραμμα δεν απαντάει πλήρως στην άσκηση σου, κάνει την binary search και στην main() υπάρχει ο τρόπος με τον οποίο ζητάει ο καθηγητής σας να γίνει, δες το και προσπάθησε και πες μου..

Δημοσ.
edw einai h askhsh!

>#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
int binarySearch(int A[], int left, int right, int key, int *elements);
int interpolationSearch(int A[], int left, int right, int key, int *elements);
int mixedSearch(int A[], int left, int right, int key, int *elements);
void displayMatrix(int A[], int length);
int main (void)
{
int i,diast,choice,sh;
unsigned long int A[]={0};
printf("Doste thn epithymhth diastash toy pinaka:");
scanf("%d",&diast);
printf("Doste to eidos arxikopoihshs (1:almost uniform, 2: non-uniform)\n");
scanf("%d",&choice);
printf("\n\nArxikopoihsh me times\n\n");
if (choice==1){
   srand(time(NULL));
       A[0] = (rand() % 100);
	srand(time(NULL));
   for(i = 1; i < diast; i++){
       A[i] = A[i-1]+1+(rand() % 100);
}}
else{
   srand(time(NULL));
       A[0] = (rand() % 100);

   for(i = 1; i < diast; i++){
       A[i] = A[i-1]+1+(rand() % 100);
}
A[diast-1]=A[diast-2]*50;
}

}

ama mporeite dwste mou na katalavw ti exw kanei la8os!:shock:

 

-Kαταρχην tην Srand(time(NULL)) την τρέχεις μια φορα στην main και μονο Μία.

-Δευτερον,Τον πίνακα κάνεις μονο μια φορα Ιnitiliazation αφου πάρεις την diast απο τον χρήστη και δεσμευσεις μνήμη με την calloc() (δες καποιο reference για C) ή new είναι μονο για C++ compilers.

http://www.cplusplus.com/reference/clibrary/cstdlib/calloc.html

px

Initiliazation:

>
unsigned long int *A;
scanf("%d",&diast);
A = (unsigned long int*) calloc (diast,sizeof(unsigned long int));
 if (A==NULL) exit (1);
for(i = 1; i < diast; i++){
       A[i] = A[i-1]+1+(rand() % 100);

}

-Tριτον ... με μονο μια if ελεγχεις για non-uniform ή uniform.

>scanf("%d",&choice);if(choice==2) A[diast-1]=A[diast-2]*50;

Tωρα αν θες να κάνεις και ελεγχο για το αν δοθηκε καποια άλλη τιμή

μπορεις να γραψεις κατι τετοιο

>flag=1;
while(flag)
{ 
if(choose==2) 
{A[diast-1]=A[diast-2]*50;flag=0;} else if(choose==1) flag=0;else{ flag=1; printf("error")} 

-Tεταρτον,ανοιξε το βιβλιο των δομων δεδομενων που σου δινουν στο ΤΕΙ για να γραψεις σε functions τους αλγοριθμους αναζήτησης

Αν είναι να στα δωσουμε ολα ετοιμα δεν προκειται να γινεις ΠΟΤΕ καλος προγραμματιστης.

 

Υ.Γ νομιζω ειναι περιττη η createArray του φιλου παραπάνω ... περιττο jump ... :P

Υ.Γ και εγω ΤΕΙτζης ειμαι αλλα δεν μας εβαζαν τετοια θέματα...Μπραβο! εχει ανεβει το επιπεδο

Δημοσ.

file mou,egw eimai trelos gia ton programmatismo!

dn eimai kanenas tempelhs foithths!alla ama hsoun sto TEI pou eimai egw,8a hkseres oti oxi shmeiwseis,oute vivlia dn exoume akoma!th vgazoume me ena vivlio programmatismou tou a' eksamhnou!gi'auto dn psaxnomai mono egw,alla oloi

sto tmhma mou!gi'auto rwtaw edw kai mh me parekshgeis!

Δημοσ.

vasika...ama dn eisai edw twra na katalaveis ti na sou ekshgw!oute mia 8ewria dn exw xasei!tespa!thanks,file mou,pantws me voh8hses!xrhsimopoihsa thn malloc.mou menoun twra oi 2 anazhthseis...8a tis palepsw!!ta leme!;)

Δημοσ.

paidia thanks gia thn voh8eia alla,telika katafera kai thn ekana monos mou!

exw mono mia aporia sthn interpolationSearch:

>
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
int binarySearch(int A[], int left, int right, int key, int *elements);
int interpolationSearch(int A[], int left, int right, int key, int *elements);
int mixedSearch(int A[], int left, int right, int key, int *elements);
void displayMatrix(int A[], int length);
int main (void)
{
int i,diast,choice,sh;
int as=0;
int *A;
printf("Doste thn epithymhth diastash toy pinaka:");
scanf("%d",&diast);
A = ( int *) malloc (diast* sizeof( int));
do{
printf("Doste to eidos arxikopoihshs (1:almost uniform, 2: non-uniform)\n");
scanf("%d",&choice);
}while((choice!=1)&&(choice!=2));
printf("\n\nArxikopoihsh me times\n\n");
if(!A)

	exit(1);
else
{
srand(time(NULL));
if (choice==1){   
       A[0] = (rand() % 100);
   for(i = 1; i < diast; i++){
       A[i] = A[i-1]+1+(rand() % 100);
}}
if (choice==2){
       A[0] = (rand() % 100);

   for(i = 1; i < diast; i++){
       A[i] = A[i-1]+1+(rand() % 100);
}
A[diast-1]=A[diast-2]*50;
}
printf("Arxikopoihsh me times oloklirothike\n\n");
displayMatrix(A,diast);

printf("Doste ena stoixeio anazhthshs:");
scanf("%d",&sh);


binarySearch(A,0,(diast-1),sh,&as);

printf(" sth thesh:%d\n",as);
interpolationSearch(A,0,(diast-1),sh,&as);
printf(" sth thesh:%d\n",as);
mixedSearch(A,0,(diast-1),sh,&as);
printf(" sth thesh:%d\n",as);
free(A);
printf("Press any key to continue...\t");
   getche();
}

return 0;

}
int binarySearch(int A[], int left, int right, int key, int *elements)
{
int flag=0;

int mid,i;
i=0;
printf("\nbinary search anazhthsh\n");
while(left<=right){
mid=((left+right)/2);
i++;
if (A[mid]==key){
*elements=mid;
flag=1;
printf("Arithmos stoixeion toy pinaka poy koitaxthkan:%d\nTo stoixeio brethike",i);
break;
}

else{
	if(A[mid]<key){
		left=mid+1;
	}
	else{
		right=mid-1;
}}}
if(flag==1){
	return mid;
}
if(flag==0){	
printf("Arithmos stoixeion toy pinaka poy koitaxthkan:%d\n",i);
printf("To stoixeio de brethike ston pinaka,oute");
}
return -1;
}
int interpolationSearch(int A[], int left, int right, int key, int *elements)
{
	int flag=0;
int i,mid;
i=0;
printf("\nInterpolation search anazhthsh\n");
while(left<=right){
/*h askhsh zhtaei to:mid=((double)(key-A[left])/(A[right]-A[left]))*(right-left)+left.
an baloume double omws,xalaei h roh tou programmatos(oxi panta,analoga,mono an tou dwsw na
psaksei gia ena ari8mo pou den uparxei ston pinaka,tote analoga me ton ari8mo,enw h binarySearch
douleuei PANTA,h interpolation den einai sigouro oti 8a doulepsei mporei na kollhsei to
programma!gi'auto to logo anti gia double xrhsimopoihsame int:
mid=((int)(key-A[left])/(A[right]-A[left]))*(right-left)+left.
dokimasame na dhlwsoume thn mid double kai na th metatrepsoume pio katw se integer alla eixame
to idio apotelesma kai den mporoume na broume thn aitia afou 8a eprepe h metatroph na ginotan
automatws:mid=(<<<<<(double)>>>>(key-A[left])/(A[right]-A[left]))*(right-left)+left.*/
mid=((int)(key-A[left])/(A[right]-A[left]))*(right-left)+left;
i++;

if (A[mid]==key){
*elements=mid;
flag=1;
printf("Arithmos stoixeion toy pinaka poy koitaxthkan:%d\nTo stoixeio brethike",i);
break;
}

else{
	if(A[mid]<key){
		left=mid+1;
	}
	else{
		right=mid-1;
}}}
if(flag==1){
	
	return mid;
}
if(flag==0){
printf("Arithmos stoixeion toy pinaka poy koitaxthkan:%d\n",i);
printf("To stoixeio de brethike ston pinaka,oute");	
}
return -1;
}
int mixedSearch(int A[], int left, int right, int key, int *elements)
{
int y;
printf("\n\nMixed search anazhthsh\n");
srand(time(NULL));
       y=(rand() % 2);
	if(y==0){	
binarySearch(A,left,right,key,&elements);
	}
	else{
interpolationSearch(A,left,right,key,&elements);
	}

return 0;
}
void displayMatrix(int A[], int length)
{
   int i;
printf("Ta stoixeia toy pinaka einai:");
   for(i = 0; i < length; i++){
       	printf(" %d ", A[i]);
}
printf("\n");
}

Αρχειοθετημένο

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

  • Δημιουργία νέου...