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

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

Δημοσ.

Γειά σας,

έχω να κάνω μία συνάρτησης συχωνεύσης πινάκων με δυναμικούς πίνακες. Παρότι ο αλγόριθμός μου είναι σωστός δεν είναι σωστή η ταξινόμιση. Ευχαριστώ.

 

>

#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

Δημοσ.
>
#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

Δημοσ.

Ο πίνακας όμως θα είναι δυναμικός χωρίς την malloc? Ευχαριστώ πάντως για την απάντηση.

Η malloc() δεσμεύει δυναμικά μνήμη (δηλαδή κατά την διάρκεια που τρέχει το πρόγραμμα).

Εσύ στην main() τον πίνακα τον δηλώνεις στατικά και του δίνει και τιμές.

Δυναμικός θα ήταν αν έκανες κάτι απ τα παρακάτω:

1. έχεις ένα loop που έβαζε ο χρήστης όσους ακέραιους ήθελε, και μέσα σ αυτό το loop έκανες realloc() ώστε να αυξάνει το μέγεθος του πίνακα.

2. Ρωτούσες στην αρχή το χρήστη να σου πει το μέγεθος του πίνακα μετά δεσμευες με malloc() όσο μνήμη χρειαζόσουν και μετά γέμιζες τον πίνακα

Εσύ έτσι όπως χρησιμοποιείς τη malloc() είναι για να αντιγράψεις τον πίνακα που θες να ταξινομήσεις...

Δημοσ.

Μου ζητάνε να κάνω την συνάρτηση 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

Δημοσ.

Θέλω να υλοποιήσω την συνάρτηση εισαγωγής στοιχείου σε δυναμικό πίνακα.Η εισαγωγή είναι επιτυχημένη αλλά εξαφανίζεται το τελευταίο στοιχείο. Πώς μπορώ να αυξήσω το μέγεθος του πίνακα.Έχω δοκιμάσει να το αυξήσω στο 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










Δημοσ.

Συμβουλή:

για να δουλέψει η malloc σε μία παράμετρο μίας συνάρτησης πρέπει

να παράσεις την διέυθυνση της διέυθυνσης της παραμέτρου:

 

>
int createArray(int **a, int n) {
 int result = 1;
 *a = (int*)malloc(sizeof(int)*n);

 if (*a == NULL) {
   result = -1;
 }

 return result;
}

Δημοσ.

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


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

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

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

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

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

Σύνδεση

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

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