// Übung 4 - Aufgabe C (dyanmisches Array einer Struktur: dynamische Daten darin) // g++ -Wno-deprecated -Wall u4C.cc // icc -ansi -w2 -Wall u4C.cc #include #include // setw #include // strcpy, strlen #include // DBL_MAX int main() { struct Umsatz { unsigned int blz; // Bankleitzahl unsigned long long int knr; // Kontonummer char *zweck; // Zweck (pointer -> dynam. Feld) double geld; // Umsatz in Euro (Vorzeichen!!) }; const int TMP_LENGTH = 100; char tmp[TMP_LENGTH]; // String fuer temporaere Daten const char suche[] = "USI"; // Suchstring int nn, // Anzahl der Umsaetze imin, // Index fuer min. Ueberweisung i,lt; double dmin, betr; // Min. Zahlungsverpflichtung, Geldbetrag Umsatz *kn; // dynamisches Feld aller Umsaetze // Daten einlesen und Speicher allokieren cout << endl << "Anzahl der Datensaetze: "; cin >> nn; kn = new Umsatz[nn]; // Speicher fuer Umsaetze allokieren for ( i = 0; i < nn; i++) { cout << endl; cout << " blz = "; cin >> kn[i].blz; cout << " Kontonr. = "; cin >> kn[i].knr; // Nutze setw() zur Eingabeabsicherung cout << " Zweck = "; cin >> setw(TMP_LENGTH) >> tmp; // Hier nur auf temp. Variable cout << " Geld = "; cin >> kn[i].geld; lt = strlen(tmp)+1; // Speicherlaenge fuer Zweck kn[i].zweck = new char [lt]; // Speicher fuer Zweck allokieren strcpy(kn[i].zweck, tmp); // und Daten auf Zweck kopieren } cout << endl << endl << endl; // Bestimme die minimale Zahlungsverpflichtung (negativ!) - merke den Index dafuer // Gleichzeitig Ausgabe aller Kontenbewegungen mit "USI" im Zweck imin = -1; dmin = DBL_MAX; for( i = 0; i < nn; i++) { if (kn[i].geld < 0.0) // Zehlungsverpflichtungen sind negativ { betr = -kn[i].geld; // Betrag der Zahlungsverpflichtung if ( dmin > betr ) // kleinster Betrag gesucht { dmin = betr; imin = i; } } // Ueberweisungen von/zu USI if ( strstr(kn[i].zweck , suche) !=0) // "USI" in Zweck enthalten { cout << kn[i].zweck << " " << kn[i].geld << " Euro" <