Sie sind auf Seite 1von 28

Programmierung ADHOC-Beispiele

Ad-Hoc Beispiel Gruppe 7:


Lesen Sie eine Zeichenkette und eine Zahl ein und geben sie die restliche Zeichenkette ab der Stelle
des Buchstaben in einem zweiten Array aus:

#include <iostream>
using namespace std;
int main() {
char arr[81];
char arr2[81];
int a=0;
int n;
int j=0;
cout << "Geben Sie eine Zeichenkette ein: ";
cin >> arr;
cout << "Geben Sie eine natrliche Zahl ein: ";
cin >> n;
for (int i=0;arr[i]!='\0';i++)
{
a=a+1;
}
if (a>n)
{
for (int i=n;arr[i]!='\0';i++)
{
arr2[j]=arr[i];
j=j+1;
}
}
else
{
cout << "Fehler";
}
arr2[j]='\0';
cout <<arr2 << endl;
return 0;

H 4a.3 "Schiffeversenken" schifferl versenken vorlage

#include <iostream>
using namespace std;
int main() {
const int maxz = 10;
const int maxs = 10;
int a,b,xin,yin,z1=0,z2=0,z3=0,z4=0;
char spielfeld [maxs][maxz];
char cx,cy, i='j';
char
*schiff1=0,*schiff12=0,*schiff13=0,*schiff14=0,*schiff15=0,*schiff21=0,*schiff22=0,*schiff23=0,*schi
ff31=0,*schiff32=0,*schiff4=0;
while (i=='j'){

while(z1==1&&z2==1&&z3==1&&z4==1){
z1=0;
z2=0;
z3=0;
z4=0;
}
for (a=0; a<maxs; a++) { // initialisiert das array mit punkten
for (b=0; b<maxz;b++) {
spielfeld [a][b] = '.';
}
}

cout << " 1 2 3 4 5 6 7 8 9 10" << endl; //Gibt das Array in Form einer Tabelle Aus
for (a=0; a<maxz; a++){
cout << (char)('A'+a) << " "; // Die Buchstaben werden nach dem Alphabet geordnet
ausgegeben
for (b=0; b<maxs; b++){
cout << " " << spielfeld[b][a];
}
cout << endl;
}

cout << "Bitte geben Sie die Startkoordinate des Schlachtschiffs ein (zb A1)" << endl << "Das Schiff
wird Horizontal von der eingegebenen Koordinate an gesetzt" << endl;
cin >> cy>> cx;
xin = cx -'1'; // Die Koordinaten werden vom Sichtbaren ins Arraytechnische umgerechnet, also aus
A1 ,wird A0
yin= cy - 'A';
spielfeld [xin][yin] = 'x'; // Die Nachliegenden Felder werden zustzlich mit einem x markiert
spielfeld [xin+1][yin] = 'x';
spielfeld [xin+2][yin] = 'x';
spielfeld [xin+3][yin] = 'x';
spielfeld [xin+4][yin] = 'x';
schiff1=&spielfeld[xin][yin]; //Die Pointer zeigen auf die Startkoordinate und auf die
Folgekoordianten
schiff12=&spielfeld[xin+1][yin];
schiff13=&spielfeld[xin+2][yin];
schiff14=&spielfeld[xin+3][yin];
schiff15=&spielfeld[xin+4][yin];
cout << " 1 2 3 4 5 6 7 8 9 10" << endl;
for (a=0; a<maxz; a++){
cout << (char)('A'+a) << " ";
for (b=0; b<maxs; b++){
cout << " " << spielfeld[b][a];
}
cout << endl;
}
cout << "Bitte geben sie die Startkoordinate vom Kreuzer ein" << endl << "Das Schiff wird
Horizontal von der eingegebenen Koordinate an gesetzt" << endl;
cin >>cy >>cx;
xin=cx- '1';
yin=cy - 'A';
spielfeld [xin][yin]='x';
spielfeld [xin+1][yin]='x';
spielfeld [xin+2][yin]='x';
schiff21=&spielfeld[xin][yin];
schiff22=&spielfeld[xin+1][yin];
schiff23=&spielfeld[xin+2][yin];
cout << " 1 2 3 4 5 6 7 8 9 10" << endl;
for (a=0; a<maxz; a++){
cout << (char)('A'+a) << " ";
for (b=0; b<maxs; b++){
cout << " " << spielfeld[b][a];
}
cout << endl;
}
cout << "Bitte geben Sie die Startkoordinate vom Segelschiff ein" << endl << "Das Schiff wird
Horizontal von der eingegebenen Koordinate an gesetzt" << endl;
cin >>cy >>cx;
xin =cx -'1';
yin= cy - 'A';
spielfeld [xin][yin]='x';
spielfeld [xin+1][yin]='x';
schiff31=&spielfeld[xin][yin];
schiff32=&spielfeld[xin+1][yin];
cout << " 1 2 3 4 5 6 7 8 9 10" << endl;
for (a=0; a<maxz; a++){
cout << (char)('A'+a) << " ";
for (b=0; b<maxs; b++){
cout << " " << spielfeld[b][a];
}
cout << endl;
}
cout << "Bitte geben Sie die Startkoordinate vom Kanu ein" << endl << "Das Schiff wird Horizontal
von der eingegebenen Koordinate an gesetzt" << endl;
cin >> cy >> cx;
xin = cx -'1';
yin = cy - 'A';
spielfeld [xin][yin]= 'x' ;
schiff4=&spielfeld[xin][yin] ;

for (a=0; a<maxs; a++) {


for (b=0; b<maxz;b++) {
spielfeld [a][b] = '.';
}
}
while ((z1&&z2&&z3&&z4)!=1) { //Whrend die Zhler nicht 1 sind wird die Spielschleife
ausgefhrt
cout << " 1 2 3 4 5 6 7 8 9 10" << endl;
for (a=0; a<maxz; a++){
cout << (char)('A'+a) << " ";
for (b=0; b<maxs; b++){
cout << " " << spielfeld[b][a];
}
cout << endl;
}
cout << "Bitte geben Sie die Koordinaten ein (zb. A1)" << endl;
cin >> cy >> cx;
xin = cx -'1';
yin =cy - 'A';

if ((&spielfeld[xin][yin]==schiff1) ||(&spielfeld[xin][yin]==schiff12)||(&spielfeld[xin][yin]==schiff13)
|| (&spielfeld[xin][yin]==schiff14) || (&spielfeld[xin][yin]==schiff15) ||(&spielfeld[xin]
[yin]==schiff21)|| (&spielfeld[xin][yin]==schiff22) ||(&spielfeld[xin][yin]==schiff23)||(&spielfeld[xin]
[yin]==schiff31)||(&spielfeld[xin][yin]==schiff32)||(&spielfeld[xin][yin]==schiff4))
spielfeld[xin][yin]='x'; //Solange die Koordinatenaddresse mit der Addresse eines Pointer
bereinstimmt wird das Feld auf x gesetzt
else
spielfeld[xin][yin]='0';
if (spielfeld[xin][yin]=='x'){
if (*schiff1 && *schiff12 && *schiff13 && *schiff14 && *schiff15 =='x' && z1!=1){
cout << "Versenkt!" << endl;
z1=1;} // Sobald alle zugehrigen Schiffspointer auf x stehen, wird die meldung "Versenkt"
ausgegeben und ein zhler geht auf 1, damit diese Meldung nicht mehr ausgefhrt wird
else
if (*schiff21 && *schiff22 && *schiff23 =='x' && z2!=1){
cout << "Versenkt!" << endl;
z2=1;}
else
if (*schiff31 && *schiff32 =='x' && z3!=1){
cout << "Versenkt!" << endl;
z3=1;}
else
if (*schiff4=='x' &&z4!=1){
cout << "Versenkt!" << endl;
z4=1;}
else
cout << "Treffer!" <<endl;
}
else
cout << "Wasser!" << endl;

}
cout << "Gewonnen!" << endl; // Spielsieg, Programmende
cout << "Programm wiederholen? (j/n)" << endl;
cin >> i;
}
return 0;
}

H4-A3.C
#include <iostream>
#include <string.h>
using namespace std;
int main () {

char j;
cout << "Schreiben Sie ein Programm, das zunchst eine Zeichenkette (max. 80 Zeichen) einliest
und dann immer wieder ein einzelnes Zeichen einliest und die Zeichenkette ausgibt, die entsteht
wenn man das zuletzt eingegebene Zeichen aus der ursprnglichen Zeichenkette entfernt. (Das
Programm soll durch Eingabe eines ! beendet werden.) " << endl;
cout << endl;
do {
char kette[80], zeichen;
int i;

cout << "Bitte eine Zeichenkette (max. 80 Zeichen und ohne Leerzeichen) eingeben: " << endl;
cin >> kette;
cout << endl;

do {
cout << "Bitte geben Sie ein Zeichen ein, '!' bricht das Programm ab: ";
cin >> zeichen;
cout << endl;

if (zeichen == '!') {
break;
}

else {

cout << "Die Zeichenkette sieht ohne das gewhlte Zeichen so aus: ";

for (int i = 0; i < strlen(kette); i++) {


if (kette[i] == zeichen) { cout << ""; }
else { cout << kette[i]; }
}
cout << endl << endl;
}

} while (zeichen != '!');

cout << endl;


cout << endl;
cout << "Wenn Sie das Programm nochmal starten wollen, drcken Sie bitte 'j' und dann Enter.
Wenn nicht, dann bitte 'n' und Enter. ";
cin >> j;
cout << endl;
} while (j == 'j');
return 0;
}

H4-A11.C
#include <iostream>
#include <string.h>
using namespace std;
int main () {

char j;
cout << "Lesen Sie eine Zeichenkette ein und geben Sie, je nach Benutzerwunsch eine kodierte,
bzw. dekodierte Version der Eingabe aus. Verwenden Sie dazu eine einfache Csar-Kodierung. " <<
endl;
cout << endl;
do {
int i;
char kette[50], code, out;

cout << "Bitte eine Zeichenkette (max. 50 Zeichen und ohne Leerzeichen) eingeben: ";
cin >> kette;
cout << endl << "Wollen Sie die Kette kodieren oder dekodieren? (k/d) ";
cin >> code;
cout << endl;

if (code == 'k') {
cout << "Die kodierte Version lautet: ";
for (int i = 0; i<=strlen(kette); i++) {
if (kette[i] == 'z') { out = 'a'; }
else if (kette[i] == 'Z') { out = 'A'; }
else { out = kette[i]+1; }
cout << out;
}
}

else if (code == 'd') {


cout << "Die dekodierte Version lautet: ";
for (int i = 0; i<strlen(kette); i++) {
if (kette[i] == 'a') { out = 'z'; }
else if (kette[i] == 'A') { out = 'Z'; }
else { out = kette[i]-1; }
cout << out;
}
}
cout << endl;
cout << endl;
cout << "Wenn Sie das Programm nochmal starten wollen, drcken Sie bitte 'j' und dann Enter.
Wenn nicht, dann bitte 'n' und Enter. ";
cin >> j;
cout << endl;

} while (j == 'j');
return 0;
}

H4a-4
#include <iostream>
using namespace std;
int main ()
{

const int Breite = 5;


const int Hoehe = 5;

bool belegt[Breite][Hoehe];
bool frei[Breite][Hoehe];

void felder_leeren();
void felder_anzeigen();
void felder_besetzen();
void felder_suchen();
void felder_gewinner();
void felder_legende();

int zaehler = 0;

cout << " ### Willkomen zu Schiffe versenken. Mit einem garantiertem ultimativem Spieleerlebnis
und Spafaktor ### " << endl;
cout << endl;
cout << " Der Spielmodus ist: Single Player; Man kann Felder auswaehlen und dann beschieen "
<< endl;

felder_leeren();
felder_besetzen();
felder_anzeigen();
felder_legende();

do{
felder_suchen();
felder_anzeigen();
}while(zaehler < 5);

felder_gewinner();
cin.get();
cin.get();

void felder_leeren()
{
for(int x=0; x<Breite; x++)
{
for(int y=0; y<Hoehe; y++)
{
belegt [x] [y] = false;
frei [x] [y] = false;
}
}

void felder_anzeigen()
{
zaehler=0;

cout << " Das Spielfeld: \n" << endl;


cout << " 1 2 3 4 5" << endl;

for(int y=0; y<Hoehe; y++)


{
cout << " " << y+1 << " ";
for(int x=0; x<Breite;x++)
{

if(belegt [x] [y]==true)


{
if(frei[x][y]==true)
{
cout << "[X]";
zaehler ++;

if(frei[x][y]==false)
{
cout << "[ ]";
}
}

if(belegt[x][y]==false)
{
if(frei[x][y]==true)
{
cout << "[-]";
}

if(frei[x][y]==false)
{
cout << "[ ]";
}
}

} cout << endl;


}

void felder_besetzen()
{
cout << "Bitte 3 Felder belegen: " << endl;
for(int i=0; i<5; i++)
{
cout << " Feld " << i+1 << " x-Achse: ";
int x, y;
cin >> x;
cout << " Feld " << i+1 << " y-Achse: ";
cin >> y;

if(belegt[x-1][y-1]==true)
{
i--;
}

if(belegt[x-1][y-1]==false)
{
if(x>3) i--;
else if(x<1) i--;
else if(y>3) i--;
else if(y<1) i--;

else
{
belegt[x-1][y-1]=true;
}
}
cin.get();
}
}

void felder_suchen()
{
int los=0;
do{
int xp, yp;
cout << "\nPostion absuchen (x): ";
cin >> xp;
cout << "Position absuchen (y): ";
cin >> yp;

if(frei[xp-1][yp-1] == true)
{
if(xp>3) los=0;
else if(xp<1) los=0;
else if(yp>3) los=0;
else if(yp<1) los=0;

else
{
frei[xp-1][yp-1] = true;
los=1;
}
}

cin.get();
}while(los!=1);
}

void felder_gewinner()
{
if(zaehler==3)
{
cout << "\nGewonnen! " endl;
}
}

void felder_legende()
{
cout << "\n\n [ ] = noch nicht abgesucht " << endl;
cout << " [X] = Treffer " << endl;
cout << " [-] = kein Treffer " << endl;
}

} return 0;
}

Ad-Hoc-BSP 4a Gr.:7
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char a[81];
char b[81];
int pa=0,pb=0, pc=0;
int length;
cout << "1.Feld: ";
cin >> a;
cout << "2.Feld: ";
cin >> b;
length=strlen(a)+strlen(b);
char *c=new char[length];
while (a[pa]!='\0' && a[pb]!='\0')
{
if (a[pa]>b[pb])
{
c[pc]=b[pb];
pc=pc+1;
pb=pb+1;
}
else
{
c[pc]=a[pa];
pc=pc+1;
pa=pa+1;
}
}
for (int i=pa;i!=0;i++)
{
c[pc]=a[pa];
pa=pa+1;
pc=pc+1;
}
for (int i=pb;i!=0;i++)
{
c[pc]=b[pb];
pb=pb+1;
pc=pc+1;
}
c[pc]='\0';
pc=pc+1;
cout << c;
delete [] c;

return 0;
}

ist nur ne kleinigkeit, aber das hat wanek bei mir noch dazugetan:
length=strlen(a)+strlen(b) +1 (wegen dem \0 am ende)

habe mal mein eigene Version erstellt.

#include <iostream>
#include <cstring>

using namespace std;

int main () {

char zKette1[81], zKette2[81];


int pa=0, pb=0, pc=0;

cout<<"Bitte geben Sie die erste Zeichenkette sortiert ein: ";

cin>>zKette1;

cout<<"Bitte geben Sie die zwiete Zeichenkette sortiert ein: ";

cin>>zKette2;
int groesse=strlen(zKette1)+strlen(zKette2)+1;

char *newzKette=new char[groesse]; //groesse ist die Gre der Zeichenkette

while (zKette1[pa]!='\0' && zKette1[pb]!='\0'){

// speichert die einzelnen Buchstaben alphabetisch in die newzKette bis einer bei '\0' ist.

if (zKette1[pa]>zKette2[pb]){
newzKette[pc]=zKette2[pb];
pc=pc+1;
pb=pb+1;

}else
newzKette[pc]=zKette1[pa];
pc=pc+1;
pa=pa+1;
}

if (zKette1[pa]!='\0'){
for (;zKette1[pa]!='\0';pa=pa+1){
newzKette[pc]=zKette1[pa];
pc=pc+1;
}
}

if (zKette2[pb]!='\0'){
for (;zKette2[pb]!='\0';pb=pb+1){
newzKette[pc]=zKette2[pb];
pc=pc+1;
}
}

newzKette[pc]='\0';

cout << newzKette;

delete[] newzKette;

return 0;
}

15.11 Adhoc4a Gruppe 4


// Eingegebenen String nach Gro, Klein und Sonderbuchstaben ordnen.
// Zusatzbeispiel: Buchstaben jedes String nacheinander ausgeben.

#include <iostream>
using namespace std;
int main() {
char in[81];
cin >> in;
int nklein=0, ngross=0,nsonder=0;
for (int i=0; in[i]!='\0'; i++) { // Feststellen der Anzahl von Gro, Klein, Sonderbuchstaben
if (in[i]>='A' && in[i]<='Z')
ngross++;
else if (in[i]>='a' && in[i] <= 'z')
nklein++;
else nsonder++;
}
char *eklein=new char[nklein+1]; // Platz fr Nullzeichen nicht vergessen!
char *egross=new char[ngross+1];
char *esonder=new char[nsonder+1];
int pklein=0, pgross=0, psonder=0;

for (int i=0; in[i]!='\0';i++) { // Eintragen der Chars in die Arrays


if(in[i]>='A' && in[i]<='Z')
egross[pgross++]= in[i]; // heit Wert nach Rechnung erhhen
else if (in[i]>='a' && in[i] <= 'z')
eklein[pklein++]=in[i];
else esonder[psonder++] = in[i];
egross[pgross++]= '\0'; // Nullzeichen setzen
egross[pgross++]= '\0';
egross[pgross++]= '\0';
}
cout << egross << " " << eklein << " " << esonder << endl;

char *erg=new char[nklein+ngross+nsonder+1]; // Zusatzbeispiel


int max = nklein; // Max ermitteln, damit For-Schleife genau so lange luft, bis auch der lngste
String /0 erreicht hat.
if(ngross>max)
max=ngross;
if(nsonder>max)
max=nsonder;
pklein = 0, pgross= 0, psonder= 0;
int zaehler=0;

for(int i=0;i<max; i++) { // Eintragen der Chars, jeden String nacheinander


if(egross[pgross]) //nicht false ... !='\0' geht auch
erg[zaehler++] = egross[pgross++]; // Wenn true, Char in String kopieren und Stelle erhhen.
++ Hier erlaubt da es erst nach bergeben der Werte erhht wird.
if(eklein[pklein])
erg[zaehler++] = eklein[pklein++];
if(esonder[psonder])
erg[zaehler++] = esonder[psonder++];
}
erg[zaehler++] = '\0';
cout << erg << endl;
delete[]erg;
delete[]eklein;
delete[]egross;
delete[]esonder;

return 0;
}

15.11 Adhoc4a Gruppe 3


// Schreiben Sie ein PRogramm, das eine Zeichenkette (maximal 80 Zeichen) einliest und ein
dynamisches Array von ganzen Zahlen (in exakt der erforderlichen Gre) erstellt. Das an jeder
Indexposition die Anzahl enthlt, wie oft das Zeichen an der korrespondierenden Indexposition in
der eingegebenen Zeichenkette vorkommt.
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char arr[80];
cout << "Geben Sie eine Zeichenkette ein: ";
cin >> arr;
int length;
length=strlen(arr);
int *arrzahl= new int[length];
int zaehler;
for (int i=0;i<=length;i++) {
zaehler=0;
for (int j=0;j<=length;j++)
if (arr[i]==arr[j]) zaehler=zaehler+1;
arrzahl[i]=zaehler;
}
for (int a=0;a<length;a++)
cout << arrzahl[a] << " ";
delete []arrzahl;
return 0;
}

// Zusatzangabe Das Programm soll eine (Dynamische in exakt der erforderlichen Gre allozierte)
Zeichenkette erstellen, die anstatt der Zahlen des Ergebnisses die entsprechenden Zeichen so oft
enthlt, wie es der Zahl entspricht. Im obigen dritten Beispiel sollte d er Inhalt der Zeichenkette also
lauten: wweeersddaeeewwddeee

H- Bsp 5.3

#include <iostream>
using namespace std;

int ggt(int a, int b) {


a = a%b;
if (a == 0) { return(b); }
else if (b == 0) { return(a); }
else { return(ggt(b,a)); }
}

int main () {

char restart;

do {
int zahl1, zahl2;

cout << "Dieses Programm rechnet den groessten gemeinsamen Teiler zweier natuerlicher Zahlen
aus. " << endl << endl;
cout << "Bitte geben Sie die erste Zahl ein: ";
cin >> zahl1;
cout << "Bitte geben Sie die zweite Zahl ein: ";
cin >> zahl2;

cout << endl << "Der groesste gemeinsame Teiler ist " << ggt(zahl1, zahl2) << endl << endl;

cout << "Wollen Sie das Programm nochmal starten? (y/n) ";
cin >> restart;
cout << endl << endl;

} while (restart == 'y');

cout << "Bis zum naechsten Mal :)" << endl;

return 0;
}

es sollen aber keine Schleifen verwendet werden! ...hab dazu eine tolle Lsung gefunden:

int ggt(int a,int b){

if (b==0)
return a;

else
return ggt(b, a%b); //Vertauscht durch return ggt(b, ergebnis a) zu ggt(a,b)

}
noch eine lsung:
#include <iostream>
using namespace std;

int f(int a,int b){


int var=0;
if (a>b){
var=a%b;return(a-var)/b;}
else if (a<b){
var=b%a;return(b-var)/a;}
else return a;

int main() {
int a=0,b=0;

cin >>a>>b;
cout<<f(a,b);
}

Adhoc Gr. 5
// Schreiben Sie eine Funktion int dif(int *arr1, * arr 2, int size), die zwei integer-Arrays und deren
Gre (size) als Parameter erhlt und die Differenz der Summe aller Werte in arr1 und der Summe
aller Werte in arr2 berechnet. Verwenden Sie keine Schleifen innerhalb der Funktion.

#include<iostream>
using namespace std;

int dif(int * arr1, int * arr2, int size) // von rechts nach links
{
if(size != 0)
{
int sum = arr1[size-1] - arr2[size-1];
return sum + dif(arr1, arr2, size-1);
}
else
return 0;

int main()
{

int anzahl=0;

cout << "Geben Sie eine Anzahl ein: ";


cin >> anzahl;
int *ein1 = new int[anzahl];
int *ein2 = new int[anzahl];

for(int i=0; i<anzahl;i++)


{

cout << (i+1) << ". Zahl des 1. Arrays: ";


cin >> ein1[i];
cout << endl;
}

for(int i=0; i<anzahl;i++)


{

cout << (i+1) << ". Zahl des 2. Arrays: ";


cin >> ein2[i];
cout << endl;
}

cout << "Ergebnis: " << dif(ein1, ein2, anzahl) << endl;

return 0;
}

Adhoc6 Gruppe 7 21.11

man liest zwei zahlen-felder ein und in einer neuen funktion soll kontrolliert werden ob an einer
stelle die beiden zahlen gleich sind

#include <iostream>
using namespace std;

int cnt(int *arr1, int *arr2, int size)


{
if (size==0)
{
return 0;
}
if (arr1[0]==arr2[0])
{
return 1+cnt(arr1+1,arr2+1,size-1);
}
else return 0+cnt(arr1+1,arr2+1,size-1);
}
int main ()
{
int arr1[]={0,1,2};
int arr2[]={0,1,3};
int size=sizeof(arr1)/sizeof(int);
cout << cnt(arr1,arr2,size) << endl;
return 0;
}

Ad-Hoc 5 - Gruppe 3
#include <iostream>
using namespace std;

int mix(char* str1, char* str2) {

if(str1[0] == str2[0] && str1[0] == '\0') {


return 0;
}
if(str1[0] == str2[0]) {
return 1 + mix(str1+1, str2+1);
}
else {
return 0 + mix(str1+1, str2+1);
}

int main() {

char str1[80], str2[80];


cout << "Str1: ";
cin >> str1;
cout << "Str2: ";
cin >> str2;
cout << mix(str1, str2) << endl;

return 0;
}
Man sollte zwei Strings Zeichen fr Zeichen auf Gleichheit prfen und ausgeben, wieviele Zeichen
gleich sind.

Beispiel: Fr "Hallo" und "Holla" sollte 3 heraus kommen

du warst so wie beim Programm selber schneller wie ich! :P - Hier meine Lsung
// Aufgabe war zu vergleichen, wie oft Str1 und Str2 an der selben Stelle gleich gro sind.

#include <iostream>
using namespace std;
int mix(char *str1, char *str2) {
if (str1[0]=='\0' || str2[0]=='\0') return 0;
if (str1[0]==str2[0]) return (str1[0]==str2[0])+mix(str1+1,str2+1); // anstatt der beiden if's kann man
return (str1[0]==str2[0])+mix(...) schreiben. Da true +1 und false +0 ergibt.
if (str1[0]!=str2[0]) return 0+mix(str1+1,str2+1);
}

int main() {
char str1[80];
char str2[80];
cout << "Geben Sie String1 ein ";
cin >> str1;
cout << "Geben Sie String2 ein ";
cin >> str2;
cout << mix(str1,str2);
return 0;
}

/* Aufgabe 6.1
(+) Ein Tischler hat ein Lager mit Brettern in drei Holzsorten (Buche, Eiche u. Mahagoni). Alle Bretter
haben den selben Querschnitt, sind aber unterschiedlich lang.
Wird ein Brett einer bestimmten Lnge verkauft, so wird, falls die entsprechende Lnge nicht vorrtig
ist, einfach das passende Stck von einem der vorhandenen Bretter abgeschnitten.
Um den Verschnitt nicht allzu gro werden zu lassen, soll dabei immer das krzest mgliche Brett
zersgt werden. Schreiben Sie ein Programm, das dem Tischler hilft, sein Lager zu verwalten.
Folgende Funktionen sind unabdingbar: Erfassung des aktuellen Bestandes, Einkauf von Brettern
beliebiger Lnge,
Verkauf von Brettern beliebiger Lnge (das Programm soll das krzest mgliche Brett automatisch
vorschlagen),
Aufrumen des Lagers (dabei werden alle Bretter, die eine vom Benutzer festzulegende Lnge
unterschreiten, aus dem Lager entfernt).
*/

#include <iostream>
using namespace std;
void lager(int *plager, int &i, int max) { // Pointer auf Array + Referenz von Size... man knnte
auch Adresse &size bergeben und mit int *i arbeiten.
int n;
for(;i<max;i++) {
cout << " Brett (m; 0=Abbruch): ";
cin >> n; // Umweg ber Variable n fr Abbruch mit 0.
if (n!=0)
plager[i]=n;
else return;
}
cout << "Lager voll!" << endl; // Funktion Lager wird auch fr den Einkauf benutzt!
return; // Funktion beendet Lager mit (i)Index+1!
}

void verkauf(int *plager, int &size) {


if (size==0) {
cout << "Lager leer";
return;
}
int laenge;
cout << endl << "Laenge? ";
cin >> laenge;
for (int i=0;i<size;i++) { // Hier i kleiner gleich <=, weil Index um 1 kleiner ist als
Arraysize
if (plager[i]==laenge) {
plager[i]=0;
cout << "Brett mit der exakten Laenge " << laenge << " vorhanden!" << endl;
return;
}
}
int difholz=1000000;
int *pdifholz; // Pointer um am Ende die richtige Stelle ausgeben zu knnen.
for (int i=0;i<size;i++) {
if (plager[i]>laenge) { // Wenn Brett grer als das gesuchte Brett ist,
if(plager[i]-laenge<difholz) { // soll verglichen werden, ob das Brett nher am Wert des
gesuchten Bretts ist, als das bisher in Frage kommende.
difholz=plager[i]-laenge; // Wenn ja, Differenz unter difholz speichern.
pdifholz=plager+i; // und die Stelle dieses Bretts unter pdifholz speichern.
}
}
}
if (difholz==1000000) { // Restbedingung, falls Lnge zu gro ist
cout << "Nur krzeres Holz lagernd!" << endl;
return;
}
else {
cout <<"Keine exakte Laenge vorhanden! Brett mit der Laenge "<< *pdifholz << "
nehmen!" << endl;
*pdifholz=difholz; // Differenz bleibt im Lager
}
return;
}

void aufraeumen(int *plager, int &size) {


int minlaenge;
cout << endl << "Mindestlaenge der Bretter: ";
cin >> minlaenge;
if (size==0) {
cout << endl << "Lager leer";
return;
}
int zaehler=0;
for (int i=0;i<size;i++) {
if(plager[i]>minlaenge) { // Wenns grer ist soll der Wert an die aktuelle Stelle
(Zaehler) kopiert werden.
plager[zaehler]=plager[i];
zaehler++;
}
else plager[i]=0; // Msst ma jetz ned umbedingt machen, da die Werte sowieso
auerhalb unseres Size-Bereich liegen nach der Funktion.
}
size=zaehler+1; // mssma evtl. nu ndern auf +1 falls wir wieder einkaufen
oder lager ndern
cout << "Aufgeraeumt!" << endl;
return;
}

int main() {

for (char w='j';w=='j';w) {


int maxBu;
int maxEi;
int maxMa;
int sizeBu=0; // Wert 0 hier zuweisen, falls wir "Lagerbestand eingeben"
berspringen.
int sizeEi=0;
int sizeMa=0;

cout << "Geben Sie an wieviele Bretter Buchenholz maximal gelagert werden koennen: ";
cin >> maxBu;
cout << "Geben Sie an wieviele Bretter Eichenholz maximal gelagert werden koennen: ";
cin >> maxEi;
cout << "Geben Sie an wieviele Bretter Mahagoniholz maximal gelagert werden koenen: ";
cin >> maxMa;
int *buche= new int[maxBu];
int *eiche= new int[maxEi];
int *mahagoni= new int[maxMa];
for (char w1='j';w1=='j';w1) {
cout << "Was wollen sie tun? (l=Lagerstaende eingeben, e=Einkauf, v=Verkauf, a=Lager
aufraeumen)";
char waehlen;
cin >> waehlen;
if (waehlen=='l')
for (char a='a';a;a) {
cout << endl << "Lagerbestand fuer welche Holzart eingeben? (b=Buche,
e=Eiche,m=Mahagoni,s=Stop) ";
cin >> a;
if (a=='s') break;
if (a=='b') {
cout << "Buche!" << endl;
lager(buche,sizeBu=0,maxBu); // Wert 0 hier zuweisen, falls Lagerbestand
}
if (a=='e') {
cout << "Eiche!" << endl;
lager(eiche,sizeEi=0,maxEi);
}
if (a=='m') {
cout << "Mahagoni!" << endl;
lager(mahagoni,sizeMa=0,maxMa);
}
}
if (waehlen=='e')
for (char a='a';a;a) {
cout << endl << "Einkauf fuer welche Holzart eingeben? (b=Buche,
e=Eiche,m=Mahagoni,s=Stop) ";
cin >> a;
if (a=='s') break;
if (a=='b') {
cout << "Buche!" << endl;
lager(buche,sizeBu,maxBu);
}
if (a=='e') {
cout << "Eiche!" << endl;
lager(eiche,sizeEi,maxEi);
}
if (a=='m') {
cout << "Mahagoni!" << endl;
lager(mahagoni,sizeMa,maxMa);
}
}
if (waehlen=='v')
for (char a='a';a;a) {
cout << endl << "Verkauf fuer welche Holzart eingeben? (b=Buche,
e=Eiche,m=Mahagoni,s=Stop) ";
cin >> a;
if (a=='s') break;
if (a=='b') {
cout << "Buche!" << endl;
verkauf(buche,sizeBu);
}
if (a=='e') {
verkauf(eiche,sizeEi);
cout << "Eiche!" << endl;
}
if (a=='m') {
verkauf(mahagoni,sizeMa);
cout << "Mahagoni!" << endl;
}
}
if (waehlen=='a')
for (char a='a';a;a) {
cout << endl << "Welches Lager aufraeumen? (b=Buche, e=Eiche,m=Mahagoni,s=Stop)
";
cin >> a;
if (a=='s') break;
if (a=='b') {
cout << "Buche!" << endl;
aufraeumen(buche,sizeBu);
}
if (a=='e') {
aufraeumen(eiche,sizeEi);
cout << "Eiche!" << endl;
}
if (a=='m') {
aufraeumen(mahagoni,sizeMa);
cout << "Mahagoni!" << endl;
}
}
cout << endl << "Zurueck zum Hauptmenue? (j/n) ";
cin >> w1;
}
cout << endl << "Programm neu starten? (j/n) ";
cin >> w;
}
return 0;
}

