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

Έχω μπερδευτει!


headbanger

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

Δημοσ.

>#include <stdio.h>
#define N 10
void ReadArray (int A[i],int Pinakas[N])
{
int i;
int A[N];
printf(" Diavase ta stoixeia tou pinaka: \n)" ;
scanf("%d,& A[i]);
}
void PrintArray (int A[i],int Pinakas[N])
{
int A[N];
int i;
printf("tipwse ta stoixeia tu pinaka \n");
print("%d", A[i]);
}
int SearchArray(int A[i],int Pinakas[N],stoixeio_x)
{
int x;
int i;
int A[N];
i=0;
while ((i<(N-1)&&(A[i]!=x))
{
	i=i+1;
}
if (A[i]==x)
{
	return (x);
}
else
{
	x=-1;
	return(x);
}
void SortArray(int A[i], int Pinakas[N])
{
	int i;
	int A[N];
	int j;
	int temp;

	for(i=1;i<=(N-1);i++)
	{
		for(j=N-1;j>=i;j--)
		{
			if A[j]<A[j-1]
			{
				temp=A[j];
				A[j]=A[j]-1;
				A[j-1]=temp;
			}
		}
	}
	void main(void)
	{
		int x;
		int i;
		int A[N]={-1,2,-3,4,-5,6,-7,8,-9,10};
		ReadArray(&A[i]);
		PrintArray((&A[i]);
		printf("dwse to stoixeio tu pinaka pu psaxnoume einai: \n");
		printf("x=");
		scanf("%d",&x);
		SearchArray(&A[i]);
		printf("to stoixeio pu psaxnoume einai sti thesi: \n");
		SortArray(&A[i]);
		printf(&A[i]);
	}

 

 

Στην παραπάνω άσκηση μου ζητούνται τα εξής:

α) να δηλώνεται πινακας 10 ακεραίων

β)να γεμίζει ο πίνακας καλώντας συνάρτηση readarray

γ)να τυπώνεται ο πίνακας καλώντασ συνάρτηση

δ)θα διαβάζεται από το πληκτρολόγιο μια ακέραια τιμή

ε)θα ανζητήται ο αριθμός στον πίνακα με συνάρτηση, και θα τυπώνεται η θέση του.

στ)να ταξινομείται ο πίνακας

ζ)να τυπώνεται ο πίνακας

 

 

Έχω φτάσει σε αυτό το σημείο , αλλά δεν μπορώ να δω που έχω το λάθος.Θα παρακαλούσα για κάποια υπόδειξη.Προς θεού δεν ζητάω λύση της άσκησης, έτσι κι αλλιώς δεν θα μου τη λύνατε, απλά μια κατευθηντήρεια γραμμή από εδώ και πέρα:shock: , καθώς τα έχω βρει σκούρα :confused:

 

Ευχαριστώ εκ των προτέρων

Δημοσ.

Signwmi alla dokimases na to kaneis compile afto to parapanw?

To programma sou exei polla sintaktika lathi.

Ta vasikotata einai ta eksis:

1)To function prin to main den kleinei. Perilamvaneis to main mesa sto searcharray.

2)Oi arrays pernane panta ws references. p.x SearchArray(A); kai to function to dilwneis ws int SearchArray(int A[]){} .

3)Epipleon sta functions exeis dilwsei kai alla parameters peran aftwn pou ta kaleis.

Kai alla polla mikra apla sintaktika errors (p.x. ta quotes sou) pou ama to kaneis compile tha deis ti ftaiei.

Diavase sto http://www.cplusplus.com i pare kana vivliaraki.....

Simvouli: xrisimopoiise debugger kai ton filo sou to google.

Sorry an einai apotomo to post alla viazomai :).

Kali tixi.

Δημοσ.

Ορίστε φίλε, διόρθωσα τον κωδικα.

Απλά η ταξινόμηση δεν δουλεύει, γιατι έχει προβλημα ο αλγόριθμος που χρησιμοποιείς και βαριέμαι να το κοιτάξω, άσε που δεν αναφέρεις τη ταξινόμηση θέλεις, φθίνουσα ή αύξουσα. Αλλά αυτό είναι το λιγότερο, έτσι δεν είναι;

 

Ότι δεν καταλαβαίνεις πες το μου.

 

>#include <stdio.h>
#define N 10

void ReadArray (int *k)
{
int i;
for(i=0;i<N;i++)
{
printf("Dwse to %d stoixeio tou pinaka: \n", i);
scanf("%d",k+i);
}

}

void PrintArray (int *m)
{
int i;
printf("tipwsis stoixeiwn pinaka \n");

for(i=0;i<N;i++)
{
	printf("%d\n", *(m+i));
}

}

void SearchArray(int A[],int stoixeio_x)
{

int i;

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

	if(stoixeio_x==A[i])
	{
		printf("to stoixeio pu psaxnoume einai sti thesi: %d \n",i+1); // +1 giati o pinakas sthn c ksekeinaei apo to 0
		break;
	}


}


}

void SortArray(int A[])
{
	int i;
	int j;
	int temp;

	for(i=1;i<N;i++)
	{
		for(j=N;j>i;j--)
		{
			if (A[j]<A[j-1])
			{
				temp=A[j];
				A[j]=A[j-1];
				A[j-1]=temp;
			}
		}
	}
}




void main(void)
{
		int x;
		int i;
		int A[N];

		ReadArray(A);
		
		PrintArray(A);
		
		printf("Dwse arithmo pou psaxneis\n");
		printf("x=");

		scanf("%d",&x);
		
		SearchArray(A,x);
		
		SortArray(A);
	
			for(i=0;i<N;i++)
			{
				printf("%d\n", A[i]);
			}


}

