Was macht das % ?

DJWxD

Cadet 1st Year
Registriert
Nov. 2020
Beiträge
12
Code:
int main (void) {
 
  int Nummer1,Nummer2,Nummer3,Nummer4,Nummer5,Nummer6,Nummer7; 
  int Additions_Ergebnis;
  int Modulo_O1=11;
  int Modulo_02=10;
  int quotient;
  int prufziffer;
  int p_848518;
 
  char m848518= '-';  /* hier habe ich char verwendet, da das Minuszeiche ein Zeichen
                       ist und keine Integrale (Zahl)*/ 
 
 Nummer1 = getchar()-'0';                       
 Nummer2 = getchar()-'0';                     
 Nummer3 = getchar()-'0';   
 Nummer4 = getchar()-'0';   
 Nummer5 = getchar()-'0';   
 Nummer6 = getchar()-'0';
 Nummer7 = getchar()-'0';
 
/* Ich habe hier die benötigte menge an Zahlen die*/   
/*  Eingegeben werden müssen, auf gelisstet. Mit jedem*/   
/* getchar() wird eine zahl abgefragt, da der Code ohne*/
/*Prüfziffer, 7 Ziffern lang ist benötige ich 7 Zahlen*/
/*die selbständig eingetippt werden müssen. */

 
Additions_Ergebnis = Nummer1 *1 + Nummer2 *2 + Nummer3 *3 + Nummer4*4 + Nummer5*5 + Nummer6*6 + Nummer7*7;
prufziffer = Additions_Ergebnis%Modulo_O1;
p_848518 = prufziffer%Modulo_02;

 
printf("\nSprich die PZN aus meiner Martikelnummer lautet: PZN%c%i%i%i%i%i%i%i%i", m848518, Nummer1, Nummer2, Nummer3,Nummer4,Nummer5,Nummer6,Nummer7,p_848518);

 

 
 
  return 0;
}

Meine Frage ist jetzt, was macht das bloße %, wie z.B in "prufziffer = Additions_Ergebnis%Modulo_O1"?
 
Der %-Operator bedeutet Modulo. Also der Restwert nach einer Teilung.

Beispiel:

10 % 4 = 2
 
Bitte hole dir dringend Feedback bei deinem Übungsleiter oder Dozenten ab. Wenn es in dem betreffenden Programmiermodul ein Minimum an Code-Qualitätsansprüchen gibt, dann muss der Code bereits umfangreich überarbeitet werden. Abgesehen davon musst Du nicht jede Ziffer der Matrikelnummer einzeln einlesen, sondern kannst auch einfach die gesamte Matrikelnummer in einer Integer-Variable (INTEGER, nicht INTEGRALE) speichern und dann per Modulo-Operator die einzelnen Dezimalstellen durchgehen. Gerade wenn ihr schon mit Schleifen gearbeitet habt, lässt sich das sehr viel eleganter lösen.
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: Maviapril2
% Operator = Division mit Rest.
10 % 2 = wie oft passt die 2 in die 10? = 5, Rest = 0 = Resultat = 0
10 % 4 = wie oft passt die 4 in die 10? = 2, Rest = 2 = Resultat = 2
 
KuestenNebel schrieb:
unnötiges Vollzitat entfernt
Haben wir eben nicht. Bin noch neuling.. -.- Sollte das bisschen Abwertent klingen oder versteh ich das nur so?
 
Zuletzt bearbeitet von einem Moderator: (Unnötiges Vollzitat entfernt)
DJWxD schrieb:
Haben wir eben nicht. Bin noch neuling.. -.- Sollte das bisschen Abwertent klingen oder versteh ich das nur so?
Ich versteh das nicht so. Evtl. bist du sehr direktes aber sachliches und konstruktives Feedback nicht gewohnt.

DJWxD schrieb:
Haben wir eben nicht.
Was habt ihr nicht? Einen Übungsleiter? Kann ich mir irgendwie nicht vorstellen.
 
  • Gefällt mir
Reaktionen: Madman1209 und adAstra
Ich find's auch etwas übertrieben einem absoluten Neuling der gerade seine ersten 20 Zeilen Code geschrieben hat direkt mit Code Qualität anzukommen. Klar muss man da irgendwann hinkommen, aber erstmal ist man dich froh, wenn der erste Code läuft.

Und da ist es doch fast normal etwas 10 Mal hinzuschreiben statt ne Schleife mit furchtbar komplizierter Syntax zu benutzen. Ich mein Copy&Paste geht doch wunderbar schnell. :D
 
  • Gefällt mir
Reaktionen: KitKat::new()
Drexel schrieb:
Ich find's auch etwas übertrieben einem absoluten Neuling der gerade seine ersten 20 Zeilen Code geschrieben hat direkt mit Code Qualität anzukommen
Hausaufgabenhilfe ist hier im Forum explizit nicht erwünscht. Dementsprechend habe ich mich auf andere Aspekte bezogen - zum Beispiel die Code-Qualität. In dieser Hinsicht möchte ich dir auch scharf widersprechen: Die Einhaltung gewisser Code-Qualitätsstandards sollte man so früh wie möglich verinnerlichen, sonst mutiert man allzu schnell zum nächsten Spagetti-Coder.
 
  • Gefällt mir