/*--> Aktueller Bestand, Int Arrays fr alle 3 Sorten + lagerfkt + Size Speichern --- done
--> Einkauf --> Arrays erweitern (evtl. ber eine Einkaufsfunktion) --- done
--> Verkauf --> Wenn eines genau passt das nehmen --> wenns nicht genau vorhanden ist, das
krzeste das lnger ist.
--> Aufrumen des Lagers
*/

Aufgabe 6.3

#include <iostream>
using namespace std;

const int index=300;


const int len=40;
char interpret[index][len];
char album[index][len];
char stil[index][len];

bool belegt[index]={false};

void neu()
{
char neuinterpret[len];
char neualbum[len];
char neustil[len];

cout << "Geben Sie den Interpreten ein: ";


cin >> neuinterpret;
cout << "Geben Sie das Album ein: ";
cin >> neualbum;
cout << "Geben Sie den Stil ein: ";
cin >> neustil;

for (int i=0;i<index;i++)


{
if (!belegt[i])
{

for (int j=0;j<len;j++)


{
interpret[i][j]=neuinterpret[j];
album[i][j]=neualbum[j];
stil[i][j]=neustil[j];
}
belegt[i]=true;
cout <<endl<< "Dieser Eintrag wurde an der Indexstelle " << i << " gespeichert."<<endl<<endl;
break;
}
}
}

