Ich wollte ja meinen Code posten, hatte ich total vergessen! Das hole ich jetzt mal nach.
Er ist zwar nicht perfekt, aber er funktioniert.
C:
#include <stdio.h>
#include <stdlib.h>
// Stuct definieren
struct probuchstabe
{
char buchstabe;
int anz;
float prozent;
char correct;
};
int main(int argc, char *argv[])
{
// Variablen definieren
FILE *datei;
float buchstaben[26][3];
int i=0, j=0, x=0, y=0, count=50;
char c;
float t=0;
const int laenge=26; // for bubble-sort
int sortiert=0; // for bubble-sort
struct probuchstabe werte[26];
struct probuchstabe temp;
//------------------------------------------
for(i=0; i<26; i++)
{
werte[i].buchstabe = 'a'+i;
werte[i].anz = 0;
werte[i].prozent = 0.0;
werte[i].correct = 'a';
}
temp.buchstabe = 'a';
temp.anz = 0;
temp.prozent = 0.0;
temp.correct = 'a';
//------------------------------------------
datei = fopen(argv[1], "r");
if(datei == NULL)
{
puts("Error");
system("pause");
return 1; // 1 bei fehler; 0 bei alles OK
}
else
{
// puts("Error-Free");
}
//while(!feof(datei) && count<30)
while(!feof(datei))
{
c = fgetc(datei);
if(c >= 'A' && c <= 'Z')
{
c = c - 'A' + 'a'; // große buchstaben in kleine umwandeln
}
if(c >= 'a' && c <= 'z')
{
werte[c - 'a'].anz++; // position im array bestimmten und buchstaben raufzählen
}
}
// puts("End of File");
// Gesamte Buchstaben berechnen
for(i=0; i<26; i++)
{
t=t+werte[i].anz;
}
// Prozent berechnen
for(i=0; i<26; i++)
{
werte[i].prozent=(float)werte[i].anz*100/t;
}
// bubble-sort
while(sortiert == 0)
{
sortiert = 1;
for(i = 0; i < laenge-1; i++)
{
if(werte[i].prozent < werte[i+1].prozent)
{
sortiert = 0;
temp = werte[i];
werte[i] = werte[i+1];
werte[i+1] = temp;
}
}
}
// Ausgabe
/*
for(i = 0; i < 26; i++)
{
printf("%c\t %d\t %.3f%%\t\n\n\n", werte[i].buchstabe, werte[i].anz, werte[i].prozent);
}
*/
fclose(datei);
// Schlüssel berechnen
x=werte[0].buchstabe-'e';
printf("Schluessel: %d\n\n", x);
// Mindest Zeichen
printf("mindest Zeichen: %d\n\n", count);
// Ausgabe (Klartext)
datei = fopen(argv[1], "r");
while(!feof(datei))
{
c = fgetc(datei);
if( c >= 'A' && c <= 'z' )
{
if( c - x > 'z' )
{
printf("%c", c - x - 58 );
}
else
{
if( c - x < 'A' )
{
printf("%c", 58 + c - x );
}
else
{
printf("%c", c - x );
}
}
}
else
{
printf( "%c", c);
}
}
fclose(datei);
printf("\n\n");
system("pause");
return 0;
}
Folgenden Text gilt es zu übersetzen:
MxE SDqsAD _myEm quzqE YADsqzE mGE GzDGtusqz `DmqGyqz qDImotFq, rmzp qD Euot uz Equzqy NqFF LG quzqy GzsqtqGqDqz azsqLuqrqD HqDImzpqxF. QD xms mGr Equzqy BmzLqDmDFus tmDFqz ^Gqowqz Gzp Emt, Iqzz qD pqz WABr quz Iqzus tAn, Equzqz sqIAqxnFqz, nDmGzqz, HAz nAsqzrAqDyusqz bqDEFqurGzsqz sqFquxFqz NmGot, mGr pqEEqz TAqtq Euot puq NqFFpqowq, LGy smqzLxuotqz ZuqpqDsxquFqz nqDquF, wmGy zAot qDtmxFqz wAzzFq. _quzq Huqxqz, uy bqDsxquot LG Equzqy EAzEFusqz ayrmzs wxmqsxuot pGqzzqz Nquzq rxuyyqDFqz uty tuxrxAE HAD pqz MGsqz.
"cmE uEF yuF yuD sqEotqtqz?", pmotFq qD. QE ImD wquz `DmGy. _quz fuyyqD, quz DuotFusqE, zGD qFImE LG wxquzqE YqzEotqzLuyyqD, xms DGtus LIuEotqz pqz HuqD IAtxnqwmzzFqz cmqzpqz. GqnqD pqy `uEot, mGr pqy quzq mGEquzmzpqDsqBmowFq YGEFqDwAxxqwFuAz HAz `GotImDqz mGEsqnDquFqF ImD - _myEm ImD ^quEqzpqD - tuzs pmE Nuxp, pmE qD HAD wGDLqy mGE quzqD uxxGEFDuqDFqz fquFEotDurF mGEsqEotzuFFqz Gzp uz quzqy tGqnEotqz, HqDsAxpqFqz ^mtyqz GzFqDsqnDmotF tmFFq. QE EFqxxFq quzq Pmyq pmD, puq yuF quzqy \qxLtGF Gzp quzqD \qxLnAm HqDEqtqz, mGrDqotF pmEmw Gzp quzqz EotIqDqz \qxLyGrr, uz pqy utD smzLqD azFqDmDy HqDEotIGzpqz ImD, pqy NqEotmGqD qzFsqsqztAn.
SDqsADE Nxuow DuotFqFq Euot pmzz LGy RqzEFqD, Gzp pmE FDGqnq cqFFqD - ymz tAqDFq ^qsqzFDABrqz mGr pmE RqzEFqDnxqot mGrEotxmsqz - ymotFq utz smzL yqxmzotAxuEot. "cuq ImqDq qE, Iqzz uot zAot quz Iqzus IquFqDEotxuqrq Gzp mxxq ZmDDtquFqz HqDsmqEEq", pmotFq qD, mnqD pmE ImD smqzLxuot GzpGDotrGqtDnmD, pqzz qD ImD sqIAqtzF, mGr pqD DqotFqz _quFq LG Eotxmrqz, wAzzFq Euot mnqD uz Equzqy sqsqzImqDFusqz fGEFmzp zuotF uz puqEq Xmsq nDuzsqz. YuF IqxotqD WDmrF qD Euot mGot mGr puq DqotFq _quFq ImDr, uyyqD IuqpqD EotmGwqxFq qD uz puq ^Gqowqzxmsq LGDGqow. QD HqDEGotFq qE IAtx tGzpqDFymx, EotxAw puq MGsqz, Gy puq LmBBqxzpqz Nquzq zuotF Eqtqz LG yGqEEqz, Gzp xuqw qDEF mn, mxE qD uz pqD _quFq quzqz zAot zuq sqrGqtxFqz, xquotFqz, pGyBrqz _otyqDL LG rGqtxqz nqsmzz.
"Mot SAFF", pmotFq qD, "ImE rGqD quzqz mzEFDqzsqzpqz NqDGr tmnq uot sqImqtxF! `ms mGE, `ms quz mGr pqD ^quEq. Puq sqEotmqrFxuotqz MGrDqsGzsqz Euzp Huqx sDAqwqD, mxE uy qusqzFxuotqz SqEotmqrF LG TmGEq, Gzp mGwqDpqy uEF yuD zAot puqEq \xmsq pqE ^quEqzE mGrqDxqsF, puq _ADsqz Gy puq fGsmzEotxGqEEq, pmE GzDqsqxymqwusq, EotxqotFq QEEqz, quz uyyqD IqotEqxzpqD, zuq mzpmGqDzpqD, zuq tqDLxuot IqDpqzpqD yqzEotxuotqD bqDwqtD. PqD `qGrqx EAxx pmE mxxqE tAxqz!" QD rGqtxFq quz xquotFqE VGowqz Anqz mGr pqy NmGot; EotAn Euot mGr pqy ^Gqowqz xmzsEmy zmqtqD LGy NqFFBrAEFqz, Gy pqz WABr nqEEqD tqnqz LG wAqzzqz; rmzp puq vGowqzpq _Fqxxq, puq yuF xmGFqD wxquzqz Iquwqz \GqzwFotqz nqEqFLF ImD, puq qD zuotF LG nqGDFquxqz HqDEFmzp; Gzp IAxxFq yuF quzqy Nquz puq _Fqxxq nqFmEFqz, LAs qE mnqD sxquot LGDGqow, pqzz nqu pqD NqDGqtDGzs GyIqtFqz utz WmqxFqEotmGqD.