
#include <stdlib.h>
 /* 2. Schreiben Sie ein Programm, das zu der Datenstruktur Buch mit Autor, Preis
und Seitenzahl wiederholt folgendes Menü anbietet:
- 0 - Ende des Programms,
- 1 - Einlesen eines Buches,
- 2 - Ausgabe aller Bücher,
- 3 - das billigste Buches anzeigen,
- 4 - alle Bücher unter einem bestimmten Preis anzeigen,
- 5 - den Preis des billigsten und des teuersten Buches als Wert liefern.
Zu den Punkten des Menüs (außer 'Ende') sind jeweils Funktionen zu definieren
und aufzurufen!
------------------------------------------------------------------------------*/
struct Bibo_Typ
{  char Autor[15]; float Preis; int Seitenzahl;
};
struct Bibo_Typ einlesen()
{ struct Bibo_Typ lokal; int i;
    printf("\n Autor: "); scanf("%s", &lokal.Autor);
   printf(" Preis: ");   scanf("%f", &lokal.Preis);
   printf(" Seiten: ");  scanf("%i", &lokal.Seitenzahl);
return lokal;}


int main()
{ struct Bibo_Typ Bibo[100],m; int a,menue,i=0;
  do {printf(

  "\n- 0 - Ende des Programms,\n"
"- 1 - Einlesen eines Buches,\n"
"- 2 - Ausgabe aller Bücher,\n"
"- 3 - das billigste Buches anzeigen,\n"
"- 4 - alle Bücher unter einem bestimmten Preis anzeigen,\n"
"- 5 - den Preis des billigsten und des teuersten Buches als Wert liefern.\n" );
scanf("%i",&menue);
if (menue==1) {Bibo[i]=einlesen(); i++;}
if (menue==2) {for (a=0;a<i;a++)  {printf("%-10s     %f     %i",Bibo[i].Autor,Bibo[i].Preis,Bibo[i].Seitenzahl);
//for( a=0; a<i; a++)printf("\n%-10s %8.2f %9i", Bibo[i].Autor, Bibo[i].Preis, Bibo[i].Seitenzahl);


 }                }
if (menue==3) {}
if (menue==4) {}
if (menue==5) {}
}

    while (menue!=0);



      system("PAUSE");
      return 0;
}





/*
* 1. n Messwerte ti (Zeit) und Ui (Spannung) mit ti= 0, 1, ..., n-1 und Ui in
Form von nicht ganzzahligen Zufallszahlen werden zusammen in ein Feld
gespeichert (Funktion 'erfassen').
Das Maximum der Werte von Ui ist zu ermitteln und zusammen mit den zugehörigen
ti Werten auszugeben unter Beachtung der Tatsache, daß das Maximum der Ui
mehrfach auftreten könnte (Funktion 'maxi').
------------------------------------------------------------------------------*/
#include <stdlib.h>
struct mess_typ /* Typdefinition für die Struktur entsprechend der Aufgabe*/
{ int ti;
float ui;
};
void erfassen( int anz, struct mess_typ m[] )
{ int i;
for( i=0; i<anz; i++){ m[i].ti= i; m[i].ui= rand()/3276.7; // %10
printf("%3i ti=%3i, ui=%9.4f\n", i, m[i].ti, m[i].ui);
} }
struct mess_typ maxi( int anz, struct mess_typ m[] )
{ int i;
struct mess_typ max; max= m[0];
for( i=0; i<anz; i++) if( m[i].ui > max.ui) max= m[i];
for( i=0; i<anz; i++) if( m[i].ui == max.ui)
printf("%3i ti=%3i, ui= %f\n", i, m[i].ti, m[i].ui);
return max;
}
int main()
{ struct mess_typ messreihe[1000], m; int n= 50;
erfassen( n, messreihe); printf("\n");
m= maxi( n, messreihe); printf("\n Max= %f\n\n", m.ui);
printf("\n"); system("PAUSE"); return 0;
}