void anzeigen()
{
cout << "In ihrer CD-Datenbank befinden sich folgende Eintraege: "<<endl<<endl;
for (int i=0;i<index;i++)
{
if (belegt[i])
{
cout << "* "<< i << " " << interpret[i] << " - " << album[i] << " (" << stil[i] << ")"<<endl;
}
}
}

void bearbeiten()
{
int edit;
int select;
bool a=true;
cout << "Welchen Eintrag wollen Sie bearbeiten (Indexnummer eingeben)? ";
cin >> edit;
cout <<endl;

if (!belegt[edit]) cout << "An dieser Stelle befindet sich kein Eintrag! ";
else
{
cout << "Der gewaehlte Eintrag sieht wie folgt aus: "<<endl;
do
{
cout << "* "<< edit << " " << interpret[edit] << " - " << album[edit] << " (" << stil[edit] << ")"<<endl;
cout <<endl<< "Welchen Eintrag wollen Sie aendern? "<<endl;
cout << "(1) Interpret"<<endl;
cout << "(2) Album" <<endl;
cout << "(3) Stil" <<endl;
cout << "(4) Ich will doch nichts aendern bzw. ich bin fertig! " <<endl<<endl;
cin >> select;

switch(select)
{
case 1: cout << "Geben Sie den neuen Interpreten ein: "; cin >> interpret[edit];break;
case 2: cout << "Geben Sie das neue Album ein: "; cin >> album[edit];break;
case 3: cout << "Geben Sie den neuen Stil ein: "; cin >> stil[edit];break;
case 4: a=false; break;
default: cout << "Falsche Eingabe!"; break;
}
}while (a);
}
}

