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