Δημοσ.

Ευχαριστώ για τον χρόνο σας.

Κάτι τελευταίο, δεν μπορώ σε περίπτωση που τοστοιχείο που δηλώσω να μην έιναι στοιχείο του πίνακα να κάνω το πρόγραμμα να εμφανίζει την τιμή -1 σε περίπτωση που δεν βρίσκει το χ. εμφανίζεται 9 φορές και όχι 1 όπως θα έπρεπε :shock:

Δημοσ.

Το παρακάτω πρόγραμμα έχει αναπτυχθεί σε CodeGear Turbo C++ Explorer.

 

>
//---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <conio.h>

#define	N	10

//---------------------------------------------------------------------------
int	*ptrIntArray = 0,
 nNumber;
//---------------------------------------------------------------------------
int* AllocArray(int nSize);
void ReadArray (int*,int nSize);
void PrintArray(int*,int nSize);
int  FindArray (int*,int nInteger,int nSize);
int	 ArrayQSRT (const void*, const void*);

int main(int argc, char* argv[])
{
if((ptrIntArray = AllocArray(N))==NULL)
 printf(" Not enough memory!\n");
else
 {
	ReadArray(ptrIntArray,N);
	PrintArray(ptrIntArray,N);

	printf(" Please type the number you want to search for:");
	scanf("%d",&nNumber);
	printf(" Number %d ",nNumber);
	if((nNumber=FindArray(ptrIntArray,nNumber,N))==-1)
	 printf("not found in Array Elements\n");
	else
	 printf("found as Array Element #%d\n",nNumber);

	qsort(ptrIntArray,N,sizeof(int),ArrayQSRT);
	PrintArray(ptrIntArray,N);

	free(ptrIntArray);
 }

printf("Press any key to quit..");
getch();
return 0;
}
//---------------------------------------------------------------------------
int* AllocArray(int nSize)
{
// Δέσμευσε ένα πίνακα Int μεγέθους nSize
int *ptrIntArray = 0;

if((ptrIntArray=calloc(nSize,sizeof(int)))!=NULL)
 memset(ptrIntArray,0,sizeof(int)*nSize);

return ptrIntArray;
}
//---------------------------------------------------------------------------
void ReadArray (int* ptrArray,int nSize)
{
int	nElementInput = 0;

while(nElementInput<nSize)
  {
	printf(" Please enter number for Array position [%d]:",nElementInput);
	scanf("%d",&ptrArray[nElementInput++]);	
  }
}
//---------------------------------------------------------------------------
void PrintArray(int* ptrArray,int nSize)
{
int nElement;

for(nElement=0;nElement<nSize;nElement++)
 printf("Element [%d] = %d\n",nElement,ptrArray[nElement]);
}
//---------------------------------------------------------------------------
int  FindArray (int *ptrArray,int nInteger,int nSize)
{
int	nIndex;

for(nIndex=0;nIndex<nSize;nIndex++)
 if(ptrArray[nIndex]==nInteger)
  return nIndex;

return -1;
}
//---------------------------------------------------------------------------
int	ArrayQSRT (const void *ptrA, const void *ptrB)
{
if(*(int*)ptrA>*(int*)ptrB)
 return 1;
if(*(int*)ptrA<*(int*)ptrB)
 return -1;
return 0;
}

 

Αν εξαιρέσουμε ότι η δέσμευση του πίνακα (ptrIntArray) γίνεται δυναμικά δεν διαφέρει πολύ από τις υπόλοιπες λύσείς.

Όσον αφορά τον τομέα του Sorting εγώ χρησιμοποιώ την C ρουτίνα qsort (stdlib.h) η οποία με βάση τις τιμές που επιστρέφει η συνάρτηση μου ArrayQSRT κατά την σύγκριση των τιμών του πίνακα ταξινομεί ανάλογα τις τιμές (από το μικρότερο προς το μεγαλύτερο).

Τέλος, η αναζήτηση στοιχείων (FindArray) προς χάριν απλότητας σταματά στην πρώτη ευρεθείσα τιμή του πίνακα, διαφορετικά επιστρέφει -1.

 

Φυσικά μπορεί να υπάρχουν Bugs..

Καλή τύχη!

Δημοσ.

Directx fainetai oti katexeis kala apo C apla to mono poy thelw na soy pw einai oti otan kaneis calloc(items,sizeof(something)) to apotelesma einai na arxikopoieitai kai se miden i mnimi, opote den xreiazesai memset stin synexeia gia na arxikopoihseis se miden. Me malloc nomizw thelei memset,alla den einai kai kati to simantiko.:razz:

Δημοσ.
Directx fainetai oti katexeis kala apo C apla to mono poy thelw na soy pw einai oti otan kaneis calloc(items,sizeof(something)) to apotelesma einai na arxikopoieitai kai se miden i mnimi, opote den xreiazesai memset stin synexeia gia na arxikopoihseis se miden. Me malloc nomizw thelei memset,alla den einai kai kati to simantiko.:razz:

 

Έχεις δίκιο, αβλεψία μου, συνηθισμένος από την malloc που απαιτεί καθαρισμό του memory block που επιστρέφει.

 

Η νέα εκδοχή της AllocArray:

 

>
int* AllocArray(int nSize)
{
// Δέσμευσε ένα πίνακα Int μεγέθους nSize
return calloc(nSize,sizeof(int));
}

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

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

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