void loeschen()
{
int edit;
cout << "Welchen Eintrag wollen Sie loeschen (Indexnummer eingeben) ? ";
cin >> edit;
for (int i=0;i<len;i++)
{
interpret[edit][i]='\0';
album[edit][i]='\0';
stil[edit][i]='\0';
}
belegt[edit]=false;
cout << "Der Eintrag an der Indexstelle " << edit << " wurde geloescht" <<endl;
}

int sucheni()
{
char suchen[len];
bool b=true;
cout << "Geben Sie einen Suchbegriff ein: "; cin >> suchen;
for (int i=0;belegt[i];i++)
{
for (int j=0;interpret[j]!='\0' && suchen[j]!='\0';j++)
{
if (interpret[i][j]==suchen[j]) b=true;
else b=false; break;
}
if (b)
{
cout << "Ihre Suche ergab folgendes Ergebnisse: "<<endl;
cout << "* "<< i << " " << interpret[i] << " - " << album[i] << " (" << stil[i] << ")"<<endl; return 0;
}
else cout << "Ihre Suche ergab keine Ergebnisse"<<endl; return 0;
}

int suchena()
{
char suchen[len];
bool b=true;
cout << "Geben Sie einen Suchbegriff ein: "; cin >> suchen;
for (int i=0;belegt[i];i++)
{
for (int j=0;album[j]!='\0' && suchen[j]!='\0';j++)
{
if (album[i][j]==suchen[j]) b=true;
else b=false; break;
}
if (b)
{
cout << "Ihre Suche ergab folgendes Ergebnisse: "<<endl;
cout << "* "<< i << " " << interpret[i] << " - " << album[i] << " (" << stil[i] << ")"<<endl;return 0;
}
else cout << "Ihre Suche ergab keine Ergebnisse"<<endl; return 0;
}
}

int suchens()
{
char suchen[len];
bool b=true;
cout << "Geben Sie einen Suchbegriff ein: "; cin >> suchen;
for (int i=0;belegt[i];i++)
{
for (int j=0;stil[j]!='\0' && suchen[j]!='\0';j++)
{
if (stil[i][j]==suchen[j]) b=true;
else b=false; break;
}
if (b)
{
cout << "Ihre Suche ergab folgendes Ergebnisse: "<<endl;
cout << "* "<< i << " " << interpret[i] << " - " << album[i] << " (" << stil[i] << ")"<<endl; return 0;
}
else cout << "Ihre Suche ergab keine Ergebnisse"<<endl; return 0;
}
}

void suchen()
{
int select;
cout << "Nach was wollen Sie suchen? "<<endl;
cout << "*(1) Interpret"<<endl;
cout << "*(2) Album"<<endl;
cout << "*(3) Stil"<<endl;
cout << "*(4) Ich will doch nichts suchen bzw. ich bin fertig! "<<endl;
cin >>select;

switch(select)
{
case 1: sucheni();break;
case 2: suchena();break;
case 3: suchens();break;
default: cout << "Falsche Eingabe"<<endl;break;
}
}

int main()
{
bool a=true;
while(a)
{
int wahl;
cout << "------------------------------------------------"<<endl<<endl;
cout << "Willkommen bei Ihrer persoenlichen CD-Datenbank! " <<endl<<endl;
cout << "Was wollen Sie tun? "<<endl;
cout << "*(1) Neuen Eintrag erstellen* " <<endl;
cout << "*(2) Alle Eintraege anzeigen* " <<endl;
cout << "*(3) Eintrag bearbeiten* " <<endl;
cout << "*(4) Eintrag loeschen* " <<endl;
cout << "*(5) Eintrag suchen* " <<endl;
cout << "*(6) Programm beenden* " <<endl<<endl;
cin >> wahl;

switch (wahl)
{
case 1: neu(); break;
case 2: anzeigen(); break;
case 3: bearbeiten(); break;
case 4: loeschen(); break;
case 5: suchen();break;
case 6: a=false; break;
default: cout << "Falsche Eingabe "<<endl; break;
}
}
return 0;
}
(funktioniert noch nicht 100%)

Adhoc 6 Gruppe 7

/*Zahl einlesen, zwei nebeneinander stehende Ziffern multiplizieren und die Summe der Produkte
ausgeben. z.B: Eingabe: 1234 - Ausgabe: 14 (da 1*2=2 + 3*4=12)
Erweiterung(hier nicht enthalten): das ganze mit einer Schleife in der Funktion schreiben.*/

#include <iostream>
using namespace std;

int f(int z)
{
if (z==0)
{
return 0;
}
else
{
return f(z/100)+(z%10)*(z/10%10);
}
}

int main ()
{

int z;
cin >> z;
cout << f(z);

return 0;
}