/* 2. Schreiben Sie ein Programm, das zu der Datenstruktur Buch mit Autor, Preis
und Seitenzahl wiederholt folgendes Menü anbietet:
- 0 - Ende des Programms,
- 1 - Einlesen eines Buches,
- 2 - Ausgabe aller Bücher,
- 3 - das billigste Buches anzeigen,
- 4 - alle Bücher unter einem bestimmten Preis anzeigen,
- 5 - den Preis des billigsten und des teuersten Buches als Wert liefern.
Zu den Punkten des Menüs (außer 'Ende') sind jeweils Funktionen zu definieren
und aufzurufen!
------------------------------------------------------------------------------*/
#include <stdlib.h>
struct buch_typ
{ float preis;
char autor[15];
int seiten;
};
struct buch_typ einlesen()
{ struct buch_typ lokal;
printf("\n Autor: "); scanf("%s", &lokal.autor);
printf(" Preis: "); scanf("%f", &lokal.preis);
printf(" Seiten: "); scanf("%i", &lokal.seiten);
return lokal;
}
void tabelle( struct buch_typ b[], int anz)
{ int i; printf("\nAutor Preis Seitenzahl");
for( i=0; i<anz; i++)printf("\n%-10s %8.2f %9i", b[i].autor, b[i].preis, b[i].seiten);
}
void billigstes( struct buch_typ b[], int anz)
{ struct buch_typ lokal; int i; lokal= b[0];
for( i=0; i<anz; i++) if( b[i].preis < lokal.preis) lokal= b[i];
printf("\n Billigstes Buch: ");
printf("\n%-10s %8.2f %9i", lokal.autor, lokal.preis, lokal.seiten);
printf("\n");
}
void unter( struct buch_typ b[], int anz, float p)
{ int i; printf("\nAutor Preis Seitenzahl");
for( i=0; i<anz; i++)if(b[i].preis<p)
printf("\n%-10s %8.2f %9i", b[i].autor, b[i].preis, b[i].seiten);
}
float preisspanne( struct buch_typ b[], int anz, float* max)
{ int i; float min;
*max= min=b[0].preis;
for( i=0; i<anz; i++){ if( b[i].preis < min ) min = b[i].preis;
if( b[i].preis > *max) *max= b[i].preis;
} return min;
}
int main() { struct buch_typ bibo[200]; int menue, anz=0; float min, max, p;
do{ printf("\n 0 - Ende\n 1 - Einlesen\n 2 - Anzeigen\n 3 - Billigstes Buch"
"\n 4 - Buecher unter einem best. Preis\n 5 - Preisspanne "
" :"); scanf("%i", &menue);
switch( menue)
{ case 1: bibo[anz] = einlesen(); anz++; break;
case 2: tabelle( bibo, anz); break;
case 3: billigstes( bibo, anz); break;
case 4: printf(" Unter welchem Preis sollen die Buecher liegen? ");
scanf("%f", &p);
unter( bibo, anz, p); break;
case 5: min= preisspanne( bibo, anz, &max);
printf("\n Die Preisspanne betraegt %.2f bis %.2f: \n",
min, max); break;
default: printf(" Falsche Eingabe\n");
}
}while( menue!=0); return 0;
}

