SGD C/C++ Linux
-
Hallo,
wer kann helfen suche dringend die Lösungen der sgd c/c++ für Linux Heft
7-10. Es geht nicht um abschreiben brauche aber Starthilfe und schnelle
Nachschlagmöglichkeiten da mir die Zeit im Nacken sitzt.
-
Dieser Thread wurde von Moderator/in AJ aus dem Forum ANSI C in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hi,
Du könntest Dir zumindest die Mühe machen, die Aufgabe zu posten, das wäre schonmal hilfreich um Dir auch ohne das Magazin einen Tipp zu geben.
-
Also hier die erste Aufgabe, das Programm ist den gewünschten Vorgaben entsprechend erstellt
und soll so bleiben bis auf die unten genannten Anforderungen. Irgendwie komme ich immer mit
#ifdef und #else in konflikt und deren Inhalt besonders bei #else.Die Funktion zahtest() überprüft eine Eingabe daraufhin, ob es sich um eine Zahl handelt oder
um eine Zeichenkette.-zur Funktion main soll eine Zeile zur Definition des Symbols GANZ mittels #define hinzugefügt werden
- Anschließend sollen in der Funktion zahtest() an der richtigen Stelle Abfragen zu bedingten Compilation
erfolgen, damit nachfolgende Forderungen erfüllt werden:1. ist das Symbol nicht oder anders definiert, dann soll das Programm wie bisher reagieren.
2. Ist das Symbol GANZ definiert , dann soll es so compiliert werden, das das Programm
nur int-Zahlen als Zahl anerkennt. Es gibt dann den Schriftzug "Das war eine Zahl aus". Wird etwas anderes
als eine int Zahl eingegeben so soll das Programm "Das war eine Zeichenkette" auf den Bildschirm ausgeben./* a1_w1_7 Test ob Zahl oder Zeichenkette. */ #include <stdio.h> #include <string.h> #include "a1_w1_7.h" #define BIL printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n") #define GANZ /* main */ void main(void) { char string[STRING_LAENGE]; BIL; do { strcpy( string, "" ); /* string loeschen */ printf("Zahl oder Zeichenkette eingeben: "); gets( string ); /* String holen */ if( !string[0] ) break; /* keine Eingabe = Ende */ if( zahtest( string ) ) /* Gibt 'zahtest() WAHR zurck? */ printf("Das war eine Zahl!\n"); /* Ja, also Zahl! */ else printf("Das war eine Zeichenkette!\n"); /* Nein, also Zeichenk.*/ } while( 1 ); printf("\n\n"); } /* Funktion zahtest() */ int zahtest(char *string) { #ifdef char erlaubte_zeichen[] = " 1234567890"; /* Erlaubte Zeichen */ int ist_zahl = TRUE; /* Merker fr gefu. Zahl */ int anzahl_dez=0; /* Zahl der Dez.-trenner */ int ok = FALSE; /* Merker WAHR - FALSCH */ char dezimal_trenner = '.'; /* Dezimaltrenner */ erlaubte_zeichen[0] = dezimal_trenner; ok = strs1ns2( string, erlaubte_zeichen ); /* Nur erlaubte Zeichen?*/ if( ok != TRUE ) /* Falls Nein: */ ist_zahl = FALSE; /*'ist_zahl' = FALSCH */ else /* Falls Ja: */ { anzahl_dez = strcnt( string, dezimal_trenner ); /* Zahl Dezi- */ /* maltr. ermitt */ if( anzahl_dez > 1 ) /* Falls < > 1 */ ist_zahl = FALSE; /*'ist_zahl' = FALSCH */ } return (ist_zahl); /* 'ist-zahl zurckgeb. */ #else char erlaubte_zeichen[] = " 1234567890"; /* Erlaubte Zeichen */ int ist_zahl = TRUE; /* Merker fr gefu. Zahl */ int anzahl_dez=0; /* Zahl der Dez.-trenner */ int ok = FALSE; /* Merker WAHR - FALSCH */ char dezimal_trenner = '.'; /* Dezimaltrenner */ erlaubte_zeichen[0] = dezimal_trenner; ok = strs1ns2( string, erlaubte_zeichen ); /* Nur erlaubte Zeichen?*/ if( ok != TRUE ) /* Falls Nein: */ ist_zahl = FALSE; /*'ist_zahl' = FALSCH */ else /* Falls Ja: */ { anzahl_dez = strcnt( string, dezimal_trenner ); /* Zahl Dezi- */ /* maltr. ermitt */ if( anzahl_dez > 1 ) /* Falls < > 1 */ ist_zahl = FALSE; /*'ist_zahl' = FALSCH */ } return (ist_zahl); /* 'ist-zahl zurckgeb. */ #endif } /* Die Funktion "string s1 nur s2" prueft, ob der String 1 nur Zeichen */ /* enthaelt, die auch in 's2' enthalten sind. Falls ja gibt sie */ /* 1 zurueck falls nein, gibt sie 0 zurueck. */ int strs1ns2(char *str1, char *str2 ) { char *pos_str1 = str1; /* Uebergebenen String kopieren */ char *pos_str2 = str2; /* Erlaubte Zeichen kopieren */ int nur_erlaubte = FALSE; while( *pos_str1 != '\0' ) /* solange '\0' nicht gefunden ist */ { pos_str2 = str2; /* Anfangsadr. erl. Zeichen kopieren */ nur_erlaubte = FALSE; /* nur_erlaubte = FALSCH */ while( *pos_str2 != '\0' ) /* solange '\0' nicht gefunden ist */ { if( *pos_str1 == *pos_str2 ) /* Vergleich, ob nur erlaubte Zeichen*/ { /* Ja: */ nur_erlaubte = TRUE; /* nur_erlaubte = WAHR */ break; } pos_str2++; /* Naechstes erlaubtes Zeichen */ } if( !nur_erlaubte ) /* Falls nicht nur erlaubte Zeichen: */ break; /* Schleife abbrechen */ pos_str1++; /* Naechstes Zeichen im String */ } return (nur_erlaubte); /* WAHR oder FALSCH zurckgeben */ } /* Zahl der Dezimaltrenner im String addieren */ int strcnt( char *string, char zeichen ) { char *pos_str = string; int anzahl=0; while( *pos_str != '\0' ) /* solange '\0' nicht gefunden ist */ { if( *pos_str++ == zeichen ) /* Falls Dez.-trenner gefunden */ anzahl++; /* Anzahl + 1 */ } return anzahl; /* anzahl zurckgeben */ }
-
Hi,
Ich glaube wenn Du die a1_w1_7.h noch dazu postest und da nicht wider Erwarten irgendwas Unix-spezifisches drin ist, kann ich Dich sogar wieder nach Ansi-C zurückschieben ohne dass sich AJ ans Bein gepisst fühlt.
-
also hier die fehlende Datei
***********************************************************************/ /* a1_w1_7.h Headerdatei zur Definition von Parametern */ /* und Funktionsprototypen */ /***********************************************************************/ #define STRING_LAENGE 100 #define TRUE 1 #define FALSE 0 int zahtest(char *string); int strs1ns2(char *str1, char *str2 ); int strcnt( char *string, char zeichen ); /***********************************************************************/
-
Dieser Thread wurde von Moderator/in nman aus dem Forum Linux/Unix in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.