[C] Zeichen decodieren - wie fange ich am besten an ?

#1
Hallo zusammen,

meine Aufgabe lautet wie folgt:
Ihr Programm soll
  • Worte beliebiger Länge bestehend aus bestehend aus den o. g. Zeichen über die Tastatur einlesen
  • eine sinnvolle Fehlerbehandlung ausführen, falls nicht zulässige Zeichen eingegeben werden
  • 92 subtrahieren, falls der ASCII-Zahlenwert von Zeichen des Wortes größer als 97 ist und anschließend:
    • die Zeichen des decodierten Wortes, deren ASCII-Zahlenwert im Bereich 9 bis 13 oder 33 bis 45 liegt, mit 2 multiplizieren und 31 addieren
    • auf die Zeichen decodierten Wortes, deren ASCII-Zahlenwert im Bereich 21 bis 25 oder 46 bis 58 liegt, 1 addieren, mit 2 multiplizieren und 4 addieren
  • das eingegebene Wort und dessen Decodierung ausgeben
Beispielausgabe für das Wort „T#*7e“
Eingabe: T#*7e
Ausgabe: Test1
Ich weiß nur gerade leider überhaupt nicht wie ich da anfangen soll, wo ich mich reinlesen kann, was ich als erstes tun soll.
Hat da jemand gut gemeinte und Hilfreiche Tipps, wie ein kleines Beispiel o.Ä. ?

LG
 

lano

Well-Known Member
c-b Experte
#5
Mit dem programmieren bzw das zu realisieren...........:rolleyes:
Ja damit hab ich auch so meine Probleme, dann hab ich nen Jahrhunderte alten Tipp bekommen...
C:
int main() {

int Ergebnis = 0, Zahl1 = 1, Zahl2 = 2;

printf("Zahl1 ist %d und Zahl2 ist %d\n",Zahl1,Zahl2);

Ergebnis = Zahl1 + Zahl2;
printf("Zahl1 + Zahl2 = %d\n",Ergebnis); // Addition

Ergebnis = Zahl2 - Zahl1;
printf("Zahl2 - Zahl1 = %d\n",Ergebnis); // Subtraktion

Ergebnis = Zahl2 / Zahl1;
printf("Zahl2 / Zahl1 = %d\n",Ergebnis);

Ergebnis = Zahl1 * Zahl2;
printf("Zahl1 * Zahl2 = %d\n",Ergebnis); // Multiplikation

}
 

Zhavok

Well-Known Member
#6
Ich weiß nicht genau wo du Probleme hast. Eigentlich ist das nur wie eine Matheaufgabe. ASCII kannst du googlen. Stelle es dir vor wie eine große Tabelle, wobei jeder Buchstabe einer Zahl entspricht. Ein großes A zum Beispiel entspricht der Zahl 65. Ein B entspricht 66 usw.. Alles was du tun sollst ist Buchstabe einlesen, in Zahl umwandeln und dann die oben genannten Berechnungen damit durchführen. Nach dem Rechnen, machst du aus der Zahl wieder einen Buchstabe (besser gesagt ein Zeichen). Dann geht's bei dem nächsten Buchstabe(Zeichen) weiter. Das ist eigentlich alles.

Durch dieses Verfahren kannst du eigene kleine Geheimtexte (Chiffrate) zusammenbasteln.
 

German

Well-Known Member
c-b Experte
#7
Alles was du tun sollst ist Buchstabe einlesen, in Zahl umwandeln
Es ist noch einfacher, ein char ist bereits ein numerischer Wert. Und in C wird es noch mal einfacher, weil Funktionen die zeichenweise verarbeiten, ein int zurückgeben bzw. als Parameter erwarten. Dieses int ist immer eine positive Zahl (abgesehen vom EOF das hier keine wirkliche Rolle spielt), was auch gleich die Unsicherheit beseitigt, ob die Implementierung eines char nun signed oder unsigned ist.
 

