albNik Δημοσ. 4 Ιουνίου 2013 Δημοσ. 4 Ιουνίου 2013 το μονο που βρηκα ειναι οτι για να απαληψεις το πρωτο ψηφιο του Μ κανεις Μ%10^1 και για να απαληψεις το τελευταιο ειναι Μ/10^1 για 6 ψηφία πρέπει |Μ|>=100000 Για να απαλείψεις τον τελευταιο Μ %= 10 μετα για να βγάλεις τον πρώτο int pow10 = 1; while(M >= pow10) pow10 *= 10; if(M<pow10) pow10 /= 10; M %= pow10;
DoukiMan Δημοσ. 4 Ιουνίου 2013 Μέλος Δημοσ. 4 Ιουνίου 2013 Ιδέα μου είναι ή αυτός ο κώδικας είναι ολόιδιος με αυτόν που έδωσες στην αρχή ? Αυτό που κάνεις είναι απλά να βρίσκεις και να τυπώνεις τον αριθμό των ψηφίων. Σε ποιο σημείο ενσωμάτωσες την πρόταση του bird να ελέγχει αν είναι μικρότερο του 6 και να ξανατρέχει όλο το κομμάτι ? το δοκιμασα αυτο που ειπε ο bird απο πανω αλλα δεν βγαζει σωστα τον αριθμο των ψηφιων(η εγω κατι κανω λαθος)
bird Δημοσ. 4 Ιουνίου 2013 Δημοσ. 4 Ιουνίου 2013 το δοκιμασα αυτο που ειπε ο bird απο πανω αλλα δεν βγαζει σωστα τον αριθμο των ψηφιων(η εγω κατι κανω λαθος) ανέβασε τον κώδικα να δούμε που γίνεται το λάθος... edit: πιθανον να μην μηδενιζεις τον μετρητή των ψηφίων κάθε φορά που ξανατρέχει το loop... 1
nucleus Δημοσ. 4 Ιουνίου 2013 Δημοσ. 4 Ιουνίου 2013 Τον εξαψήφιο θα στον βάζει ψηφίο ψηφίο ο χρήστης ή όλο μαζί? Στην πρώτη περίπτωση πρέπει να βάζεις το ψηφίο σε ένα πίνακα πριν ξανακάνεις scanf. Στην δεύτερη περίπτωση ένα από strlen θα σου πει το μέγεθος του αριθμού που έβαλε ο χρήστης.
DoukiMan Δημοσ. 4 Ιουνίου 2013 Μέλος Δημοσ. 4 Ιουνίου 2013 Τον εξαψήφιο θα στον βάζει ψηφίο ψηφίο ο χρήστης ή όλο μαζί? Στην πρώτη περίπτωση πρέπει να βάζεις το ψηφίο σε ένα πίνακα πριν ξανακάνεις scanf. Στην δεύτερη περίπτωση ένα από strlen θα σου πει το μέγεθος του αριθμού που έβαλε ο χρήστης. τον αριθμο ολο μαζι τον εισαγουμε. αν ειναι μικροτερος απο 6 ψηφια ξανα εισαγουμε μεχρι να ειναι τουλαχιστον 6 ψηφια ανέβασε τον κώδικα να δούμε που γίνεται το λάθος... edit: πιθανον να μην μηδενιζεις τον μετρητή των ψηφίων κάθε φορά που ξανατρέχει το loop... #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int M; int metra=0; printf("Eisagete enan akeraio arithmo M:\n"); scanf("%d",&M); if (M<0) M*=-1; while(M) { M=M/10; metra++; while(metra<6) { printf("Eisagete enan allo akeraio arithmo me toulaxiston 6 psifia M:\n"); scanf("%d",&M); if (M<0) M*=-1; metra++; } } printf("To sinolo twn psifiwn einai:\n%d\n",metra); system("PAUSE"); return 0; }
nucleus Δημοσ. 4 Ιουνίου 2013 Δημοσ. 4 Ιουνίου 2013 Οπότε αλλάζεις την scanf από %d (ακέραιο) σε %s (string) και μετά με την strlen βρίσκεις το μήκος του.Σημείωση το παραπάνω θα δεχτεί έναν οποιοδήποτε χαρακτήρα πχ a123 θα πρέπει να ελέγξεις για αυτό. Αν δεν σου αρέσει το παραπάνω ανέβασε τον κώδικα να δούμε που γίνεται το λάθος... edit: πιθανον να μην μηδενιζεις τον μετρητή των ψηφίων κάθε φορά που ξανατρέχει το loop... Ξαναδες μια το edit
bird Δημοσ. 4 Ιουνίου 2013 Δημοσ. 4 Ιουνίου 2013 τον αριθμο ολο μαζι τον εισαγουμε. αν ειναι μικροτερος απο 6 ψηφια ξανα εισαγουμε μεχρι να ειναι τουλαχιστον 6 ψηφια #include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]){ int M; int metra=0; printf("Eisagete enan akeraio arithmo M:\n"); scanf("%d",&M); if (M<0) M*=-1; while(M) { M=M/10; metra++; while(metra<6) { printf("Eisagete enan allo akeraio arithmo me toulaxiston 6 psifia M:\n"); scanf("%d",&M); if (M<0) M*=-1; metra++;} }printf("To sinolo twn psifiwn einai:\n%d\n",metra);system("PAUSE"); return 0;} Δεν είναι σωστή η λογική έτσι όπως το έχεις κάνει... Φαντάσου κάπως έτσι: ...μηδενισμός μεταβλητής ψηφίωνwhile( ψηφία < 6) { τύπωσε μήνυμα διάβασε τον αριθμό υπολόγισε τα ψηφία του αριθμού αν ( αριθμός ψηφίων < 6 ) { τύπωσε λάθος μηδενισμός μεταβλητής ψηφίων }}...
DoukiMan Δημοσ. 4 Ιουνίου 2013 Μέλος Δημοσ. 4 Ιουνίου 2013 Δεν είναι σωστή η λογική έτσι όπως το έχεις κάνει... Φαντάσου κάπως έτσι: ... μηδενισμός μεταβλητής ψηφίων while( ψηφία < 6) { τύπωσε μήνυμα διάβασε τον αριθμό υπολόγισε τα ψηφία του αριθμού αν ( αριθμός ψηφίων < 6 ) { τύπωσε λάθος μηδενισμός μεταβλητής ψηφίων } } ... κατι κανω λαθος #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int M; int metra=0; printf("Eisagete enan akeraio arithmo M:\n"); scanf("%d",&M); if (M<0) M*=-1; while(M<99999) { printf("Eisagete enan arithmo me toulaxiston 6 psifia M:\n"); scanf("%d",&M); while(M) { M=M/10; metra++;} printf("To sinolo twn psifiwn einai:\n%d\n",metra); system("PAUSE"); return 0; }
bird Δημοσ. 4 Ιουνίου 2013 Δημοσ. 4 Ιουνίου 2013 Σκέψου τι θα κάνει ο κώδικά σου, αν απο την αρχή ο χρήστης δώσει αριθμό με 6 ψηφία και πάνω... Θα υπολογίσει τα ψηφία;
DoukiMan Δημοσ. 4 Ιουνίου 2013 Μέλος Δημοσ. 4 Ιουνίου 2013 ξερει κανεις πως μπορω να διαβαζω τα στοιχεια ενος πινακα που δεν ξερω διαστασεις μεσα στην συναρτησηΑ και να τα εμφανιζω στην main με αλλη συναρτηση Β???
bird Δημοσ. 4 Ιουνίου 2013 Δημοσ. 4 Ιουνίου 2013 Στη συνάρτηση Α από που θα διαβάζονται τα δεδομένα (αρχείο, πληκτρολογιο); Πώς θα καταλαβαίνεις πόσα στοιχεία να διάβασεις; Θα δίνει ο χρήστης στην αρχή της συνάρτησης ότι θέλει να δώσει π.χ. 20 τιμές και μετά θα τις διαβάζεις ή θα διαβάζεις μέχρι να δώσει ο χρήστης μια συγκεκριμένη τιμή ή μέχρι να τελειώσει το αρχείο αν διαβάζεις απο αρχείο; Τι τιμές θα έχει ο πίνακας; int, char, string; Έχεις μάθει δυναμική δέσμευση μνήμης (malloc/calloc); Έχεις μάθει δείκτες; Δώσε κάτι παραπάνω να σου πούμε, όλοι ξέρουν εδώ μεσα πως γίνεται αυτό που ζητάς, αρκεί να το διευκρυνίσεις...
DoukiMan Δημοσ. 4 Ιουνίου 2013 Μέλος Δημοσ. 4 Ιουνίου 2013 Στη συνάρτηση Α από που θα διαβάζονται τα δεδομένα (αρχείο, πληκτρολογιο); Πώς θα καταλαβαίνεις πόσα στοιχεία να διάβασεις; Θα δίνει ο χρήστης στην αρχή της συνάρτησης ότι θέλει να δώσει π.χ. 20 τιμές και μετά θα τις διαβάζεις ή θα διαβάζεις μέχρι να δώσει ο χρήστης μια συγκεκριμένη τιμή ή μέχρι να τελειώσει το αρχείο αν διαβάζεις απο αρχείο; Τι τιμές θα έχει ο πίνακας; int, char, string; Έχεις μάθει δυναμική δέσμευση μνήμης (malloc/calloc); Έχεις μάθει δείκτες; Δώσε κάτι παραπάνω να σου πούμε, όλοι ξέρουν εδώ μεσα πως γίνεται αυτό που ζητάς, αρκεί να το διευκρυνίσεις... Να γίνει ανάπτυξη προγράμματος σε γλώσσα C με το οποίο θα γίνεται εισαγωγή των στοιχείων σε ένα πίνακα ακεραίων και θα βρίσκει το πλήθος των αρνητικών και το πλήθος των θετικών στοιχείων του κάθε πίνακα. Επίσης θα υπολογίζεται ένας δεύτερος πίνακας που θα αποτελείται από τα τετράγωνα των στοιχείων του αρχικού πίνακα. Το πρόγραμμα θα περιλαμβάνει τις συναρτήσεις: 1) pinisodos Εισάγονται τα στοιχεία ενός πίνακα 2) pinplithos Βρίσκει και επιστρέφει το πλήθος των θετικών και το πλήθος των αρνητικών στοιχείων ενός πίνακα. 3) pintetra βρίσκει και επιστρέφει πίνακα με τα τετράγωνα των στοιχείων ενός πίνακα 4) pinemfa Θα εμφανίζονται στην οθόνη τα στοιχεία του πίνακα Στο main - - Θα γίνεται κλήση της συνάρτησης sinisodos για να εισάγονται τα στοιχεία πίνακα. -Θα γίνεται κλήση της συνάρτησης sinplithos για να υπολογίζεται και επιστρέφεται το πλήθος των θετικών και το πλήθος των αρνητικών στοιχείων του πίνακα. Το πλήθος θετικών και αρνητικών θα εμφανίζεται με εντολή printf στο main. -Θα γίνεται κλήση της συνάρτησης spintetra για να υπολογίζεται και επιστρέφεται πίνακα με τα τετράγωνα των στοιχείων ενός πίνακα Θα γίνεται κλήση της συνάρτησης emfsin δύο φορές για να εμφανίζονται στην οθόνη τα στοιχεία του αρχικού πίνακα και τα στοιχεία του πίνακα που αποτελείται από τα τετράγωνα των στοιχείων του αρχικού πίνακα δεικτες εχω κανει μονο αλλα λιγα πραγματα
imitheos Δημοσ. 4 Ιουνίου 2013 Δημοσ. 4 Ιουνίου 2013 κατι κανω λαθος #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int M; int metra=0; printf("Eisagete enan akeraio arithmo M:\n"); scanf("%d",&M); if (M<0) M*=-1; while(M<99999) { printf("Eisagete enan arithmo me toulaxiston 6 psifia M:\n"); scanf("%d",&M); while(M) { M=M/10; metra++;} printf("To sinolo twn psifiwn einai:\n%d\n",metra); system("PAUSE"); return 0; } Τι IDE χρησιμοποιείς ? Όλα τα IDE έχουν κάποιο "beautifier" που φτιάχνει σωστά την σύνταξη γιατί έτσι μας βγαίνουν τα μάτια. Όσον αφορά τον κώδικα, δεν είναι ακριβώς αυτό που περιέγραψε ο bird με ψευδοκώδικα. Προσπάθησε να σκέφτεσαι τα βήματα και μετά απλά μετάφρασε τα σε C. Εδώ δεν χρειάζεται καν να τα σκεφτείς γιατί στα έδωσε ο bird. Αφού ελέγχεις αν το Μ είναι μικρότερο του 99999 γιατί μετά έχεις πάλι while με υπολογισμό των ψηφίων ? Εφόσον η άσκηση δεν σου ζητάει να βρεις τον αριθμό ψηφίων, μόνο η συνθήκη του μικρότερου (με τη παρούσα μορφή της συνθήκης το σωστό είναι μικρότερο-ίσο) αρκεί. Πάμε πάλι από την αρχή. Μία από τις πολλές εκδοχές είναι η εξής: Αριθμός = 0 Όσο Αριθμός < 100000 Εμφάνισε μήνυμα "Δώσε μπλα μπλα:" Διάβασε Αριθμό Αν Αριθμός < 0 κάνε τον θετικό Αν Αριθμός < 100000 Πάμε πάλι από την αρχή // Σε αυτό το σημείο σημαίνει ότι ο αριθμός είναι θετικός 6+ψήφιος // άρα γράφουμε τον κώδικα που αφαιρεί το πρώτο-τελευταίο ψηφίο Εμφάνισε το νέο αριθμό Τέλος βρόχου Γράψε αυτό σε C
DoukiMan Δημοσ. 4 Ιουνίου 2013 Μέλος Δημοσ. 4 Ιουνίου 2013 Τι IDE χρησιμοποιείς ? Όλα τα IDE έχουν κάποιο "beautifier" που φτιάχνει σωστά την σύνταξη γιατί έτσι μας βγαίνουν τα μάτια. Όσον αφορά τον κώδικα, δεν είναι ακριβώς αυτό που περιέγραψε ο bird με ψευδοκώδικα. Προσπάθησε να σκέφτεσαι τα βήματα και μετά απλά μετάφρασε τα σε C. Εδώ δεν χρειάζεται καν να τα σκεφτείς γιατί στα έδωσε ο bird. Αφού ελέγχεις αν το Μ είναι μικρότερο του 99999 γιατί μετά έχεις πάλι while με υπολογισμό των ψηφίων ? Εφόσον η άσκηση δεν σου ζητάει να βρεις τον αριθμό ψηφίων, μόνο η συνθήκη του μικρότερου (με τη παρούσα μορφή της συνθήκης το σωστό είναι μικρότερο-ίσο) αρκεί. Πάμε πάλι από την αρχή. Μία από τις πολλές εκδοχές είναι η εξής: Αριθμός = 0 Όσο Αριθμός < 100000 Εμφάνισε μήνυμα "Δώσε μπλα μπλα:" Διάβασε Αριθμό Αν Αριθμός < 0 κάνε τον θετικό Αν Αριθμός < 100000 Πάμε πάλι από την αρχή // Σε αυτό το σημείο σημαίνει ότι ο αριθμός είναι θετικός 6+ψήφιος // άρα γράφουμε τον κώδικα που αφαιρεί το πρώτο-τελευταίο ψηφίο Εμφάνισε το νέο αριθμό Τέλος βρόχου Γράψε αυτό σε C φιλε σε dev ++ γραφω ενταξει την ελησα αυτη την ασκηση. αν μπορεις να βοηθησεις στην αλλη
albNik Δημοσ. 4 Ιουνίου 2013 Δημοσ. 4 Ιουνίου 2013 ξερει κανεις πως μπορω να διαβαζω τα στοιχεια ενος πινακα που δεν ξερω διαστασεις μεσα στην συναρτησηΑ και να τα εμφανιζω στην main με αλλη συναρτηση Β??? Δεν μπορεις να βρεις το μήκος του πίνακα μεσα απο την συναρτησηΑ. Γιαυτο συνήθως οι συναρτήσεις που δέχονται πίνακες έχουν και μια παραμετρο για το μήκος. Μια λύση στου πίνακες char[] είναι ο τελευταίος χαρακτηρας του να ειναι το '\0' σαν σημάδι τέλους. Σε int[] μπορεις να βάλεις το -1στο τέλος εαν δεν πρόκειται να έχει κάποιο κανονικό του στοιχείο τιμή -1 ποτέ.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα