capoelo Δημοσ. 23 Μαΐου 2012 Δημοσ. 23 Μαΐου 2012 #include<stdio.h> #include<stdlib.h> #include<conio.h> int main(void) { int item[100],a,b,t,count; printf("How many numbers? "); scanf("%d",&count); for(a=0;a<count;a++) scanf("%d",&item[a]); for(a=1;a<count;++a) for(b=count-1;b>=a;b--) { if(item[b-1]>item) { t=item[b-1]; item[b-1]=item; item=t; } } for(t=0;t<count;t++) printf("%d",item[t]); system("Pause"); return 0; } Αυτό το πρόγραμμα εφαρμόζει τον αλγόριθμο φυσαλίδας στα δεδομένα που εισάγει ο χρήστης.Το πρόβλημα μου είναι η for.Το ++a σημαίνει ότι πρώτα θα αυξηθεί η τιμή και μετά θα χρησιμοποιηθεί στην έκφραση.Άρα το a ξεκινάει απο 2(διορθώστε με αν κάνω λάθος).Το b αντιστοίχως απο 3(για count=5 π.χ.).Άρα το b θα πάρει τις τιμές 3 και 2.Τα υπόλοιπα στοιχεία;Μπορεί κάποιος να μου το εξηγήσει; Επίσης,με a++ και b++ μου φαίνεται πιο λογικό.
pantpesl2 Δημοσ. 24 Μαΐου 2012 Δημοσ. 24 Μαΐου 2012 Καλησπέρα φίλε, στα σημεία όπου χρησιμοποιείς τα ++ δεν παίζει κανένα ρόλο αν θα τα βάλεις από μπροστά ή από πίσω. Οι for που έχεις θα τρέξουν κανονικά από a=1 μέχρι a<count και από b=count-1 μέχρι b>=a αντίστοιχα! EDIT ---------- Παράδειγμα που επηρεάζει η σειρά: > int i=0; int j; j = ++i; // j=1, i=1 j = i++; // j=1, i=2 δηλαδή παίζει ρόλο μόνο όταν υπάρχει σε κάποια έκφραση.
nilosgr Δημοσ. 24 Μαΐου 2012 Δημοσ. 24 Μαΐου 2012 Κατ αρχήν (συνηθίζετε) να τα λέμε πίνακες, ούτε διατάξεις, ούτε αράδες (ναι το χω διαβάσει και αυτό...) Για το ++a, στην συγκεκριμένη περίπτωση είναι το ίδιο σαν να ήταν a++. Επειδή στη for πρώτα γίνετε η ανάθεση, μετά ελέγχετε το condition, μετά εκτελείτε το body και τέλος εκτελείτε το step (δηλαδή το ++a). Άρα δεν έχει σημασία που ο τελεστής είναι από πίσω, αφού η σειρά που εκτελείτε η for είναι αυστηρή. Το αν ο τελεστής είναι από πίσω ή από μπροστά έχει να κάνει με προτεραιότητα αριθμητικών / λογικών πράξεων. Δηλαδή : >int a, b; a = b = 5; a = ++a + 2 * a; b = b++ + 2 * b; Όσο για το bubble sort, απλά σου λέω την κεντρική ιδέα, αλλά για να πιστεις ότι ο κώδικας που προτείνεις δεν δουλεύει καλό θα ήταν να δοκιμάσεις να τον τρέξεις μόνος σου στο χαρτί. Πως δουλεύει ο bubble sort, πάει και παίρνει το τελευταίο στοιχείο στον πίνακα, αν αυτό είναι μικρότερο απ το προηγούμενο του τα ανταλλάσει και μετά συγκρίνει το προτελευταίο με το προηγούμενο του κλπ κλπ. Αυτό το κάνει ώσπου να φτάσει στο δεύτερο στοιχείο το οποίο το συγκρίνει με το πρώτο. Στην επόμενη επανάληψη σταματά στο τρίτο στοιχείο κοκ ώσπου συγκρίνει το τελευταίο με το προτελευταίο στοιχείο και εκεί σταματά. Στην ουσία δηλαδή σε κάθε επανάληψη ολισθαίνει με ανταλλαγές το μικρότερο στοιχείο και το βάζει στη "σωστή" του θέση. Δηλαδή αν κόψω το πρόγραμμα στην 5η επανάληψη τότε τα πέντε πρώτα στοιχεία στον πίνακα θα είναι τα πέντε μικρότερα και μάλιστα θα είναι και ταξινομημένα.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα