Hallo Leute!
Ich habe mit meinem Kumpel eine Wette gemacht, dass ich es nicht schaffe, bis zu den diesjährigen Sommerferien ein Verschlüsselungsprogramm nach folgendem Muster zu programmieren:
- man gibt den Pfad einer Datei;
- man gibt im nächsten Schritt
(1)eine 4-stellige ODER
(2)eine 8-stellige ODER
(3)eine 16-stellige
Zahl an
-das Programm soll nun die oben angegebene Datei anhand der vorher angegebenen Zahl auf hexadezimaler Ebene verschlüsseln
- um die Datei wieder in den "Klartext" verwandeln zu können, muss die für das Verschlüsseln ausgesuchte Zahl erneut eingegeben werdem, woraufhin das Programm die Verschlüsselung rückgängig macht
Sinn des Programms soll das unbrauchbar machen bestimmter dateien sein, um sie vor Zugriffen "höherer Mächte" (besonders Eltern)zu schützen.
Nun brauche ich aber ein paar Befehle, um das Programm umsetzen zu können:
1. ein Befehl, der mir den Zugriff auf eine Datei erlaubt bzw. ein Befehl, mit der ich die Position von bestimmmten Zeichen im Dateitext verschieben kann
2. ein Befehl, der die Datei ins Hexadezimale übersetzt
3. ein Befehl, der die angegebene Zahl einliest, in Ziffern aufteilt und ggf. in Variablen speichert
Wäre dankbar,wenn ihr mir helfen könnt!
Ich habe mit meinem Kumpel eine Wette gemacht, dass ich es nicht schaffe, bis zu den diesjährigen Sommerferien ein Verschlüsselungsprogramm nach folgendem Muster zu programmieren:
- man gibt den Pfad einer Datei;
- man gibt im nächsten Schritt
(1)eine 4-stellige ODER
(2)eine 8-stellige ODER
(3)eine 16-stellige
Zahl an
-das Programm soll nun die oben angegebene Datei anhand der vorher angegebenen Zahl auf hexadezimaler Ebene verschlüsseln
- um die Datei wieder in den "Klartext" verwandeln zu können, muss die für das Verschlüsseln ausgesuchte Zahl erneut eingegeben werdem, woraufhin das Programm die Verschlüsselung rückgängig macht
Sinn des Programms soll das unbrauchbar machen bestimmter dateien sein, um sie vor Zugriffen "höherer Mächte" (besonders Eltern)zu schützen.
Nun brauche ich aber ein paar Befehle, um das Programm umsetzen zu können:
1. ein Befehl, der mir den Zugriff auf eine Datei erlaubt bzw. ein Befehl, mit der ich die Position von bestimmmten Zeichen im Dateitext verschieben kann
2. ein Befehl, der die Datei ins Hexadezimale übersetzt
3. ein Befehl, der die angegebene Zahl einliest, in Ziffern aufteilt und ggf. in Variablen speichert
Wäre dankbar,wenn ihr mir helfen könnt!
hm...C# were dafuer besser..nun ich kann ja mal helfen.bin mal nett.
@DMA TAKE 2:
zwischenfrage: welche konkreten unterschiede gibt es zwischen c++ und c# ?
zwischenfrage: welche konkreten unterschiede gibt es zwischen c++ und c# ?
C++ ist eine native Sprache und C# benötigt das .net-Framework.
Das heißt, C++-Code wird vor der Ausführung in maschinensprache übersetzt und C# erst während der Ausführung. Genau wie bei Java.
Wobei es AFAI auch .net-Compiler für C++ gibt.
Das heißt, C++-Code wird vor der Ausführung in maschinensprache übersetzt und C# erst während der Ausführung. Genau wie bei Java.
Wobei es AFAI auch .net-Compiler für C++ gibt.
ich habe mein konzept etwas geändert:
ich muss nur noch folgendes wissen:
1. ein befehl zum einlesen von dateien auf hexadezimaler ebene
2. ein befehl, der feststellt, ob die zahl, die der anwender eingibt, die geforderte stellenzahl überschreitet, und falls ja, die überzähligen ziffern wegstreicht
da c++ nur werte im bereich 2^32 verarbeiten kann, muss ich mir für punkt (3) noch was ausdenken!
ich muss nur noch folgendes wissen:
1. ein befehl zum einlesen von dateien auf hexadezimaler ebene
2. ein befehl, der feststellt, ob die zahl, die der anwender eingibt, die geforderte stellenzahl überschreitet, und falls ja, die überzähligen ziffern wegstreicht
da c++ nur werte im bereich 2^32 verarbeiten kann, muss ich mir für punkt (3) noch was ausdenken!
was die werteüberschreitung betrifft, meine ich eine lösung gefunden zu haben (das die var. "ergebnis" weit unter null sinken kann ist mir bewusst, ändere ich aber später)
1./2./..._neun bezieht sich auf die jeweils x-te neuner-ziffergruppe von rechts.
#include <iostream.h>
void main(int argc, char* argv[])
{
unsigned int erste_neun=0;
unsigned int zweite_neun=0;
unsigned int dritte_neun=0;
unsigned int vierte_neun=0;
bool Fehler=false;
While(ergebnis>0)
{
erste_neun=ergebnis; //die variable "ergebnis" soll von einem anderen programm übergeben werden
While(erste_neun>999999999)
{
erste_neun=0;
zweite_neun=zweite_neun++;
While(zweite_neun>999999999)
{
zweite_neun=0;
dritte_neun=dritte_neun++;
While(dritte_neun>999999999)
{
dritte_neun=0;
vierte_neun=vierte_neun++;
If(vierte_neun>999999999)
{
Fehler=true;
cout << "Wertebereich überschritten!\n" << "[Drücke Enter]";
cin;
break;
}
}
}
ergebnis=ergebnis-999999999;
}
return erste_neun, zweite_neun, dritte_neun, vierte_neun, Fehler;
}
1./2./..._neun bezieht sich auf die jeweils x-te neuner-ziffergruppe von rechts.
#include <iostream.h>
void main(int argc, char* argv[])
{
unsigned int erste_neun=0;
unsigned int zweite_neun=0;
unsigned int dritte_neun=0;
unsigned int vierte_neun=0;
bool Fehler=false;
While(ergebnis>0)
{
erste_neun=ergebnis; //die variable "ergebnis" soll von einem anderen programm übergeben werden
While(erste_neun>999999999)
{
erste_neun=0;
zweite_neun=zweite_neun++;
While(zweite_neun>999999999)
{
zweite_neun=0;
dritte_neun=dritte_neun++;
While(dritte_neun>999999999)
{
dritte_neun=0;
vierte_neun=vierte_neun++;
If(vierte_neun>999999999)
{
Fehler=true;
cout << "Wertebereich überschritten!\n" << "[Drücke Enter]";
cin;
break;
}
}
}
ergebnis=ergebnis-999999999;
}
return erste_neun, zweite_neun, dritte_neun, vierte_neun, Fehler;
}
mmmmh....etwas unübersichtlich, da mogelpower die einrückungen nicht übernimmt....schade
@Br4!n:
Versuchs mal mit dem CODE-Tag!
Versuchs mal mit dem CODE-Tag!
Zeile 1
Einrückung
Zeile 3
Br4!n - Das gewählte Thema ist nicht gerade anspruchsvoll und auch von einem wenig erfahreren Programmierer in wenigen Zeilen umsetzbar. Als ich damals Pascal lernte, war eine Verschlüsselung eines meiner ersten Programme überhaupt. Das sollte bis zum Sommer zu schaffen sein, selbst in einer schwierigen Sprache wie C++. :-)
Deine Bereichsprüfung scheint mir aber arg umständlich zu sein. Beschäftige Dich mit Schleifen und Arrays, damit verkürzt Du den Prozeß erheblich. Es ist z.B. möglich, auf einzelne Stellen einer Zeichenkette zuzugreifen.
DMA TAKE 2 - Ich möchte Dich sehr bitten, nur noch zu Dingen Deine Meinung kundzutun, von denen Du wirklich etwas verstehst. Deine "Tips" richten regelmäßig mehr Schaden an, als daß sie nützen.
Deine Bereichsprüfung scheint mir aber arg umständlich zu sein. Beschäftige Dich mit Schleifen und Arrays, damit verkürzt Du den Prozeß erheblich. Es ist z.B. möglich, auf einzelne Stellen einer Zeichenkette zuzugreifen.
DMA TAKE 2 - Ich möchte Dich sehr bitten, nur noch zu Dingen Deine Meinung kundzutun, von denen Du wirklich etwas verstehst. Deine "Tips" richten regelmäßig mehr Schaden an, als daß sie nützen.
du hast recht, ich fange besser erst mit einfachen algorithmen an, um erfahrung zu sammeln, später wage ich mich dann an kompliziertere sachen
Taste Dich doch ganz langsam an die Sache ran. Versuche doch einfach mal selbst auf so Algorithmen wie das Bestimmen der Ziffernlänge zu kommen. Natürlich kann man die Zahl als String casten, doch mal als Beispiel wie man direkt an der Zahl auf die Ziffernzahl kommen kann (natürlich ohne jeglichen Nebenbedingungen wie beispielsweise negative Zahlen und Co):
Du teilst die Zahl so lange durch 10, bis sie kleiner als 10 ist. Bei jedem Teilen zählst Du einen Zähler hoch.
Beispiel (5423):
n = 1
5423 größer 10? Ja: zahl = 542, n = 2
542 größer 10? Ja: zahl = 54, n = 3
52 größer 10? Ja: zahl = 5, n = 4
5 größer 10? Nein.
Gib n = 4 zurück.
function zaehleZiffern(int zahl)
{
int n = 1;
while (zahl > 9)
{
zahl /= 10;
n++;
}
return n;
}
Du teilst die Zahl so lange durch 10, bis sie kleiner als 10 ist. Bei jedem Teilen zählst Du einen Zähler hoch.
Beispiel (5423):
n = 1
5423 größer 10? Ja: zahl = 542, n = 2
542 größer 10? Ja: zahl = 54, n = 3
52 größer 10? Ja: zahl = 5, n = 4
5 größer 10? Nein.
Gib n = 4 zurück.
danke für deine hilfe UKA!
nun, ich habe den tip von rené befolgt, arrays zu verwenden, somit ist schon mal mindestes das verschlüsseln wesentlich erleichtert!
beim einlesen der datei kann ich mitzählen, wie groß der arry bereits ist, sodass ich im verschlüsselungsteil sicherstellen kann, dass nicht auf ein nicht existenzes array feld zugegriffen wird.
ich fange erst einmal ganz einfach an: ich tausche alle positionen der 2^n mit der der 3^n aus. ist 3^(n+1) größer als die vorher gezählte länge des arrays, wird der vorgang abgebrochen, damit es nicht mehr zu fehler kommt, anschließend schreibe ich den neuen array in eine neue datei - fertig.
es gibt hier noch ein paar technische probleme seitens des compilers, aber fürs erste schaffe ich das alleine.
nun, ich habe den tip von rené befolgt, arrays zu verwenden, somit ist schon mal mindestes das verschlüsseln wesentlich erleichtert!
beim einlesen der datei kann ich mitzählen, wie groß der arry bereits ist, sodass ich im verschlüsselungsteil sicherstellen kann, dass nicht auf ein nicht existenzes array feld zugegriffen wird.
ich fange erst einmal ganz einfach an: ich tausche alle positionen der 2^n mit der der 3^n aus. ist 3^(n+1) größer als die vorher gezählte länge des arrays, wird der vorgang abgebrochen, damit es nicht mehr zu fehler kommt, anschließend schreibe ich den neuen array in eine neue datei - fertig.
es gibt hier noch ein paar technische probleme seitens des compilers, aber fürs erste schaffe ich das alleine.
Logge dich ein um einen Beitrag zu schreiben.