Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
#include <stdio.h> #include <stdlib.h> // Globals const int g_iMessage[]={1,1,0,1,0,1,1,0,1,1}; // the message to be transferred const int g_iPolynom[]={1,0,0,1,1}; // the generator polynom const int g_iMessageSize = sizeof(g_iMessage)/sizeof(int); const int g_iPolynomSize = sizeof(g_iPolynom)/sizeof(int); const int g_iRealMessageSize = g_iMessageSize+g_iPolynomSize-1; /* `* FUNCTION: int* Division( void ) * * PURPOSE: - divides the global g_iMessage with the global g_iPolynom * and calculates the remainder * - adds the remainder to the global g_iMessage * - returns the real SenderMessage (g_iMessage + remainder) * * RETURN Values: returns the real SenderMessage */ int* Division( void ) { // Variables int iMessage[g_iRealMessageSize]; int iRemainder[g_iPolynomSize]; int iStart = 0; int i = 0; int j = 0; int k = g_iPolynomSize; int iRemainderPosition = g_iPolynomSize; int* iSenderMessage = NULL; int iSenderMessageSize = 0; // copy the message in the real message to be transferred // initialize the remainder of the division for( i=0; i<g_iRealMessageSize; i++ ) iMessage[i] = g_iMessage[i]; for( i=0; i<g_iPolynomSize; i++ ) iRemainder[i] = 0; // add degree of polynom times zeroes to the end of the message for( i=0; i<g_iPolynomSize-1; i++ ) iMessage[g_iMessageSize+i] = 0; // find the first 1 of the message to be transferred, to begin division for( i=0; i<g_iMessageSize; i++ ) if( iMessage[i] == 1 ) { iStart = i; break; } // start the divison for( i=iStart; i<g_iRealMessageSize; i++ ) { if( k>=g_iRealMessageSize-1 ) break; if( i == iStart ) { // there is no remainder at the beginning // calculate it for( j=0; j<g_iPolynomSize; j++) iRemainder[j] = iMessage[i+j] ^ g_iPolynom[j]; iRemainder[j] = iMessage[i+j]; } else { // get the new remainder to be divided // find the first 1 of the remainder for( j=0; j<g_iPolynomSize; j++) if( iRemainder[j] == 1 ) { iRemainderPosition = j; break; } // shift the numbers of the right hand side of the founded 1 // to the left for( j=0; j<g_iPolynomSize-iRemainderPosition; j++) iRemainder[j] = iRemainder[iRemainderPosition+j]; // add to the tail of the remainder the remaining numbers of the message for( j=g_iPolynomSize-iRemainderPosition; j<g_iPolynomSize; j++) { iRemainder[j] = iMessage[k]; k++; } // divide the new remainder with the polynom for( j=0; j<g_iPolynomSize; j++) iRemainder[j] = iRemainder[j] ^ g_iPolynom[j]; iRemainderPosition = g_iPolynomSize; } } // create the remainder by deleting heading zeroes for( j=0; j<g_iPolynomSize; j++) if( iRemainder[j] == 1 ) { iRemainderPosition = j; break; } for( j=0; j<g_iPolynomSize-iRemainderPosition; j++) iRemainder[j] = iRemainder[iRemainderPosition+j]; iRemainder[g_iPolynomSize-iRemainderPosition] = iMessage[g_iRealMessageSize-1]; // create the real sender message to be transferred // by adding the remainder to the message iSenderMessageSize = g_iMessageSize + g_iPolynomSize-iRemainderPosition+1; iSenderMessage = (int*)malloc( sizeof(int) * iSenderMessageSize ); j = 0; for( i=0; i < iSenderMessageSize; i++ ) { if( i < g_iMessageSize ) iSenderMessage[i] = iMessage[i]; else { iSenderMessage[i] = iRemainder[j]; j++; } } // return the real message to be transferred return iSenderMessage; } int main(void) { // Variables int* iSenderMessage = Division(); int i = 0; printf( "Die Sender Nachricht lautet:\n" ); //for( i=0; i<sizeof(iSenderMessage)/sizeof(int); i++ ) // printf("%d", iSenderMessage[i] ); //free( iSenderMessage ); return 0; } |
Quellcode |
|
1 2 |
Die Sender Nachricht lautet: 1 |
Quellcode |
|
1 2 3 4 |
//for( i=0; i<sizeof(iSenderMessage)/sizeof(int); i++ ) // printf("%d", iSenderMessage[i] ); //free( iSenderMessage ); |
Werbeanzeige