nikosvas Δημοσ. 10 Μαρτίου 2012 Δημοσ. 10 Μαρτίου 2012 Γειά σας, έχω να κάνω μία συνάρτησης συχωνεύσης πινάκων με δυναμικούς πίνακες. Παρότι ο αλγόριθμός μου είναι σωστός δεν είναι σωστή η ταξινόμιση. Ευχαριστώ. > #include <stdlib.h> #include <stdio.h> void sort(int *int_table,int n); int main() { int a[10]={5,9,5,1,2,9,7,8,6,3}; for(int i=0;i<10;i++){ printf("i is %d a[i] is %d \n",i,a[i]); }//end for sort(a,10); printf("\n\n\nAfter merge"); for(int i=0;i<10;i++){ printf("i is %d a[i] is %d \n",i,a[i]); }//end for }//end main void sort(int *int_table,int n) { int hold; int_table=(int*)malloc(n*sizeof(int)); for(int k=0;k<n;k++){ for(int i=0;i<n;i++){ if(int_table[i]>int_table[i+1]){ hold=int_table[i]; int_table[i]=int_table[i+1]; int_table[i+1]=hold; }//end if } //end for }//end for }//end func
aline Δημοσ. 10 Μαρτίου 2012 Δημοσ. 10 Μαρτίου 2012 > #include <stdlib.h> #include <stdio.h> void sort(int *int_table,int n); int main() { int a[10]={5,9,5,1,2,9,7,8,6,3},i; for(i=0;i<10;i++){ printf("i is %d a[i] is %d \n",i,a[i]); }//end for sort(a,10); printf("\n\n\nAfter merge"); for(i=0;i<10;i++){ printf("i is %d a[i] is %d \n",i,a[i]); }//end for }//end main void sort(int *int_table,int n) { int hold,k,i;//< // μάλλον πρέπει να κοιτάξεις το man page της malloc.. for(k=0;k<n;k++){ for(i=0;i<n;i++){ if(int_table[i]>int_table[i+1]){ hold=int_table[i]; int_table[i]=int_table[i+1]; int_table[i+1]=hold; }//end if } //end for }//end for }//end func
nikosvas Δημοσ. 10 Μαρτίου 2012 Μέλος Δημοσ. 10 Μαρτίου 2012 Ο πίνακας όμως θα είναι δυναμικός χωρίς την malloc? Ευχαριστώ πάντως για την απάντηση.
nilosgr Δημοσ. 11 Μαρτίου 2012 Δημοσ. 11 Μαρτίου 2012 Ο πίνακας όμως θα είναι δυναμικός χωρίς την malloc? Ευχαριστώ πάντως για την απάντηση. Η malloc() δεσμεύει δυναμικά μνήμη (δηλαδή κατά την διάρκεια που τρέχει το πρόγραμμα). Εσύ στην main() τον πίνακα τον δηλώνεις στατικά και του δίνει και τιμές. Δυναμικός θα ήταν αν έκανες κάτι απ τα παρακάτω: 1. έχεις ένα loop που έβαζε ο χρήστης όσους ακέραιους ήθελε, και μέσα σ αυτό το loop έκανες realloc() ώστε να αυξάνει το μέγεθος του πίνακα. 2. Ρωτούσες στην αρχή το χρήστη να σου πει το μέγεθος του πίνακα μετά δεσμευες με malloc() όσο μνήμη χρειαζόσουν και μετά γέμιζες τον πίνακα Εσύ έτσι όπως χρησιμοποιείς τη malloc() είναι για να αντιγράψεις τον πίνακα που θες να ταξινομήσεις...
nikosvas Δημοσ. 11 Μαρτίου 2012 Μέλος Δημοσ. 11 Μαρτίου 2012 Μου ζητάνε να κάνω την συνάρτηση bubblesort με την χρήση δυναμικών πινάκων.Τον διόρθωσα τον κώδικα και η ταξινίμιση είναι σωστή . Απλώς θέλω την αποψή σας αν ικανοποιεί τις απαιτήσεις του καθηγητή μου που ζητά να χρησιμοποιήσω δυναμικούς πίνακες. Δεν ξέρω καλά C για αυτό σας ρωτάω. Ευχαριστώ. > #include <stdlib.h> #include <stdio.h> void sort(int *int_table,int n); int main() { int number; //to number-value tou pinaka int k; //megethos pinaka printf("Enter array size\n"); scanf("%d",&k); int *a=(int*)malloc(sizeof(int)*k); printf("Please type numbers for the B dynamic array:\n"); for(int i=0;i<k;i++){ printf("a[%d]\n",i); scanf("%d",&number); a[i]=number; } sort(a,k); printf("\n\n\nAfter merge"); for(int i=0;i<k;i++){ printf("a[%d] is %d \n",i,a[i]); }//end for }//end main void sort(int *int_table,int n) { int hold; for(int k=0;k<n;k++){ for(int i=0;i<n-1;i++){ if(int_table[i]>int_table[i+1]){ hold=int_table[i]; int_table[i]=int_table[i+1]; int_table[i+1]=hold; }//end if } //end for }//end for }//end func
nikosvas Δημοσ. 11 Μαρτίου 2012 Μέλος Δημοσ. 11 Μαρτίου 2012 Θέλω να υλοποιήσω την συνάρτηση εισαγωγής στοιχείου σε δυναμικό πίνακα.Η εισαγωγή είναι επιτυχημένη αλλά εξαφανίζεται το τελευταίο στοιχείο. Πώς μπορώ να αυξήσω το μέγεθος του πίνακα.Έχω δοκιμάσει να το αυξήσω στο for της συνάρτησης insertValue αλλά δεν αυξάνεται. > #include <stdlib.h> #include <stdio.h> void sort(int *int_table,int n); int linearSearch(int *,int ,int); void insertValue(int *pin,int n,int keyToInsert,int placeToInsert); int main() { int number; //to number-value tou pinaka int k; //megethos pinaka int key; //to kleidi pou xrisimopoioume gia anazitisi int insertStoixeio; int thesi; //thesi pros eisagogi gia pinaka printf("Enter array size\n"); scanf("%d",&k); int *a=(int*)malloc(sizeof(int)*k); printf("Please type numbers for the dynamic array:\n"); for(int i=0;i<k;i++){ printf("a[%d]\n",i); scanf("%d",&number); a[i]=number; } sort(a,k); printf("\n\n\nAfter sort"); for(int i=0;i<k;i++){ printf("a[%d] is %d \n",i,a[i]); }//end for printf("\nTora as psaxoume value se pinaka\n"); printf("Enter key to search"); scanf("%d",&key); int var=linearSearch(a,k,key); if(var!=-1){ printf("To index tou kleidiou sas is %d\n",var); }//end if else{ printf("No key found"); }//end else printf("\nTora as eisagoume stoixeio ston pinaka\n"); printf("Valte stoixeio ston pinaka"); scanf("%d",&insertStoixeio); printf("\nSe poioa thesi tou pinaka thelete na to valete?\n"); scanf("%d",&thesi); insertValue(a,k,insertStoixeio,thesi); printf("\n\n\nAfter eisagogi"); for(int i=0;i<k;i++){ printf("a[%d] is %d \n",i,a[i]); }//end for }//end main void sort(int *int_table,int n) { int hold; for(int k=0;k<n;k++){ for(int i=0;i<n-1;i++){ if(int_table[i]>int_table[i+1]){ hold=int_table[i]; int_table[i]=int_table[i+1]; int_table[i+1]=hold; }//end if } //end for }//end for }//end func int linearSearch(int *pin,int n,int key) { for(int k=0;k<n;k++){ if(pin[k]==key){ return k; }//end if }///end for return -1; }//end func void insertValue(int *pin,int n,int keyToInsert,int placeToInsert) { if(placeToInsert<0 ||placeToInsert>n) { printf("\nIndex out of bounds\n"); }//end if else { for(int i=n-1;i>placeToInsert-1;i--) pin[i+1]=pin[i]; pin[placeToInsert]= keyToInsert; } //end else }//end func
pinball_elf Δημοσ. 12 Μαρτίου 2012 Δημοσ. 12 Μαρτίου 2012 Συμβουλή: για να δουλέψει η malloc σε μία παράμετρο μίας συνάρτησης πρέπει να παράσεις την διέυθυνση της διέυθυνσης της παραμέτρου: > int createArray(int **a, int n) { int result = 1; *a = (int*)malloc(sizeof(int)*n); if (*a == NULL) { result = -1; } return result; }
nikosvas Δημοσ. 12 Μαρτίου 2012 Μέλος Δημοσ. 12 Μαρτίου 2012 To διόρθωσα κάνοντας το n δείκτη. Τώρα έχω όμως άλλο πρόβλημα. Θέλω να χρησιμοποιήσω μία συνάρτηση merge για να κάνω συγχώνευση πινάκων, αλλά δεν ξέρω πως να δηλώσω τον πίνακα c που θα συγχωνεύσει τους άλλους πίνακες.Δυσκολεύομαι γιατί δήλωσα τους a και b δυναμικά με malloc. > #include <stdlib.h> #include <stdio.h> void sort(int *int_table,int n); int linearSearch(int *,int ,int); void insertValue(int *pin,int *n,int keyToInsert,int placeToInsert); void delete(int *p,int *n, int key); void merge(int *a,int *b,int *c); int main() { int number; //to number-value tou pinaka int k; //megethos pinaka int key; //to kleidi pou xrisimopoioume gia anazitisi int insertStoixeio; int thesi; //thesi pros eisagogi gia pinaka int valueToDelete; printf("Enter array size\n"); scanf("%d",&k); int *a=(int*)malloc(sizeof(int)*k); printf("Please type numbers for the dynamic array:\n"); for(int i=0;i<k;i++){ printf("a[%d]\n",i); scanf("%d",&number); a[i]=number; } sort(a,k); printf("\n\n\nAfter sort"); for(int i=0;i<k;i++){ printf("a[%d] is %d \n",i,a[i]); }//end for printf("\nLets search value to array\n"); printf("Enter key to search"); scanf("%d",&key); int var=linearSearch(a,k,key); if(var!=-1){ printf("The key index is %d\n",var); }//end if else{ printf("No key found"); }//end else printf("Vareiami"); printf("Lets delete array\n"); printf("\nEnter value to delete\n"); scanf("%d",&valueToDelete); delete(a,&k,valueToDelete); printf("After deletion array is:"); for(int i=0;i<k;i++){ printf("a[%d] is %d \n",i,a[i]); } printf("\nLets insert value to array\n"); printf("Insert value to array"); scanf("%d",&insertStoixeio); printf("\nSelect array position to put it?\n"); scanf("%d",&thesi); insertValue(a,&k,insertStoixeio,thesi); printf("\n\n\nAfter insert"); for(int i=0;i<k;i++){ printf("a[%d] is %d \n",i,a[i]); }//end for printf("\nLets sort again the array to apply merge with onother one\n"); sort(a,k); printf("After sort\n"); for(int i=0;i<k;i++){ printf("a[%d] is %d \n",i,a[i]); }//end for int secSize; int numberForSec; printf("Enter second array size\n"); scanf("%d",&secSize); int *b=(int*)malloc(sizeof(int)*secSize); printf("Please type numbers for the dynamic second array\n"); for(int i=0;i<secSize;i++){ printf("b[%d]\n",i); scanf("%d",&numberForSec); b[i]=numberForSec; } printf("\nEktiposi 2oy pinaka\n"); for(int i=0;i<secSize;i++){ printf("b[%d] is %d \n",i,b[i]); }//end for printf("Lets sort second array to apply merge"); sort(b,secSize); printf("\nEktiposi 2oy pinaka meta tin taxinomisi \n"); for(int i=0;i<secSize;i++){ printf("b[%d] is %d \n",i,b[i]); }//end for printf("\nTora tha efarmosoume tin sigxoneusi pinakon a kai b\n"); int *c=(int*)malloc(sizeof(int)(*k+secSize); //athroisma dio pinakon merge(a,b,c); printf("After merge o pinakas c einai\n"); for(int i=0;i<secSize+k;i++){ printf("c[%d] is %d \n",i,c[i]); } }//end main void sort(int *int_table,int n) { int hold; for(int k=0;k<n;k++){ for(int i=0;i<n-1;i++){ if(int_table[i]>int_table[i+1]){ hold=int_table[i]; int_table[i]=int_table[i+1]; int_table[i+1]=hold; }//end if } //end for }//end for }//end func int linearSearch(int *pin,int n,int key) { for(int k=0;k<n;k++){ if(pin[k]==key){ return k; }//end if }///end for return -1; }//end func void insertValue(int *pin,int *n,int keyToInsert,int placeToInsert) { if(placeToInsert<0 ||placeToInsert>*n) { printf("\nIndex out of bounds\n"); }//end if else { for(int i=*n-2;i>=placeToInsert-1;i--) //for(int i=n-1;i>placeToInsert-1;i--) pin[i+1]=pin[i]; pin[placeToInsert]= keyToInsert; ++*n; } //end else }//end func void delete(int *p,int *n, int key) { for(int i=0;i<*n;i++) if(p[i]==key){ //ean to value einai iso me to kleidi anazitisis for(int j=i+1;j<*n;j++) { p[j-1]=p[j]; //shift ekxoriume to value tis p[1] sto p[0] k.t.l }//end for --*n; }//end if }//end func void merge(int *a,int *b,int *c) { int i=0; //index tou a int m;//length arr a int j=0;//index tou b int n; //lenght arr b int k=0; //index tou c while(i<m && j<n){ if(a[i]<=b[j]) { c[k]=a[i]; i++; } //end if else{ c[k]=b[j]; j++; }// end else k++; //increase counter }//end while if(i<m) { for(int p=i;p<m;p++){ c[k]=a[p]; k++; } //end for }//end if else { for(int p=j;p<n;p++){ c[k]=b[p]; k++; }// end for }//end else }//end func
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα