Feld2 in FallT übernehmen



  • Hi!
    Bekomme das Feld2 aus dem Unterprogramm FallK in das Unterprogramm FallT übergeben. Mit meiner Version funktioniert es aber nicht. Kann mir jemand helfen?
    MfG Cit22

    /********************************************************************************/
    /* verschluesselung.exe : Kodieren eines Wortes/Satzes mit bestimmtem Kode      */
    /* Projekt              : Praktikumsaufgabe 3                                   */
    /* Autor/in             : Christoph Gieritz (ESA)& Nils Papke (MT)              */
    /* Version              : 1.0                                                   */
    /* Datum                : 15.12.2007     letzte Aenderung am : 13.01.2008       */
    /* Beschreibung         : Dieses Programm verschlüsselt ein Wort/einen Satz mit */
    /*                        maximal 80 Zeichen. Zuerst wird eine                  */
    /*                        Buchstabenverschiebung um anzugebene Stellen          */
    /*                        vorgenommen. Danach wird das neue Wort/der neue Satz  */
    /*                        mittels Ein- und Auslesen in/aus ein(em) Feld         */
    /*                        nochmals chiffriert. Für die Entschlüsselung wird die */
    /*                        zugehörige Geheimzahl benötigt.                       */
    /* Compiler             : Borland C++ V 5.01                                    */
    /********************************************************************************/
    
    /* Testsatz:
       Ich lerne C !
       SoMm1*rx@*ov* 100305
    
       Kontrollsätze:
       Alles klar, Aufgabe bestanden!
       "rGQpJQ"XJZYXKFpLSPFIQGJFJSWpu 690310
    
       Erledigt, das war es!
       \dYV mbVmgon5Z75ZY5rn 850505
    
       Diese Aufgabe ist erledigt!
       Km0npn"0lhl/ziylls""lHpk1zp 070408
    
       Treffen im Landhaus um 19.00 Uhr! Freue mich auf Sie, James Bond
       {oYLQM"V#QVMISIEotGqRJRfoLoHJHn%o@ILpVEEREeIYQoYeYJIMWoIoWQo}o]o 680710 */
    
    /*Einfügen der Programmbibliotheken*/
    #include <stdio.h>    /*Programmbib. für Standardein- und -ausgabe einfügen*/
    #include <conio.h>    /*Programmbib. für Bildschirmausgabe einfügen*/
    #include <math.h>     /*Programmbib. für mathematische Funktionen einfügen*/
    #include <stddef.h>   /*Programmbib. für allgemeine Datentypen und Makros einfügen*/
    #include <string.h>   /*Programmbib. für Stringbenutzung einfügen*/
    #include "codechar.h" /*Programmbib. für Kodeumsetzung einfügen*/
    
    /* Konstantenvereinbarung mit define */
    #define FALSE 0
    #define TRUE  1
    
    /*Unterprogramm-Deklaration*/
    void fallK (int*,int*,int*, char*, int*);
    void fallD (void);
    void fallT (int,int,int,char*,int);
    
    /*Definition der Unterprogramme*/
    /*Unterprogramm Fall K*/
    void fallK (int *pn, int *pspalten, int *pzeilen, char *pfeld2, int *ptest){
    
      /*Variablendeklaration für FallK*/
      char dummy[81];
      char eingabe[81];
      int zeichen;
      char feld[81];
      char feld2[81];
      int i;
      int arr[81];
      int laenge;
      int test;            /*Var. zur Testfeldspeicherung*/
      int n;
      int spalten;
      int zeilen;
    
      /*Einlesen des Eingabestrings*/
      printf("\nKodierung: Texteingabe (maximal 80 Zeichen)\n->");
      gets(eingabe);
    
      printf("\nKodierstufe 1: Zeichen um 0..%i Positionen Modulo",MAXSHIFT);
      printf("verschieben");
    
      /*Einlesen der Anzahl der Positionsverschiebungen (mit Verschiebungsbed.)*/
      printf("\nEingabe Anzahl der Schiebepositionen -> "); scanf ("%i", &n);
      if (n>89)
        { n=89; printf("Maximale Modulo-Verschiebung 89 Stellen"); }
      laenge = strlen(eingabe);
    
      /*Schleife für Moduloverschiebung*/
      for(i=0; i<laenge; i++) {
          zeichen = (int)eingabe[i];
          arr[i] = CodeTab[zeichen];
          arr[i] = ( arr[i] + n ) % CODECHARANZ;
          feld[i] = DecodeTab[arr[i]];
        }
    
      printf("\nErgebnis Kodierstufe 1: %d Zeichen\n->",i);
    
      /*Schleife für Ausgabe der Kodierstufe 1*/
      for (i=0;i<strlen(eingabe);i++) {
          printf("%c",(char)feld[i]);
        }
    
      printf("<-\n");
      printf("\nKodierstufe 2: Zeichen zeilenweise in Feld eintragen und ");
      printf("spaltenweise ausgeben.\n");
    
      /*Einlesen der Spaltenanzahl (mit Spaltenbedingungen)*/
      printf("Eingabe der Spaltenzahl (2..15) -> "); scanf( "%i", &spalten);
      if (spalten>15) { spalten=15; printf("Maximale Spaltenanzahl 15."); }
      if (spalten<2) { spalten=2; printf("Minimale Spaltenanzahl 2."); }
    
      /*Funktion zur Berechnung und Aufrundung der Zeilenanzahl*/
      zeilen = ceil((float)laenge / (float)spalten );
      printf("\nErgebnis Kodierstufe 2:     \tKodezahl (SchiftZeilenSpalten) : ");
    
      /*Ausgabe der Kodezahl (Zweistellige Ausgabe der Komponenten)*/
      printf("%02d%02d%02d\n",n,zeilen,spalten);
      printf("->");
    
      /*Schleife für Ausgabe und Speicherung des kodierten Wortes/Satzes*/
      for (i=0;i<spalten;i++) {
          zeichen = i;
          for (test=0; zeichen < laenge; test++ ) {
              printf("%c", (char)feld[zeichen]);
              feld2[test]=feld[zeichen];
              zeichen += spalten;
            }
        }
      printf("<-\n\n");
      printf("[return]"); gets(dummy);
    
      /*Übergabe der Werte*/
      *pn=n;
      *pspalten=spalten;
      *pzeilen=zeilen;
      *pfeld2=feld[zeichen];
      *ptest=zeichen;
    }
    
    /*Unterprogramm Fall D*/
    void fallD (void) {
      char dummy[81];
      char feld[81];
      char eingabe[81];
      int zeichen;
      int arr[81];
      int n;
      int laenge;
      int spalten;
      int zeilen;
      int counter;
      int counter2;
      int fillchar;
      int i;
    
      printf("\nDekodierung: Eingabe der Kodezahl (nnnnnn)\n->");
    
      /*Einlesen der Kodezahl*/
      scanf("%02d%02d%02d",&n,&zeilen,&spalten);
      gets(dummy);
    
      /*Einlesen des Eingabestrings*/
      printf("\nKodierung: Texteingabe (maximal 80 Zeichen)\n->");
      gets(eingabe);
    
      laenge = strlen(eingabe);
      printf("\nErgebnis Dekodierung Stufe 2 (%d Zeichen):\n->",laenge);
      counter = 0;
    
      /*Leerfeldanzahlbestimmung*/
      fillchar = laenge - (zeilen-1)*spalten;
    
      /*Schleife für Ausgabe der 2. Dekodierungsstufe*/
      for (i=0; i<zeilen; i++) {
          zeichen = i;
          counter2 = 1;
            while ( zeichen < laenge && counter < laenge && counter2 <= spalten ) {
                printf("%c", (char)eingabe[zeichen]);
                feld[counter] = (char)eingabe[zeichen];
                counter++;
                if ( counter2 > fillchar ) zeichen += zeilen-1;
                  else    zeichen += zeilen;
                      counter2++;
              }
        }
    
      /*Schleife für Moduloverschiebung*/
      for (i=0; i<laenge; i++) {
          arr[i] = CodeTab[feld[i]];
          arr[i] = ( CODECHARANZ + arr[i] - n ) % CODECHARANZ;
          feld[i] = DecodeTab[arr[i]];
        }
      printf("\n\nErgebnis Dekodierung Stufe 1:\n->");
    
      /*Schleife für Ausgabe der 1. Dekodierungsstufe*/
      for (i=0;i<strlen(eingabe);i++) {
          printf("%c",(char)feld[i]);
        }
      printf("<-\n\n");
      printf("[return]");
    }
    
    /*Unterprogramm Fall T*/
    void fallT (int n, int spalten ,int zeilen, char *feld2, int test) {
      char eingabe[81];
      char feld[81];
      //unsigned char feld2[81];
      int zeichen;
      int arr[81];
      int laenge;
      int counter;
      int counter2;
      int i;
      int fillchar;
    
      printf("\nDekodierung: Testkodezahl (nnnnnn)\n->");
      printf("%02d%02d%02d\n\n",n,zeilen,spalten);
      printf("Zu dekodierender Testtext:\n->");
      gets(feld2);
      laenge = strlen(feld2);
      printf("\nErgebnis Dekodierung Stufe 2 (%d Zeichen):\n->",laenge);
      counter = 0;
    
      /*Leerfeldanzahlbestimmung*/
      fillchar = laenge - (zeilen-1)*spalten;
    
      /*Schleife für Ausgabe der 2. Dekodierungsstufe*/
      for (i=0; i<zeilen; i++) {
          zeichen = i;
          counter2 = 1;
            while ( zeichen < laenge && counter < laenge && counter2 <= spalten ) {
                printf("%c", (char)feld2[zeichen]);
                feld[counter] = (char)feld2[test];
                counter++;
                if ( counter2 > fillchar ) zeichen += zeilen-1;
                  else    zeichen += zeilen;
                      counter2++;
              }
        }
    
      /*Schleife für Moduloverschiebung*/
      for (i=0; i<laenge; i++) {
          arr[i] = CodeTab[feld[i]];
          arr[i] = ( CODECHARANZ + arr[i] - n ) % CODECHARANZ;
          feld[i] = DecodeTab[arr[i]];
        }
      printf("\n\nErgebnis Dekodierung Stufe 1:\n->");
    
      /*Schleife für Ausgabe der 1. Dekodierungsstufe*/
      for (i=0;i<strlen(feld2);i++) {
          printf("%c",(char)feld[i]);
        }
      printf("<-\n\n");
      printf("[return]");
    }
    
    /*Initialisierung des Hauptprogramms*/
    int main (void) {
    
      /*Variablendeklaration*/
      char select;          /*Variable für Fallauswahl*/
      char dummy[81];       /*Var. für Eingabepufferleerung*/
      int zeilen;
      int spalten;
      int n;
      char feld2[81];
      int test;
    
      /*Eingabeschleife*/
      do {
        clrscr();  /*Bildschirm löschen*/
    
        /*Hauptausgabe*/
        printf("Top Secret --- Private Note Dekoder --- Top Secret   C.Gieritz, N.Papke\n");
        printf("=======================================================================\n\n");
        printf("Task: E-Ende  K-Kodieren  D-Dekodieren  T-Testdekodierung (nach K) -> ");
    
        /*Einlesen eines Buchstabens für Fallunterscheidung*/
        gets(dummy); select = dummy[0];
    
        /*Fallunterscheidung*/
        switch (select) {
          /*Fehlerfall*/
          default:
            printf("Fehler: Falsche Kode-Eingabe: %c \a [Return]", select);
            break;
          /*Fall für Programmende*/
          case 'E': case 'e':
    
            printf("Programmende [Return] \a");
            return 0;
            //break;
    
          /*Fall für Kodierung*/
          case 'K': case 'k':
            fallK(&n, &zeilen, &spalten, feld2, &test);
            break;
    
          /*Fall für Dekodierung*/
          case 'D': case 'd':
    
            fallD();
            break;
    
          /*Fall für Testdekodierung*/
          case 'T': case 't':
    
            fallT(n, zeilen, spalten, feld2, test);
            break;
    
        };
    
        gets(dummy);
      } while( TRUE );
    
    }
    

    und hier noch die Headerdatei 'codechar.h':

    /* codechar.h: Tabellen zur Kodierung und Dekodierung von ASCII-Zeichen
    
    1. Datei in das aktuelle Arbeitsverzeichnis kopieren
    2. Einbindung in den Quelltext: #include "codechar.h"
    
    Kodetabelle fuer die Umkodierung bestimmter ASCII-Zeichen
    ============================================================================
    0           1           2           3              Kodezahl
    0123456789  0123456789  0123456789  0123456789
    ABCDEFGHIJ  KLMNOPQRST  UVWXYZabcd  efghijklmn     ASCII-Zeichen
    ----------------------------------------------------------------------------
    4           5           6           7              Kodezahl
    0123456789  0123456789  0123456789  0123456789
    opqrstuvwx  yz01234567  89 .,:;!?"  +-*%/=$@&#     ASCII-Zeichen
    ----------------------------------------------------------------------------
    8           9                                      Kodezahl
    0123456789  0123456789
    |<>()[]{}\  ab Nr. 90 nicht beleg  t               ASCII-Zeichen
    ----------------------------------------------------------------------------
    erste  Kodenummer: 'A' = ASCII-Tabelle Nr. 65 --> Kodiertabelle Nr.  0
    letzte Kodenummer: '\' = ASCII-Tabelle Nr. 92 --> Kodiertabelle Nr. 89
    
    Alle restlichen Zeichen erhalten formal den Kode 255.
    Diese Zeichen duerfen im Eingabestring nicht vorkommen.
    
    Das Zeichen '~' wird als Fuellzeichen fuer die spaltenweise Ausgabe des
    Kodierfeldes festgelegt. Dieses Zeichen darf deswegen bei der Ergaenzung der
    Kodier- bzw. Dekodier-Tabellen nicht in den Zeichensatz aufgenommen werden.
    */
    #ifndef _CODECHAR                        /* .h-Datei nur einmal einfuegen */
    #define _CODECHAR
    
    #define CODECHARANZ 90                  /* Anzahl der kodierbaren Zeichen */
    #define MAXSHIFT  (CODECHARANZ-1) /* groesstmoegliche Zeichenverschiebung */
    
    #define FILLCHAR     '~'       /* Fuellzeichen fuer Kodierung, '~' = #126 */
    
    const unsigned char CodeTab[256] = {    /* CodeTab[ASCII-Nr.] -> Kode-Nr. */
      /*#000..#015*/ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
      /*#016..#031*/ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
      /*#032..#047*/  62, 67, 69, 79, 76, 73, 78,255, 83, 84, 72, 70, 64, 71, 63, 74,
      /*#048..#063*/  52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 65, 66, 81, 75, 82, 68,
      /*#064..#079*/  77,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
      /*#080..#095*/  15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 85, 89, 86,255,255,
      /*#096..#111*/ 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
      /*#112..#127*/  41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 87, 80, 88,255,255,
      /*#128..#143*/ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
      /*#144..#159*/ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
      /*#160..#175*/ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
      /*#176..#191*/ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
      /*#192..#207*/ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
      /*#208..#223*/ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
      /*#224..#239*/ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
      /*#240..#255*/ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
    }; /* Tabelle zur Zeichenumkodierung */
    
    /*
    Dekodiertabelle zur Rueckkodierung der umkodierten und verschobenen Zeichen
    in den urspruenglichen ASCII-Kode
    */
    const unsigned char DecodeTab[] =     /* DecodeTab[Kode-Nr.] -> ASCII-Nr. */
      "ABCDEFGHIJ"   "KLMNOPQRST"   "UVWXYZabcd"   "efghijklmn"   "opqrstuvwx"
      "yz01234567"   "89 .,:;!?\""  "+-*%/=$@&#"   "|<>()[]{}\\";
    
    #endif
    

Anmelden zum Antworten