Array < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 13:15 So 16.12.2012 | Autor: | tiger1 |
Aufgabe | Hallo ich habe gerade probleme bei einer Aufgabe:
Funktion 1 mittels Iteration: input(n,a)
Es sollen die Elemente des Arrays von Tastatur eingelesen werden.
Funktion 2 mittels Iteration: output(n,a)
Es sollen die Elemente des Arrays am Bildschirm formatiert angezeigt werden.
Funktion 3 mittels Iteration: copy(a, anfang, anzahl, b, ziel)
Universelle Kopierfunktion für Arrays
Es soll ein Abschnitt des Arrays a ( anzahl Elemente, beginnend mit dem Index anfang) in das
Array b kopiert werden ab dem Index ziel. Beispiel: a: 1 4 6 8 2 9 b: 1 0 2 3 4 5 6
Ergebnis von copy(a,1,3,b,2) b: 1 0 4 6 8 5 6
Hinweis: Für den Speicherplatz ist die aufrufende Funktion verantwortlich.
Funktion 4 rekursiv: mischen(m,a,n,b,c)
Es sollen die Elemente zweier aufsteigend sortierter Arrays a (m Elemente) und b (n Elemente)
zusammengemischt und in einem Array c aufsteigend sortiert gespeichert werden.
Beispiel: a 1 4 5 6 9 b 2 4 11 Ergebnis in c 1 2 4 4 5 6 9 11.
Dies soll wie folgt rekursiv programmiert werden.
Falls a keine Elemente enthält: b mittels copy nach c kopieren und man ist fertig.
Falls b keine Elemente enthält: a mittels copy nach c kopieren und man ist fertig.
Ansonsten ist das Maximum aller Elemente von a und b bestimmen .
Dies ist a[m-1] oder b[n-1], da beide Arrays sortiert sind.
Ist das Maximum a[m-1] dann
Kopiere a[m-1] ans Ende von c und mische die restlichen m-1 Elemente von a und n Elemente von b
nach c. Dies erledigt der (rekursive) Aufruf von mischen(m-1,a,n,b,c)
Ist das Maximum b[n-1] dann analog b[n-1] kopieren etc.
Beispiel für einen Zwischenschritt, wobei bereits die 3 Elemente 6 9 11 nach c kopiert wurden:
a 1 4 5 6 9 b 2 4 11 und aktuell in c - - - - - 6 9 11.
Das Maximum der verbliebenen Elemente von a und b ist a[2]=5. Es wird nach c kopiert
a 1 4 5 6 9 b 2 4 11 Ergebnis in c .- - - - 5 6 9 11.
Dann ist nur noch der Rest von a: 1 4 und der Rest von b: 2 4 in die ersten 4 Elemente von c zu
mischen mittels eines rekursiven Aufrufs.
Ich hab mein Programm so stehen:
#include <iostream>
#include <iomanip>
#include "fkt_PROTO.h"
using namespace std;
int main()
{
char auswahl;
int anzahl;
const int index=20;
double inputRAY[index];
cout << "Hi was geht [mm] \n"
[/mm]
<< "ich steh auf dummy [mm] texte.\n"
[/mm]
<< "A. Arraygroesse festlegen(folgt [mm] B).\n"
[/mm]
<< "B. Was geht ab Array [mm] eingabe.\n"
[/mm]
<< "C. Gib ma was [mm] aus.\n"
[/mm]
<< "D. [mm] Kopieren.\n"
[/mm]
<< "E. Misch [mm] .\n";
[/mm]
cin >> auswahl;
switch (auswahl)
{
case 'a':
case 'A':
cout << "Wie groß soll dein Array [mm] sein?\n";
[/mm]
cin >> anzahl;
case 'B':
case 'b':
input(inputRAY,index,anzahl);
cout << "eingabe [mm] abgeschlossen\n\n";
[/mm]
cin.get();
break;
case 'C':
case 'c':
cout << "Dein Array soll ausgegeben werden? [mm] ...\n";
[/mm]
output(inputRAY, anzahl);
cout << "Zufrieden [mm] ??\n";
[/mm]
}
return (0);
}
#include <iostream>
#include <iomanip>
using namespace std;
int output(double inputRAY[],int anzahl)
{
for (int zaehler=0; zaehler<anzahl; zaehler++)
{
cout << "Was geht ab an der stelle " << zaehler << endl
<< "im Array befindet sich die " << zaehler+1 << ". nämlich die:" <<endl
<< inputRAY[zaehler];
}
return (0);
}
double input(double array[], int, int);
double output(double array[], int);
Aber irgendwie scheint das Programm nicht zu funktionieren.
Ich denke es liegt am outpunkt .
ABer ich komme nicht auf den Fehler .
Bitte um Hilfe. |
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 18:22 So 16.12.2012 | Autor: | link963 |
Hallo Tiger!
Was genau funktioniert nicht?
Grüße link963
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 18:33 So 16.12.2012 | Autor: | link963 |
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
> Ich hab mein Programm so stehen:
>
> #include <iostream>
> #include <iomanip>
> #include "fkt_PROTO.h"
>
> using namespace std;
>
>
> int main()
> {
> char auswahl;
> int anzahl;
> const int index=20;
> double inputRAY[index];
>
> cout << "Hi was geht [mm]\n"[/mm]
> << "ich steh auf dummy [mm]texte.\n"[/mm]
> << "A. Arraygroesse festlegen(folgt [mm]B).\n"[/mm]
> << "B. Was geht ab Array [mm]eingabe.\n"[/mm]
> << "C. Gib ma was [mm]aus.\n"[/mm]
> << "D. [mm]Kopieren.\n"[/mm]
> << "E. Misch [mm].\n";[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
> cin >> auswahl;
>
> switch (auswahl)
> {
> case 'a':
> case 'A':
> cout << "Wie groß soll dein Array [mm]sein?\n";[/mm]
> cin >> anzahl;
>
> case 'B':
> case 'b':
> input(inputRAY,index,anzahl);
Hier möchtest du eine Funktion ausführen, die du aber nicht geschrieben hast ?
> cout << "eingabe [mm]abgeschlossen\n\n";[/mm]
> cin.get();
> break;
>
> case 'C':
> case 'c':
> cout << "Dein Array soll ausgegeben werden?
> [mm]...\n";[/mm]
> output(inputRAY, anzahl);
> cout << "Zufrieden [mm]??\n";[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
>
> }
>
> return (0);
> }
>
>
> #include <iostream>
> #include <iomanip>
>
> using namespace std;
>
> int output(double inputRAY[],int anzahl)
Hier hast du int output()...
> {
> for (int zaehler=0; zaehler<anzahl; zaehler++)
> {
> cout << "Was geht ab an der stelle " << zaehler <<
> endl
> << "im Array befindet sich die " << zaehler+1 <<
> ". nämlich die:" <<endl
> << inputRAY[zaehler];
> }
>
> return (0);
> }
>
> double input(double array[], int, int);
> double output(double array[], int);
... und hier hast du double output().
>
>
> Aber irgendwie scheint das Programm nicht zu
> funktionieren.
> Ich denke es liegt am outpunkt .
>
> ABer ich komme nicht auf den Fehler .
>
> Bitte um Hilfe.
> Ich habe diese Frage in keinem Forum auf anderen
> Internetseiten gestellt.
Grüße link963
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 23:07 So 16.12.2012 | Autor: | tiger1 |
Mein Programm sieht jetzt so aus:
#include <iostream>
#include <iomanip>
using namespace std;
double input(double array[], int, int);
double output(double array[], int);
int main()
{
char auswahl;
int anzahl;
const int index=20;
double inputRAY[index];
cout << "Praktikum 9 was geht [mm] ab\n"
[/mm]
<< "ich steh auf dummy [mm] texte.\n"
[/mm]
<< "A. Arraygroesse festlegen(folgt [mm] B).\n"
[/mm]
<< "B. Was geht ab Array [mm] eingabe.\n"
[/mm]
<< "C. Gib ma was [mm] aus.\n"
[/mm]
<< "D. Kopier mal [mm] digga.\n"
[/mm]
<< "E. Misch mal [mm] digga.\n";
[/mm]
cin >> auswahl;
switch (auswahl)
{
case 'a':
case 'A':
cout << "Wie groß soll dein Array [mm] sein?\n";
[/mm]
cin >> anzahl;
case 'B':
case 'b':
input(inputRAY,index,anzahl);
cout << "eingabe [mm] abgeschlossen\n\n";
[/mm]
cin.get();
break;
case 'C':
case 'c':
cout << "Dein Array soll ausgegeben werden? [mm] ...\n";
[/mm]
output(inputRAY, anzahl);
cout << "Zufrieden [mm] ?\n";
[/mm]
}
return (0);
}
Die Fehlermeldung , die ich jetzt bekomme sieht so aus:
Die Fehlermeldung sieht so aus:
undefined reference to `input(double*, int, int)'
Weiss du wie ich das korrigieren kann?
Und kannst du mir erklären wie ich den rekursiven Aufgabenteil lösen kann?
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 07:44 Mo 17.12.2012 | Autor: | link963 |
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
> Mein Programm sieht jetzt so aus:
>
> #include <iostream>
> #include <iomanip>
>
>
> using namespace std;
>
> double input(double array[], int, int);
> double output(double array[], int);
> int main()
> {
> char auswahl;
> int anzahl;
> const int index=20;
> double inputRAY[index];
>
> cout << "Praktikum 9 was geht [mm]ab\n"[/mm]
> << "ich steh auf dummy [mm]texte.\n"[/mm]
> << "A. Arraygroesse festlegen(folgt [mm]B).\n"[/mm]
> << "B. Was geht ab Array [mm]eingabe.\n"[/mm]
> << "C. Gib ma was [mm]aus.\n"[/mm]
> << "D. Kopier mal [mm]digga.\n"[/mm]
> << "E. Misch mal [mm]digga.\n";[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
> cin >> auswahl;
>
> switch (auswahl)
> {
> case 'a':
> case 'A':
> cout << "Wie groß soll dein Array [mm]sein?\n";[/mm]
> cin >> anzahl;
>
> case 'B':
> case 'b':
> input(inputRAY,index,anzahl);
> cout << "eingabe [mm]abgeschlossen\n\n";[/mm]
> cin.get();
> break;
>
> case 'C':
> case 'c':
> cout << "Dein Array soll ausgegeben werden?
> [mm]...\n";[/mm]
> output(inputRAY, anzahl);
> cout << "Zufrieden [mm]?\n";[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
>
> }
> return (0);
> }
>
> Die Fehlermeldung , die ich jetzt bekomme sieht so aus:
>
> Die Fehlermeldung sieht so aus:
>
> undefined reference to 'input(double*, int, int)'
Das habe ich dir im letzten Beitrag noch geschrieben. Du möchtest eine Funktion ausführen, die du zwar deklariert, aber nicht definiert hast.
>
> Weiss du wie ich das korrigieren kann?
Definiere sie, also:
double input() { ... } .
>
> Und kannst du mir erklären wie ich den rekursiven
> Aufgabenteil lösen kann?
Schreibe erstmal deine Funktion für einen Mischvorgang. Also lass das Maximum bestimmen und es nach c kopieren. Dann schreibst du einen Funktionsaufruf auf die Funktion in der Funktion. Nur mit einem neuen Parameter, der abhängig davon ist, wo das Maximum war. Also
mischen(m-1,a,n,b,c); oder
mischen(m,a,n-1,b,c) ; .
>
Liebe Grüße
link963
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 01:22 Di 18.12.2012 | Autor: | tiger1 |
Kannst du mir einen kleinen tipp geben wie ich das Maximum bestimmen kann?
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 23:52 Di 18.12.2012 | Autor: | tiger1 |
Mein Programm sieht jetzt so aus :
#include <iostream>
#include <iomanip>
using namespace std;
double output(double array[], int);
int main()
{
char auswahl;
int anzahl;
const int index=20;
double inputRAY[index];
cout << " was geht [mm] ab\n"
[/mm]
<< "ich steh auf dummy [mm] texte.\n"
[/mm]
<< "A. Arraygroesse festlegen(folgt [mm] B).\n"
[/mm]
<< "B. Was geht ab Array [mm] eingabe.\n"
[/mm]
<< "C. Gib ma was [mm] aus.\n"
[/mm]
<< "D. Kopier mal [mm] digga.\n"
[/mm]
<< "E. Misch mal [mm] digga.\n";
[/mm]
cin >> auswahl;
switch (auswahl)
{
case 'a':
case 'A':
cout << "Wie groß soll dein Array [mm] sein?\n";
[/mm]
cin >> anzahl;
case 'B':
case 'b':
input(inputRAY,index,anzahl);
cout << "eingabe [mm] abgeschlossen\n\n";
[/mm]
cin.get();
break;
case 'C':
case 'c':
cout << "Dein Array soll ausgegeben werden? [mm] \n";
[/mm]
output(inputRAY, anzahl);
cout << "Zufrieden [mm] ??\n";
[/mm]
case 'D':
case 'd':
using std::end;
using std::begin;
std::vector<int> a{1,4,6,8,2,9},
b{1,0,2,3,4,5,6};
// Anfang Ende Wohin
std::copy( begin(a)+1, begin(a)+3+1, begin(a)+2 ); // Das +1 bei Ende, weil [Anfang,Ende)
// Anfang Ende Stream-Iterator // Auf die Standardausgabe, getrennt mit ", "
std::copy( begin(b), end(b), std::ostream_iterator<int>(std::cout, ", "));
}
return (0);
}
double output(double inputRAY[],int anzahl)
{
for (int zaehler=0; zaehler<anzahl; zaehler++)
{
cout << "Was geht ab digga an der stelle " << zaehler << endl
<< "im Array befindet sich die " << zaehler+1 << ". Zahl nämlich die:" <<endl
<< inputRAY[zaehler]<< endl << endl;
}
return (0);
}
Ich hoffe das es jemand korrigiert?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 00:20 Fr 21.12.2012 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 02:20 Do 20.12.2012 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|