Lomar Δημοσ. 12 Σεπτεμβρίου 2006 Μέλος Δημοσ. 12 Σεπτεμβρίου 2006 ΑΚΥΡΟ!!! ΒΡΗΚΑ ΛΥΣΗ!!! > #include <stdio.h> main () { int n,a[100],b[100],i=0,flag=0,k=0,p=0; do { printf ("\n Dwse ton N: \n"); scanf ("%d",&n); } while (n<10 && n>100); for (i=0;i<n;i++) { printf ("\n dwse to %d stoixeio: ",i+1); scanf ("%d",&a[i]); } for (i=0;i<n;i++) b[i]=0; flag=0; k=0; for (i=0;i<n;i++) { if (a[i]!=0) { b[k]=a[i]; k++; flag=1; } p=i; while (flag=0) { p++; if (a[p]!=0) { b[k]=a[p]; flag=1; } else flag=0; } } for (i=0;i<n;i++) printf ("\n %d ",b[i]); } Θέλω την γνώμη σας, καθώς και πιο βελτιστοποιημένο κώδικα αν γίνεται, ευχαριστώ πάντως όσους δοκίμασαν έστω να με βοηθήσουν!!!
Mystirios Δημοσ. 12 Σεπτεμβρίου 2006 Δημοσ. 12 Σεπτεμβρίου 2006 Επειδή δε σε πιάνω εκει με to flag που έχεις ορίσει (βάλε και κάνα σχόλιο δίπλα) , ορίστε μια απλή εξήγηση πως θα το κανα εγώ : Διαβάζεις τον Α; Αντέγραψε τον Α στον Β; Για ι απο 0 ως Ν Αν το Β[ι]==0 τότε κάντε αντιμετάθεση με το Β[ι+1] Ελέγχεις το ι στοιχείο του πίνακα μέχρι να είναι μη μηδενικό ή μέχρι να χτυπήσεις Ν Αν χτυπήσεις Ν exit; (Λύση του ποδαριού , βαριόμουνα να ανοίξω compiler)
Lomar Δημοσ. 12 Σεπτεμβρίου 2006 Μέλος Δημοσ. 12 Σεπτεμβρίου 2006 @Mystirios Μα απο την for την τελευταία υπάρχει το κρητίριο για να σταματήσει όλη αυτή η τρελλή λούπα όταν βρεί Ν. thnks πάντως η δική σου ήταν και κατανοητή και εύκολη και μου γλυτώνει και υπολογιστικούς πόρους. Όχι δεν είναι double post, τελικά (Δόξα τον Θεό τον μεγαλοδύναμο, μετά απο 3 ώρες βρήκα την λύση!! - αν μου πάρει τόσο και σήμερα που γράφω την έκατσα την ψαρόβαρκα!!!) βρήκα και εγώ ο καημένος, φτωχός πλήν τίμιος junior programmer μια λύση που να λειτουργεί!!!!
alkisg Δημοσ. 12 Σεπτεμβρίου 2006 Δημοσ. 12 Σεπτεμβρίου 2006 Αλγόριθμος (κάνω μια εξήγηση πριν τη C γιατί μου φωνάζετε!!!) : ...έχουμε διαβάσει το Α και πάμε να φτιάξουμε το Β. Βάζουμε 2 μετρητές. Ο i θα μετράει τα στοιχεία του Α. Ο j θα μετράει τα στοιχεία του Β. Το ζουμί: το j το αυξάνουμε ΜΟΝΟ όταν βάζουμε ένα στοιχείο στο Β. Έτσι τα μη μηδενικά στοιχεία θα μπουν με τη σειρά: > j = 0; //ξεκινάμε από την αρχή του Β for (i = 0; i < 100; i++) if (A[i] != 0) { //αν είναι μη μηδενικό στοιχείο B[j] = A[i]; //βάλτο στην κατάλληλη θέση του Β με τη σειρά j++; //το επόμενο μη μηδενικό να μπει στην επόμενη θέση του Β } } Αυτό ήταν, χρειάστηκε ένα μόνο for. Όμως τα τελευταία στοιχεία του Β δεν τα μηδενίσαμε όπως έπρεπε, και συγκεκριμένα τα στοιχεία από τη θέση j ως το τέλος. Ένα ακόμα for λοιπόν για να βάλουμε τα υπόλοιπα μηδενικά στο Β: > for (; j < 100; j++) B[j] = 0; Αυτό έχει ένα περίεργο, το ότι στην αρχή του for έχει ένα σκέτο ερωτηματικό. Ποια θέλαμε να μηδενίσουμε; Τα στοιχεία στις θέσεις από j ως 99 (j από το προηγούμενο for ήταν η θέση ακριβώς μετά από το τελευταίο μη μηδενικό στοιχείο). Άρα έπρεπε να πούμε for (j = j; j < 100; j++) και αφού το j = j δεν κάνει τίποτα, το παραλείπουμε...
Lomar Δημοσ. 12 Σεπτεμβρίου 2006 Μέλος Δημοσ. 12 Σεπτεμβρίου 2006 @alkisg ιδιοφυέστατο, αλλά πάλι δεν κατάλαβα και πολλά :oops: Τέσπα, ένα μεγάλο λοιπόν ευχαριστώ στην κοινότητα του Insomnia που με βοήθησε να ξεπεράσω τα ζητήματα της C thnks alkisg, Dikemou, Mystirios, Aerico, kickeras, chiossif για την βοήθεια και τον χρόνο σας!!! Βοηθήσατε, πραγματικά πολύ
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.