
Jaipur
Mitglieder-
Gesamte Inhalte
65 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Alle Inhalte von Jaipur
-
Hi, habe folgende Aufgabe bekommen, ob ich die wohl lösen könne. Ihm fiel leider nichts ein ... Erst ein mal die Aufgabenstellung: Sie haben über eine Karte vier Lampen an Ihren Computer angeschlossen. Zu der Karte gibt es einen Treiber mit folgenden Funktionen: void set( unsigned char w) unsigned char get() Durch diese Funktion wird ein 8-Bit Datenwort zur Karte übertragen bzw. von der Karte gelesen. Das Datenwort hat dabei die folgende Bedeutung: 7 6 5 4 3 2 1 0 - - - - - - - - | | | | | | | | | - - - - - - - - | | | | | | | | | | | | | | | --- Lampe 1 ( 0=aus, 1=ein ) | | | | | | ----- Lampe 2 ( 0=aus, 1=ein ) | | | | | ------- Lampe 3 ( 0=aus, 1=ein ) | | | | --------- Lampe 4 ( 0=aus, 1=ein ) | | | ----------- Lampe 1 ( 0=nicht blinkend, 1=blinkend ) | | ------------- Lampe 2 ( 0=nicht blinkend, 1=blinkend ) | ---------------- Lampe 3 ( 0=nicht blinkend, 1=blinkend ) ----------------- Lampe 4 ( 0=nicht blinkend, 1=blinkend ) Schreiben Sie eine C-Funktion Schnittstelle und Funktionskörper), die eine einzelne Lampe ( 1 - 4 ) blinkend oder nicht blinkend einschaltet, und dabei den Zustand der anderen Lampen unverändert lässt. Hier ist nun mein Vorschlag: # include < stdio.h > # include < stdlib.h > # define AUS 0 # define NICHT_BLINKEN 1 # define BLINKEN 2 unsigned char LAMPE=0; void show( unsigned char w) { int x; for( x=7; x > =0; x--) printf("%d",x); printf("\n"); for( x=7; x > =0; x--) { if(w&(1 < < x)) printf("1"); else printf("0"); } printf("\n\n"); } void set( unsigned char w) { LAMPE = w; } unsigned char get() { return LAMPE; } void funktion( int lampe, int modus) { char w=get(); switch( lampe) { case 1: switch( modus) { case AUS: w = w & ~17; break; case BLINKEN: w = w | 17; break; case NICHT_BLINKEN: w = w | 1; w = w & ~16; break; default: break; } break; case 2: switch( modus) { case AUS: w = w & ~34; break; case BLINKEN: w = w | 34; break; case NICHT_BLINKEN: w = w | 2; w = w & ~32; break; default: break; } break; case 3: switch( modus) { case AUS: w = w & ~68; break; case BLINKEN: w = w | 68; break; case NICHT_BLINKEN: w = w | 4; w = w & ~64; break; default: break; } break; case 4: switch( modus) { case AUS: w = w & ~136; break; case BLINKEN: w = w | 136; break; case NICHT_BLINKEN: w = w | 8; w = w & ~128; break; default: break; } break; default: break; } set( w); } void main() { show( LAMPE); funktion( 4,BLINKEN); show( LAMPE); funktion( 4,AUS); show( LAMPE); funktion( 4,NICHT_BLINKEN); show( LAMPE); } Meine Frage(n): Kann man das so machen? Macht man das so? Ist das O.K. so? Währe für Eure Antworten sehr dankbar. Info's zu Bit-Operationen: - http://www.informatik.fh-wiesbaden.de/~linn/bitoperation.htm - http://www.edv-schaefer.de/c-kurs/bsp-operatoren.html
-
Hi, es gehtum eine installation auf einem Gericom Webboy (13,3) Notebook. Ich habe die Anleitung auf der SDB bei suse.de befolgt, aber leider friert bei mir immer der Rechner ein sobald ich SaX beende. Folge: Stecker & Akku raus, sonst keine chance Kann mir einer von Euch sagen was ich da falsch mache?
-
Hi, wie kann man SuSE Linux 7.3 beim hochfahren so anhalten, das dieser nicht in den Grafik Modus hochfärt sondern in der Textkonsole bleibt?
-
Eigene Icons für eigene Programme?
Jaipur antwortete auf Jaipur's Thema in C++: Compiler, IDEs, APIs
Hi, schön das es geht aber mit der Anleitung konnte ich ehrlich gesagt wirklich nichts anfangen Aber ich freue mich schon rießig auf Deine Datails Ich danke Dir jetzt schon mal für Deine Hilfe Ich lese gerade das ich das Icon unter VC selber erstellen muss, geht das auch wenn mir ein Kollege ein Icon mit einem anderem Programm erstellt und ich das dann so "Einfügfen" kann ? Oder muss er dafür auch VC haben??? -
Hi, ich schreibe meine Programme mit VC++ 6, die Programme laufen nur im DOS Fenster. Kann ich diesen Programmen, also den fertigen exe File's eigene Icons verpassen? Wenn ja, wie das funzt? Ein kleines Beispiel würde genügen ....
-
Hi, Ich werde bzw. habe mir genau diesen Satz zu Herzen genommen, Ich glaube es bringt viel mehr! Es ist besser Nochmals vielen Dank @Crush
-
Hi, seid mir nicht böse aber ich weiß immer noch nicht wie es funktiojiert. Ich weiß das man es auch anders machen könnte .....
-
Hi, das sind keine Methoden sondern "nur" die Konstruktoren. Ich versuche mich mal besser auszudrücken class x stellt nur die Werkzeuge und die Methoden (get/set) bereit und natürlich auch seinen Konstruktor, dieser setzt aber nur die Werte. class a: public x soll einen Stack machen, hat nur einen Konstruktor. class b: class x soll einen Queue bilden, hat nur einen Konstruktor. In class c: public a, public b möchte ich die Werte für die Daten gerne in den Stack und auch in die Queue packen, , hat nur einen Konstruktor. Wenn ich jetzt sowas hier mache: x *instanz; (Das hier steht in einer anderen Klasse ...) /*1*/ instanz = new a(NULL,100,100); /*2*/ instanz = new b(instanz,200,200); /*3*/ instanz = new c(instanz,300,300); In der dritten Zeile gibt es dann immer eine Fehlermeldung, wegen Mehrdeutigkeit. Eigentlich klappt alles ganz gut, bis auf die Klasse c halt
-
Sorry, streicht doch bitte alle mal die letzten drei Zeilen und ersetzt diese doch bitte hiermit: a*x; x = new c( ... ); delete x;
-
Hi, class a { public: a( ... ); }; class b { public: b( ... ); }; class c: public a,public b { public: c( ... ):a( ... ),b( ... ) { } }; x *y; y = new c( ... ); delete y; wie kann ich jetzt hier meiner instanz c sagen das es jetzt ein a ist bzw. ein b sein soll oder beides???
-
# include <stdio.h> # include <stdlib.h> void main() { int i,j; char zeichen[5][5] = { {' ', ' ', '*', ' ', ' '}, {' ', '*', '*', '*', ' '}, {'*', '*', '*', '*', '*'}, {' ', '*', '*', '*', ' '}, {' ', ' ', '*', ' ', ' '}, }; for( i=0; i<5; i++) { for( j=0; j<5; j++) { printf("%2c",zeichen[i][j]); } printf("\n"); } printf("\n"); } Ist nur ein Vorschlag meinerseits, gibt sicherlich noch andere Wege ...
-
Hi, Lass das bloß nicht meinen Prof hören!!! ... Fachbereich: Elektrotechnik Studiuengang: Informations- & Kommunikatinstechnik Semster: 1
-
Hi! main.cpp # include "baum.h" # include "queue.h" void main() { ROOT *t; t = erstelle(); anmelden( t,10); anmelden( t,5); anmelden( t,16); anmelden( t,2); anmelden( t,8); anmelden( t,12); anmelden( t,18); anmelden( t,1); anmelden( t,4); anmelden( t,6); anmelden( t,9); anmelden( t,11); anmelden( t,14); anmelden( t,17); anmelden( t,19); anmelden( t,3); anmelden( t,7); anmelden( t,13); anmelden( t,15); printf(" preorder: "); ausgabe( t,PREORDER); printf(" inorder: "); ausgabe( t,INORDER); printf(" psotorder: "); ausgabe( t,POSTORDER); printf(" levelorder: "); ausgabe( t,LEVELORDER); } baum.h # ifndef BAUM_H # define BAUM_H # include <stdio.h> # include <stdlib.h> # include <time.h> # define DATA struct data # define ROOT struct root # define PREORDER 0 # define INORDER 1 # define POSTORDER 2 # define LEVELORDER 3 DATA { DATA *l; DATA *r; int x; }; ROOT { DATA *first; }; extern ROOT *erstelle(); extern void anmelden( ROOT *t, int x); extern void suchen(ROOT *t, int x); extern void ausgabe( ROOT *t, int typ); # endif baum.cpp # include "baum.h" # include "queue.h" ROOT *erstelle() { ROOT *root; root = (ROOT *)malloc( sizeof(ROOT)); root->first = NULL; return root; } void anmelden( ROOT *t, int x) { DATA *neu,*d; neu = (DATA *)malloc( sizeof(DATA)); if( !t->first) { t->first = neu; neu->l = NULL; neu->r = NULL; neu->x = x; return; } for( d=t->first; d; ) { if( x == d->x) return; if( x <= d->x) { if( !d->l) { d->l = neu; neu->x = x; break; } else d = d->l; } else { if( !d->r) { d->r = neu; neu->x = x; break; } else d = d->r; } } neu->l = NULL; neu->r = NULL; } void suchen( ROOT *t, int x) { DATA *d; for( d=t->first; d; ) { if( x < d->x) d = d->l; else if( x > d->x) d = d->r; else if( x == d->x) { printf("zahl: %d\n",d->x); break; } } } void preorder( DATA *d) { if( d) { printf("%3d",d->x); preorder( d->l); preorder( d->r); } } void inorder( DATA *d) { if( d) { inorder( d->l); printf("%3d",d->x); inorder( d->r); } } void postorder( DATA *d) { if( d) { postorder( d->l); postorder( d->r); printf("%3d",d->x); } } void levelorder( DATA *d) { QUEUE *Q; Q = Qconstruct(); Qput(Q,d); while( !Qempty(Q)) { d = Qget(Q); printf("%3d",d->x); if( d->l) Qput( Q,d->l); if( d->r) Qput( Q,d->r); } Qdestruct( Q); } void ausgabe( ROOT *t, int typ) { switch( typ) { case INORDER: inorder( t->first); break; case PREORDER: preorder( t->first); break; case POSTORDER: postorder( t->first); break; case LEVELORDER: levelorder( t->first); } printf("\n"); } queue.h # ifndef QUEUE_H # define QUEUE_H # include <stdio.h> # include <stdlib.h> # include "baum.h" # define QUEUE struct queue # define ENTRY struct entry ENTRY { ENTRY *nxt; DATA *d; }; QUEUE { ENTRY *first; ENTRY *last; }; extern QUEUE *Qconstruct(); extern void Qdestruct( QUEUE *Q); extern void Qput( QUEUE *Q, DATA *d); extern DATA *Qget( QUEUE *Q); extern int Qempty( QUEUE *Q); extern void Qausgabe( QUEUE *Q); # endif queue.cpp # include "queue.h" # include "baum.h" QUEUE *Qconstruct() { QUEUE *Q; Q = (QUEUE *)malloc( sizeof( QUEUE) ); if( !Q) return NULL; Q->first = NULL; return Q; } void Qdestruct( QUEUE *Q) { ENTRY *E; while( E = Q->first) { Q->first = E->nxt; free(E); } free(Q); } void Qput( QUEUE *Q, DATA *d) { ENTRY *E; E = (ENTRY *)malloc( sizeof(ENTRY)); E->nxt = NULL; E->d = d; if( Q->first) Q->last->nxt = E; else Q->first = E; Q->last = E; } DATA *Qget( QUEUE *Q) { ENTRY *E; DATA *d; d=(DATA *)malloc( sizeof(DATA)); E = Q->first; d = E->d; Q->first = E->nxt; free( E); return d; } int Qempty(QUEUE *Q) { if( Q->first) return 0; else return 1; } void Qausgabe(QUEUE *Q) { ENTRY *E; for( E=Q->first; E; E=E->nxt) printf("%3d",E->d->x); } Das einzige was ich noch machen könnte aber ausgelassen habe ist es, eine rekursionsfreie Preorder Traversierung des Baumes. traversierung( NODE *n) { push(n); while( !stackempty()) { n = pop(); if( n->right) push( n->right); if( n->left) push(n->left); } } Kann man hier durch vertauschen der if Bedingungen eine rekursionsfreie Postorder Traversierung des Baumes hinbekommen? (Habe selbst noch nicht darüber nachgedacht, würde es aber dennoch gerne wissen Und über kritik würde ich mich auch sehr gerne freuen! Lob ist aber auch OK *g*.
-
Hi, danke Euch! Habe mich jetzt drangesetzt, musste zwar dafür eine Queue erstellen, aber es funzt Wenn interesse besteht kann ich es ja posten
-
Hi, wie kann ich in einem Binären Baul eine LevelOrder Traversierung vornehmen? Es gibt einen Pointer auf das erste Element, jedes Element hat zwei Pointer, einen für LINKS und einen für RECHTS. # define DATA struct data # define ROOT struct root DATA { DATA *l; /* left eye */ DATA *r; /* right eye */ int x; }; ROOT { DATA *first; }; ROOT *erstelle() { ROOT *root; root = (ROOT *)malloc( sizeof(ROOT) ); root->first = NULL; return root; } void anmelden(ROOT *t, int x) { DATA *neu,*d; neu = (DATA *)malloc( sizeof(DATA) ); if( t->first == NULL ) { t->first = neu; neu->l = NULL; neu->r = NULL; neu->x = x; return; } for( d=t->first; d; ) { if( x == d->x ) return; if( x <= d->x ) { if( d->l == NULL ) { d->l = neu; neu->x = x; break; } else d = d->l; } else { if( d->r == NULL ) { d->r = neu; neu->x = x; break; } else d = d->r; } } neu->l = NULL; neu->r = NULL; } void main() { ROOT *t; t = erstelle(); anmelden(t, 10); anmelden(t, 5); anmelden(t, 16); /* hier würde ich gerne level für level anzeigen wollen */ /* z.b in dieser form: show(t); */ } Ich habe zwar eine kleine Vermutung das, das ganze Rekursiv aufgebaut werden muss ... aber wie?