Schnittmenge berechnen [Anfänger]
-
Hallo. Ich finde leider den Fehler nicht woran es liegt, das mein Programm nicht das tut was es sollte
Ich glaube , es hat etwas mit den inkrementierungen zutun bzw. Endlosschleifen.
Hier mein Code, der von menge a und b je 4 zahlen aufnehmen soll und die dann alle miteinander vergleichen und dann ausgeben lassen.int main(void) { int MengeA[5]; int MengeB[5]; int MengeC[5]; int WertA = 0; int WertB = 0; int WertC = 0; int ZahlenA = 0; int ZahlenB = 0; do{ printf("Zahl fuer Menge A angeben: \n"); scanf("%d", &MengeA[WertA]); WertA++; ZahlenA++; }while(ZahlenA < 4); printf("Nun haben wir alle Elemente der Menge A!\n\n"); do{ printf("Zahl fuer Menge B angeben: \n"); scanf("%d", &MengeB[WertB]); WertB++; ZahlenB++; }while(ZahlenB < 4); printf("Nun haben wir alle Elemente der Menge B!\n\n"); WertA = 0; WertB = 0; do{ for(WertB = 0; WertB < 4; WertB++){ if(MengeA[WertA] == MengeB[WertB]){ MengeA[WertA] = MengeC[WertC]; } WertA++; WertB = 0; } }while(WertA < 4); while(WertC > 0){ printf("%d\n", MengeC[WertC]); WertC--; } return (0); }
-
Huhu,
klitze kleine Fehler:
do{ for(WertB = 0; WertB < 4; WertB++,WertA++;){ /* Ja, das geht auch. Geschmackssache... */ if(MengeA[WertA] == MengeB[WertB]) MengeA[WertA] = MengeC[WertC]; WertB = 0; /* Willkomen im Land, wo die Sonne niemals untergeht... - ENDLOSSCHLEIFE */ } }while(WertA < 4); while(WertC > 0) /* Vorsicht! WertC hat den Wert 0. Diese Schleife wird niemals das Tageslicht sehen */ printf("%d\n", MengeC[WertC--]); /* Jap, das geht auch :) */ return (0); /* Return ist keine Funktion --> return 0; */ }
:xmas1:
-
Salüü
Hmm...also kompilieren kann ich es...es kommt dann aber Schnittmenge.exe funktioniert nicht mehr :=)
-
Huhu,
hast du den Code auch verbessert? Ich hab dir nur die Fehler gezeigt...
Zeig mal den jetztigen Code her.
-
Nicht verbessert ? Du hast doch den Code "geändert" ?
do{ for(WertB = 0; WertB < 4; WertB++,WertA++){ if(MengeA[WertA] == MengeB[WertB]) /* hier ne klammer auf?!*/ MengeA[WertA] = MengeC[WertC]; WertB = 0; /* hier klammer zu? und WertB = 0 ist hier ganz falsch */ WertC++; /* da man ja in das nächste feld die nächste zahl schreiben muss */ } }while(WertA < 4); while(WertC > 0) /* nun sollte auch nicht mehr 0 sein */ printf("%d\n", MengeC[WertC--]); return 0; }
-
im innern der schleife muss wohl das stehen:
MengeC[WertC++] = MengeA[WertA];
anstatt:MengeA[WertA] = MengeC[WertC];
ausserdem sollteste besser bei der eingabe noch darauf achten, dass in deinen mengen nix mehrfach vorkommt.
-
MengeC[WertC++] = MengeA[WertA];
Stimmt, ich weise ja der MengeC das zu...-.-
Aber bei mir harkts immernoch..das Programm beendet sich mit einem Fehler, und gibt das "Resultat" nicht aus
-
probier mal so:
... int ma[] = {1,2,3,4,5}; // menge 1 int mb[] = {9,3,8,6,5}; // menge 2 int mc[256]; // schnittmenge int a,b,c = 0; // zähler ... // suchen for (a=0; a<sizeof(ma)/sizeof(int); a++) for (b=0; b<sizeof(mb)/sizeof(int); b++) if (ma[a] == mb[b]) mc[c++] = ma[a]; ... // ausgeben while (c--) printf ("%d ", mc[c]); ...
-
Hi. Leider läuft diese auch nicht bei mir
Ich weiss nicht, woran es jetzt liegt, das mein Sourcecode immernoch falsch ist. Möchte gerne meine Variante zum laufen bringen;fricky schrieb:
probier mal so:
... int ma[] = {1,2,3,4,5}; // menge 1 int mb[] = {9,3,8,6,5}; // menge 2 int mc[256]; // schnittmenge int a,b,c = 0; // zähler ... // suchen for (a=0; a<sizeof(ma)/sizeof(int); a++) for (b=0; b<sizeof(mb)/sizeof(int); b++) if (ma[a] == mb[b]) mc[c++] = ma[a]; ... // ausgeben while (c--) printf ("%d ", mc[c]); ...
-
Dreamwalker schrieb:
Hi. Leider läuft diese auch nicht bei mir
funzt aber, habs eben ausprobiert. ich hab' ausnahmsweise mal keinen tippfehler drin gehabt. ausgabe ist 5,3 also nur das, was in beiden arrays vorkommt.
-
#include <stdio.h> #include <iostream.h> int main(void) { int MengeA[5]; int MengeB[5]; int MengeC[5] = {0}; int WertA = 0; int WertB = 0; int WertC = 0; int ZahlenA = 0; int ZahlenB = 0; int i; char Komma = ','; for(i=1;i<5;i++){ printf("%d. Zahl fuer Menge A angeben: ", i); scanf("%d", &MengeA[WertA]); WertA++; } printf("Nun haben wir alle Elemente der Menge A!\n\n"); for(i=1;i<5;i++){ printf("%d. Zahl fuer Menge B angeben: ", i); scanf("%d", &MengeB[WertB]); WertB++; } printf("Nun haben wir alle Elemente der Menge B!\n\n"); for(WertA = 0; WertA < 4; WertA++){ for(WertB = 0; WertB < 4; WertB++){ if(MengeA[WertA] == MengeB[WertB]) MengeC[WertC++] = MengeA[WertA]; } } printf("Die Schnittmenge ist die Menge mit den Elementen: {"); for(i = 0; i < 4; i++){ // Ausgeben aller Zahlen ungleich 0, da Array mit 0 gefüllt if(MengeC[i] != 0) printf("%d%c", MengeC[i], Komma); } printf("}"); printf("\n\n\n"); scanf("%d", &i); return (0); }
-
#include <stdlib.h> /* Funktionsbibliothek: Hilfsfunktionen */ #include <stdio.h> /* Funktionsbibliothek: Standard Ein- Ausgabe */ /******************************************************************************* * Globale Deklarationen und Definitionen *******************************************************************************/ /******************************************************************************* ******************************* HAUPTPROGRAMM ********************************** *******************************************************************************/ int main(void) { int MengeA[15]; // Array für die Menge A int MengeB[15]; // Array für die Menge B int MengeC[15] = {0};// Array für "Schnittmenge", die mit 0 aufgefüllt wird int WertA = 0; // Gibt das jeweilige Element des Arrays MengeA an int WertB = 0; // Gibt das jeweilige Element des Arrays MengeC an int WertC = 0; // Gibt das jeweilige Element des Arrays MengeC an int i; // Zähler für diverse For-Schleifen und Index von MengeC char Komma = ','; // Fügt ein Komma ein, damit die Zahlen getrennt werden int Anzahl; // Anzahl Zahlen die einzulesen sind printf("Wieviele Zahlen moechtest du einlesen, Maximal aber 15: "); scanf("%d", &Anzahl); Anzahl += 1; for(i=1;i<Anzahl;i++){ // liest die Zahlen für Menge A ein printf("%d. Zahl fuer Menge A angeben: ", i); scanf("%d", &MengeA[WertA++]); } printf("Nun haben wir alle Elemente der Menge A!\n\n"); for(i=1;i<Anzahl;i++){ // liest die Zahlen für Menge B ein printf("%d. Zahl fuer Menge B angeben: ", i); scanf("%d", &MengeB[WertB++]); } printf("Nun haben wir alle Elemente der Menge B!\n\n"); for(WertA = 0; WertA < Anzahl; WertA++){ // Vergleicht den Inhalt von A mit for(WertB = 0; WertB < Anzahl; WertB++){ if(MengeA[WertA] == MengeB[WertB]) // Inhalt von B und schreibt MengeC[WertC++] = MengeA[WertA];// die Treffer in Menge C } } printf("Die Schnittmenge ist die Menge mit den Elementen: {"); for(i = 0; i < Anzahl; i++){ if(MengeC[i] != 0) printf("%d%c", MengeC[i], Komma); // Treffer ausgeben } printf("}"); printf("\n\n\n"); scanf("%d", &i); // Eingabe erwarten um das Programm offen zu halten return (0); }
-
#include <stdlib.h> /* Funktionsbibliothek: Hilfsfunktionen /
#include <stdio.h> / Funktionsbibliothek: Standard Ein- Ausgabe */
#include <string.h>/*******************************************************************************
* Globale Deklarationen und Definitionen
*******************************************************************************//*******************************************************************************
******************************* HAUPTPROGRAMM **********************************
*******************************************************************************/int main(void) {
int MengeA[10] = {0}; // Array für die Menge A
int MengeB[10] = {0}; // Array für die Menge B
int MengeC[10] = {0}; // Array für "Schnittmenge", die mit 0 aufgefüllt wird
int WertA = 0; // Gibt das jeweilige Element des Arrays MengeA an
int WertB = 0; // Gibt das jeweilige Element des Arrays MengeC an
int WertC = 0; // Gibt das jeweilige Element des Arrays MengeC an
int i; // Zähler für diverse For-Schleifen und Index von MengeC
char Komma = ','; // Fügt ein Komma ein, damit die Zahlen getrennt werden
int Anzahl; // Anzahl Zahlen die einzulesen sind
int Exit = 0;
int Flag = 0;
int Kontrolle = 0;
char Lang;for(i=0;Flag != 1;i++){ // liest die Zahlen für Menge A ein
printf("%d. Zahl fuer Menge A angeben, 0 um zur Menge B zu gelangen: ", i);
scanf("%d", &MengeA[WertA]);
Kontrolle++;if(MengeA[WertA] == 0){
printf("Menge A komplett!\n\n");
Flag = 1;
MengeA[WertA] = '\0';
Lang = MengeA[WertA];
printf("String Laenge: %c", strlen(Lang));
}WertA++;
}
for(i = 0; i < 4; i++){
printf("%d. Element von A: %d\n", i ,MengeA[i]);
}Flag = 0;
for(i=1;Flag != 1;i++){ // liest die Zahlen für Menge B einprintf("%d. Zahl fuer Menge B angeben, 0 um zur Schnittmenge zu gelangen: ", i);
scanf("%d", &MengeB[WertB]);if(MengeB[WertB] == Exit){
printf("Menge B komplett!\n\n");
Flag = 1;
}WertB++;
}for(i = 0; i < 10; i++){
printf("%d. Element von B: %d\n",i, MengeB[i]);
}for(WertA = 0; WertA < 10; WertA++){ // Vergleicht den Inhalt von A mit
for(WertB = 0; WertB < 10; WertB++){
if(MengeA[WertA] == MengeB[WertB]){ // Inhalt von B und schreibt
MengeC[WertC++] = MengeA[WertA];// die Treffer in Menge C
}
}
}for(i = 0; i < 10; i++){
printf("Menge C: %d\n", MengeC[i]);
}printf("Die Schnittmenge ist die Menge mit den Elementen: {");
for (i = 0; i < Kontrolle; i++){if(MengeC[i] != 0){
printf("%d,", MengeC[i]); // Treffer ausgeben
}
}printf("}");
printf("\n\n\n");
scanf("%d", &i); // Eingabe erwarten um das Programm offen zu haltenreturn (0);
}