Guest User

Untitled

a guest
Jun 19th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.47 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct L                        /*struct L wird erstellt*/
  5. {
  6.     int entry;
  7.     struct L* next;                 /*Zeiger auf das folgende Element des Structs*/
  8. };
  9.  
  10. int pruefen(FILE* file, int* A, int* n);        /*Funtkion "pruefen" prüft ob die Zahlen in den Dateien sortiert sind*/
  11. void erstellen(int* A, int* B, int sizea, int sizeb,struct L* liste, int *N); /*Funktion zum Erstellen einer Liste*/
  12. void einfuegen(struct L* liste, int a, int* N);
  13.  
  14. int main(int argc, char** argv)
  15. {
  16.     FILE* file1;                    /*Arrays und Variablen werden initialisiert*/
  17.     FILE* file2;
  18.     int A[100];
  19.     int B[100];
  20.     int sizea, sizeb,sizec=0, i;
  21.     struct L liste[200];                /*Liste wird mit einem Array versehen*/
  22.  
  23.     if ( argc != 3 )                /*Überprüfung: Richtige Anzahl an Dateien*/
  24.     {
  25.             fprintf(stderr, "Bitte genau zwei Dateien eingeben \n");    /*Fehlermeldung*/
  26.             return -1;
  27.     }
  28.      
  29.     file1 = fopen(argv[1], "r");            /*Öffnen der ersten Datei*/
  30.  
  31.     if ( file1 == NULL )                /*Überprüfung: erste Datei in richtigem Format*/
  32.     {
  33.             fprintf(stderr, "Die folgende Datei konnte nicht geöffnet werden: %s\n", argv[1]); /*Fehlermeldung*/
  34.             return -1;
  35.     }
  36.     file2 = fopen(argv[2], "r");            /*Öffnen der zweiten Datei*/
  37.  
  38.     if ( file2 == NULL )                /*Überprüfung: zweite Datei in richtigem Format*/
  39.     {
  40.             fprintf(stderr, "Die folgende Datei konnte nicht geöffnet werden: %s\n", argv[2]); /*Fehlermeldung*/
  41.             return -1;
  42.     }
  43.    
  44.    
  45.     fscanf(file1, "%d", &sizea);            /*Einlesen des ersten Element der Dateien (gibt die Anzahl der Zahlen an)*/
  46.     fscanf(file2, "%d", &sizeb);
  47.  
  48.     if(sizea>100)                   /*Überprüfung: Passende Anzahl an Zahlen in erster Datei*/
  49.     {
  50.         fprintf(stderr, "Es befinden sich zu viele Zahlen in der Datei\n"); /*Fehlermeldung*/
  51.         return -1; 
  52.     }
  53.    
  54.     if(sizeb>100)                   /*Überprüfung: Passende Anzahl an Zahlen in zweiter Datei*/
  55.     {
  56.         fprintf(stderr, "Es befinden sich zu viele Zahlen in der Datei\n"); /*Fehlermeldung*/
  57.         return -1; 
  58.     }
  59.    
  60.  
  61.     if(pruefen(file1, &A[0], &sizea)==0 || pruefen(file2, &B[0], &sizeb)==0)    /*Funktion "prufen" wird aufgerufen*/
  62.     {                                       /*Wenn 0 zurückgegeben, wird Programm*/       
  63.         return -1;                              /*beendet*/
  64.     }
  65.  
  66.     erstellen(&A[0], &B[0], sizea, sizeb, &liste[0], &sizec);           /*Funktion erstellen wird aufgerufen*/
  67.  
  68.    
  69.     for (i = 0; i < sizec; i++)                
  70.     {
  71.         if ((i == 0) || (liste[i-1].entry != liste[i].entry))       /*Werte der Liste werden solange ausgegeben*/
  72.         {                               /*bis Liste keine Werte mehr enthält*/
  73.         printf("%d ", liste[i].entry);
  74.         }
  75.     }
  76.    
  77.     printf("\n");
  78.  
  79.     return 0;
  80.    
  81. }
  82.  
  83. int pruefen(FILE* file, int* A, int *n)                 /*Funktion "pruefen" kontrolliert ob die Zahlen aus der Datei*/
  84. {                                   /*richtig sortiert sind*/
  85.     int i;
  86.      
  87.     for (i = 0; i < *n; ++i)
  88.     {
  89.         if (i==0)
  90.         {
  91.             fscanf(file, "%d", &A[i]);
  92.         }
  93.                 else
  94.                 {
  95.             fscanf(file, "%d", &A[i]);
  96.                     if (A[i-1]>A[i])        /*Wenn ein Wert nicht größer ist als sein Folgewert, wird Fehler ausgegeben */
  97.                 {
  98.                             fprintf(stderr, "Zahlen in Datei nicht richtig sortiert \n");
  99.                             return 0;
  100.                 }
  101.         }
  102.     }
  103.                    
  104.             return 1;
  105. }
  106.  
  107. void einfuegen(struct L* liste, int a, int *N)      /*Funktion "einfuegen" verknüpft die Elemente der Liste mit ihren folgenden*/
  108. {                           /*Elementen*/
  109.     liste[*N].entry=a;
  110.     liste[*N].next=NULL;
  111.  
  112.     if (*N!=0);                 /*Solange bis alle Elemente verknüpft sind*/
  113.                            
  114.         liste[*N-1].next=&liste[*N];
  115.  
  116.     (*N)++;
  117. }
  118.  
  119. void erstellen(int* A, int *B,int sizea, int sizeb,struct L* liste, int* N) /*Funktion erstellen fügt die Elemente in Liste*/
  120. {
  121.    
  122.   int i=0,j=0;
  123.                    
  124.             while (i < sizea && j < sizeb)
  125.             {
  126.                     if (A[i]<=B[j])             /*Wenn  Wert von A kleiner als von B, wird A an die Liste gefügt*/
  127.                             einfuegen(liste, A[i++], N);               
  128.                     else
  129.                             einfuegen(liste, B[j++], N);    /*sonst wird Wert von B angefügt*/
  130.             }
  131.            
  132.             if ( i == sizea)                    /*Wenn Ende von A erreicht, werden restliche Elemente von B angefügt*/
  133.                 while (j < sizeb)  
  134.                             einfuegen(liste, B[j++], N);           
  135.            
  136.             if ( j == sizeb)                    /*Wenn Ende von B erreicht, werden restliche Elemente von A angefügt*/
  137.                     while (i < sizea)
  138.                             einfuegen(liste, A[i++], N);
  139. }
Add Comment
Please, Sign In to add comment