THMMY.gr

Μαθήματα Βασικού Κύκλου => Δομημένος Προγραμματισμός => Topic started by: MARIOS on April 15, 2006, 21:16:58 pm



Title: Εργασία C
Post by: MARIOS on April 15, 2006, 21:16:58 pm
Πως μπορώ να δίνω έναν αριθμό και να μου εκτυπώνει τον αριθμό αυτό σε δυαδική μορφή?


Title: Re: Ergasia B
Post by: MARIOS on April 15, 2006, 21:18:27 pm
Λάθος η τρίτη εργασία είναι.


Title: Απ: Ergasia B
Post by: Junior on April 15, 2006, 23:54:02 pm
Βρίσκεις το υπόλοιπο της διαίρεσης με το 2. Το σημειώνεις στο κατώτερο bit. Αφαιρείς το υπόλοιπο που βρήκες (0 ή 1) από τον αριθμό και διαιρείς με το 2. Στον αριθμό που προκύπτει κάνεις το ίδιο σημειώνοντας το υπόλοιπο της διαίρεσης στο δεύτερο κατώτερο bit κοκ.

Παράδειγμα:
Στον αριθμό 37. Υπόλοιπο διαίρεσης με το 2: 1
Άρα σημειώνουμε στο τελευταίο bit 1. Το αφαιρούμε από το 37 και γίνεται 36. Διαιρούμε με το 2 και γίνεται 18
Στον αριθμό 18, υπόλοιπο διαίρεσης με το 2: 0
Άρα σημειώνουμε στο προ τελευταίο bit 0. Το αφαιρούμε από το 18 και παραμένει 18. Διαιρούμε με το 2 και γίνεται 9
Στον αριθμό 9, υπόλοιπο διαίρεσης με το 2: 1
Άρα σημειώνουμε στο τρίτο από το τέλος bit 1. Το αφαιρούμε από το 9 και γίνεται 8. Διαιρούμε με το 2 και γίνεται 4.
Στον αριθμό 4, υπόλοιπο διαίρεσης με το 2: 0
Άρα σημειώνουμε στο τέταρτο από το τέλος bit 0. Το αφαιρούμε από το 4 και παραμένει 4. Διαιρούμε με το 2 και γίνεται 2
Στον αριθμό 2, υπόλοιπο διαίρεσης με το 2: 0
Άρα σημειώνουμε στο πέμπτο από το τέλος bit 0. Το αφαιρούμε από το 2 και παραμένει 2. Διαιρούμε με το 2 και γίνεται 1
Στον αριθμό 1, υπόλοιπο διαίρεσης με το 2: 1
Άρα σημειώνουμε στο έκτο από το τέλος bit 1. Το αφαιρούμε από το 1 και γίνεται 0.

Τελικά έχουμε σημειώσει τον αριθμό 100101...



EDIT: Τώρα που το σκέφτομαι... δεν ξέρω αν υπάρχει εντολή που το κάνει απευθείας... Τότε αυτός ο αλγόριθμος θα είναι άχρηστος  :-\


Title: Re: Ergasia B
Post by: MARIOS on April 19, 2006, 11:26:04 am
Έκανε κανείς την τρίτη εργασία?(
Για τους πρωτοετής μιλάω)


Title: Re: Eργασία C
Post by: Themis on April 29, 2006, 23:34:22 pm
Μπα την εργασια δεν την εκανα ακομη...


Title: Re: Εργασία C
Post by: odys2008 on April 30, 2006, 00:32:57 am
Την εργασία την έκανα εγω. Δεν είναι πολύ δύσκολη αν την προσέξεις.(Η δεύτερη πιο δύσκολη μου φάνηκε)


Title: Re: Εργασία C
Post by: Themis on April 30, 2006, 18:27:09 pm
Δεν φορτωνει καποιος ρε παιδια την τριτη εργασια γιατι μου φαινεται πολυ πιο δυσκολη απο την δευτερη(μαλλον λογω ελλειψης γνωσεων περι δυαδικων)....


Title: Re: Εργασία C
Post by: MARIOS on May 01, 2006, 12:18:49 pm
Την εργασια την εχω ετοιμη το μονο που μου λοιπει ειναι να κανω τον αριθμο r απο κωδικα ASCII σε κανονικο αριθμο.Μηπως ξερει κανεις πως γινεται?


Title: Re: Εργασία C
Post by: Faidon on May 01, 2006, 13:45:18 pm
Θα ελέγχεις σε ποιό i έχεις 1. Τότε τον αριθμό 1 θα τον ολισθαίνεις αριστερά κατά i θέσεις. Τέλος θα τον προσθέτεις στο r (που θα έχεις αρχικοποιήσει στο μηδέν). Αν το κάνεις για όλα τα 1 που έχει ο δυαδικός θα προκύψει το γράμμα.


Title: Re: Εργασία C
Post by: Themis on May 01, 2006, 14:56:16 pm
Μια ερωτηση ισως χαζη αλλα...οταν διαβαζουμε μια μεταβλητη και θελουμε να την μετατρεψουμε σε δυαδικη μορφη πως περνουμε σε τι αντιστοιχει στον κωδικα ASCII.Δηλαδη πως περνουμε οτι το Ε ειναι το 69 π.χ.?Και κατι ακομη...o Junior αναφερε παραπανω πως περνουμε τη δυαδικη μορφη ενος αριθμου....πως σημειωνουμε το καθε υπολοιπο στο αντιστοιχο bit?αποθηκευουμε τα υπολοιπα σε καποιο πινακα?


