matrixtv1 Δημοσ. 12 Νοεμβρίου 2016 Δημοσ. 12 Νοεμβρίου 2016 γεια σας παιδια θελω να φτιαξω εναν αλγοριθμο που να διαβαζει 100 τιμες και να εμφανιζει την μεγαλυτερη και το ποσες φορεςς παρουσιαστηκε και εχω κολισει εδο και μερες και δεν μπορω να το φτιαξω με τιποτα το προτο μερος το εχω κανει αλλα να εμφανιζει ποσεσ φορες παροθσιαστικε με τιποτα μπορειτε να με βοηθισετε επισης η καθε τιμη να διαβαζετε μονο μια φορα
jimakos234 Δημοσ. 12 Νοεμβρίου 2016 Δημοσ. 12 Νοεμβρίου 2016 γεια σας παιδια θελω να φτιαξω εναν αλγοριθμο που να διαβαζει 100 τιμες και να εμφανιζει την μεγαλυτερη και το ποσες φορες παρουσιαστηκε. Εχω κολλήσει εδω και μερες και δεν μπορω να το φτιαξω με τιποτα. Το πρώτο μερος το εχω κανει, αλλα να εμφανιζει ποσες φορες παρουσιαστήκε με τιποτα. Μπορειτε να με βοηθήσετε? Επισης η καθε τιμη να διαβαζετε μονο μια φορα. Γενικα οποτε συναντας μια τιμη την συγκρινεις με το προηγουμενο μεγιστο, και αν την ξεπερναει το αντικαθιστα, αν ειναι μικροτερη την αγνοεις (continue). Επισης εχεις και ενα μετρητη σε περιπτωση που η τιμη ειναι ιση με το μεγιστο, και τον αυξανεις αντιστοιχα. Αν αλλαξει το μεγιστο ο μετρητης μηδενιζει. 1
Sheogorath Δημοσ. 12 Νοεμβρίου 2016 Δημοσ. 12 Νοεμβρίου 2016 Τι σπουδάζεις? Τι σχολή? Είναι ίσως και ο δεύτερος αλγόριθμος που μαθαίνεις πρώτα πρώτα. Anyway, δεν μας λες γλώσσα αλλά είναι κάπως έτσι max=a(1); for i=2:100 if max<a(i) max=a(i); end end k=0; for i=1:100 if max=a(i) k=k+1; end end Αυτά σε Matlab. To μετατρέπεις σε ότι ψευδογλώσσα θες. 1
kaliakman Δημοσ. 12 Νοεμβρίου 2016 Δημοσ. 12 Νοεμβρίου 2016 ... Γιατί να περάσει δυο φορές τον πίνακα; @TS: Άνοιξε το μόνο αν θες έτοιμη την λύση int main(void) { int array[100]; int max = array[0]; int count = 1; for (int i = 1 ;i < 100 ; i++){ if (array[i] == max) count++; if (array[i] > max){ max = array[i]; count = 1; } } printf("Max is %d and was inputted %d time(s)",max,count); return 0; }
Sheogorath Δημοσ. 12 Νοεμβρίου 2016 Δημοσ. 12 Νοεμβρίου 2016 Γιατί να περάσει δυο φορές τον πίνακα; @TS: Άνοιξε το μόνο αν θες έτοιμη την λύση int main(void) { int array[100]; int max = array[0]; int count = 1; for (int i = 1 ;i < 100 ; i++){ if (array[i] == max) count++; if (array[i] > max){ max = array[i]; count = 1; } } printf("Max is %d and was inputted %d time(s)",max,count); return 0; } Αν ο πίνακας δεν έχει το μέγιστο στοιχείο πρώτο, θα μετρήσει παραπάνω max απο ότι είναι. Παράδειγμα, ένας πίνακας με αύξοντες αριθμούς 1-100, έχει μόνο ένα μαξ, το 100 αλλά μέχρι να το βρει έχει μετρήσει άλλα 99 μαξ, μικρότερα.
kaliakman Δημοσ. 12 Νοεμβρίου 2016 Δημοσ. 12 Νοεμβρίου 2016 Δεν κατάλαβα τι εννοείς. Ναι 99 άλλα, όμως στο τέλος θα βρει αυτό που θέλουμε.
Sheogorath Δημοσ. 12 Νοεμβρίου 2016 Δημοσ. 12 Νοεμβρίου 2016 Άκυρο, είδα κάνεις count=1; μέσα στην επανάληψη. Θα δουλέψει.
jimakos234 Δημοσ. 12 Νοεμβρίου 2016 Δημοσ. 12 Νοεμβρίου 2016 Τωρα που ξαναβλεπω τι ζηταει, ισως θελει divide and conquer αλγοριθμο ο TS.
kostas.xatzigeorgiou Δημοσ. 14 Νοεμβρίου 2016 Δημοσ. 14 Νοεμβρίου 2016 Υπόδειξη (από σημειώσεις στους αλγόριθμους του ΜΙΤ) int [] array = new int[100]; for(int j=0; j<array.length; j++){ for(int k=0; k<j; k++){ if(array[j]>array[k]){ int temp = array[j]; array[j]=array[k]; array[k]=temp; } } } for(int j=0; j<array.length; j++){ System.out.println(array[j]); }
kaliakman Δημοσ. 14 Νοεμβρίου 2016 Δημοσ. 14 Νοεμβρίου 2016 Υπόδειξη (από σημειώσεις στους αλγόριθμους του ΜΙΤ) int [] array = new int[100]; for(int j=0; j<array.length; j++){ for(int k=0; k<j; k++){ if(array[j]>array[k]){ int temp = array[j]; array[j]=array[k]; array[k]=temp; } } } for(int j=0; j<array.length; j++){ System.out.println(array[j]); } Διάβασε άλλη μια φορά τι θέλει.
kostas.xatzigeorgiou Δημοσ. 14 Νοεμβρίου 2016 Δημοσ. 14 Νοεμβρίου 2016 Διάβασε άλλη μια φορά τι θέλει. Δέν την διάβασα την άσκηση αλλά θέλουμε πάντα να είναι σπορταρισμένο το array μας για να είναι πιό γρήγορο το ψάξιμο.. Για το array των 100 τυχαίων στοιχείων: int array[] = new int[100]; for(int i=0; i < 100 ; i++){ array[i] = (int)(Math.random()*100); Παίρνουμε ακόμα ένα array frequency[100] για να καταχωρηθούν οι επαναλήψεις του κάθε στοιχείου που ψάχνουμε αφού πρώτα το κάνουμε initialization: int frequency[] = new int [100]; for(int j=0; j<100; j++){ frequency[j]=0; } Μετά καταχωρούμε τις επαναλήψεις: for(int j=0; j<100; j++){ frequency[array[j]]++; } και για να δούμε τη συχνότητα όλων των στοιχείων μας που εμφανιζονται μέσα στο αρχικό array μας: for(int j=0; j<array.length; j++){ System.out.println(array[j]+" "+frequency[j]); }
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα