Zum Forum springen
Benachrichtigungen
Alles löschen

Programmieraufgabe Java (10$) inside

69 Beiträge
19 Benutzer
0 Reactions
4,266 Ansichten

nein, wir sind 40 Leute im Kurs. Wir müssen unseren Quellcode hochladen und Sie jagt alle 40 Quellcodes durch jpleg um Plagiate unterinenader zu finden, So will sie verhindern, dass einer die Arbeit macht und alle andern abschreiben. Deshalb muss ich auch den Quellcode strukturell verändern, da sie bei einer Übereinstimmung von über 65% 0Pkt bewertet wegen Plagiat.

Das bedeutet ich muss meine Lösung umformen um somit ne Chance zu haben. Wie gehe ich dort am besten vor???


Antwort
Zitat
pg89
Beigetreten: 05.04.2008

Wie lange soll das prog denn brauchen? Bis das fertig ist bist du mit deinem studium doch eh durch :coolface:
Meiner erfahrung nach erzählen lehrer / dozenten gerne mal ein bisschen schwachsinn, damit man eben nicht einfach was aus dem internet kopiert und leicht abändert.

edit: ok zu langsam, wenn sie nur eure sachen untereinander vergleicht ok...ist aber trotzdem schwachsinn, da programme die das gleiche machen obv auch häufig ähnliche struktur haben.
Du kannst natürlich sowas machen wie get... und set... rausnehmen und die variablen direkt public machen etc. Aber gerade bei so kleinen progs gibt es einfach nicht so viele unterschiedliche ansätze, dass keine zwei aus dem kurs ähnliche sources haben..


Antwort
Zitat

no, das ist bereits schon die 3 Abgabe und bei den erste beiden gabs eiskalt 40% der Leute 0 Pkt weil sie angeblich voneinander abgeschrieben haben..(wegen Jpleg...)


Antwort
Zitat
Miuvrit
Beigetreten: 04.05.2010

das müsste es sein
https://www.ipd.uni-karlsruhe.de/jplag/

JPlag is a system that finds similarities among multiple sets of source code files. This way it can detect software plagiarism. JPlag does not merely compare bytes of text, but is aware of programming language syntax and program structure and hence is robust against many kinds of attempts to disguise similarities between plagiarized files. JPlag currently supports Java, C#, C, C++, Scheme and natural language text.


Antwort
Zitat

Teufelswerk!


Antwort
Zitat
Miuvrit
Beigetreten: 04.05.2010

das wichtigste aber :

Just to make it clear: JPlag does not compare to the internet! It is designed to find similarities among the student solutions, which is usually sufficient for computer programs.


Antwort
Zitat

ja, ich hab ja aber keine Lösung gefunden im Inernet :/


Antwort
Zitat
FiftyBlume
Beigetreten: 06.06.2010

Original von noldini
no, das ist bereits schon die 3 Abgabe und bei den erste beiden gabs eiskalt 40% der Leute 0 Pkt weil sie angeblich voneinander abgeschrieben haben..(wegen Jpleg...)

Der würd ich einen erzählen, das kann eigentlich nicht sein.

Sieh es mal so:

Ihr schreibt ein Programm mit _vorgegebner_ Syntax der Funktionen - damit gibts in der Klasse RationaleZahl eigentlich nur die 3 Möglichkeiten für die 4 Rechenoperationen, wobei _jeder_ Programmierer sich natürlich bei allen 4 Operationen für die gleiche Möglichkeit entscheidet. D.h. da ist die Übereinstimmung(von Variablennamen mal abgesehen) quasi immer weit über 65%.

In der Klasse Start gibts sicherlich unterschiedliche Möglichkeiten, aber auch dort ist man sehr stark eingeschränkt - du musst ja die anderen Methoden aufrufen und die Eingabe/Ausgabe managen...wofür es wiederum kaum unterschiedliche Möglichkeiten gibt. Bei der Aufgabenstellung kann man davon ausgehen, dass normale Programmierer im Sourcecode eigentlich immer auf eine Übereinstimmung von >70% kommen.

Wenn du das Programm tatsächlich verstanden hast und erklären kannst, dann lass es drauf ankommen und Verweis auf die Aufgabenstellung...


Antwort
Zitat
MisterJ
Beigetreten: 26.03.2006

#

Wenn soviel vorgegeben ist, bin ich mir sicher, dass es bei 40 Leuten einfach Übereinstimmungen geben muss, insb. wenn man http://de.wikipedia.org/wiki/Geburtstagsparadoxon beachtet.


Antwort
Zitat

so, ich habe nun meine Klasse RationaleZahl folgendermaßen umgeschrieben:

import java.util.Scanner;

public class RationaleZahl{
private int zaehler;
private int nenner;
Scanner sc = new Scanner (System.in);

public RationaleZahl(){
zaehler=0;
nenner =1;
}
public RationaleZahl(int zaehler, int nenner)
{this.zaehler=zaehler;
this.nenner=nenner;
}

public int getZaehler() {
return zaehler;
}

public void setZaehler(int zaehler) {
this.zaehler = zaehler;
}

public int getNenner() {
return nenner;
}

public void setNenner(int nenner) {
this.nenner = nenner;
}

public RationaleZahl addiere (RationaleZahl z){
return new RationaleZahl (zaehler*z.getNenner()+nenner*z.getZaehler(),nenner*z.getNenner());
}

public RationaleZahl subtrahieren (RationaleZahl z){
return new RationaleZahl (zaehler*z.getNenner()-nenner*z.getZaehler(),nenner*z.getNenner());
}

public RationaleZahl multiplizieren(RationaleZahl z){
return new RationaleZahl (zaehler*z.getZaehler(),nenner*z.getNenner());
}

public RationaleZahl dividieren (RationaleZahl z){
return new RationaleZahl (zaehler*z.getNenner(),nenner*z.getZaehler());
}

public String ausgeben (){
return zaehler + " / "+ nenner;
}

public void kuerzen() {
int i,
n= Math.abs(nenner),
z= Math.abs(zaehler);
while (z > 0){
if( z < n ){
i= n;
n= z;
z= i;
}
z= z - n;
}
nenner= nenner / n;
zaehler= zaehler / n;
}
}

Gehe ich richtig in der Annahme, dass ich in der Klasse nichtsmehr machen kann? Die Konstruktoren sind vorgegeben, die Rechenmethode ist ja gerade veränder worden und die Methde kürzen ist vorgegeben. Ausgabe kann man auch nicht verändern. Das heißt an der Klasse kann ich nichtsmehr ändern?

Jetzt geht es nurnoch um die Klasse Start. Vielleicht kann mir dort auch noch jemand helfen wie ich das anders ausdrücken kann.
Das mit dem "Der würd ich was erzählen" is garnich so einfach, die Frau ist betriebsblind, seit 20 Jahren an der Hochschule und vollkommen Kritikresistent. Lernen tuen wir auch nix...

Hier die Startklasse

import java.util.ArrayList;
import java.util.Scanner;

public class Start {
static Scanner sc = new Scanner(System.in);

public static void main (String []args){
ArrayList <String> ergebnisse =new ArrayList<String>();
String condition;

do{
System.out.print("Bitte geben Sie nun einen Bruch ein: ");
RationaleZahl rz1 = einleseBruch();
System.out.print("Bitte geben Sie nun den Operator an: ");
String op = einlesenOp();
System.out.print("Bitte geben Sie erneut einen Bruch ein: ");
RationaleZahl rz2 = einleseBruch();
RationaleZahl rzE = null;
switch (op){
case "+": rzE = rz1.addiere(rz2);break;
case "-": rzE = rz1.subtrahieren(rz2);break;
case "*": rzE = rz1.multiplizieren(rz2);break;
case "/": rzE = rz1.dividieren(rz2);break;
}
rzE.kuerzen();
System.out.println(rz1.ausgeben()+" "+op+" "+rz2.ausgeben()+" = "+rzE.ausgeben());
ergebnisse.add(rz1.ausgeben()+" "+op+" "+rz2.ausgeben()+" = "+rzE.ausgeben());

System.out.print("erneute Berechnung? (j/n): ");
condition = sc.next();

}while (!condition.equalsIgnoreCase("n"));
System.out.println();
System.out.println("~~~~~~~~~~~~~~~~");
System.out.println("Berechnet wurden: ");
for (String out : ergebnisse) {
System.out.println(out);
}
System.out.println();
System.out.println("Auf Wiedersehen!");
}

public static RationaleZahl einleseBruch(){
Scanner sc = new Scanner(System.in);
String eingabe=sc.nextLine();;
String[] bla = eingabe.split("/");
bla[0]=bla[0].trim();//selbe für bla 1
bla[1]=bla[1].trim();
return new RationaleZahl(Integer.valueOf(bla[0]),Integer.valueOf(bla[1]));

}

public static String einlesenOp(){
Scanner sc = new Scanner (System.in);
return sc.nextLine();
}
}


Antwort
Zitat
sarc
Beigetreten: 06.06.2008

Lernen tuen wir auch nix...

Das ist, mit Verlaub, dann aber nicht nur die Schuld des Dozenten. Gerade bei schlechten Dozenten ist man halt gezwungen, selber mehr zu machen. Und wenn du das Programm jetzt verstanden hast, hast du schon einiges gelernt... ;)

Wegen dem Plagiatszeug würd ich mich als erstes mal an die Fachschaft wenden, vielleicht haben die Vorschläge. Das ist hart lächerlich. Wenn ihr mit ihr redet, auf jeden Fall sachlich bleiben und keine Vorwürfe, das bringt nämlich gar nix.


Antwort
Zitat

Das Problem mit dieser Frau haben die Studenten schon seit über 10 Semestern.
Seit über 10 Semester beschweren sich Leute über diese Frau, wegen Plagiaten, weil ihr Unterricht total unstrukturiert ist usw usw.

