Bitwise operators in C

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Kappa4
Δημοσιεύσεις: 9
Εγγραφή: 03 Δεκ 2014 23:56

Bitwise operators in C

Δημοσίευση από Kappa4 » 04 Δεκ 2014 00:09

Καλησπέρα.Ασχολούμαι με ένα project το οποίο έχει σχέση με το beautification code.Ουσιαστικά το πρόγραμμα λειτουργεί με τον ίδιο τρόπο όπως και το pretty print ή το index.Η ερώτηση μου είναι η εξής:Έχω βρεί στο Internet μια υλοποίηση του προγράμματος η οποία όμως χρησιμοποιεί τους bitwise operators.Με ποιόν τρόπο μπορώ να τροποποιήσω το πρόγραμμα έτσι ώστε να μην χρησιμοποιεί τους operators αυτούς?Σας παραθέτω το κομμάτι κώδικα για να δείτε την υλοποίηση..Ευχαριστώ εκ των προτέρων

#define FLAG_PRINT ( 1 << 0 )
#define FLAG_NEWLINE ( 1 << 1 )
#define FLAG_TABS ( 1 << 2 )

void print_tabs(int count)
{
int i;
for(i = 0; i < count; i++)
putchar('\t');
}

int main()
{
int ch;
int fflags = 0;
int lflags = 0;
int tab = 0;
while ( (ch = getchar()) != EOF )
{
//////////////// flag setting
switch(ch)
{
case ';':
fflags |= FLAG_PRINT;
lflags |= FLAG_NEWLINE | FLAG_TABS;
break;
case '{':
fflags |= 0 ;
lflags |= FLAG_NEWLINE | FLAG_TABS | FLAG_PRINT;
tab++;

break;
case '}':
fflags |= FLAG_NEWLINE | FLAG_TABS;
lflags |= FLAG_NEWLINE | FLAG_TABS | FLAG_PRINT;
tab--;
break;
case ' ':
fflags |= FLAG_PRINT;
break;
default:
if(!isspace(ch))
fflags |= FLAG_PRINT;
}
////////////////////////////////////////

/// first order flags
if(fflags & FLAG_PRINT)
putchar(ch);
if(fflags & FLAG_NEWLINE)
putchar('\n');
if(fflags & FLAG_TABS)
print_tabs(tab);

// last order flags
if(lflags & FLAG_PRINT)
putchar(ch);
if(lflags & FLAG_NEWLINE)
putchar('\n');
if(lflags & FLAG_TABS)
print_tabs(tab);

//reset
fflags = 0;
lflags = 0;
}

return 0;
}

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Bitwise operators in C

Δημοσίευση από dva_dev » 07 Δεκ 2014 18:52

Ρίξε μια ματιά στον παρακάτω κώδικα και σύγκρινε ομοιότητες-διαφορές:

Κώδικας: Επιλογή όλων

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

#ifndef TRUE
#define TRUE &#40;-1&#41;
#endif

#ifndef FALSE
#define FALSE &#40;0&#41;
#endif

void print_tabs&#40;int count&#41;
&#123;
	int i;
	for &#40;i = 0; i < count; i++&#41;
		putchar&#40;'\t'&#41;;
&#125;

int main&#40;&#41;
&#123;
	int ch;

	int FFLAG_PRINT, FFLAG_NEWLINE, FFLAG_TABS;
	int LFLAG_PRINT, LFLAG_NEWLINE, LFLAG_TABS;
	int tab = 0;
	while &#40;&#40;ch = getchar&#40;&#41;&#41; != EOF&#41;
	&#123;
		//reset
		FFLAG_PRINT = FFLAG_NEWLINE = FFLAG_TABS = FALSE;
		LFLAG_PRINT = LFLAG_NEWLINE = LFLAG_TABS = FALSE;

		//////////////// flag setting
		switch &#40;ch&#41;
		&#123;
		case ';'&#58;
			FFLAG_PRINT = TRUE;
			LFLAG_NEWLINE = LFLAG_TABS = TRUE;
			break;
		case '&#123;'&#58;
			LFLAG_NEWLINE = LFLAG_TABS = LFLAG_PRINT = TRUE;
			tab++;
			break;
		case '&#125;'&#58;
			FFLAG_NEWLINE = FFLAG_TABS = TRUE;
			LFLAG_NEWLINE = LFLAG_TABS = LFLAG_PRINT = TRUE;
			tab--;
			break;
		case ' '&#58;
			FFLAG_PRINT = TRUE;
			break;
		default&#58;
			if &#40;!isspace&#40;ch&#41;&#41;
				FFLAG_PRINT = TRUE;
		&#125;
		////////////////////////////////////////

		/// first order flags
		if &#40;FFLAG_PRINT != FALSE&#41;
			putchar&#40;ch&#41;;
		if &#40;FFLAG_NEWLINE != FALSE&#41;
			putchar&#40;'\n'&#41;;
		if &#40;FFLAG_TABS != FALSE&#41;
			print_tabs&#40;tab&#41;;

		// last order flags
		if &#40;LFLAG_PRINT != FALSE&#41;
			putchar&#40;ch&#41;;
		if &#40;LFLAG_NEWLINE != FALSE&#41;
			putchar&#40;'\n'&#41;;
		if &#40;LFLAG_TABS != FALSE&#41;
			print_tabs&#40;tab&#41;;
	&#125;

	return 0;
&#125;

Kappa4
Δημοσιεύσεις: 9
Εγγραφή: 03 Δεκ 2014 23:56

Bitwise operators in C

Δημοσίευση από Kappa4 » 12 Δεκ 2014 23:46

Βοήθησε πάρα πολύ!Ευχαριστώ

mariosal
Honorary Member
Δημοσιεύσεις: 1473
Εγγραφή: 09 Νοέμ 2007 23:55

Bitwise operators in C

Δημοσίευση από mariosal » 15 Δεκ 2014 20:38

Kappa4 έγραψε:Ασχολούμαι με ένα project το οποίο έχει σχέση με το beautification code.
Projectάκι δεν το λες, 2η άσκηση στην Εισαγωγή στον Προγραμματισμό το λες. :P
http://cgi.di.uoa.gr/~ip/iphw1415_2.pdf

Όπως και το άλλο thread σου που αφορά την 3η εργασία: http://www.freestuff.gr/forums/viewtopi ... 621#605621

Προφανώς δεν είναι κακό το να ζητάς βοήθεια αλλού πέρα από το Lists, αλλά εσύ ζητάς έτοιμο κώδικα κατευθείαν. :hammer: :hammer: :hammer: :hammer:

Απάντηση

Επιστροφή στο “C, C++”

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

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