Σελ. 1 από 2 12 ΤελευταίαΤελευταία
Εμφάνιση 1-15 από 25
  1. #1
    Γραψτε ενα προγραμμα στο οποιο να εισαγετε δυο θετικες τιμες σε δυο ακεραιες μεταβλητες και να εμφανιζει στην οθονη το υπολοιπο (modulo) της διαιρεσης. Να χρησιμοποιηθουν μονο δυο μεταβλητες και να μη χρησιμοποιηθει ο % operator.

    Πως?

  2. #2
    Εγγραφή
    21-03-2008
    Ηλικία
    36
    Μηνύματα
    9.894
    Downloads
    8
    Uploads
    2
    Τύπος
    VDSL2
    Ταχύτητα
    51200/5120
    ISP
    Nova
    Router
    VMG8623-T50B & Debian
    Μπορείς διαδοχικά να αφαιρέσεις τον διαιρέτη από τον διαιρετέο, μέχρι να μείνει το υπόλοιπο.
    - Κάνετε τη δουλειά σας γρήγορα, αξιόπιστα, με ασφάλεια, χωρίς τεχνητούς περιορισμούς και δωρεάν με το Linux.
    - Οι δίσκοι χαλάνε! Σκεφτείτε τα αρχεία σας πριν την πατήσετε. Κάνετε τακτικά backup.

  3. #3
    Κώδικας:
    #include <stdio.h>
    int main(){
    	int a = 30;
    	int b = 14;
    	while(a>b){
    		a=a-b;
    	}
    		
    
    	printf("%d\n",a);
    
    
    
    	return 0;
    }
    Ευχαριστω , πραγματι ηταν απλη η λυση το εκανα. Μονο που το βιβλιο που διαβαζω για C εχει δειξει μονο πως συντασσεται η printf και λιγο casting. Υπεθεσα οτι αφου δεν εχουν διδαχτει εντολες οπως while , if κλπ υπαρχει και αλλη λυση χρησιμοποιωντας μονο την printf και αριθμητικες πραξεις. Τουλαχιστον στα προηγουμενα παραδειγματα ετσι εκανε... δεν ξερω δεν μπορω να σκεφτω κατι πιο απλο.

  4. #4
    Εγγραφή
    17-02-2008
    Περιοχή
    Αθήνα
    Μηνύματα
    1.606
    Downloads
    10
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    10.997 / 109.996
    ISP
    Forthnet
    Router
    TPLink C7 - TG788vn v2
    SNR / Attn
    20,3(dB) / 3(dB)
    Path Level
    Interleaved
    Εύκολο είναι.
    Το έγραψαν έτσι, για να βοηθήσουν στην κατανόηση του 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

  5. #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.
    Καποια ιδεα?

  6. #6
    Εγγραφή
    10-11-2010
    Μηνύματα
    60
    Downloads
    3
    Uploads
    0
    Τύπος
    ADSL2+
    Ταχύτητα
    24576/1024
    ISP
    ΟΤΕ Conn-x
    Router
    DGN2200v3
    Path Level
    Interleaved
    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.
    Κώδικας:
    #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;
    }

  7. #7
    Εγγραφή
    17-02-2008
    Περιοχή
    Αθήνα
    Μηνύματα
    1.606
    Downloads
    10
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    10.997 / 109.996
    ISP
    Forthnet
    Router
    TPLink C7 - TG788vn v2
    SNR / Attn
    20,3(dB) / 3(dB)
    Path Level
    Interleaved
    Αυτό είναι πιο δύσκολο.
    Θέλει μόνο μια μεταβλητή και σε περιορίζει.

    Οι θέσεις 2, 4, 6, 8 αντιστοιχούν στο 2, 8, 32, 128.
    Το & το έχετε διδαχθεί?
    Bitwise operator, έχει παράδειγμα τι κάνει εδώ:
    http://www.tutorialspoint.com/cprogr..._operators.htm

    Αν i είναι ο ακέραιος σου, το i = i & 128, τι θα σου επιστρέψει; Για σκέψου το και μετά συνέχισε το διάβασμα παρακάτω.
    Spoiler:

    printf("result is:%d", (i & 128)/128 + (i & 32)/ 32 + (i & 8)/8 + ( i & 2) / 2);

    .
    Αν το κάνω καλά (δεν είμαι σε 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

  8. #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

  9. #9
    Εγγραφή
    10-11-2010
    Μηνύματα
    60
    Downloads
    3
    Uploads
    0
    Τύπος
    ADSL2+
    Ταχύτητα
    24576/1024
    ISP
    ΟΤΕ Conn-x
    Router
    DGN2200v3
    Path Level
    Interleaved
    Έφόσον εσένα σε ενδιαφέρουν μόνο τα 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 που μπορει να παιζει ρολο.
    Όλοι οι int αποθηκεύονται με 32 bit στην μνήμη και όλα τα αριστερότερα bit είναι 0 αυτό δεν σε επηρεάζει κάπου στην πράξη με το & γιατί (1ή0 & 0=0) οπότε δεν σου πειράζει τον αριθμό.

  10. #10
    Εξυπνο , ευχαριστω το καταλαβα πως δουλευει

    Εχω ενα προβληματακι μονο , οταν το τρεχω βγαζει μηδεν αποτελεσμα και δεν μπορω να καταλαβω γιατι δεν αυξανει το sum , τωρα που μπηκα στην λογικη...

    - - - Updated - - -

    Το βρηκα ειχα ξεχασει τις εξτρα παρενθεσεις .... μαλλον κατι με τη σειρα που γινονται οι πραξεις , αν και δεν μπορω να καταλαβω στο n & sum ==mask μια πραξη γινεται ολη και ολη και μετα μια συγκριση .... κατι τετοιες λεπτομερειες ειναι αγκρρρρ .... ευχαριστω και παλι.

    Βασικα, εκτος απο το να μαθω c , θελω να εντρυφησω λιγο λυνωντας ουσιαστικα προβληματα ... να μαθω να σκεφτομαι κατα καποιο τροπο , αν ξερετε καποιο καλο σαιτ με προβληματακια στη c που μπορω να τσεκαρω και μετα τον κωδικα μου με την ενδεδειγμενη λυση , για να δω αν το εχω κανει με "ηλιθιο τροπο" δωστε λινκ

  11. #11
    Εγγραφή
    10-11-2010
    Μηνύματα
    60
    Downloads
    3
    Uploads
    0
    Τύπος
    ADSL2+
    Ταχύτητα
    24576/1024
    ISP
    ΟΤΕ Conn-x
    Router
    DGN2200v3
    Path Level
    Interleaved
    Η πράξη -> (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.
    Ελπίζω να βοήθησα

  12. #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;
    }
    - - - Updated - - -

    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 και τελεστες συγκρισης οπως && και ||.
    Ειναι ευκολο να λυθει , αλλα αν αρχιζεις να προγρμματιζεις .... βλεπεις οτι το να κρατησεις ενα μινιμουμ απο πολλαπλα if και συγκρισεις ειναι ... πονοκεφαλος. Υπαρχει καμμια μεθοδολογια σε αυτο?

    - - - Updated - - -

    Τελεστες συγκρισης ... λαθος μαλλον λογικες πραξεις λεγονται....

  13. #13
    Εγγραφή
    17-02-2008
    Περιοχή
    Αθήνα
    Μηνύματα
    1.606
    Downloads
    10
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    10.997 / 109.996
    ISP
    Forthnet
    Router
    TPLink C7 - TG788vn v2
    SNR / Attn
    20,3(dB) / 3(dB)
    Path Level
    Interleaved
    Νομίζω ο δικός μου τρόπος είναι πιο απλός και έχει μόνο μια μεταβλητή όπως ζητάει ή εκφώνηση.
    Ίσως μου φαίνεται έτσι επειδή το σκέφτηκα εγώ

    Τα χρόνια που έγραφα 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

  14. #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.

  15. #15
    Εγγραφή
    17-02-2008
    Περιοχή
    Αθήνα
    Μηνύματα
    1.606
    Downloads
    10
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    10.997 / 109.996
    ISP
    Forthnet
    Router
    TPLink C7 - TG788vn v2
    SNR / Attn
    20,3(dB) / 3(dB)
    Path Level
    Interleaved
    Μάλλον τώρα είναι 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

Σελ. 1 από 2 12 ΤελευταίαΤελευταία

Παρόμοια Θέματα

  1. δεν μπορω να συνδεθω στο you tube!
    Από lilipuss στο φόρουμ Internet, web surfing και online υπηρεσίες
    Μηνύματα: 0
    Τελευταίο Μήνυμα: 28-09-15, 23:32
  2. Που μπορώ να βρω αυτά τα σνακ;
    Από blade_ στο φόρουμ Εκτός θέματος
    Μηνύματα: 2
    Τελευταίο Μήνυμα: 13-08-15, 15:23
  3. Δεν μπορώ να κάνω format σε laptop με εξωτερική οθόνη
    Από HugeG στο φόρουμ Laptop, tablet και mobile computing
    Μηνύματα: 0
    Τελευταίο Μήνυμα: 19-06-15, 15:24
  4. H80i δεν μπορώ να αλλάξω την ταχύτητα του ανεμιστήρα
    Από CrazyScientist στο φόρουμ Κουτιά, τροφοδοτικά και ψύξη
    Μηνύματα: 3
    Τελευταίο Μήνυμα: 23-05-15, 20:22
  5. Δεν μπορω να βρω το AMD-V στο bios.
    Από vaggelis7172 στο φόρουμ Motherboards, CPU και memory
    Μηνύματα: 3
    Τελευταίο Μήνυμα: 24-04-15, 18:57

Bookmarks

Bookmarks

Δικαιώματα - Επιλογές

  • Δεν μπορείτε να δημοσιεύσετε νέα θέματα
  • Δεν μπορείτε να δημοσιεύσετε νέα μηνύματα
  • Δεν μπορείτε να αναρτήσετε συνημμένα
  • Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας
  •  
  • Τα BB code είναι σε λειτουργία
  • Τα Smilies είναι σε λειτουργία
  • Το [IMG] είναι σε λειτουργία
  • Το [VIDEO] είναι σε λειτουργία
  • Το HTML είναι εκτός λειτουργίας