Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » C: Bestimmtes Element aus Array löschen » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen C: Bestimmtes Element aus Array löschen
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
nano99
unregistriert
C: Bestimmtes Element aus Array löschen Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
Hi!

Ich versuche gerade, ein Programm zu programmieren, das Quartettkarten verteilt.
Ich kann soweit alles, aber ich habe noch 2 offene Fragen dazu:

Ich habe ein int-Array (int zahlen=11,12,13,14,21,22,23,24Augenzwinkern

1. Jetzt möchte ich ein zufälliges Element aus diesem Array nehmen. Ich will also eine Zufallszahl zwischen 0 und sizeof(zahlen)-1 generieren (Ganzzahl).
2. Die generierte Zahl soll nun als Element im Array gelöscht werden.
also z.B.:
int zufallszahl=2; //Nur mal so, ich weiß ja nicht, wie man Zufallszahlen macht
loeschenausarray(zahlen[zufallszahl]); //Das jeweilige Element soll also gelöscht werden.

Die Position im Array soll jedoch nicht einfach leer gemacht werden, sondern komplett gelöscht werden!

Meine Ideen:
zu 1.:
Ich habe gehört, dass es eine Funktion ("rand()" oder "srand()") für Zufallszahlen gibt. Man soll auch irgendwie die Zeit miteinbringen.

Sonst habe ich keine Ahnung!
:-)
großes Grinsen
02.11.2012 21:15
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallöchen,

schön mal wieder von Dir zu hören.

Zu 1.:
Das Beispiel unter http://www.cplusplus.com/reference/clibrary/cstdlib/rand/ kannst Du dir ja mal anschauen. Du musst nur den Wertebreich deinen Anforderungen entsprechend anpassen. Hier ist von 1 - 9 gewählt. Kennst du die Modulo-Operation? Wenn nicht, schau sie dir an oder frag noch mal nach.

Zu 2.
Aus einem Array Löschen ist nicht ganz so einfach. Da schreibe ich Dir morgen oder übermorgen noch mal dazu. Da muss ich mir ein paar Code-Beispiele ausdenken, damit du verstehst, wie das funktioniert, ohne dass ich viel Text schreibe. Dazu ist es mir heute zu spät Augenzwinkern

VG,

Karlito
03.11.2012 01:20 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo nano99,

Du weist ja vielleicht, dass ein Array in C immer die selbe Länge hat.

Du deklarierst also ein Array z.B. mit:
code:
1:
2:
3:
int test[5];


Und es hat immer die Länge 5. Es gibt auch noch andere Varianten, aber das ist ein wenig schwerer zu verstehen.

Was Du nun machen kannst um ein Element im Array zu löschen ist, dass du dir die Größe des Arrays in einer weiteren Variable merkst. Bsp:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
#include<stdio.h>
#include<stdlib.h>

#define LEN 10

void print_array(int array[], int length){
	int index = 0;
	if (length==0){
		printf("leer!");
		return; //verlasse Methode wenn Array leer
	}

	printf("%d", array[0]);

	for(index = 1; index < length; index++){
		printf(", %d", array[index]);
	}
	printf("\n");
}

//element == element index, deswegen mit 0 beginnend
void delete(int array[], int *len, int element){
	int index = 0;

	if(element+1==*len){
		--*len;
		return;
	}

	//alle Elemente hinter dem zu löschenden Element
	//werden um 1 nach vorn kopiert und überschreiben 
	//das gewünschte Element
	for(index = element; index < *len-1; index++){
		array[index] = array[index + 1];
	}

	//anschließend wird die Länge um 1 "verkürzt"
	--*len;
}

main(int argc, char **argv){
	int array[LEN];
	int length = LEN;
	int index = 0;

	for(index = 0; index < length; index++){
		array[index] = index;
	}
	
	print_array(array, length);

	delete(array, &length, 3); //Löscht das vierte Element aus dem Array
	
	print_array(array, length);

	return EXIT_SUCCESS;
}


Ich hoffe der Code macht dir den Prozess verständlich. Sag bescheid, wenn noch was unklar ist.

VG,

Karlito
04.11.2012 22:48 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
nano99
unregistriert
C: Element aus Array löschen Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hi!

Erstmal vielen Dank für den ganzen Code!
Ich habe für mein fertiges Programm deine Funktionen verwendet, und alles funktioniert einwandfrei! WOW!
Hier nochmal mein fertiges Programm:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

void print_array(int array[], int length)
{
 int index = 0;
 if (length==0)
 {
  printf("leer!");
  return;
 }
 printf("%d", array[0]);
 for(index = 1; index < length; index++)
 {
  printf(", %d", array[index]);
 }
}

void delete(int array[], int *len, int element)
{
 int index = 0;
 if(element+1==*len)
 {
  --*len;
  return;
 }

 for(index = element; index < *len-1; index++)
 {
  array[index] = array[index + 1];
 }
 --*len;
}
int main()
{
 int karten[8]={11,12,13,14,21,22,23,24};
 int length=8;
 int spieler1[4];
 int spieler2[4];
 int zufall, i, j;
 int kartenanzahl=8;
 srand( time(NULL) );
 for(i=0; i<=3; i++)
 {
  zufall=rand() % kartenanzahl;
  spieler1[i]=karten[zufall];
  delete(karten,&length,zufall);
  kartenanzahl--;
  zufall=rand() % kartenanzahl;
  spieler2[i]=karten[zufall];
  delete(karten,&length,zufall);
  kartenanzahl--;
 }
 printf("Zahlen von Spieler 1: ");
 print_array(spieler1,4);
 printf("\nZahlen von Spieler 2: ");
 print_array(spieler2,4);

 return 0;
}


Also: Danke für deine Hilfe! Augenzwinkern
05.11.2012 18:30
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo nano.

Bitte, gerne. Ich hoffe Du hast den Code auch nachvollzogen.

Wenn Du genau hinschaust, ist die Stelle
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
 ...
 if(element+1==*len)
 {
  --*len;
  return;
 }
 ...


überflüssig, da sie in der darauffolgenden Schleife eh noch mal abgefangen wird (die schleife wird nicht ausgeführt)

Weiter so!

VG,

Karlito
06.11.2012 13:28 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Theoretische Informatik » C: Bestimmtes Element aus Array löschen