Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- struct L /*struct L wird erstellt*/
- {
- int entry;
- struct L* next; /*Zeiger auf das folgende Element des Structs*/
- };
- int pruefen(FILE* file, int* A, int* n); /*Funtkion "pruefen" prüft ob die Zahlen in den Dateien sortiert sind*/
- void erstellen(int* A, int* B, int sizea, int sizeb,struct L* liste, int *N); /*Funktion zum Erstellen einer Liste*/
- void einfuegen(struct L* liste, int a, int* N);
- int main(int argc, char** argv)
- {
- FILE* file1; /*Arrays und Variablen werden initialisiert*/
- FILE* file2;
- int A[100];
- int B[100];
- int sizea, sizeb,sizec=0, i;
- struct L liste[200]; /*Liste wird mit einem Array versehen*/
- if ( argc != 3 ) /*Überprüfung: Richtige Anzahl an Dateien*/
- {
- fprintf(stderr, "Bitte genau zwei Dateien eingeben \n"); /*Fehlermeldung*/
- return -1;
- }
- file1 = fopen(argv[1], "r"); /*Öffnen der ersten Datei*/
- if ( file1 == NULL ) /*Überprüfung: erste Datei in richtigem Format*/
- {
- fprintf(stderr, "Die folgende Datei konnte nicht geöffnet werden: %s\n", argv[1]); /*Fehlermeldung*/
- return -1;
- }
- file2 = fopen(argv[2], "r"); /*Öffnen der zweiten Datei*/
- if ( file2 == NULL ) /*Überprüfung: zweite Datei in richtigem Format*/
- {
- fprintf(stderr, "Die folgende Datei konnte nicht geöffnet werden: %s\n", argv[2]); /*Fehlermeldung*/
- return -1;
- }
- fscanf(file1, "%d", &sizea); /*Einlesen des ersten Element der Dateien (gibt die Anzahl der Zahlen an)*/
- fscanf(file2, "%d", &sizeb);
- if(sizea>100) /*Überprüfung: Passende Anzahl an Zahlen in erster Datei*/
- {
- fprintf(stderr, "Es befinden sich zu viele Zahlen in der Datei\n"); /*Fehlermeldung*/
- return -1;
- }
- if(sizeb>100) /*Überprüfung: Passende Anzahl an Zahlen in zweiter Datei*/
- {
- fprintf(stderr, "Es befinden sich zu viele Zahlen in der Datei\n"); /*Fehlermeldung*/
- return -1;
- }
- if(pruefen(file1, &A[0], &sizea)==0 || pruefen(file2, &B[0], &sizeb)==0) /*Funktion "prufen" wird aufgerufen*/
- { /*Wenn 0 zurückgegeben, wird Programm*/
- return -1; /*beendet*/
- }
- erstellen(&A[0], &B[0], sizea, sizeb, &liste[0], &sizec); /*Funktion erstellen wird aufgerufen*/
- for (i = 0; i < sizec; i++)
- {
- if ((i == 0) || (liste[i-1].entry != liste[i].entry)) /*Werte der Liste werden solange ausgegeben*/
- { /*bis Liste keine Werte mehr enthält*/
- printf("%d ", liste[i].entry);
- }
- }
- printf("\n");
- return 0;
- }
- int pruefen(FILE* file, int* A, int *n) /*Funktion "pruefen" kontrolliert ob die Zahlen aus der Datei*/
- { /*richtig sortiert sind*/
- int i;
- for (i = 0; i < *n; ++i)
- {
- if (i==0)
- {
- fscanf(file, "%d", &A[i]);
- }
- else
- {
- fscanf(file, "%d", &A[i]);
- if (A[i-1]>A[i]) /*Wenn ein Wert nicht größer ist als sein Folgewert, wird Fehler ausgegeben */
- {
- fprintf(stderr, "Zahlen in Datei nicht richtig sortiert \n");
- return 0;
- }
- }
- }
- return 1;
- }
- void einfuegen(struct L* liste, int a, int *N) /*Funktion "einfuegen" verknüpft die Elemente der Liste mit ihren folgenden*/
- { /*Elementen*/
- liste[*N].entry=a;
- liste[*N].next=NULL;
- if (*N!=0); /*Solange bis alle Elemente verknüpft sind*/
- liste[*N-1].next=&liste[*N];
- (*N)++;
- }
- void erstellen(int* A, int *B,int sizea, int sizeb,struct L* liste, int* N) /*Funktion erstellen fügt die Elemente in Liste*/
- {
- int i=0,j=0;
- while (i < sizea && j < sizeb)
- {
- if (A[i]<=B[j]) /*Wenn Wert von A kleiner als von B, wird A an die Liste gefügt*/
- einfuegen(liste, A[i++], N);
- else
- einfuegen(liste, B[j++], N); /*sonst wird Wert von B angefügt*/
- }
- if ( i == sizea) /*Wenn Ende von A erreicht, werden restliche Elemente von B angefügt*/
- while (j < sizeb)
- einfuegen(liste, B[j++], N);
- if ( j == sizeb) /*Wenn Ende von B erreicht, werden restliche Elemente von A angefügt*/
- while (i < sizea)
- einfuegen(liste, A[i++], N);
- }
Add Comment
Please, Sign In to add comment