C++ array weitergeben in eine andere funktion wie?

Tima

Newbie
Registriert
Mai 2009
Beiträge
3
Hallo leute

Ich arbeite gerade an einem Programm wo ich Arrays von einer Funktion in eine andere weiter geben muss.

Das Programm sieht so aus :
Code:
#include <stdio.h>
#include "conioex.h"
#include "conioex.c"
#include <string.h>

int eingeben()
{
	int t=0, z[20], p=0;
    
	
	printf("Wieviele Zahlen wollen sie eingeben\n");
	scanf("%i", &t);
	for(p=0;p<t;p++)
	{
	printf("Bitte geben sie die Zahlen ein\n");
	scanf("%s", &z[p]);
	}
	return 0;
}

void bubblesort()
{
 
    
	
	 

}

void ausgeben()
{ 
   
}








void main()

{
	int x;
	do
	{
    
    

	printf("***Menu***\n\n");
	printf("1. Zahlen eingeben\n");
	printf("2. Bubble sort\n");
	printf("3. Sortiert Ausgeben\n");
	printf("4. Beenden\n");
    scanf("%i", &x);


	if(x==1)
	{
		eingeben();
	}

	if(x==2)
	{
		bubblesort();
	}
	
	if(x==3)
    {
		ausgeben();
	}
    
	
       
}while(x !=4);
}

Ich möchte das z[20] in der funktion int eingeben() in die Funktion void bubblesort() bringen.
Da wir keine globalen variablen benutzen dürfen habe ich keine Ahnung wie ich dies machen soll. Könnte mir einer eventuell weiterhelfen.

MfG
 
Zuletzt bearbeitet von einem Moderator: (Aus QUOTE wurde CODE. Bitte merken!)
Hallo,

ich weiß nicht wie weit ihr schon seid und was ihr dürft (genaugenommen muss ich auch annehmen, daß es sich um C++ handelt )

du kannst z.B. dynamisch Speicher reservieren:

int *feld = new int[20];

im Zeiger feld steht dann die Adresse auf deinen Speicher; diesen Zeiger kannst du als Parameter an Funktionen übergeben.
Den benutzt man dann auch ein wenig anders.
Wenn du nach Pointer (engl. für Zeiger) googelst, findest du auch jede Menge Material. Das ist besser als wenn ich jetzt was falsches zusammen-code. ;)

Mfg
 
Zuletzt bearbeitet:
Danke für die Antwort nur hab ich keine ahnung was int*feld ist :/
kannst du mir das evtl in mein programmcode einbinden so als beispiel?
 
was newheiland geschrieben hat ist nicht fasch. aber geht an deiner frage vorbei und ist auch nicht nötig!

antwort auf deine frage ist:

int eingeben( int *a ) { //alternative ginge hier acuh: int eingeben( int a[] ) , oder wenn du das array immer auf größe 20 beschränken willst: int eingabe( int a[20] )
// mach mit a was du willst.
}

und aufrufen tust du es mit:
eingabe(z);
 
Ich bin ein wenig aus der Übung, was C++ eingeht. Aber hier ein paar Anhaltspunkte.

Code:
int eingeben()
{
int t=0, z[20], p=0;


printf("Wieviele Zahlen wollen sie eingeben\n");
scanf("%i", &t);
for(p=0;p<t;p++)
{
printf("Bitte geben sie die Zahlen ein\n");
scanf("%s", &z[p]);
}
return 0;
}

Du legst ein Array von 20 int-Elementen, dann fragst du "Wie viele Zahlen die eingeben wollen".
Das geht doch schief oder? Das heißt entweder du sagst, man sollte nicht mehr als 20 Zahlen eingeben, oder du nimmst den Vorschlag von newHeilandV2.4 an, und legts ein dynamischen Array an. Etwa
int *feld = new int[t];
Egal, welche Variante du nutzt, es ist immer wichtig, die Eingaben von Benutzer zu überprüfen. Man kann z.B. auch 100 eingeben, dann beim festen array z[100]? Bei dynamischen, was passiert, wenn man 1 000 000 eingibt? Und wer sagt überhaupt, dass man nur Zahlen eingeben muss? Wie wärs mit Buchstaben oder Sonderzeichen?
 
Zuletzt bearbeitet von einem Moderator: (Aus QUOTE wurde CODE. Bitte merken!)
@johnny 456 das ziel des programmes war es einen bubblesort zu machen der die zahlen sortiert nach größe. Ich hätte das z auch auf 100000 setzen können aber soviel wird niemadn eingeben
@ dese danke das hat mir weiter geholfen
 
Also dein int Array z[20] greift auf die Daten über Zeiger zu z = *(z+i)

Hier ein Beispiel, wie man ein Array übergeben und auch die Daten ändern kann, obwohl z eine Lokale Variable (Main()) ist.

Code:
void Fkt_1(int* array){
  for(int i=0; i<20; i++)
    array[i]+=5;
}

void main(){
  int z[20];
  blabla z mit werten füllen
  Fkt_1(z);
  blabla z wird ausgegeben
}

Also das Prog füllt z mit Werten, gibt den Zeiger an die Funktion weiter, mit dem Zeiger kann man auf die Daten des Arrays zugreifen. Es werden zu jedem Wert 5 addiert und dann werden die z Werte ausgegeben.

Du solltest dich mal mit Zeigern näher auseinander setzten, wenn du was mit C/C++ machen willst.
 
Zuletzt bearbeitet:
Beispielcode mit c++ und mit rippelsort... aber vergleichbar

Code:
#include <conio.h> //getch();
#include <iostream>

using namespace std;

template<class T>
void ripple(T array[], int elements); // kann man array[] oder auch *array schreiben

int main()
{
    float array[]={10,9,7,5,4,6,2,1,4,65,45,234,23,12,32,32,0,-0.4,-0.000023};  //<-- beliebig viele
    ripple(array, sizeof(array)/sizeof(array[0]));         //bei array[20] gibt sizeof(array[0]) 4 zurück 
							   //sizeof(array) 80 zurück ; 80/4 = 20! 
    for(int i=0; i<sizeof(array)/sizeof(array[0]); i++)
    {
            cout<<array[i]<<endl;
            }

   	getch();
	return 0;	
}

template<class T>
void ripple(T array[], int elements) // kann man array[] oder auch *array schreiben
{
     for(int i=0; i<elements-1 ; i++)
     {
             for(int j=i+1; j<elements ; j++)
             {
                     if(array[i]> array[j])
                     {
                                  T temp= array[i];
                                  array[i]= array[j];
                                  array[j]= temp;
                                  }
                     }
             }
     }

Ok, hier wird noch ein Template benutzt, damit sind diese Funktionen für int werte und auch für float/ double werte geeignet...

Gruß
 
Zurück
Oben