Lösungen zu den Übungsaufgaben
Dieses Kapitel beinhaltet die Übungsaufgaben zu den einzelnen Themenbereichen. Sie bestehen aus einer Beschreibung der Aufgabe.
Tree compare
Word Funktionen (word, words, wordpos, worddel, wordins, ...)
wasserdichte Funktionen zum Einfügen / Löschen von Elementen in doppelt verketteten Listen und zum Sortieren / Löschen von ganzen Listen
Primzahlenberechnung (Sieb des Erathostenes)
Variable Anzahl Parameter beim Funktionsaufruf
variable Anzahl Kommandozeilenparameter in variabler Reihenfolge und mit Gruppierung
Dateiinhalt durchblättern
PARSE VALUE, PARSE VAR mit UPPER/LOWER
SUBSTR, STRIP, LASTPOS, POS
HTML Parser
Schreiben Sie ein C-Programm, das folgenden Text auf dem Bildschirm ausgibt:
Mögen täten wir schon wollen, aber Können haben wir uns nicht getraut!
Hinweis: Verwenden Sie das NewLine-Zeichen (\n) an den geeigneten Stellen.
Welches Ergebnis liefert das folgende Programm?
void main(void) { printf("4 + 6 / 2 = %d\n", 4+6/2); }
Welche Ergebnisse liefert das folgende Programm?
void main(void) { int i=0, j=3, k=7; i = k / j; printf("I = %d", i); i = k % j; printf("I = %d", i); }
Das folgende Programm enthält Fehler! Korrigieren Sie es und testen Sie es daraufhin auf Lauffähigkeit.
*/ Fehlerprogramm /* #include <stdio.h> void main(void); { int zahl1; int zahl2; printf("Dieser Text); printf("soll einmal auf dem Bildschirm"); printf("erscheinen, wenn die Fehler"\n); printf("bereinigt sind!!!!"), zahl1 == 0; zahl2 == 3; printf("zahl1 + zahl2 = %d", zahl1 + zahl2); )
Welche der nachstehenden Variablendeklarationen sind korrekt?
int a = 2,34; char c = 'd"; int d = 's'; float fläche = 12.98; float value = 123.445; int gross = 12345678900000;
Welche der nachstehenden Zuweisungen sind falsch?
a) summe = summe + 12; b) a*a = a*5; c) 4g = erde + mond; d) erg = user + old_wert * 2; e) pro = betrag * 1.13;
Schreiben Sie ein Programm, in dem die beiden Gleitkommavariablen "komma" und "punkt" vereinbart werden. Von der Tastatur sollen Ihnen zwei Werte zugewiesen und diese danach addiert werden. Die Summe beider Zahlen ist auf dem Bildschirm auszugeben.
Warum liefert das nachstehende Programm unter Umständen ein falsches Ergebnis?
#include <stdio.h> void main(void) { double summe, zahl; zahl = 10; summe = summe + zahl; summe = summe + zahl; printf("Ergebnis: %lf", summe); }
Schreiben Sie ein Programm, das eine printf()-Anweisung enthält, die drei Integer-Werte in einem Ausgabe-Feld von 10, 15 und 20 Spalten jeweils in einer eigenen Zeile ausgibt.
Ein Kondomhersteller verpackt jeweils 111 Kondome pro Karton. Schreiben Sie ein Programm, das die Anzahl der hergestellten Kondome pro Tag einliest und die Anzahl der benötigten Kartons ausgibt. Dabei soll die Zahl der übrig gebliebenen Kondome, die keinen ganzen Karton mehr füllen, ebenfalls ausgegeben werden.
Schreiben Sie ein Programm, daß den durchschnittlichen Verbrauch eines Autos auf 100km errechnet. Die getankten Liter und die gefahrenen Kilometer sollen eingegeben werden können.
Schreiben Sie ein Programm, das den Namen des Benutzers und vier seiner letzten Noten einliest. Es soll der Notendurchschnitt mit dem Namen wieder ausgegeben werden. Außerdem soll nach dem Qualifikationsgrad für das Gymnasium (A-D) gefragt werden. Kommentieren Sie das Programm ausreichend und gestalten Sie die Ausgaben auf dem Bildschirm möglichst benutzerfreundlich.
Ändern Sie das folgende Programm derart, daß die Nachkommastellen nicht ausgegeben werden.
#include <stdio.h> void main(void) { double schlaege, alter; printf("Herzschläge pro Minute: "); fflush(stdout); scanf("%lf",&schlaege); printf("Alter in Jahren: "); fflush(stdout); scanf("%lf",&alter); printf("Ihr Herz hat seit Ihrer Geburt \ %f mal geschlagen.",schlaege*60*24*365.25*alter); }
Welchen Fehler enthält der folgende Ausschnitt?
char puffer[15]; strcpy(puffer,"Programmiersprache C");
Vorgegeben sind folgende Zeichenketten mit den entsprechenden Werten:
kette1="Crash"; kette2="Test"; kette3="Dummies";Mit welchen Anweisungen müssen diese Ketten verbunden werden, damit das Feld "gruppe" den Namen einer bekannten Popgruppe enthält?
Schreiben Sie ein Programm, das einen Satz von der Tastatur liest und die Anzahl des Buchstabens 'e' in diesem Satz bestimmt. Errechnen Sie auch den prozentualen Anteil des Buchstabens an der Gesamtbuchstabenanzahl des Satzes.
Was macht das nachstehende Programm?
#include <stdio.h> void main(void) { char satz[80]; int x = 0; int y = 0; printf("Bitte einen Satz eingeben!\n>>"); gets(satz); while(satz[x] != '\0') { if (satz[x] == 32) y++; x++; } printf("\ny = %d", y); }
Schreiben Sie ein Programm, das einen Satz liest und ohne Satzzeichen und Leerstellen wieder ausgibt.
Schreiben Sie ein Programm, das einen Satz liest und jedes Wort in einer eigenen Zeile wieder ausgibt. Die Wortbegrenzung ist das Leerzeichen. Am Ende des Programms soll die Anzahl der Wörter ausgegeben werden.
Hinweis: Ein Satz kann sowohl mit einem Leerzeichen anfangen, als auch mit einem enden. Des weiteren können zwischen zwei Wörtern mehrere Leerzeichen stehen.
Schreiben Sie ein Programm, das alle ungeraden Zahlen von 1 bis n addiert. Verwenden Sie dazu eine for-Schleife. Die Zahl n wird vom Benutzer eingegeben und das Ergebnis am Bildschirm ausgegeben.
Schreiben Sie ein Programm, das eine ganze Zahl "x" vom Benutzer entgegennimmt und das Ergebnis der Berechnung von 2^x ausgibt. Beachten Sie die Problematik der Überschreitung/Unterschreitung der Wertebereiche. Führen Sie die Berechnung, sofern sinnvoll, für Ergebnisvariablen der Typen signed|unsigned short int|int|long int, float, double und long double durch.
Erweitern Sie das Programm dahingehend, daß für den Typ long double alle Potenzen von 2^0 bis 2^x berechnet und ausgegeben werden.
Das nachstehende Programm gibt ein Dreieck aus Sternen auf dem Bildschirm aus. Verändern Sie es derart, daß das Dreieck auf dem Kopf steht.
#include <stdio.h> void main(void) { int zeile = 0; int spalte= 0; for (zeile=1; zeile <= 20; zeile++) { for (spalte=1; spalte <= zeile; ++spalte) { printf("*"); } /* ende for spalte */ printf("\n"); } /* ende for zeile */ } /* ende main */
Schreiben Sie ein Programm, das die Fakultät einer eingegebenen Zahl errechnet. Verwenden Sie die for-Schleife. (z.B. !4 = 24)
Ändern Sie das Programm aus der vorhergehenden Aufgabe so ab, daß statt der for- eine while-Schleife verwendet wird.
Notieren Sie die nachstehenden Aussagen in der Art, daß sie als while-Schleife in einem C-Programm verwendet werden könnten.
In einem Programm soll dafür gesorgt werden, daß nur Integer-Werte größer Null bei der Eingabe zugelassen werden. Schreiben Sie diesen Programmteil und nutzen Sie die do-Schleife.
Schreiben Sie ein Programm, das die nachstehende Formel berechnet:
f(x)= 4x^2 + 7x + h
Der Wert der Variablen x soll von der Tastatur eingelesen werden. Wenn x > 7 ist, soll h den Wert 4 annehmen, ist x <= 7, so soll h = -3 sein.
Schreiben Sie das Programm zur Berechnung des Benzinverbrauchs aus dem letzten Abschnitt so um, daß die eventuelle Eingabe einer Null durch eine if/else-Abfrage abgefangen wird. Dadurch soll eine Division durch Null verhindert werden.
Das folgende Programm soll alle eingegebenen Buchstaben in Großbuchstaben umwandeln. Warum arbeitet es nicht korrekt?
#include <stdio.h> #include <conio.h> void main(void) { char zeichen=' '; printf("Das Programm wird durch Eingabe von 0 beendet.\n"); do { printf("Zeichen eingeben: "); fflush(stdout); zeichen=getche(); if(zeichen>='a' && zeichen<='z') { zeichen=zeichen-('a'-'A'); } printf(" %c\n",zeichen); } while(zeichen!=0); }
Sind die folgenden Aussagen wahr oder falsch:
Wie oft wird der Text "Hallo Welt" gedruckt?
for(x=1; x<6; x=x+1) { for(y=2;y<=4;y=y+1) printf("Hallo Welt\n"); }
Geben Sie das kleine Einmaleins in tabellarischer Form aus.
Geben Sie für die folgenden for-Schleifen an, wie oft sie durchlaufen werden und welche Werte die Zählvariable dabei annimmt.
Schreiben Sie eine Funktion, die den Absolutwert (Wert ohne Vorzeichen) eines double-Wertes zurückliefert.
Schreiben Sie eine Funktion "vorzeichen", die einen Integer-Wert zurückliefert und einen double-Parameter übernimmt. Ist der double-Wert größer Null, soll 1, ist er kleiner Null, soll -1 und ist er gleich Null, so soll Null zurückgegeben werden.
Schreiben Sie eine Funktion "hoch", die einen double-Wert potenziert und das Ergebnis zurückliefert. Der Prototyp sieht folgendermaßen aus:
double hoch(double wert, int potenz);Bei einer Potenz = 0 soll der Wert 1, bei einer negativen Potenz der Fehlerwert -1 zurückgegeben werden.
Schreiben Sie ein Programm, das zur Berechnung des Durchschnittswertes eine Funktion verwendet.
Schreiben Sie eine Funktion, die den Jahrestag berechnet. Sie
soll als Parameter Tag, Monat und Jahr bekommen.
Achtung: Schaltjahr!
Hinweis: Ermitteln Sie Zeit und Datum mit DosGetDateTime.
Schreiben Sie eine Funktion, die mehrere Integer-Werte von der Tastatur entgegennimmt und den größten zurückliefert.
Schreiben Sie ein Programm, daß das aktuelle Datum vom Benutzer entgegennimmt und in einer Struktur (tt.mm.jjjj) speichert.
Schreiben Sie ein Programm, daß die Bücher einer Buchhandlung verwalten kann. Dazu wird eine Struktur benötigt, die die Komponenten Inventarnummer, Titel, Preis, Mwst und Stückzahl für bis zu 100 Bücher aufnehmen kann. Es soll zuerst die Mehrwertsteuer eingelesen werden und dann in einer Schleife die restlichen Bücher. Dadurch braucht die Mehrwertsteuer nur einmal eingegeben werden.
Schreiben Sie ein Programm, daß bis zu 100 Girokonten verwalten kann. Die Daten eines Kontos sollen mind. Name und Anschrift des Inhabers, dessen Geburtsdatum, die Kontonummer und den momentanen Kontostand umfassen.
Beschränken Sie das Programm zunächst auf die Anlage neuer Konten (Eingabe) und die Ausgabe der Daten der angelegten Konten. Die Anlage neuer Konten umfaßt die Entgegennahme der Daten per Tastatur, das Speichern der Daten in den entsprechenden Variablen und eine Ausgabe der eingegebenen Daten zur Überprüfung auf Tippfehler. Im Falle eines Tippfehlers muß dieser selbstverständlich korrigiert werden können. Die Ausgabe der Daten umfaßt entweder die Ausgabe aller angelegten Kontendaten oder eines beliebigen Kontos (Auswahl per Kontonummer). Die Art der Ausgabe (alle oder ein bestimmtes) muß der Benutzer auswählen können.
Hinweis: Man kann sich das Leben leichter machen, indem man die Aufgabe zunächst schrittweise aufgliedert und nicht alles auf einmal programmiert.
Schreiben Sie eine Funktion, die in einer Zeichenkette ein Zeichen sucht und es jeweils durch ein anderes ersetzt. Benutzen Sie die folgenden Prototyp:
void ersetze_zeichen(char *s, char alt, char neu);
Ändern Sie das Programm zum Ausgeben eines Satzes ohne Satzzeichen und Leerzeichen so ab, daß statt der if- eine switch-Anweisung verwendet wird.
Erweitern Sie Aufgabe der Bücherverwaltung aus dem letzten Abschnitt so, daß die Informationen zu den Büchern in einer Datei gespeichert werden.
Erweitern Sie das Programm zur Verwaltung von Girokonten dahingehend, daß die angelegten Konten in einer Datei gespeichert werden. Die Ausgabe der Kontendaten muß auch die gespeicherten Daten berücksichtigen.
Hinweis: Gliedern Sie die Aufgabe zunächst schrittweise auf.
Stellen Sie Überlegungen an, wie im Programm zu Verwaltung von Girokonten eine Funktion zum Suchen von Daten und eine Funktion zum Ändern von Daten realisiert werden kann. Eine Umsetzung in Programmcode ist nicht erforderlich.
Schreiben Sie ein Programm, das einzelne Zeichen aus einer Textdatei liest. Diese Zeichen sollen hinsichtlich ihrer Beschaffenheit (Groß-, Kleinbuchstabe, Ziffern, Sonderzeichen) analysiert werden. (Anzahl der jeweiligen Zeichen und prozentualer Anteil)
Schreiben Sie ein Programm, das den Inhalt zweier Dateien Zeichen für Zeichen vergleicht. Die eingelesenen Zeichen sollen mitgezählt und bei Feststellung eines Unterschieds der Programmablauf abgebrochen werden.
Schreiben Sie ein Programm, das eine Textdatei kopiert. Das Programm erwartet den Namen der Quelldatei und den Namen der Zieldatei als Kommandozeilenparameter. Am Ende soll noch die Anzahl der kopierten Worte ausgegeben werden.
Schreiben Sie ein Programm, das Zeichen aus einer Datei liest und prüft, ob es sich um einen Groß- oder Kleinbuchstaben handelt. Ist es ein Großbuchstabe, soll er in einen Kleinbuchstaben, und ist es ein Kleinbuchstabe, so soll er in einen Großbuchstaben umgewandelt werden. Diese neuen Zeichen sollen in eine neue Datei geschrieben werden.
Schreiben Sie ein Programm, daß Geburtsdaten aus einer Datei liest und sie mit dem aktuellen Datum vergleicht. Wenn innerhalb der nächsten 7 Tage ein Geburtstag ansteht, soll eine Meldung ausgegeben werden, die den Namen, das Datum und das Alter der Person ausgibt.
Hinweis: Daten-Datei muß erst angelegt werden!
Schreiben Sie ein Programm, daß den Inhalt einer Textdatei zeilenweise umdreht. Die letzte Zeile soll die erste werden.
Schreiben Sie ein Programm, daß den Inhalt einer Textdatei zeichenweise umdreht. Das erste Zeichen soll das letzte werden.
Sie bekommen von einem anderen Rechner eine Datei übergeben. Auf diesem Rechner werden die Zeichen nach einem Code verschlüsselt, der nicht vollständig mit dem ASCII-Code übereinstimmt. Die interne Darstellung der Zeichen ist in der folgenden Tabelle enthalten:
ASCII dezimaler Code des Zeichen fremden Rechners ++++++++++++++++++++++++++++++ a 48 b 49 c 50 d 51 e 52 f 53 g 54 h 55 i 116 j 117 k 118 l 119 m 56 n 57 o 97 p 98 q 99 r 100 s 101 t 102 u 103 v 104 w 105 x 106 y 107 z 108 1 109 2 110 3 111 4 112 5 113 6 114 7 115 8 120 9 121 0 122
Das bedeutet, daß z.B. das Zeichen mit dem Code 116 des fremden Rechners ein 'i' sein soll, es wird bei uns aber als 't' dargestellt.
Beispieldatensatz (siehe T:\C\SATZ.NEU):
Dt4e tef 4t9 T4ef30f49e0fl, 34d 0g5 4t948 5d48349 R42794dekef48 4def4wwf igd34.ÿ
Dieses Kapitel beinhaltet Lösungen zu den einzelnen Übungsaufgaben. Diese Lösungen bestehen aus Quelltexten und ggf. aus Erläuterungen. Da es in der Regel mehr als eine Möglichkeit gibt, eine Lösung zu erreichen, sind diese Lösungen jeweils auch nur als eine von vielen Möglichkeiten zu betrachten.
Es wird 7 ausgegeben, da erst 6/2 und dann 3+4 berechnet wird.
Es wird:
I = 2 I = 1ausgegeben.
#include <stdio.h> void main(void) { int zahl1=0; int zahl2=0; printf("Dieser Text"); printf("soll einmal auf dem Bildschirm"); printf("erscheinen, wenn die Fehler\n"); printf("bereinigt sind!!!!"); zahl1 = 0; zahl2 = 3; printf("\nzahl1 + zahl2 = %d\n", zahl1 + zahl2); }
Es sind nur folgende Variablenvereinbarung korrekt:
int d='s'; float value = 123.445;
#include <stdio.h> #include <conio.h> void main(void) { float komma = 0.0; float punkt = 0.0; printf("\nBitte x eingeben:"); scanf("%f", &komma); printf("\nBitte y eingeben:"); scanf("%f", &punkt); printf("\nx + y = %f", komma+punkt); }
summe ist vor der ersten Zuweisung nicht initialisiert worden: double summe = 0.0;!
Fehler c009a wahrscheinlich
/* Aufgabe 10_1_12 */ #include <stdio.h> #include <conio.h> void main(void) { int komma = 1; int punkt = 2; int stich = 3; printf("\nKomma in 10 Spalten: %10d", komma); printf("\nPunkt in 15 Spalten: %15d", punkt); printf("\nStich in 20 Spalten: %20d", stich); }
#include <stdio.h> #include <conio.h> void main(void) { int anzahl_kondome = 0; float karton = 0.0; float ergebnis = 0.0; printf("\nBitte Tagesanzahl der produzierten Kondome eingeben:\n>"); scanf("%d", &anzahl_kondome); karton = anzahl_kondome / 111; ergebnis = anzahl_kondome % 111; printf("\nEs können %.0f Kartone ausgeliefert werden!", karton); printf("\nDann sind %.0f Kondome über!", ergebnis); }
get_Liter * 100 / gef_km
/* Programm: Durchschnittsverbrauch */ /* Einbinden von Hilfsbibliotheken */ #include <conio.h> #include <math.h> /* Hauptfunktion */ void main(void) { /* Variablendeklaration und Initialiserung */ float getankteLiter, gefahreneKilometer, rest, durchVerbrauch; getankteLiter=0; gefahreneKilometer=1; printf(" \n\n\n"); /* Benutzereingabe */ printf("\t Getankte Liter: "); scanf("%f",&getankteLiter); printf("\t Gefahrene Kilometer: "); scanf("%f",&gefahreneKilometer); durchVerbrauch = (getankteLiter * 100) / gefahreneKilometer; printf("\n\n\n"); /* Ausgabe */ printf("\t\t Wenn ich %4.2f Liter getankt habe\n\n",getankteLiter); printf("\t\t\t und %5.2f Kilometer gefahren bin,\n\n", gefahreneKilometer); printf("\t\t so habe ich %5.2f Liter\n\n",durchVerbrauch); printf("\t\t\t auf 100 Kilometer verbraucht.\n\n\n"); }
/* Aufgabe 10_1_16 */ #include <stdio.h> #include <conio.h> void main(void) { char name[20]; char qual = 'A'; int note1 = 0; int note2 = 0; int note3 = 0; int note4 = 0; float durch = 0.0; printf("Name:\n>"); scanf("%s", name); printf("Note1:\n>"); scanf("%d", ¬e1); printf("Note2:\n>"); scanf("%d", ¬e2); printf("Note3:\n>"); scanf("%d", ¬e3); printf("Note4:\n>"); scanf("%d", ¬e4); printf("Qualifikation:\n>"); qual = getche(); printf("\nGuten Tag %s!\n", name); durch = (note1+note2+note3+note4)/4.0; printf("Ihr Notendurchschnitt: %.2f.\n", durch); printf("Damit ergibt sich die Qualifikation: %c", qual); }
printf("Ihr Herz hat seit Ihrer Geburt \ %.0f mal geschlagen.",schlaege*60*24*365.25*alter);
Feld ist zu klein
#include <stdio.h> #include <conio.h> void main(void) { char gruppe[20]; char kette1[10]; char kette2[10]; char kette3[10]; strcpy(kette1,"Crash "); strcpy(kette2,"Test "); strcpy(kette3,"Dummies"); strcpy(gruppe, kette1); strcat(gruppe, kette2); strcat(gruppe, kette3); printf("\n%s", gruppe); }
#include <stdio.h> #include <conio.h> #include <string.h> void main(void) { char satz[80]; int x, laenge, anzahl=0; float prozent; printf("Bitte einen Satz eingeben!\n>"); gets(satz); laenge = strlen(satz); for (x=0; x<laenge; x++) { if(satz[x] == 'e') { anzahl++; } } prozent = 100.0/laenge*anzahl; printf("\n%d der Zeichen sind ein 'e'.", anzahl); printf("\n%.2lf%% der Zeichen sind ein 'e'.", prozent); }
Das Programm zählt die Anzahl der Leerzeichen in einem Text. Das Leerzeichen hat den ASCII-Code 32.
#include <stdio.h> #include <conio.h> void main(void) { int x = 0; char satz[100]; printf("\nBitte einen Satz eingeben!.\n"), gets(satz); while(satz[x] != '\0') { if((satz[x]!=',') && (satz[x]!='.') && (satz[x]!='?') && (satz[x]!='1') && (satz[x]!=' ')) { printf("%c", satz[x]); } x++; } } bzw. besser: #include <stdio.h> void main(void) { char satz[80+1]; int laenge=0, i=0, t=0; printf("Bitte einen Satz eingeben:\n"); gets(satz); for(i=strlen(satz)-1;i>=0;i--) { if(satz[i]==' ') satz[i]='\0'; else break; } /* ende for */ for(i=0;i<strlen(satz);i++) { if(satz[i]==' ') { for(t=i; t<strlen(satz); t++) satz[t]=satz[t+1]; i=-1; } else break; } /* ende for */ printf("\nNeuer Satz: >%s<\n",satz); } /* ende main */
#include <stdio.h> #include <conio.h> void main(void) { int x = 0; char satz[100]; printf("\nBitte einen Satz eingeben!.\n"), gets(satz); while(satz[x] != '\0') { if(satz[x]!=' ') printf("%c", satz[x]); else printf("\n"); x++; } }
#include <stdio.h> void main(void) { int i=0, ergebnis=0, n=11; for(i=1;i<=n;i+=2) ergebnis=ergebnis+i; printf("Ergebnis für n=%d ist %d.\n",n,ergebnis); }
#include <conio.h> void main(void) { int n=0, x; float summe=0.0; printf("Bitte n eingeben:\n>"); scanf("%d", &n); for (x = 0; x <= n; x+=2) { summe += x; } printf("%.0f", summe); }
nicht verfügbar
#include <stdio.h> #include <conio.h> void main(void) { int zeile = 0; int spalte= 0; for (zeile=20; zeile >= 1; zeile--) { for (spalte=1; spalte <= zeile; ++spalte) { printf("*"); } printf("\n"); } }
#include <stdio.h> #include <conio.h> void main(void) { int n,x; double produkt = 1; printf("\t\t****************Fakultätsberechnung***************\n"); printf("\nBitte n eingeben!\n>"); scanf("%d", &n); for (x=1; x<=n; x++) { produkt *= x; } printf("\n%i! = %.0lf", n, produkt); }
#include <stdio.h> #include <conio.h> void main(void) { int n,x; double produkt = 1; printf("\t\t****************Fakultätsberechnung***************\n"); printf("\nBitte n eingeben!\n>"); scanf("%d", &n); x=1; while (x <= n) { produkt *= x; x++; } printf("\n%i! = %.0lf", n, produkt); }
#include <stdio.h> #include <conio.h> void main(void) { int n; do { printf("\nBitte n eingeben!\n>"); scanf("%d", &n); } while (n <= 0); printf("\nEndlich ein Integerwert, der größer als Null ist! %d", n); }
#include <stdio.h> #include <conio.h> void main(void) { double y = 0.0; int x = 0; int h = 0; printf("\nBitte x eingeben!\n>"); scanf("%d", &x); if (x > 7) h = 4; else h = -3; y = 4*x*x + 7*x + h; printf("\nErgebnis: %.0lf", y); } oder #include <stdio.h> #include <conio.h> #include <math.h> void main(void) { double y = 0.0, x=0.0, h=0.0; printf("\nBitte x eingeben!\n>"); scanf("%lf", &x); if (x > 7) h = 4; else h = -3; z = 4*pow(x,2.0) + 7*x + h; printf("\nErgebnis: %.2lf", y); }
/* Programm: Durchschnittsverbrauch A101_14.c */ /* Einbinden von Hilfsbibliotheken */ #include <conio.h> #include <math.h> /* Hauptfunktion */ void main(void) { /* Variablendeklaration und Initialiserung */ float getankteLiter, gefahreneKilometer, rest, durchVerbrauch; getankteLiter=0; gefahreneKilometer=1; printf(" \n\n\n"); /* Benutzereingabe */ printf("\t Getankte Liter: "); scanf("%f",&getankteLiter); printf("\t Gefahrene Kilometer: "); scanf("%f",&gefahreneKilometer); if (gefahreneKilometer == 0) /* Division by 0 ? */ printf("Fehler: Division durch Null!"); else { durchVerbrauch = (getankteLiter * 100) / gefahreneKilometer; printf("\n\n\n"); /* Ausgabe */ printf("\t\t Wenn ich %4.2f Liter getankt habe\n\n",getankteLiter); printf("\t\t\t und %5.2f Kilometer gefahren bin,\n\n", gefahreneKilometer); printf("\t\t so habe ich %5.2f Liter\n\n",durchVerbrauch); printf("\t\t\t auf 100 Kilometer verbraucht.\n\n\n"); } /* Ende ELSE-Zweig */ }
while(zeichen!=0) müßte while(zeichen!='0') heißen
Lösung: 15 mal
Lösung:
#include <stdio.h> void main(void) { int x=0,y=0; for(x=1;x<=10;x=x+1) { printf("\n"); for(y=1;y<=10;y=y+1) printf("%4i",x*y); } }
#include <stdio.h> #include <conio.h> float f_abs(float para) { if (para < 0) para *= (-1); return(para); } void main(void) { float y = 0.0; float e = 0; printf("\nBitte x eingeben!\n>"); scanf("%f", &y); e = f_abs(y); printf("\nAbsolutwert von x: %f", e); }
#include <stdio.h> #include <conio.h> int vorzeichen(float wert) { if (wert<0) return(-1); if (wert==0) return(0); if (wert>0) return(1); } void main(void) { int x = 0; float y = 0.0; printf("\nBitte x eingeben!\n>"); scanf("%f", &y); x = vorzeichen(y); }
double hoch(double wert, int potenz) { int i=0; double ergebnis=1.0; if(potenz==0) return(1); if(potenz<0) return(-1); for(i=1;i<=potenz;i++) ergebnis=ergebnis*wert; return(ergebnis); }
#include <stdio.h> #include <conio.h> float hoch(float wert, int potenz) { int x = 0; float erg = 0.0; if (potenz<0) return(-1); if (potenz==0) return(1); if (potenz==1) return(wert); erg = wert; for(x=2; x<=potenz; x++) { erg *= wert; } return(erg); } void main(void) { int x = 0; float y = 0.0; float erg = 0.0; printf("\nBitte x eingeben!\n>"); scanf("%f", &y); printf("\nBitte Potenz eingeben!\n>"); scanf("%d", &x); printf("Die %d. Potenz von %f = %f", x, y, (erg = hoch(y,x))); }
#include <stdio.h> #include <conio.h> float durchschnitt(int feld[], int n) { int y = 0; float erg = 0.0; for(y=0; y<=n; y++) { erg += feld[y]; } return(erg/n); } void main(void) { int x = 1; int feld[100]; char abfrage = 'j'; /* float erg = 0.0; */ for (x=0; x<=99; x++) { feld[x] = 0; } x=0; while(((abfrage == 'j') || (abfrage == 'J')) && (x <= 99)) { printf("\nBitte %d. Zahl eingeben!\n>", x+1); scanf("%d", &feld[x]); printf("\nNoch eine Zahl eingeben?\n>"); abfrage = getche(); x++; } printf("\nDer Durchschnitt ist: %.2f", (durchschnitt(feld, x))); }
#include <stdio.h> #include <os2.h> #include <time.h> #include <string.h> void main(void) { DATETIME DateTime; APIRET rc; char *wochentag[]={"Montag","Dienstag","Mittwoch","Donnerstag", "Freitag","Samstag","Sonntag"}; int ergebnis; time_t zeit; struct tm *zeit_s; char zeitstring[60]; time(&zeit); zeit_s=localtime(&zeit); strcpy(zeitstring,asctime(zeit_s)); printf("\nZeit: %sStunden: %c%c\n\n",asctime(zeit_s), zeitstring[11],zeitstring[12]); rc=DosGetDateTime(&DateTime); switch(DateTime.month) { case 1 : { ergebnis=DateTime.day; break; } case 2 : { ergebnis=31+DateTime.day; break; } case 3 : { ergebnis=31+28+DateTime.day; break; } case 4 : { ergebnis=31+28+31+DateTime.day; break; } case 5 : { ergebnis=31+28+31+30+DateTime.day; break; } case 6 : { ergebnis=31+28+31+30+31+DateTime.day; break; } case 7 : { ergebnis=31+28+31+30+31+30+DateTime.day; break; } case 8 : { ergebnis=31+28+31+30+31+30+31+DateTime.day; break; } case 9 : { ergebnis=31+28+31+30+31+30+31+31+DateTime.day; break; } case 10 : { ergebnis=31+28+31+30+31+30+31+31+30+DateTime.day; break; } case 11 : { ergebnis=31+28+31+30+31+30+31+31+30+31+DateTime.day; break; } case 12 : { ergebnis=31+28+31+30+31+30+31+31+30+31+30+DateTime.day; break; } } if(DateTime.year%4==0 && DateTime.month>2) ergebnis++; printf("\n================================================================== =============\n\ Date: %s, %02d.%02d.%02d ist der %03d. Tag im Jahr.\nTime: %02d:%02d:%02d\ n\ ===============================================================================\ n", wochentag[DateTime.weekday-1],DateTime.day,DateTime.month, DateTime.year,ergebnis, DateTime.hours,DateTime.minutes,DateTime.seconds); } /* Ende main */
/***********************************************************************/ /* Funktion errechnet den Tag des Jahres (z.B.134). Parameter sind Tag,*/ /* Monat und Jahr eines beliebigen Datums. */ /***********************************************************************/ int day_of_year_errechnen(int r_tag, int r_monat, int r_jahr) { int monat[13]; monat[0] = 0; monat[1] = 31; monat[2] = 28; monat[3] = 31; monat[4] = 30; monat[5] = 31; monat[6] = 30; monat[7] = 31; monat[8] = 31; monat[9] = 30; monat[10] = 31; monat[11] = 30; monat[12] = 31; if ((r_jahr % 4) == 0) monat[2] = 29; for (x=0; x<=((r_monat)-1); x++) { day_of_year += monat[x]; } return(day_of_year += (r_tag)); }
#include <stdio.h> int groesser_als(int feld[], int n) } /* Ende main */ int x=0; int alt_wert=feld[x]; for (x=1; x<=n; x++) { int neu_wert=feld[x]; if (alt_wert < neu_wert) { alt_wert = neu_wert; } } return(alt_wert); } void main(void) { int feld[100]; int n=0; clrscr(); printf("\nBitte 9999 als Abbruchkriterium eingeben!\n"); for(n=0; n<=100; n++) { printf("\nBitte %d. Zahl eingeben => ", n+1); scanf("%d", &feld[n]); if (feld[n] == 9999) break; } n--; printf("\nDie größte der eingegebenen Zahlen ist: %d", groesser_als(feld, n)); }
#include <conio.h> #include <stdio.h> /* eventuelle EIGENE FUNKTIONEN, TYPEN, etc. EXTERNE VARIABLEN */ /* Hauptprogramm */ void main(void) { /* Vereinbarungsteil */ struct date /* Datumsstruktur */ { int Tag; int Monat; int Jahr; }; struct date DATUM; int tag_gueltig = 0; /* Merker zur Feststellung */ int monat_gueltig = 0; /* der Korrekheit des */ int jahr_gueltig = 0; /* eingegebenen Datums */ int x = 0; /* Verarbeitungsteil */ /* while((tag_gueltig != 0) || (monat_gueltig != 0) || (jahr_gueltig != 0)); */ for (x=0; ((tag_gueltig == 0) || (monat_gueltig == 0) || (jahr_gueltig == 0 x++) { /* Eingabe und Prüfung Tag */ printf("\n\nBitte heutigen Tag eingeben: (Form: 09) "); scanf("%d", &DATUM.Tag); printf("\n"); if ((DATUM.Tag < 1) || (DATUM.Tag > 31)) { printf("Ungültige Tageszahl!"); } else { tag_gueltig = 1; } /* Eingabe und Prüfung Monat */ printf("\nBitte aktuellen Monat eingeben: (Form: 03) "); scanf("%d", &DATUM.Monat); printf("\n"); if ((DATUM.Monat < 1) || (DATUM.Monat > 12)) { printf("Ungültiger Monat!"); } else { monat_gueltig = 1; } /* Eingabe und Prüfung Jahr */ printf("\nBitte aktuelles Jahr eingeben: (Form: 1971) "); scanf("%d", &DATUM.Jahr); printf("\n"); if ((DATUM.Jahr < 1994) || (DATUM.Jahr > 2000)) { printf("Ungültiges Jahr!"); } else { jahr_gueltig = 1; } /* Zurücksetzen der Merker, falls eine Komponente Falsch war */ if ((tag_gueltig == 0) || (monat_gueltig == 0) || (jahr_gueltig == =)); { printf("\n Das kann ganz unmöglich das heutige Datum sein!"); tag_gueltig = 0; monat_gueltig = 0; jahr_gueltig = 0; } } /* Ende for */ /* * Ausgabe des aktuellen Datums */ printf("\n\nDas aktuelle Datum ist:\n"); printf("Tag : %4d\n", DATUM.Tag); printf("Monat: %4d\n", DATUM.Monat); } /* end- main */
#include <conio.h> #include <stdio.h> #define MAX 100 /* Hauptprogramm */ void main(void) { /* Vereinbarungsteil */ struct buch { char inv_nr[5]; char titel[50]; char preis[6]; char mwst[6]; char menge[5]; } }; struct buch BUCHSATZ[MAX]; int x = 0; char abfrage = 'j'; printf("\nBitte Mehrwertsteuer eingeben!\n>"); gets(BUCHSATZ[0].mwst); while(((abfrage == 'j') || (abfrage == 'J')) && (x <= MAX)) { printf("\nBitte %d.Datensatz eingeben!", x+1); printf("\nInventarnummer: "); gets(BUCHSATZ[x].inv_nr); printf("Titel : "); gets(BUCHSATZ[x].titel); printf("Preis : "); gets(BUCHSATZ[x].preis); printf("Menge : "); gets(BUCHSATZ[x].menge); strcpy(BUCHSATZ[x].mwst, BUCHSATZ[0].mwst); printf("\nNoch einen Datensatz eingeben?\n>"); abfrage = getche(); x++; } } /* end- main */
#include <stdio.h> #include <string.h> #include <conio.h> #include <stdlib.h> #define max_string 120 /* maximale stringlänge definieren */ /* Funktionsprototypen */ void clrscr(void); void blau(void); void normal(void); void gotoxy(int, int); /* x-koordinate, y-koordinate */ void satz_eingeben(int,int); /* fortlaufende satznummer,kontonummer * / void satz_ausgeben(int); /* höchste satznummer */ void satz_speichern(FILE *, int); /* dateizeiger, fortlaufende satznummer */ int satz_lesen(FILE *); /* höchste satznummer, dateizeiger */ FILE * datei_oeffnen(char [], char []); /* dateizeiger, dateiname, modus */ /* Datenstruktur für Konto */ struct konto_s { char nname[80+1]; char vname[80+1]; char strasse[max_string+1]; char strasse2[max_string+1]; int plz; char stadt[80+1]; double kontostand; int kontonummer; } konto[100]; void main(int argc, char *argv[]) { int i=0, rc=0; /* i: satznummer, rc: Return Code */ int knummer=0; /* kontonummer für automatische zuteilung */ char janein='j'; FILE *datei1, *datei2; datei1=datei_oeffnen("SATZ.TXT","a+"); rc=fseek(datei1, 0L, SEEK_SET); /* Dateizeiger an den Anfang setzen */ if(rc!=0) { printf("\nProblem beim Setzen der Dateiposition!\n"); printf("Weiter mit einer beliebigen Taste."); fflush(stdout); janein=getch(); } do { clrscr(); printf("Auswahl:\n\n"); printf("1. Datensätze anzeigen lassen.\n"); printf("2. Neuen Datensatz hinzufügen.\n"); printf("X. Programmende.\n"); janein=getche(); if(janein=='1') { /* bestehende Sätze lesen und anzeigen */ i=satz_lesen(datei1); knummer=(konto[i-1].kontonummer)+1; satz_ausgeben(i); printf("Gelesene Sätze: i=%d\n",i); printf("Nächste Kontonummer: %d\n",knummer); printf("Weiter mit einer beliebigen Taste."); fflush(stdout); janein=getch(); } /* Ende Sätze anzeigen lassen */ if(janein=='2') { /* neue Sätze hinzufügen */ do { satz_eingeben(i,knummer++); satz_speichern(datei1,i); printf("Einen weiteren Datensatz eingeben? "); fflush(stdout); fflush(stdin); scanf("%c",&janein); fflush(stdin); i++; } while((janein=='j' || janein=='J') && i<100); } /* Ende Sätze hinzufügen */ } while(janein!='x' && janein!='X'); fclose(datei1); /* alle sätze ausgeben */ satz_ausgeben(i); } /* Ende main */ /*********************************************/ /* Datei öffnen, Parameter: Dateiname, Modus */ /* Return: Dateizeiger */ FILE * datei_oeffnen(char name[], char modus[]) { FILE *datei; datei=fopen(name,modus); if(datei==NULL) { printf("\nFehler beim Öffnen der Datei %s, Modus %s.\n",name,modus); printf("Unter Umständen greift bereits ein Programm exklusiv auf diese Dat ei zu.\n"); exit(8); } return datei; } /***************************************************************/ /* Datensatz eingeben, Parameter: Datensatznummer, Kontonummer */ void satz_eingeben(int i, int knummer) { clrscr(); printf("Bitte den Nachnamen angeben : \n"); printf("Bitte den Vornamen angeben : \n"); printf("Bitte die Strasse angeben : \n"); printf(" : \n"); printf("Bitte die PLZ angeben : \n"); printf("Bitte die Stadt angeben : \n"); printf("Bitte den Kontostand angeben: \n"); blau(); gotoxy(31,1); printf(" "); gotoxy(31,2); printf(" "); gotoxy(31,3); printf(" "); gotoxy(31,4); printf(" "); gotoxy(31,5); printf(" "); gotoxy(31,6); printf(" "); gotoxy(31,7); printf(" "); gotoxy(31,1); gets(konto[i].nname); gotoxy(31,2); gets(konto[i].vname); gotoxy(31,3); gets(konto[i].strasse); gotoxy(31,4); gets(konto[i].strasse2); gotoxy(31,5); scanf("%d",&konto[i].plz); fflush(stdin); gotoxy(31,6); gets(konto[i].stadt); gotoxy(31,7); scanf("%lf",&konto[i].kontostand); fflush(stdin); normal(); konto[i].kontonummer=knummer; printf("\n\n Nachname: %s\n",konto[i].nname); printf(" Vorname: %s\n",konto[i].vname); printf(" Strasse: %s\n",konto[i].strasse); printf(" Kontostand: %.2lf\n",konto[i].kontostand); printf("Kontonummer: %06d\n\n",konto[i].kontonummer); } /* Ende Datensatz eingeben */ /*************************************************************************/ /* Datensatz KONTO speichern, Parameter: Filehandler und Datensatznummer */ void satz_speichern(FILE *datei1, int i) { fprintf(datei1,"%s\n",konto[i].nname); fprintf(datei1,"%s\n",konto[i].vname); fprintf(datei1,"%s\n",konto[i].strasse); fprintf(datei1,"%.2lf\n",konto[i].kontostand); fprintf(datei1,"%06d\n",konto[i].kontonummer); /*fprintf(datei1,"\n");*/ /* ab in die nächste zeile */ } /* Ende satz_speichern */ /*********************************************************/ /* Datensätze lesen und zuweisen. Parameter: Dateizeiger */ /* Return: anzahl gelesene Sätze */ int satz_lesen(FILE *datei1) { int i=0, /* fortlaufende satznummer des kontos */ t=0, /* nummer des aktuellen zeichens der zeile */ zeilenr=0; /* nummer der gelesenen zeile */ char zeile[80+1]; do /* alle zeilen der datendatei lesen */ { do /* aktuelle zeile lesen */ { zeile[t]=fgetc(datei1); t++; } while(zeile[t-1]!='\n' && t<max_string && !feof(datei 1)); zeilenr++; zeile[t-1]='\0'; /* gelesenes und zugewiesenes CR/LF durch \0 ersetzen * / switch(zeilenr) /* zuweisung zeile->strukturelement */ { case 1: strcpy(konto[i].nname,zeile); break; case 2: strcpy(konto[i].vname,zeile); break; case 3: strcpy(konto[i].strasse,zeile); break; case 4: konto[i].kontostand=atof(zeile); break; case 5: { konto[i].kontonummer=atoi(zeile); i++; zeilenr=0; break; } default: break; } t=0; } while(!feof(datei1)); return i; /* anzahl gelesene sätze */ } /* Ende satz_lesen */ /******************************************************/ /* Datensätze ausgeben, Parameter: höchste satznummer */ void satz_ausgeben(int i) { int zaehler=0; clrscr(); for(zaehler=0;zaehler<i;zaehler++) { printf("\n Nachname: %s\n",konto[zaehler].nname); printf(" Vorname: %s\n",konto[zaehler].vname); printf(" Strasse: %s\n",konto[zaehler].strasse); printf(" Kontostand: %.2lf\n",konto[zaehler].kontostand); printf("Kontonummer: %06d\n\n",konto[zaehler].kontonummer); printf("<Weiter mit Taste>\n"); getch(); } } /**********************/ /* Bildschirm löschen */ void clrscr(void) { printf("\x1B[2J"); fflush(stdout); } /********************************************************/ /* Cursor positionieren, Parameter: X- und Y-Koordinate */ void gotoxy(int x, int y) { printf("\x1B[%i;%iH",y,x); fflush(stdout); } void blau(void) { printf("\x1B[0;37;44m"); fflush(stdout); } void normal(void) { printf("\x1B[0m"); fflush(stdout); }
#include <stdio.h> #include <string.h> void ersetze_zeichen(char *s, char alt, char neu); void main(void) { ersetze_zeichen("Dies ist ein Testtext.",'e','#'); } void ersetze_zeichen(char *s, char alt, char neu) { int i=0; for(i=0;i<strlen(s);i++) if(s[i]==alt) s[i]=neu; printf("%s\n",s); }
#include <stdio.h> #include <conio.h> void main(void) { int x = 0; char satz[100]; printf("\nBitte einen Satz eingeben!.\n"), gets(satz); while(satz[x] != '\0') { switch(satz[x]) { case ',': case '.': case '?': case '!': case ' ': break; default: printf("%c", satz[x]); } x++; } }
Lösung liegt nicht vor
Siehe Lösung im vorherigen Abschnitt
fgetpos / fsetpos / fseek
#include <stdio.h> #include <conio.h> void main(void) { FILE *datei_ptr; int zeichen; datei_ptr = fopen("EINS.TXT", "rt"); if (datei_ptr == NULL) { printf("Datei nicht gefunden!"); /* Zugriff nicht erfolgreich ! */ exit(); } else /* Zugriff erfolgreich */ { zeichen= fgetc(datei_ptr); while (!feof(datei_ptr)) { switch(zeichen) { case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': printf("Es ist ein Kleinbuchstabe!\n"); break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': printf("Es ist ein Großbuchstabe!\n"); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': printf("Es ist eine Ziffer!\n"); break; default : printf("Nichts von alledem !\n"); } zeichen= fgetc(datei_ptr); } fclose(datei_ptr); } }
#include <stdio.h> #include <conio.h> void main(void) { FILE *datei_ptr_1; FILE *datei_ptr_2; unsigned long int position; int erster, zweiter; datei_ptr_1 = fopen("EINS.TXT", "rt"); if (datei_ptr_1 == NULL) { printf("Datei 1 nicht gefunden!"); /* Zugriff1 nicht erfolgreich */ exit(); } else /* Zugriff1 erfolgreich */ { datei_ptr_2 = fopen("ZWEI.TXT", "rt"); if (datei_ptr_2 == NULL) { printf("Datei 2 nicht gefunden!"); /* Zugriff2 nicht erfolgr. */ exit(); } else { position = 1; /* Zugriff2 erfolgreich ! */ erster = fgetc(datei_ptr_1); zweiter= fgetc(datei_ptr_2); while (erster == zweiter && !feof(datei_ptr_1) && !feof(datei_ptr_2)) { position++; erster = fgetc(datei_ptr_1); zweiter= fgetc(datei_ptr_2); } if (erster != zweiter) { printf("\nUnterschied bei %li Zeichen.\a", position); } else { printf("\nVergleich ok!\a"); } fclose(datei_ptr_1); fclose(datei_ptr_2); } } }
Lösung liegt nicht vor
#include <stdio.h> #include <conio.h> void main(void) { FILE *datei_ptr; FILE *datei_ptr_2; int zeichen; datei_ptr_2 = fopen("VIER.TXT","wt"); datei_ptr = fopen("EINS.TXT", "rt"); if (datei_ptr == NULL) { printf("Datei nicht gefunden!"); /* Zugriff nicht erfolgreich ! */ exit(); } else /* Zugriff erfolgreich */ { zeichen= fgetc(datei_ptr); while (!feof(datei_ptr)) { switch(zeichen) { case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': fputc(toupper(zeichen), datei_ptr_2); break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': fputc(tolower(zeichen), datei_ptr_2); break; default : fputc(zeichen, datei_ptr_2); } zeichen= fgetc(datei_ptr); } fclose(datei_ptr); fclose(datei_ptr_2); } }
/* gebu exec */ #include <stdio.h> #include <conio.h> #include <ctype.h> #define MAX 100 FILE *datei_ptr; int x = 0; /* Datensatzzaehler */ int day_of_year = 0; struct datum /* Struktur zur Aufnahme des Systemdatums */ { int jahr; char tag; char monat; }; struct datum *datum_ptr /* Pointer auf die Struktur DATUM */ struct gebu_dat { int tag; int monat; int jahr; }; struct satz { char name[20]; char vorname[15]; struct gebu_dat geb_dat; }; struct satz daten_satz[MAX]; /************************************************************************/ /* Funktion zum Eröffnen einer Datei - Zugriffsart wird übergeben */ /************************************************************************/ int Datei_oeffnen(char *datei_zugriff) { datei_ptr = fopen("GEBU.DAT", datei_zugriff); if (datei_ptr == NULL) { return(0); /* Zugriff nicht erfolgreich ! */ } else { return(1); /* Zugriff erfolgreich ! */ } } /**************************************************************************/ /* Funktion errechnet den Tag des Jahres (z.B.: 134). Parameter sind Tag, */ /* Monat und Jahr eines beliebigen Datums. */ /**************************************************************************/ int day_of_year_errechnen(int r_tag, int r_monat, int r_jahr) { int monat[13]; monat[0] = 0; monat[1] = 31; monat[2] = 28; monat[3] = 31; monat[4] = 30; monat[5] = 31; monat[6] = 30; monat[7] = 31; monat[8] = 31; monat[9] = 30; monat[10] = 31; monat[11] = 30; monat[12] = 31; if ((r_jahr % 4) == 0) monat[2] = 29; for (x=0; x<=((r_monat)-1); x++) { day_of_year += monat[x]; } return(day_of_year += (r_tag)); } /************************************************************************/ /********** Hauptfunktion **********/ /************************************************************************/ void main(void) { /* Vereinbarungsteil */ int oeffnen_ok = 0; /* Boolsche Var. für die Überprüfung */ /* des Datei-Zugriffs */ int alter = 0; /* Wie alt wird er denn nun? */ int geb_day_of_year = 0; /* Sicherungsvariable für Jahrestag */ int merker = 0; /* Jemand in nächster Zeit Gebu ???? */ char dummy = ''; char datei_zugriff[3] = "wt"; /* Verarbeitungsteil */ clrscr(); strcpy(datei_zugriff,"rt"); oeffnen_ok = (Datei_oeffnen(datei_zugriff)); /* oder '...(&datei_zugriff[0]));' */ /* Übergabe der Adresse der ersten */ /* Feldkomponenten */ if (oeffnen_ok == 0) { printf("Datei konnte nicht geöffnet werden!"); exit(0); } else { /* E R S T L E S E N */ fscanf(datei_ptr, "%20s", daten_satz[x].name); fscanf(datei_ptr, "%15s", daten_satz[x].vorname); fscanf(datei_ptr, "%5d", &daten_satz[x].geb_dat.tag); fscanf(datei_ptr, "%5d", &(daten_satz[x].geb_dat.monat)); fscanf(datei_ptr, "%7d", &daten_satz[x].geb_dat.jahr); day_of_year = day_of_year_errechnen(daten_satz[x].geb_dat.tag, daten_satz[x].geb_dat.monat, daten_satz[x].geb_dat.jahr); geb_day_of_year = day_of_year; day_of_year = 0; getdate(datum_ptr); day_of_year = day_of_year_errechnen((*datum_ptr).tag, (int)(*datum_ptr).monat, (int)(*datum_ptr).jahr); if ((geb_day_of_year - day_of_year >= 0) && (geb_day_of_year - day_of_year <= 7)) { printf("\n\t\tAm %02d.%02d.%4d hat\n", daten_satz[x].geb_dat.tag, daten_satz[x].geb_dat.monat, (int)(*datum_ptr).jahr); printf(" %15s", daten_satz[x].vorname); printf(" %-20s\n\t\t Geburtstag. \n", daten_satz[x].name); alter = ((*datum_ptr).jahr - daten_satz[x].geb_dat.jahr); printf("\tDas Geburtstagskind wird %-3d Jahre alt !\n\n", alter); merker = 1; } while ( !feof(datei_ptr) ) { /* N A C H L E S E N */ fscanf(datei_ptr, "%20s", daten_satz[x].name); fscanf(datei_ptr, "%15s", daten_satz[x].vorname); fscanf(datei_ptr, "%5d", &daten_satz[x].geb_dat.tag); fscanf(datei_ptr, "%5d", &(daten_satz[x].geb_dat.monat)); fscanf(datei_ptr, "%7d", &daten_satz[x].geb_dat.jahr); if (feof(datei_ptr)) break; day_of_year = 0; day_of_year = day_of_year_errechnen(daten_satz[x].geb_dat.tag, daten_satz[x].geb_dat.monat, daten_satz[x].geb_dat.jahr); geb_day_of_year = day_of_year; day_of_year = 0; getdate(datum_ptr); day_of_year = day_of_year_errechnen((*datum_ptr).tag, (int)(*datum_ptr).monat, (int)(*datum_ptr).jahr); if ((geb_day_of_year - day_of_year >= 0) && (geb_day_of_year - day_of_year <= 7)) { printf("\n\t\tAm %02d.%02d.%4d hat\n", daten_satz[x].geb_dat.tag, daten_satz[x].geb_dat.monat, (int)(*datum_ptr).jahr); printf(" %15s", daten_satz[x].vorname); printf(" %-20s\n\t\t Geburtstag. \n", daten_satz[x].name); alter = ((*datum_ptr).jahr - daten_satz[x].geb_dat.jahr); printf("\tDas Geburtstagskind wird %-3d Jahre alt !\n\n", alter); merker = 1; } /* of if */ } /* of while */ if (merker == 0) { printf("\n\n\t\tKeine Geburtstage in nächster Zeit !"); } /* of if */ printf("\n\n"); printf("Bitte <ENTER> zum Beenden drücken!"); dummy = getch(); } /* of else */ } /* of MAIN */
Lösung liegt nicht vor
Lösung liegt nicht vor
/* Kodierten Text in Klartext wandeln */ #include <stdio.h> static char out[]="abcdefghijklmnopqrstuvwxyz1234567890"; static char in[]={48,49,50,51,52,53,54,55,116,117,118,119,56,57,97, 98,99,100,101,102,103,104,105,106,107,108,109,110, 111,112,113,114,115,120,121,122}; void main(int argc, char *argv[]) { char zeichen; int i,found; FILE *datei1, *datei2; datei1=fopen(argv[1],"r"); datei2=fopen(argv[2],"w"); do { zeichen=fgetc(datei1); found=0; for(i=0;i<=35;i++) { if(zeichen==in[i]) { found=1; break; } } if (found==1) fputc(out[i],datei2); else fputc(zeichen,datei2); } while(!feof(datei1)); }
/* Klartext in codierten Text wandeln */ #include <stdio.h> static char out[]="abcdefghijklmnopqrstuvwxyz1234567890"; static char in[]={48,49,50,51,52,53,54,55,116,117,118,119,56,57,97, 98,99,100,101,102,103,104,105,106,107,108,109,110, 111,112,113,114,115,120,121,122}; void main(int argc, char *argv[]) { char zeichen; int i,found; FILE *datei1, *datei2; datei1=fopen(argv[1],"r"); datei2=fopen(argv[2],"w"); do { zeichen=fgetc(datei1); found=0; for(i=0;i<=35;i++) { if(zeichen==out[i]) { found=1; break; } } if (found==1) fputc(in[i],datei2); else fputc(zeichen,datei2); } while(!feof(datei1)); }