German

Well-Known Member
c-b Experte
#9
Es gibt nichts umzuwandeln.
C:
#include <stdio.h>

int main(void)
{
  int charcode = 0;
  while ((charcode = getchar()) != '\n')
    putchar(charcode);

  return 0;
}
charcode ist als int deklariert, getchar() liefert ein int (mit dem du machen kannst was immer die Aufgabenstellung verlangt) und putchar() will wieder ein int als Parameter für die Ausgabe. Hab ich aber oben im Grunde schon mal genauso erklärt.
 
#11
Es gibt nichts umzuwandeln.
C:
#include <stdio.h>

int main(void)
{
  int charcode = 0;
  while ((charcode = getchar()) != '\n')
    putchar(charcode);

  return 0;
}
charcode ist als int deklariert, getchar() liefert ein int (mit dem du machen kannst was immer die Aufgabenstellung verlangt) und putchar() will wieder ein int als Parameter für die Ausgabe. Hab ich aber oben im Grunde schon mal genauso erklärt.
Erstmal frohe Weihnachten euch allen.
Was du dort geschrieben hast: hab jetzt viele Tag da rum probiert, doch ich bekomme überhaupt nichts am laufen. Könnt Ihr bzw du mir nochmal ein bisschen helfen ? Ich saß wirklich seit Donnerstag dran und hab keine gescheite Sache hinbekommen leider.....
Alex :)
 

lano

Well-Known Member
c-b Experte
#13
Ich glaub da ist nix...

Aendern wir das mal.
C:
/* Zeichen_decodieren */
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>


int main (int argc, char *argv[], char *envp[]) {

  int charcode = 0;
  while ((charcode = getchar()) != '\n') {

    if (charcode > 97)
        charcode = (charcode - 92);

    if ( (charcode >= 9 && charcode <= 13) || (charcode >= 33 && charcode <= 45) ) {
        charcode = (charcode * 2) + 31;
        putchar(charcode);
        continue;
    }

    if ( (charcode >= 21 && charcode <= 25) || (charcode >= 46 && charcode <= 58) ) {
        charcode = ((charcode + 1) * 2) + 4;
        putchar(charcode);
        continue;
    }

    putchar(charcode);

}
return EXIT_SUCCESS;
}
 

German

Well-Known Member
c-b Experte
#14
Glaube ich auch. Darum habe ich etwas provokativ nachgefragt. Seit Donnerstag ab und zu drüber nachzudenken hier noch mal nachzuhaken, in der Hoffnung dass sich doch jemand findet der die Hausaufgaben macht, ist nicht Sinn der Aktion. Mann sollte zumindest probiert haben, selbst was auf die Beine zu stellen. Ich hab aber noch nicht mal eine einzige Zeile Code gesehen...
 

German

Well-Known Member
c-b Experte
#16
Jo. Und der TE verzichtet auf die Punkte und lässt sie dir gutschreiben. Bald hast du deinen Abschluss. Schließlich wird ja auch lediglich deine Leistung bewertet. OK, einen Punkt darf er behalten wegen erfolgreichem Copy/Paste.
 

lano

Well-Known Member
c-b Experte
#17
Jo. Und der TE verzichtet auf die Punkte und lässt sie dir gutschreiben.
Dann bitte an der Kasse den Code 109 353 64 33 nennen :D