/* 3. Gegeben sei die Datenstruktur Student mit Name, Vorname, BAföG, Geschlecht,
Geb.Tag (mit Tag, Monat und Jahr) und Anschrift (mit Ort, PLZ und Straße).
Formulieren Sie einen Typ entsprechend obiger Datenstruktur sowie eine Variable
für die n Studenten einer Seminargruppe!
Schreiben Sie ein menü-gesteuertes Programm, das geeignete Funktionen enthält
und testet, die
- 1 - einen neuen Studenten eintragen,
- 2 - alle Daten als Tabelle auflisten,
- 3 - den ältesten Studenten ermitteln,
- 4 - das mittlere Einkommen der Studenten ermitteln,
- * - für einen einzulesenden Namen das Einkommen ausgeben.
-----------------------------------------------------------------------------*/
#include <stdlib.h>
struct geb_typ
{ int tag, monat, jahr;
};
struct adr_typ
{ char ort[15], plz[6], str[20];
};
struct studi_typ
{ char name[10], vorname[10]; float baf; char geschl;
struct geb_typ gebtag;
struct adr_typ anschrift;
};
struct studi_typ lies() { struct studi_typ lokal;
printf("\n Name: "); scanf("%s", &lokal.name);
printf(" aus: "); scanf("%s", &lokal.anschrift.ort);
printf(" geboren (Tag): "); scanf("%i", &lokal.gebtag.tag);
printf(" Monat: "); scanf("%i", &lokal.gebtag.monat);
printf(" Jahr: "); scanf("%i", &lokal.gebtag.jahr);
lokal.baf= rand()/32.767;
return lokal;
}
void zeig( int anz, struct studi_typ s[] )
{ int i;
for( i=0; i<anz; i++)printf("\n %s, aus: %s, geb. %i.%i.%i, mit %.2f EUR ",
s[i].name, s[i].anschrift.ort, s[i].gebtag.tag, s[i].gebtag.monat,
s[i].gebtag.jahr, s[i].baf);
printf("\n");
}
void oldi( int anz, struct studi_typ s[] )
{ struct studi_typ lokal; int i; lokal=s[0];
for( i=0; i<anz; i++)
if( s[i].gebtag.jahr < lokal.gebtag.jahr) lokal=s[i];
if( s[i].gebtag.jahr == lokal.gebtag.jahr)
if( s[i].gebtag.monat < lokal.gebtag.monat) lokal=s[i];
if( s[i].gebtag.jahr == lokal.gebtag.jahr)
if( s[i].gebtag.monat == lokal.gebtag.monat)
if( s[i].gebtag.tag < lokal.gebtag.tag) lokal=s[i];
printf("\n Aeltester: %s, aus: %s, geb. %i.%i.%i",
lokal.name, lokal.anschrift.ort, lokal.gebtag.tag, lokal.gebtag.monat,
lokal.gebtag.jahr); printf("\n");
}
void einkommen( int anz, struct studi_typ s[] )
{ int i; struct studi_typ hilf;
printf("\n Zu suchender Name: "); scanf("%s", hilf.name);
for( i=0; i<anz; i++) if( strcmp( s[i].name, hilf.name)==0)
printf("\n sein Einkommen=%.2f EUR\n", s[i].baf);
}
int main()
{ struct studi_typ mtk[100]; int menue, i=0;
do{printf("\n - 1 - einen neuen Studenten eintragen,"
"\n - 2 - alle Daten als Tabelle auflisten,"
"\n - 3 - den aeltesten Studenten ermitteln,"
"\n - 4 - das mittlere Einkommen der Studenten ermitteln,"
"\n - 5 - fuer einen einzulesenden Namen das Einkommen ausgeben. : ");
scanf("%i", &menue);
if( menue==1){ mtk[i]= lies(); i++; }
if( menue==2){ zeig( i, mtk); }
if( menue==3){ oldi( i, mtk); }
if( menue==5) einkommen( i, mtk);
}while( menue!=0);
return 0;
}