Es hat sich nichts geändert. Wir haben uns bereits beschwert , haben mit Fachleiter und Studiengangsprecher gesprochen. Haben einen Brief geschrieben.
Einzige Konsequenz war, dass sie umbedingt wissen wollte, wer für diesen ( sehr sehr sachlichen und nur auf Wahrheiten basierenden) Brief verantwortlich ist und erstmal den Tutor der vermittelt hat zwischen uns entlassen hat. Wenn man es sich mit ihr verscherzt, hat man verkackt. Sie ist KOMPLETT KRITIKRESISTENT und weil ich sie nächstes Jahr nochmal hab, werd ich mich nich beschweren. Und ja Selbststudium, da sagste was, hab mir bisher ALLES selber beigebracht , war aber in jeder Vorlesung und jeder Übung. Der einzige ders drauf hat war der Tutor..


Antwort
Zitat
sarc
Beigetreten: 06.06.2008

Anwesenheitspflicht in der Vorlesung? Sonst sollte klar sein, welche der Veranstaltungen man nicht mehr besucht... ;)

Und Tutorien sind für gewöhnlich anders strukturiert als Vorlesungen. Gerade bei den Grundlagenvorlesungen hab ich fast überall mehr im Tutorium gelernt als in der Vorlesung. Aber ja, die Frau klingt schon ziemlich böse.


Antwort
Zitat

Noch jemand ne Idee wie ich die Klasse Start umstrukorieren kann?


Antwort
Zitat
MisterJ
Beigetreten: 26.03.2006

Die beste Möglichkeit nicht "aus Versehen" abzuschreiben ist es gar nichts umzustrukturieren.
Nimm einfach nur die Aufgabenbeschreibung und implementiere es selbst ohne dabei abzugucken. In der Regel kriegst du dann deine eigenen Struktur. Wenn es zu ähnlich ist kann man immer noch dran rumdoktoren.


Antwort
Zitat
philwen
Beigetreten: 13.05.2007

mach statt einer großen main-methode eine methode die nur die einlese funktion übernimmt, eine die nur die "berechnung" übernimmt etc

und shcon hast du eine eigene struktur und übts nochmal ;)


Antwort
Zitat

kannst du mir den tipp mit dem mainmethode kleinermachen meinst?

Vielleicht kannst du mir das sogar kurze Anleitung geben wie ich das mache? ;/ Wär sehr geil :P


Antwort
Zitat

so in etwa?

import java.util.ArrayList;
import java.util.Scanner;

public class Start {
static Scanner sc = new Scanner(System.in);
static ArrayList <String> berechneteErg =new ArrayList<String>();

public static void main (String []args){
String condition;

do{
System.out.print("Bitte geben Sie nun einen Bruch ein: ");
RationaleZahl rz1 = einleseBruch();
System.out.print("Bitte geben Sie nun den Operator an: ");
String op = einlesenOp();
System.out.print("Bitte geben Sie erneut einen Bruch ein: ");
RationaleZahl rz2 = einleseBruch();
RationaleZahl rzE = null;
switch (op){
case "+": rzE = rz1.addiere(rz2);break;
case "-": rzE = rz1.subtrahieren(rz2);break;
case "*": rzE = rz1.multiplizieren(rz2);break;
case "/": rzE = rz1.dividieren(rz2);break;
}
rzE.kuerzen();
System.out.println(rz1.ausgeben()+" "+op+" "+rz2.ausgeben()+" = "+rzE.ausgeben());
berechneteErg.add(rz1.ausgeben()+" "+op+" "+rz2.ausgeben()+" = "+rzE.ausgeben());
System.out.print("erneute Berechnung? (j/n): ");
condition = sc.next();
}while (!condition.equalsIgnoreCase("n"));
ausgabe();
}

public static RationaleZahl einleseBruch(){
Scanner sc = new Scanner(System.in);
String eingabe=sc.nextLine();;
String[] bla = eingabe.split("/");
bla[0]=bla[0].trim();//selbe für bla 1
bla[1]=bla[1].trim();
return new RationaleZahl(Integer.valueOf(bla[0]),Integer.valueOf(bla[1]));

}

public static String einlesenOp(){
Scanner sc = new Scanner (System.in);
return sc.nextLine();
}

public static void ausgabe(){
System.out.println();
System.out.println("~~~~~~~~~~~~~~~~");
System.out.println("Berechnet wurden: ");
for (String out : berechneteErg) {
System.out.println(out);
}
System.out.println();
System.out.println("Auf Wiedersehen!");
}

}


Antwort
Zitat

wie bekomme ich extra eingabemethoden? Weil die Objekte die ich dann in dieser Methode erstelle benötoge ich ja in den andern Methoden oder?

Und wie sollte die Berechnungsmethode aussehen?


Antwort
Zitat
philwen
Beigetreten: 13.05.2007

du kannst einfach jeden bielibigen codeblock in deiner alten methode in einer eigenen methode kapseln

zB

main alt:
befehl1;
befehl2;
befehl3;

main neu:
neueMethode1;
befehl3;

neueMethode1(){
befehl1;
befehl2;
}

PS: bin mir abe rgar niht sicher ob das die struktur verändert, da ja die gleichen befehle ausgeführt werden...


Antwort
Zitat