Bald hast du deinen Abschluss.
Da faellt mir ja ne Geschichte zu ein ...
Nachdem ich mal ne Ausbildung gemacht habe, hatte ich danach kein Bock auf Arbeit.
Also hab ich weiter mit Schule gemacht, da hatte ich aber auch keine Lust und hab mich auf den technischen Unterricht konzentriert.
Deutsch, Englisch, Geschichte, usw bin ich gar nicht erschienen. Aus versehen war ich mal bei Franzoesisch, hat aber auch nix gebracht.
Ende vom Lied, alle Faecher 0 Punkte, biss auf Kunst, da hab ich einen bekommen, war aber nie da, wusste gar nicht wo der Kunst Raum ist oder wer da ueberhaupt meine Lehrerin sein sollte und Elektrotechnik/Werken wo ich locker 15 Punkte bekommen hab. Die Lehrer fanden das natuerlich nicht gut das ich nur gekommen bin wann ich wollte und so grinste es mich bei der Uebergabe des Zeugnisses mit den Worten doof an, "Den Hauptschulabschluss bekommen Sie von uns nicht!". Worauf ich dann ganz trocken gefragt habe ob ich meinen Realschulabschluss jetzt zurueck geben muesste. Man waren die sauer. Die haben mich danach auch nur Zaehneknirschend fuers technische Gymnasium genommen und mit Sekt Party wieder raus geworfen.

Schließlich wird ja auch lediglich deine Leistung bewertet.
Seh ich zwiespältig. Einerseits hast du recht und es ist Betrug. Andererseits, ist der wohl moeglich so eindeutig zu erkennen das die sich selbst nen Eigentor schiessen. Und wenn die den Code nehmen und Umformatieren uebt es ja auch geringfuegig.

OK, einen Punkt darf er behalten wegen erfolgreichem Copy/Paste.
Da haette ich jetzt nen Folgefehler fuer gegeben :D
 
#18
Hey zusammen,

also erstmal studiere ich Elektrotechnik mit Schwerpunkt Elektrische Energietechnik. Hab nur dieses eine Modul im Studium, wo es um C Programmierung geht, danach hab ich es nie wieder. Mir geht es hierbei auch nicht das Ihr mir ein Programm schreibt, nur einen Ansatz gibt und der halbwegs (für C Anfänger) einfach erklärt ist. :) vllt auch mit einem Beispiel, damit ich es testen kann und ich dann weiß wie die und die Funktion in C dann funktioniert bzw für was die gut ist.
Also studiere hier kein Informatik oÄ, hab mit Programmieren überhaupt nichts am Hut, deswegen sorry das ich vllt eine etwas genauere bzw ein Beispiel dann gerne haben möchte, damit ich die Funktion "xyz" verstehe.
Wäre das gleiche wenn ich einem Elektrotechnik-Laie (der sonst nie was mit Elektronik zu tun hat bzw haben wird) irgendwelche Schaltung mit nur Fachbegriffe erklären würde.

LG Alex

EDIT: Und das aktuelle Modul im Studium wo es um C Programmierung geht, ist nur ein Online Kurs. Bekomme dort keine Unterlagen oder irgendwas erklärt. Ich bekomme dort nur die Aufgaben online gestellt die ich dann online Hochladen muss. :)
 
#19
Ich glaub da ist nix...

Aendern wir das mal.
C:
/* Zeichen_decodieren */
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>


int main (int argc, char *argv[], char *envp[]) {

  int charcode = 0;
  while ((charcode = getchar()) != '\n') {

    if (charcode > 97)
        charcode = (charcode - 92);

    if ( (charcode >= 9 && charcode <= 13) || (charcode >= 33 && charcode <= 45) ) {
        charcode = (charcode * 2) + 31;
        putchar(charcode);
        continue;
    }

    if ( (charcode >= 21 && charcode <= 25) || (charcode >= 46 && charcode <= 58) ) {
        charcode = ((charcode + 1) * 2) + 4;
        putchar(charcode);
        continue;
    }

    putchar(charcode);

}
return EXIT_SUCCESS;
}
Was wäre das den wenn ich Fragen darf? Wäre das die Funktion die das eingebene decodiert und man müsste nur noch was einlesen und ausgeben?
EDIT: Erledigt. Nur trotzdem eine Frage wofür diese Funktion eigentlich gut ist bzw wie die heißt damit ich dies dann selbst nachlesen kann. :)

C:
(charcode = getchar())
 
Oben