Δημοσιεύτηκε: 21 Σεπ 2011, 14:43
από migf1
Star_Light έγραψε:
...
Ο κωδικας που εβαλα ικανοποιει ενα απλο και αρχικο παραδειγμα ολισθησης?

Επειδη δεν τον σχολιασες καθολου για αυτο ρωταω

Το πιο ενδεικτικό θα ήταν αυτός ο κώδικας να δείχνει και τις δυαδικές απεικονίσεις του αριθμού μαζί με τις δεκαδικές, πριν και μετά την ολίσθηση, αλλά αυτό θέλει δουλίτσα.

Παραθέτω άλλο παράδειγμα που παρουσιάζει πολλαπλασιασμό και πηλίκο διαίρεσης με δυνάμεις του 2, χρησιμοποιώντας ολίσθηση...
Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define MAXINBUF 255+1

int main( void )
{
char inbuf[ MAXINBUF ] = {'\0'};
int n = 0, op = 0, pow2 = -1;

/* διάβασμα ακεραίου */
do {
printf("Δώστε έναν ακέραιο -500 έως 500:\t\t");
fgets(inbuf, MAXINBUF, stdin);
n = atoi( inbuf );
} while ( n < -500 || n > 500 );

/* διάβασμα πράξης */
do {
printf("(1) πολλαπλασιασμός ή (2) πηλίκο διαίρεσης;\t");
fgets(inbuf, MAXINBUF, stdin);
op = atoi( inbuf );
} while( op != 1 && op != 2 );

/* διάβασμα δύναμης του 2 */
do {
printf("Με ποια δύναμη του 2 (0 έως 7);\t\t\t");
fgets(inbuf, MAXINBUF, stdin);
pow2 = atoi( inbuf );
} while( pow2 < 0 || pow2 > 7 );

putchar('\n');

/* εκτέλεση της πράξης */

if ( op == 1 ) { /* πολλαπλασιασμός του n με (2 ^ pow2) */
printf( "\tμισό λεπτάκι... ( %d * 2^%d ) = ( %d * %g ) ...\n",
n, pow2, n, pow(2, pow2) );
n <<= pow2;
}
else { /* πηλίκο διαίρεσης του n με (2 ^ pow2) */
printf( "\tμισό λεπτάκι... ( %d / 2^%d ) = ( %d / %g ) ...\n",
n, pow2, n, pow(2, pow2) );
n >>= pow2;
}

/* τύπωμα αποτελέσματος */
printf("\tΑΠΟΤΕΛΕΣΜΑ: %d\n\n", n);

exit( EXIT_SUCCESS );
}