Reaktionen: Madman1209
Der nächste, der nie lernt wie man mit Schleifen arbeitet kopiert womöglich 5 Jahre später 10 mal jeweils 100 Zeilen Code, benennt die Variablen um und macht dabei einen Fehler, weswegen deine Leselampe in einen fail-state geht und die sie einmal pro Abend neu starten musst um in Ruhe lesen zu können.
Sad but true.
 
  • Gefällt mir
Reaktionen: Madman1209
KuestenNebel schrieb:
Hausaufgabenhilfe ist hier im Forum explizit nicht erwünscht. Dementsprechend habe ich mich auf andere Aspekte bezogen - zum Beispiel die Code-Qualität. In dieser Hinsicht möchte ich dir auch scharf widersprechen: Die Einhaltung gewisser Code-Qualitätsstandards sollte man so früh wie möglich verinnerlichen, sonst mutiert man allzu schnell zum nächsten Spagetti-Coder.

Ich widerpsreche Dir ja nicht komplett, früh ja, aber nicht bei den allerersten Zeilen Code die er schreibt.

Du sagst ja auch niemandem der gerade zum ersten mal aufs Fahrrad steigt und wehe Du fährst jetzt Schlingerkurs... Am Anfang sind erstmal Motivation und Erfolge wichtig.
 
  • Gefällt mir
Reaktionen: KitKat::new()
Sorry, aber zu der Frage gibt's nur eine Antwort :
"prufziffer zusätzlich mit printf ausdrucken und dann GUCKEN und DENKEN"
und schon wieder 'was gelernt !
 
aw48 schrieb:
prufziffer zusätzlich mit printf ausdrucken
In welchem Jahr leben wir denn bitte? Anno 1980 mag printf-Debugging noch angemessen gewesen sein, 40 Jahre später nutzt man aber natürlich die Annehmlichkeiten moderner Debugger (z.B Breakpoints).
 
BeBur schrieb:
Der nächste, der nie lernt wie man mit Schleifen arbeitet kopiert womöglich 5 Jahre später 10 mal jeweils 100 Zeilen Code, benennt die Variablen um
Also ich fahre seit Jahrzehnten gut damit. Vor allem, da ich ja nach Lines-of-Code bezahlt werde :-)

KuestenNebel schrieb:
Anno 1980 mag printf-Debugging noch angemessen gewesen sein,
Also ich mach das heute noch manchmal.
Und da bin ich nicht der Einzige. Viele Programme haben zu dem Zweck Logs inkl. Log-Level.

KuestenNebel schrieb:
(z.B Breakpoints)
Breakpoints haben halt den Nachteil, das die Programmausführung stoppt. Das ist ja oftmals gar nicht das was ich will. Manchmal will ich ja über nen Zeitraum hinweg sehen, wie sich der Inhalt einer Variablen oder Datenstruktur ändert, um z.B: besser zu erkennen unter welchen Bedingungen ein bestimmter Fehler auftritt.
 
andy_m4 schrieb:
Manchmal will ich ja über nen Zeitraum hinweg sehen, wie sich der Inhalt einer Variablen oder Datenstruktur ändert
Lässt sich in einer modernen Programmierumgebung wie etwa "Visual Studio" doch völlig problemlos machen - ohne eine einzige überflüssige printf-Zeile, direkt im Debugger. Eventuell solltest du dir das mal anschauen.
 
KuestenNebel schrieb:
Lässt sich in einer modernen Programmierumgebung wie etwa "Visual Studio" doch völlig problemlos machen - ohne eine einzige überflüssige printf-Zeile
Naja. Was hei überflüssig. Irgendwo musst Du ja auch im Visual Studio sagen an welcher Stelle Du welche Variableninhalte ausgegeben haben willst. Auch Visual Studio kann ja nicht erraten was Du machen möchtest.
Was ist jetzt also an der Visual-Studio-Methode besser?
 
Naja, man muss schon ein wenig differenzieren.

Sowohl der Debugger als auch Logs sind Werkzeuge, mit denen man Fehlern auf die Schliche kommen kann. Allerdings sind nicht beide immer für dasselbe Szenario geeignet. Wenn ein Fehler nur sporadisch auftritt, ist es schwierig, mittels Breakpoints und Durchklicken die Ursache zu finden - zB bei der 4546565. Iteration einer Schleife oder wenn eine ganz dumme Situation aus Wechselwirkungen entsteht. Andersherum kann man in einem Log aber auch nicht alle erdenklichen potentiell relevanten Informationen ausgeben, weil sonst ein signifikanter Teil des Quellcodes nur noch aus Log-Kommandos besteht und das Log-File am Ende so groß wird, dass man es gar nicht mehr vernünftig auswerten kann.

Beides hat aber seine Daseinsberechtigung und es wäre unklug, aus Prinzip auf eines davon zu verzichten, was nicht heißt, dass man bei jedem Pups eine große Log-Datei führen muss.
 
  • Gefällt mir
Reaktionen: Nase
Raijin schrieb:
Sowohl der Debugger als auch Logs sind Werkzeuge, mit denen man Fehlern auf die Schliche kommen kann. Allerdings sind nicht beide immer für dasselbe Szenario geeignet.
Ich bin da vollkommen Deiner Meinung. :-)

Raijin schrieb:
Beides hat aber seine Daseinsberechtigung und es wäre unklug, aus Prinzip auf eines davon zu verzichten, was nicht heißt, dass man bei jedem Pups eine große Log-Datei führen muss.
Genau.
 
Zurück
Oben