Title: Re: Εργασία C
Post by: Faidon on May 01, 2006, 16:09:40 pm
Ο κώδικας ASCII είναι δυαδικός 8Bit. Όταν έχεις έναν χαρακτήρα που αντιστοιχεί στα δυαδικά ψηφία 10010110 και δώσεις την τιμή του σε έναν ακέραιο η c καταλαβαίνει ότι εννοείς στον ακέραιο να δώσει την τιμή 10010110=150.

Αυτό που λέει ο Junior αν και σωστό είναι λάθος για τη συγκεκριμένη εργασία. Εδώ πρέπει να χρησιμοποιήσεις δυαδικούς τελεστές.
π.χ. ο χαρακτήρας σου έιναι ως ακέραιος ο 150

Θα κάνεις τη δυαδική πρόσθεση

  10010110
&00000001
=00000000

Επειδή το αποτέλεσμα είναι 0 καταλαβαίνεις ότι το πρώτο ψηφίο είναι το 0.
Μετά ολισθαίνεις τον ακέραιο δεξιά κατά μία θέση.

10010110>>1=01001011

Και κάνεις τη δυαδική πρόσθεση

  01001011
&00000001
=00000001

Επειδή το αποτέλεσμα είναι 1 καταλαβαίνεις ότι το δεύτερο στοιχείο ψηφίο είναι το 1.
Μετά ολισθαίνεις τον ακέραιο δεξιά κατά μία θέση.

01001011>>1=00100101

Και έτσι συνεχίζεις και βρίσκεις όλα τα ψηφία.


Title: Re: Εργασία C
Post by: Themis on May 01, 2006, 17:15:26 pm
thanx....αλλα...που αποθηκευω τα ψηφια????


Title: Re: Εργασία C
Post by: Verminoz on May 01, 2006, 21:45:38 pm
Σε ένα array με 8 στοιχεία


Title: Re: Εργασία C
Post by: dictator23 on May 01, 2006, 22:51:11 pm
Αν θυμαμαι καλα δε σου ζηταει να αποθηκευσεις τα ψηφια απλα να τα εκτυπωνεις.Ενα printf μεσα σε ενα for αρκει.


Title: Re: Εργασία C
Post by: Verminoz on May 01, 2006, 23:27:25 pm
Ε δεν νομίζω η εκφώνηση να είναι υποχρεωμένη να υποννοεί ή να λέει κάθε μεταβλητή κάθε μεταβλητή που θα χρειαστεί. Νομίζω είναι στην κρίση του καθενός. Τεσπα, και οι δύο τρόποι σωστοί είναι...


Title: Re: Εργασία C
Post by: dictator23 on May 01, 2006, 23:32:45 pm
 Δεν ειπα οτι ειναι ο μονος τροπος :P


Title: Re: Εργασία C
Post by: Verminoz on May 01, 2006, 23:47:37 pm
Ε καλά εντάξει :P


Title: Re: Εργασία C
Post by: Themis on May 04, 2006, 18:19:47 pm
                ιnt A[8],B[8],i,k;
   unsigned char c,a,d,b;
   printf("Dose ti c\n");
   scanf("%c",&c);

   a=c;
   d=1;
   b=a&d;
   for (i=1;i<=8;i++)
   {
      A[8-i]=b;
      a=c>>1;
      c=a;
      b=a&d;
   }
   printf("ta bit poushimatizoun to byte sto opoio katahorite i c ine:");
   for (i=1;i<=8;i++)
   {
      if (i==8)
      {
         printf("%d\n",A[i-1]);
      }
      if(i!=8)
      {
      printf("%d",A[i-1]);
      }
   }

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


Title: Re: Εργασία C
Post by: Tonia on May 04, 2006, 20:33:09 pm
ena grigoro giati ki egw paradidw simera....
dokimasa to programma sou kai mia xara douleuei kai gia tous arithmous kai gia tous xaraktires.
apla esy mallon otan as poume patas to 5, perimeneis na sou bgalei 00000101. omws otan patas 5, den ennoeis ton arithmo 5 alla ton xaraktira o opoios symfwna me ton kwdika ASCII  einai se dyadiki morfi: 00110101.
allo paradeigma einai to miden: 00110000. dokimase ta na deis.
elpizw na boithisa


Title: Απ: Εργασία C
Post by: meltemi on May 04, 2006, 20:38:38 pm
Ίσως να εννοεί ότι δε λειτουργεί για όλους τους ακεραίους, απλώς.


Title: Re: Εργασία C
Post by: Tonia on May 04, 2006, 21:07:37 pm
to dokimases kai de sou bgainei gia kapoious?
pes an einai giati me problimatises twra..


Title: Απ: Εργασία C
Post by: meltemi on May 04, 2006, 21:43:56 pm
Μπα, δε νομίζω ότι έχει κάποιο πρόβλημα Tonia.


Title: Re: Εργασία C
Post by: Themis on May 04, 2006, 22:35:17 pm
λοιπον thanx for all αθηνα και tonia...το προβλημα το ελυσα...απλως ελειπα και δεν μπορουσα να κανω post...απλως συμφωνα με τον ASCII το 1 ως χαρακτηρας πχ. αντιστοιχει στο 49 αρα δεν θα βγαλει 00000001...thanx παντως


Title: Απ: Εργασία C
Post by: meltemi on May 04, 2006, 23:59:12 pm
Είναι δύο διαφορετικοί τρόποι.
Και οι δύο είναι αποδεκτοί πάντως.
Με τον έναν μπορείς να χρησιμοποιήσεις όλους τους χαρακτήρες και τους ακέραιους από 0 έως 9 ενώ με τον άλλον μόνο ακέραιους αριθμούς.


:)κλήση ήταν...