/* 4. Eine Firma habe folgende Informationen über jeden Artikel:
Bezeichnung, Preis und Bestand (Anzahl der vorhandenen Artikel).
Schreiben Sie ein Programm, das geeignete Funktionen enthält, die
- 1 - einen neuen Artikel eintragen,
- 2 - alle Daten auflisten und
- 3 - den Gesamtwert aller vorhandenen Artikel ermitteln.
Die Funktionen sind für n Artikel zu testen, n einlesen, n<1000.
-----------------------------------------------------------------------------*/
#include <stdlib.h>
struct a_typ
{ char bez[20];
float preis;
int bestand;
};
void einlesen( struct a_typ a[])
{ printf("\n Artikel eingeben: Bezeichnung: "); scanf("%s", &a->bez );
printf(" Preis: "); scanf("%f", &(*a).preis);
printf(" Bestand: "); scanf("%i", &a->bestand);
}
void tabelle( struct a_typ* a, int n)
{ int i;
printf("\n Bezeichnung Preis Bestand\n");
for(i=0;i<n;i++) printf("%10s %9.2f %9i\n", a[i].bez, a[i].preis, a[i].bestand);
printf("\n");
}
struct a_typ billigster( struct a_typ a[], int n)
{ struct a_typ lokal;
int i;
lokal=a[0]; // Zugriff auf die ganze Struktur

for(i=0;i<n;i++) if( a[i].preis < lokal.preis) lokal= a[i];

return lokal;
}
void gesamt( struct a_typ a[], int n)
{ float wert=0;
int i;
for(i=0;i<n;i++) wert= wert + a[i].preis*a[i].bestand;
printf("\n Gesamtwert: %.2f\n", wert);
}
int main()
{ struct a_typ firma[1000], b; int menue, anz=0;
do{ printf("\n - 1 - neu eintragen\n - 2 - Tabelle\n - 3 - billigsten"
"\n - 4 - Gesamtwert\n - 0 - Ende\t:");
scanf("%i", &menue);
switch( menue)
{ case 1: einlesen( &firma[anz]); anz++; break;
case 2: tabelle( firma, anz); break;
case 3: b= billigster( firma, anz);
printf("\n Billigster: %10s %9.2f %9i\n", b.bez, b.preis, b.bestand);
break;
case 4: gesamt( firma, anz); break;
}
}while( menue!=0);
return 0;
}

/* Definieren Sie folgende Funktionen für natürliche Zahlen und testen Sie sie
solange, bis eine '0' eingegeben wird:
- 1 - ein - Einlesen von zwei natürlichen Zahlen.
- 2 - div - Ausführen der ganzzahligen Division (Enthaltensein und
Rest). Berechnen Sie a div b und b div a.
Hinweis: div() ist eine vordefinierte Funktion und liefert Quotient und
Divisionsrest als Typ struct div_t{ int quot; int rem; } zurück
- 3 - teiler - Ausgeben aller Teiler einer Zahl. Geben Sie damit alle Teiler
von a und alle Teiler von b aus
- 4 - ggt - Berechnen des groessten gemeinsamen Teilers von a und b. Hinweis: div
- 5 - ggt_e - Berechnen des groessten gemeinsamen Teilers von a und b nach dem Euklidischen Algorithmus (ca. 300 v.Chr. aufgestellt: zur Bestimmung des ggt zwischen zwei Zahlen x und y tue folgendes: solange x ungleich y ist, wiederhole; wenn x>y dann ziehe y von x ab und weise das Ergebnis x zu, andernfalls ziehe x von y ab und weise das Ergebnis y zu. Wenn x=y ist, dann ist x bzw. y der ggt.)
- 6 - prim - Zerlegung einer Zahl in Primfaktoren. Für a und b testen!
- 7 - kgv - Berechnen des kleinsten gemeinsamen Vielfachen zweier Zahlen.
------------------------------------------------------------------------------*/
#include <stdlib.h>
void ein( int *a, int *b)
{ do{ printf("\n Zwei natuerliche Zahlen (z.B. 33 und 66): ");
scanf("%i %i", a, b);
if( *a <0) *a=-*a; if(*b<0)*b=-*b;
}while( *a * (*b)<0 );
}
void alle_teiler( int z)
{ int i; div_t s;
printf("\n alle Teiler von %i: ", z);
for( i=1; i<=z; i++)
{ // if(z%i==0) printf("%i, ", i);
s= div( z, i); if( s.rem==0)printf("%i, ", i);
if( z==0) printf("\n alle natuerlichen Zahlen!");
}
}
int main()
{ int m, n; div_t s;
ein( &m,&n); printf("\n m= %i, n= %i", m, n);
s= div( m, n); printf("\n %i / %i = %i Rest %i", m, n, s.quot, s.rem);
s= div( n, m); printf("\n %i / %i = %i Rest %i", n, m, s.quot, s.rem);
alle_teiler( m);
alle_teiler( n);

printf("\n"); system("PAUSE"); return 0;
}
*/
