Verschiedene Zahlen zaehlen

C_Boy

Mitglied
Hallo zusammen,

ich hab ein programm geschrieben das mit rand() und %5 einen Array zahle zuweist.
Nun möchte ich die 0er, 1er, 2er...und 4er zaehlen.
Das zaehlen mache ich mit 5 If-Anweisungen. Nur hab ich ein Problem mit den Rückgabwerten?
Wie kann man mehrere Werte gleichzeitig rückgeben.
Gibt es statt den 5 Ifs auch was einfacheres?

Hier das Programm:
Code:
#include <stdio.h>
#include <stdlib.h>

void erzeugen(float a[],int length,int x);
int zaehlen(float a[]);

void erzeugen(float a[],int length,int x)
{
  a[length]=rand()%5;
}

int zaehlen(float a[])
{
  int x=0;
	int rot=0;
	int gelb=0;
	int lila=0;
	int rosa=0;
	int schwarz=0;
  
	if(a[x] == '0')
	{
	  rot++;
	}

	if(a[x] == '1')
	{
	  gelb++;
	}

	if(a[x] == '2')
	{
	  lila++;
	}

	if(a[x] == '3')
	{
	  rosa++;
	}

	if(a[x] == '4')
	{
	  schwarz++;
	}
  return(rot,gelb,lila,rosa,schwarz);
}

int main()
{
  float a[300];
	int length=0;
	int x=0;
	int rot=0;
	int gelb=0;
	int lila=0;
	int rosa=0;
	int schwarz=0;
 

	for(x=0; x<=20; x++)
	{
	  erzeugen(a,length,x);
		printf("a[%d] = %f\n",length,a[length]);
		length++;
	}
	rot,gelb,lila,rosa,schwarz=zaehlen(a);
	printf("%d",rot,gelb,lila,rosa,schwarz);

	return(0);
}

MfG C_Boy
 
Das If-Statement lässt sich durch ein Switch-Statement verschönern und beschleunigen.

C:
switch(a[x]) {
    case '0':
        rot++;
        break;
    case '1':
        gelb++;
        break;
    case '2':
        lila++;
        break;
    case '3':
        rosa++;
        break;
    case '4':
        schwarz++;
        break;
}

Mehrere Rückgabewerte kannst du machen, in dem du der "zaehlen" Funktion noch einen zweiten Paramter übergibst (ein Array), in welches die Ergebnisse kommen. Der Rückgabewert der Funktioniert ist dann nur noch "void" (du brauchst keinen direkten Rückgabewert).
 
Hi

es ist nicht möglich, mehrere Werte auf einmal zurückzugeben.

Ich würde vorschlagen, zuerst einmal überall das float-Array durch int-Array ersetzen. Für 0,1,2,3,4 braucht man keine Kommazahlen.

Warum hast du bei erzeugen einen Parameter x, den du nie verwendest? Weg damit.

Die Schleife im main hat auch ein paar überflüssige Sachen.
Erstens einmal wegen dem felenden dritten Parameter das x im Funktionsaufruf wegnehmen.

Dann: Warum zählst du length mit und verwendest es, wenn du sowieso x auch hast?
Eins reicht.
C++:
for(length=0; length<=20; length++)
{
    erzeugen(a,length);
    printf("a[%d] = %d\n",length,a[length]);
}
%d wegen dem int-Array

Zu der Funktion zaehlen: Wie wärs, wenn du einen Wert übergibst, der gezählt werden soll?
C++:
int zaehlen(int array[],int length,int wert)
{
    int i,x=0;
    fr(i=0;i<length;i++)
    {
        if(array[i]==wert)x++;;
    }
    return x;
}

Und im main:
C++:
for(x=0;x<5;x++)printf("%d ",zaehlen(a,length,x));

Gruß
 
Zuletzt bearbeitet:
Beim Unterprogramm zaehlen.


Was sagt das aus?
Welchen Wert hat die variable wert bzw. für was braucht man die?
Code:
if(array[i]==wert)x++;;


-----------------

Was sagt das aus?
Code:
for(x=0;x<5;x++)printf("%d ",zaehlen(a,length,x));
 
Zuletzt bearbeitet:
Du übergibst zaehlen ein Array, die Länge und einen Wert der gezählt werden soll.
Jetzt gehst du jeden Wert durch und zählst mit x mit, wie oft du den gesuchten Wert gefunden hast.
Was ist daran so kompliziert?
 
Das Unterprogramm int zaehlen(int array[],nt length,int wert)

Bei der Übergabe ins Hauptprogramm. Warum schreibst du da: zaehlen(a,length,x)
Warum a und x?
Oder ist das eh nur ein Schreibfehler?
 
Na weil du dein Array a genannt hast und x der gesuchte Wert ist.
Weil der ja nur von 0 bis 4 gehen kann, gehe ich diese Werte in einer Schleife durch und suche jeden einmal.

Das "nt length" ist allerdings ein Tippfehler, das soll "int length" heißen.

Gruß
 
Zurück