headbanger Δημοσ. 8 Ιανουαρίου 2007 Δημοσ. 8 Ιανουαρίου 2007 >#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 γ)να τυπώνεται ο πίνακας καλώντασ συνάρτηση δ)θα διαβάζεται από το πληκτρολόγιο μια ακέραια τιμή ε)θα ανζητήται ο αριθμός στον πίνακα με συνάρτηση, και θα τυπώνεται η θέση του. στ)να ταξινομείται ο πίνακας ζ)να τυπώνεται ο πίνακας Έχω φτάσει σε αυτό το σημείο , αλλά δεν μπορώ να δω που έχω το λάθος.Θα παρακαλούσα για κάποια υπόδειξη.Προς θεού δεν ζητάω λύση της άσκησης, έτσι κι αλλιώς δεν θα μου τη λύνατε, απλά μια κατευθηντήρεια γραμμή από εδώ και πέρα , καθώς τα έχω βρει σκούρα Ευχαριστώ εκ των προτέρων
kickeras Δημοσ. 9 Ιανουαρίου 2007 Δημοσ. 9 Ιανουαρίου 2007 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.
headbanger Δημοσ. 9 Ιανουαρίου 2007 Μέλος Δημοσ. 9 Ιανουαρίου 2007 Ευχαριστώ πολύ8-) κάτι τέτοιεσ κατευθηντήρειες γραμμές είναι που μας μαθαίνουν πράγματα
varathro Δημοσ. 9 Ιανουαρίου 2007 Δημοσ. 9 Ιανουαρίου 2007 Ορίστε φίλε, διόρθωσα τον κωδικα. Απλά η ταξινόμηση δεν δουλεύει, γιατι έχει προβλημα ο αλγόριθμος που χρησιμοποιείς και βαριέμαι να το κοιτάξω, άσε που δεν αναφέρεις τη ταξινόμηση θέλεις, φθίνουσα ή αύξουσα. Αλλά αυτό είναι το λιγότερο, έτσι δεν είναι; Ότι δεν καταλαβαίνεις πες το μου. >#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]); } }
headbanger Δημοσ. 10 Ιανουαρίου 2007 Μέλος Δημοσ. 10 Ιανουαρίου 2007 Ευχαριστώ για τον χρόνο σας. Κάτι τελευταίο, δεν μπορώ σε περίπτωση που τοστοιχείο που δηλώσω να μην έιναι στοιχείο του πίνακα να κάνω το πρόγραμμα να εμφανίζει την τιμή -1 σε περίπτωση που δεν βρίσκει το χ. εμφανίζεται 9 φορές και όχι 1 όπως θα έπρεπε
Directx Δημοσ. 11 Ιανουαρίου 2007 Δημοσ. 11 Ιανουαρίου 2007 Το παρακάτω πρόγραμμα έχει αναπτυχθεί σε 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.. Καλή τύχη!
bokarinho Δημοσ. 11 Ιανουαρίου 2007 Δημοσ. 11 Ιανουαρίου 2007 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 Δημοσ. 11 Ιανουαρίου 2007 Δημοσ. 11 Ιανουαρίου 2007 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)); }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.