Array aus main in Unterprogramm kopieren

chgxp

Grünschnabel
Hallo an alle!

Ich habe folgendes Problem:
Für die Uni muss ich ein Programm erstellen, welches aus einer Zufälligen Reihe, bestehend aus 20 Zahlen, die betragsmäßig größte ermittelt.
Einen Zufallsgenerator habe ich schon, der ein Array mit 20 Zahlen befüllt.

Aufgabenstellung: "Erstellen Sie die Funktion int iMaxima(int *iArray, int iSize). Sie bestimmt die betragsmäßig größte Zahl des Arrays und gibt diese zurück. Verwenden sie in der Funktion KEINE eckigen Klammern.

Momentan bin ich soweit, dass ich, in einen zusätzlichen Programm, schon mal was geschrieben hab, welches über einen Bubble-Sort-Algorytmus die Zahlen Sortiert und dann die größte ausgibt.
Bei dem Programm, das ich erstellen soll, soll das Array aber in der Main-Funktion erstellt und befüllt werden und nur in der Unterfunktion die höchste Zahl ermittelt werden. Mir ist nicht ganz klar, wie ich im Unterprogramm auf das Array der Main Funktion zugreifen soll.

Ich wäre dankbar, wenn irgendjemand Rat wüsste.

Mein Quelltext bisher: (den Text in der iMaxima Funktion habe ich vorerst nur aus meinem 2. Programm, welches ich oben beschrieben hab, hineinkopiert, ist also noch nicht fertig)
Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define MAX 20


int Zufall(int iAnfang, int iEnde)
{
int iZufall = 0;

if ((iEnde - iAnfang)>0 && (iEnde - iAnfang)<=32767)
iZufall = rand()%(iEnde - iAnfang + 1) + iAnfang;
else
{
printf("Das eingegebene Intervall ist ungueltig!\n");
return 0;
}

return iZufall;
}

int iMaxima(int *iArray, int iSize)
{
float fTemp=0.0; 
int i=0, j=0;

for (i=MAX-1; i>0; i--)
{
for(j=0; j<i; j++)
{ if (iArray[j+1] < iArray[j])
{
fTemp=iArray[j];
iArray[j] = iArray[j+1];
iArray[j+1] = fTemp;
}
}
}
printf("\n\nZahlen Sort\n\n");

printf("%.2d ", iArray[MAX]);

return iArray[MAX];
}

int main(void)
{
int iArray[MAX]={0}, i=0, iAnfang=0, iEnde=0, iTemp=0;

srand((unsigned)time(NULL));

printf("\n\n\t*********** Maxima Suche ************");

printf("\n\nBitte Untergrenze eingeben:\t");
scanf(" %d", &iAnfang);
printf("\nBitte Obergrenze eingeben:\t");
scanf(" %d", &iEnde);

printf("\n\n20 Zufallszahlen:\n\n");
for(i=0; i<MAX; i++)
{
*(iArray+i)=Zufall(iAnfang, iEnde);
printf("%d\t", *(iArray+i));
}

iTemp=iMaxima;


printf(" Groeßte Zahl: %d\n\n", iTemp);
return 0;
}
 
Hallo,

laut Aufgabenstellung sollst du ja ohne eckige Klammer in der Funktion intMaxima() auskommen.
Als Hinweis würde ich Dir sagen, dass du durch das Array auch ohne eckige Klammern durchlaufen kannst. Stichwort: Pointer und Pointerarithmetik.
Die bisher grösste Zahl musst du dir in der Funktion einfach mit dem aktuellen Array-Element vergleichen und sofern das Array-Element grösser ist in einer Variable merken und am Ende zurückgeben.

Markus
 
Code:
int iMaxima(int *iArray, int iSize) {
   int* highest(iArray);

   for(int a(1); a<iSize; ++a) {
	if(*highest < *(iArray+a)) highest = iArray+a;
   }
   return *highest;
}
Habe den Code getestet und scheint zu funktionieren.
Ich hoffe ich konnte dir damit helfen.
 

Neue Beiträge

Zurück