Γραψτε ενα προγραμμα στο οποιο να εισαγετε δυο θετικες τιμες σε δυο ακεραιες μεταβλητες και να εμφανιζει στην οθονη το υπολοιπο (modulo) της διαιρεσης. Να χρησιμοποιηθουν μονο δυο μεταβλητες και να μη χρησιμοποιηθει ο % operator.
Πως?
Εμφάνιση 1-15 από 25
-
24-01-16, 01:53 Προβληματακι σε C στο οποιο δεν μπορω να βρω την λυση. #1
-
24-01-16, 02:43 Απάντηση: Προβληματακι σε C στο οποιο δεν μπορω να βρω την λυση. #2
Μπορείς διαδοχικά να αφαιρέσεις τον διαιρέτη από τον διαιρετέο, μέχρι να μείνει το υπόλοιπο.
- Κάνετε τη δουλειά σας γρήγορα, αξιόπιστα, με ασφάλεια, χωρίς τεχνητούς περιορισμούς και δωρεάν με το Linux.
- Οι δίσκοι χαλάνε! Σκεφτείτε τα αρχεία σας πριν την πατήσετε. Κάνετε τακτικά backup.
-
24-01-16, 04:34 Απάντηση: Προβληματακι σε C στο οποιο δεν μπορω να βρω την λυση. #3Κώδικας:
#include <stdio.h> int main(){ int a = 30; int b = 14; while(a>b){ a=a-b; } printf("%d\n",a); return 0; }
-
24-01-16, 15:20 Απάντηση: Προβληματακι σε C στο οποιο δεν μπορω να βρω την λυση. #4
Εύκολο είναι.
Το έγραψαν έτσι, για να βοηθήσουν στην κατανόηση του casting.
Κατάλαβες τι κάνει το i/j και το (i/j)*j ?
Κώδικας:#include <stdio.h> #include <stdlib.h> int main(void) { int i, j; i = 9; j = 2; printf("%d", i - ((i/j)*j)); return 0; } /* main */
Τελευταία επεξεργασία από το μέλος stel67 : 24-01-16 στις 15:42.
Guardian angels, lay a bed
Shed their light on my sleepy head
I am a threshold yearning to sing
Down with the the dancers having one last fling
Here's to the moment when you said, "Hello"
Come on my spirit are you ready, let's go
https://www.covidstats.gr
-
25-01-16, 14:20 Απάντηση: Προβληματακι σε C στο οποιο δεν μπορω να βρω την λυση. #5
Πολυ καλο ευχαριστω stel67. Το i/j αν καταλαβα καλα δινει 4.5 αλλα "πεταγεται" το 0.5 και μας αφηνει το 4 που ειναι ακεραιος και με αυτο το κομματι παει στην παρακατω πραξη , τον πολλ/σμο επι j.
Εχω ενα καινουριο προβλημα με μια αλλη ασκηση , το ποσταρω εδω για να μην ανοιγω καινουριο νημα.
Write a program that reads an integer and displays the sum of the digits in the positions
2, 4, 6 and 8. For example, if the user enters 170 (bin: 10101010), the program
should display 4. Use only one variable.
-
25-01-16, 22:56 Απάντηση: Προβληματακι σε C στο οποιο δεν μπορω να βρω την λυση. #6Write a program that reads an integer and displays the sum of the digits in the positions
2, 4, 6 and 8. For example, if the user enters 170 (bin: 10101010), the program
should display 4. Use only one variable.Κώδικας:#include <stdio.h> int main(void){ int n = 170; int mask = 2; int sum = 0; while(mask<=128){ if ((n&mask) == mask){ sum++; } mask = mask << 2; } printf("Result: %d\n", sum); return 0; }
-
26-01-16, 10:19 Απάντηση: Προβληματακι σε C στο οποιο δεν μπορω να βρω την λυση. #7
Αυτό είναι πιο δύσκολο.
Θέλει μόνο μια μεταβλητή και σε περιορίζει.
Οι θέσεις 2, 4, 6, 8 αντιστοιχούν στο 2, 8, 32, 128.
Το & το έχετε διδαχθεί?
Bitwise operator, έχει παράδειγμα τι κάνει εδώ:
http://www.tutorialspoint.com/cprogr..._operators.htm
Αν i είναι ο ακέραιος σου, το i = i & 128, τι θα σου επιστρέψει; Για σκέψου το και μετά συνέχισε το διάβασμα παρακάτω.
Spoiler:
Αν το κάνω καλά (δεν είμαι σε pc).
Ελπίζω να μην τεμπελιάζεις και να το παλεύεις λίγο πριν ποστάρεις.Guardian angels, lay a bed
Shed their light on my sleepy head
I am a threshold yearning to sing
Down with the the dancers having one last fling
Here's to the moment when you said, "Hello"
Come on my spirit are you ready, let's go
https://www.covidstats.gr
-
26-01-16, 15:36 Απάντηση: Προβληματακι σε C στο οποιο δεν μπορω να βρω την λυση. #8
https://en.wikipedia.org/wiki/Hamming_weight
Μαλλον εχει σχεση με αυτο , αλλα πρεπει να το μελετησω για να το καταλαβω. Ευχαριστω για τις απαντησεις , τις οποιες πρεπει εξισου να μελετησω.
Απο οτι καταλαβαινω stel67 , πηρες τις δυαδικες εκφρασεις που "ταιριαζουν" για να δωσουν 1 αποτελεσμα σε καθε πραξη? Δεν ειμαι σιγουρος πρεπει να παω σπιτι να το σκεφτω λιγο , ειμαι στο "ποδι".
Επισης αν δεν κανω λαθος μπορει η ασκηση να δινει 10101010 αλλα αν γραψεις int i κατευθειαν το πισι κραταει 4 bytes δλδ στην ουσια σε δυαδικο εχουμε τον αριθμο 00000000 00000000 00000000 10101010 που μπορει να παιζει ρολο.
Ετσι μου ερχεται να αφησω λιγο το κεφαλαιο με τους bit τελεστες και να παω λιγο πιο κατω .... ειναι πονοκεφαλος.
Το βιβλιο που διαβαζω ειναι :https://www.crcpress.com/C-From-Theo.../9781482214505
-
26-01-16, 16:55 Απάντηση: Προβληματακι σε C στο οποιο δεν μπορω να βρω την λυση. #9
Έφόσον εσένα σε ενδιαφέρουν μόνο τα bit που βρίσκονται στις θέσεις 2,4,6,8 και αντιστοιχούν στους αριθμούς 2,8,32,128 αντίστοιχα, πρέπει να σκεφτείς έναν τρόπο να απομονώσεις τα άλλα bit και να ασχοληθείς μόνο με αυτά που σε ενδιαφέρουν. Έτσι λοιπόν παίρνωντας τους αριθμούς 2,8,32,128 και κάνοντας λογικό και(AND bitwise operator == &) με τον αριθμό που σου δίνετε (στην περιπτωσή μας π.χ το 170) έχεις το παρακάτω:
2(==10) & 170(==10101010) = 00000010(==2)
8(==1000) & 170(==10101010) = 00001000(==8)
32(==100000) & 170(==10101010) = 00100000(==32)
128(==10000000) & 170(==10101010) = 10000000(==128)
Βασίζεσαι δηλαδή στο γεγονός οτι για να προκύψει 1 οταν κάνεις & δύο bit θα πρέπει και τα δύο να είναι 1. Για αυτό και παίρνεις τους αριθμούς 2,8,32,128 επείδη έχουν 1 μόνο στις θέσεις που σε ενδιαφέρει και 0 στα άλλα bit έτσι ώστε να τα μηδενίσουν. Συνεπώς αν το αποτέλεσμα της πράξης είναι ο αριθμός που χρησιμοποιείς για το & τότε πράγματι ο αριθμός που δίνετε είχε 1 στην εκάστοτε θέση όποτε έχεις το ζήτουμενο.
Στο δικό μου παράδειγμα παίρνω τον αριθμό 2 και κάνω αριστερή ολίσθηση 2 bit(<< 2) κάθε φορά ώστε να γίνει 8,32,128...
Επισης αν δεν κανω λαθος μπορει η ασκηση να δινει 10101010 αλλα αν γραψεις int i κατευθειαν το πισι κραταει 4 bytes δλδ στην ουσια σε δυαδικο εχουμε τον αριθμο 00000000 00000000 00000000 10101010 που μπορει να παιζει ρολο.
-
26-01-16, 23:02 Απάντηση: Προβληματακι σε C στο οποιο δεν μπορω να βρω την λυση. #10
Εξυπνο , ευχαριστω το καταλαβα πως δουλευει
Εχω ενα προβληματακι μονο , οταν το τρεχω βγαζει μηδεν αποτελεσμα και δεν μπορω να καταλαβω γιατι δεν αυξανει το sum , τωρα που μπηκα στην λογικη...
- - - Updated - - -
Το βρηκα ειχα ξεχασει τις εξτρα παρενθεσεις .... μαλλον κατι με τη σειρα που γινονται οι πραξεις , αν και δεν μπορω να καταλαβω στο n & sum ==mask μια πραξη γινεται ολη και ολη και μετα μια συγκριση .... κατι τετοιες λεπτομερειες ειναι αγκρρρρ .... ευχαριστω και παλι.
Βασικα, εκτος απο το να μαθω c , θελω να εντρυφησω λιγο λυνωντας ουσιαστικα προβληματα ... να μαθω να σκεφτομαι κατα καποιο τροπο , αν ξερετε καποιο καλο σαιτ με προβληματακια στη c που μπορω να τσεκαρω και μετα τον κωδικα μου με την ενδεδειγμενη λυση , για να δω αν το εχω κανει με "ηλιθιο τροπο" δωστε λινκ
-
26-01-16, 23:15 Απάντηση: Προβληματακι σε C στο οποιο δεν μπορω να βρω την λυση. #11
Η πράξη -> (n&mask) == mask <- προκύπτει πάντα μηδέν αν δεν βάλεις τις έξτρα παρενθέσεις διότι η πράξη της ισότητας(==) προηγείτεαι απο το &(Bitwise AND) με αποτέλεσμα να γίνεται παντα πρώτα ο έλεγχος mask==mask.
Αυτό δίνει αποτέλεσμα πάντα 1, δηλαδή τον αριθμό 000(...)001 (είπαμε όλοι οι int αποθηκεύονται με την μορφή 32bit) ο οποίος κάνοντας τον & με το 2,8,32,128 δίνει πάντα 0 διότι αυτοί οι αριθμοί είναι άρτιοι συνεπώς έχουν το δεξιότερο bit πάντα 0. Άρα τελικά εχεις πάντα if(0) οπότε και η συνθήκη δεν ισχύει ποτέ και το sum παραμένει 0.
Δες εδώ http://en.cppreference.com/w/c/langu...tor_precedence για τις προτεραιότητες των πράξεων στην C.
Ελπίζω να βοήθησα
-
27-01-16, 00:00 Απάντηση: Προβληματακι σε C στο οποιο δεν μπορω να βρω την λυση. #12
Και μια ανακεφαλαιωση για τους δυο ουσιαστικα τροπους λυσιματος που δοθηκαν (με την ιδια λογικη βασισμενη):
Κώδικας:#include <stdio.h> int main(){ int n; int mask=2; int sum=0; printf("Give integer to calculate:\n"); scanf("%d",&n); while(mask<=128){ printf("%d\n",n ); printf("%d\n",mask); if((n & mask) == mask){ sum++; } mask =mask << 2; } printf("Result: %d\n", sum); printf("result is:%d\n", (n & 128)/128 + (n & 32)/ 32 + (n & 8)/8 + ( n & 2) / 2); return 0; }
Write a program that reads four integers and displays the pair with the largest sum.
For example, if the user enters 10, −8, 17, 5, the program should display 10+17 = 27.
Ειναι ευκολο να λυθει , αλλα αν αρχιζεις να προγρμματιζεις .... βλεπεις οτι το να κρατησεις ενα μινιμουμ απο πολλαπλα if και συγκρισεις ειναι ... πονοκεφαλος. Υπαρχει καμμια μεθοδολογια σε αυτο?
- - - Updated - - -
Τελεστες συγκρισης ... λαθος μαλλον λογικες πραξεις λεγονται....
-
27-01-16, 00:04 Απάντηση: Προβληματακι σε C στο οποιο δεν μπορω να βρω την λυση. #13
Νομίζω ο δικός μου τρόπος είναι πιο απλός και έχει μόνο μια μεταβλητή όπως ζητάει ή εκφώνηση.
Ίσως μου φαίνεται έτσι επειδή το σκέφτηκα εγώ
Τα χρόνια που έγραφα C στα 32/bit επεξεργαστές & λειτουργικα, ο integer ήταν 2 bytes, όχι 4. Στα x86 σίγουρα, νομίζω και στο mvs.
Για Γράψε το εξης;:
printf("Size of integer is %d", sizeof(int));
Νομίζω ότι το κομμάτι των bit operants είναι too much για αρχή.
Η c είναι ωραία γλώσσα.
Χαίρομαι που διδάσκεται ακόμα.Guardian angels, lay a bed
Shed their light on my sleepy head
I am a threshold yearning to sing
Down with the the dancers having one last fling
Here's to the moment when you said, "Hello"
Come on my spirit are you ready, let's go
https://www.covidstats.gr
-
27-01-16, 00:15 Απάντηση: Προβληματακι σε C στο οποιο δεν μπορω να βρω την λυση. #14
printf("Size of integer is %d", sizeof(int));
Αυτη η εντλη μου δινει ενα σφαλμα: warning: format expects argument of type but argument 2 has type long unsigned int
οποτε εβαλα αντι %d to %ld και βγαζει 4.
- - - Updated - - -
Α ειναι απλως warning και με %d το ιδιο βγαζει ...4
- - - Updated - - -
Τρεχω Ubuntu -64 bit νομιζω ειναι, σε virtual machine στο διαδικτυο απο το προγραμμα okeanos.
-
27-01-16, 00:39 Απάντηση: Προβληματακι σε C στο οποιο δεν μπορω να βρω την λυση. #15
Μάλλον τώρα είναι 4 bytes στουσ 64 bit-ους επεξεργαστές. (κατεβάζω visual studio express 2015, για να κάνω κι εγώ ένα test σ' αυτό το laptop).
Καλό είναι πάντως, να μη θεωρείς δεδομένο το μέγεθος των μεταβλητών, αλλά να χρησιμοποιείς τη sizeof, όταν χρειάζεται να ξέρεις το μέγεθος τους.
Η C θέλει χρόνο, για να τη μάθεις. Μη βιάζεσαι. Χρειάζεται λίγος καιρός, για να τη "χωνέψεις".
Μετά όμως όλα στο προγραμματισμό αποκτούν περισσότερο νόημα, καταλαβαίνεις καλύτερα το hardware, να το πω διαφορετικά.
Για δοκίμασε και αυτό:
printf("Int = %d, Long int = %d, Short int = %d", sizeof(int), sizeof(long), sizeof(short));Guardian angels, lay a bed
Shed their light on my sleepy head
I am a threshold yearning to sing
Down with the the dancers having one last fling
Here's to the moment when you said, "Hello"
Come on my spirit are you ready, let's go
https://www.covidstats.gr
Παρόμοια Θέματα
-
δεν μπορω να συνδεθω στο you tube!
Από lilipuss στο φόρουμ Internet, web surfing και online υπηρεσίεςΜηνύματα: 0Τελευταίο Μήνυμα: 28-09-15, 23:32 -
Που μπορώ να βρω αυτά τα σνακ;
Από blade_ στο φόρουμ Εκτός θέματοςΜηνύματα: 2Τελευταίο Μήνυμα: 13-08-15, 15:23 -
Δεν μπορώ να κάνω format σε laptop με εξωτερική οθόνη
Από HugeG στο φόρουμ Laptop, tablet και mobile computingΜηνύματα: 0Τελευταίο Μήνυμα: 19-06-15, 15:24 -
H80i δεν μπορώ να αλλάξω την ταχύτητα του ανεμιστήρα
Από CrazyScientist στο φόρουμ Κουτιά, τροφοδοτικά και ψύξηΜηνύματα: 3Τελευταίο Μήνυμα: 23-05-15, 20:22 -
Δεν μπορω να βρω το AMD-V στο bios.
Από vaggelis7172 στο φόρουμ Motherboards, CPU και memoryΜηνύματα: 3Τελευταίο Μήνυμα: 24-04-15, 18:57
Bookmarks