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 ein

    printf("%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 halten

    return (0);

    }


Anmelden zum Antworten