Εργαστηριακή άσκηση 2.5

Διδάσκοντες: Α. Καράκος, Αν. Καθηγητής

Εργαστηριακή άσκηση 2.5

Δημοσίευσηαπό Stokos » 24 Μαρ 2009, 19:26

Η άσκηση ζητάει ένα πρόγραμμα το οποίο θα δέχεται ως είσοδο 2 αριθμούς στο δυαδικούς σύστημα, θα εκτελεί μια bitwise πράξη AND μεταξύ τους και θα επιστρέφει το αποτέλεσμα σε δυαδική γραφή. Για να το κάνουμε αυτό πρέπει να μετατρέψουμε τους αριθμούς στην αντίστοιχη δεκαδική γραφή τους, να εκτελέσουμε τη πράξη AND (&) και να μετατρέψουμε το αποτέλεσμα από δεκαδική σε δυαδική μορφή. Επειδή αυτό είναι αρκετά δύσκολο για κάποιον 1οετη που έχει κάνει 2-3 μαθήματα στη C ιδού η λύση:

Κώδικας: Επιλογή όλων
#include <stdio.h>

void main() {
   int bin2dec(char *ena); void dec2bin(int ena,char *dyo);
   char *binary_x,*binary_y;
   char binary_z[9];
   int decimal_x,decimal_y,decimal_z;
   binary_x = "01001100";
   binary_y = "11001110";
   decimal_x = bin2dec(binary_x);
   decimal_y = bin2dec(binary_y);
   decimal_z = decimal_x & decimal_y;
   dec2bin(decimal_z,binary_z);
   printf("    %s (=%d)\nAND %s (=%d)\n-------------------\n    %s (=%d)\n",binary_x,decimal_x,binary_y,decimal_y,binary_z,decimal_z);
}

//Apo dyadiko se dekadiko
int bin2dec(char *bin) {
   int b,k,m,n,strlen();
   int len,sum=0;
   len=strlen(bin)-1;
   for(k = 0; k <= len; k++) {
      n = (bin[k] - '0');
      if ((n>1)||(n<0)) {
         puts("\n\n ERROR! BINARY has only 1 and 0!\n");
         return (0);
      }
      for(b = 1, m = len; m > k; m--) {
         b *= 2;
      }
      sum = sum + n*b;
   }
  return(sum);
}

//Apo dekadiko se dyadiko
void dec2bin(int decimal, char *binary)
{
   int k=0,n=0,neg_flag=0;
   int remain,old_decimal;
   char temp[80];
   if (decimal < 0) {     
      decimal = -decimal;
      neg_flag = 1;
   }
   do {
      old_decimal = decimal;
      remain    = decimal % 2;
      decimal   = decimal / 2;
      temp[k++] = remain + '0';
   } while (decimal > 0);
   if (neg_flag) temp[k++] = '-';
   else temp[k++] = ' ';
   while (k >= 0) binary[n++] = temp[--k];
   binary[n-1] = 0;
}


Επειδή απ'ότι έμαθα pointers, πίνακες, if, επαναλήψεις κτλ ΔΕΝ έχετε κάνει, μπορείτε να πείτε ότι τις βρήκατε τις συναρτήσεις που κάνουν τις μετατροπές στο internet και απλά γράψατε τη main() (να δείξετε ότι ξέρατε πως να τις χρησιμοποιήσετε δηλαδή). Νομίζω η main() είναι αρκετά απλή για έναν αρχάριο στη C...
Stokos
 

Re: Εργαστηριακή άσκηση 2.5

Δημοσίευσηαπό iakovos » 24 Μαρ 2009, 23:02

stokos να σαι καλά ρε...! και νόμιζα ότι μόνο εγώ σκεφτομαι τόσο ποντιακά... απ'ότι μου πε φίλος με το %b παίρνω τον αριθμό σε δυαδικό οπότε η συνάρτηση για μετατροπή δεκαδικό σε binary μπορεί να παραληφθεί. ;)
Άβαταρ μέλους
iakovos
Newbie
 
Δημοσιεύσεις: 20
Εγγραφή: 28 Νοέμ 2008, 01:20

Μέλη σε σύνδεση

Μέλη σε αυτή την Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 12 επισκέπτες

cron