Plagioinnin tunnistaminen lähdekielisistä ohjelmista



Samankaltaiset tiedostot
Muuttujien roolit Kiintoarvo cin >> r;

13 Operaattoreiden ylimäärittelyjä

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Ohjelmoinnin perusteet Y Python

Algoritmit 1. Demot Timo Männikkö

Ohjelmoinnin perusteet Y Python

Algoritmit 1. Demot Timo Männikkö

Tehtävä 1. TL5302 Olio-ohjelmointi Koe Malliratkaisuja. Tässä sekä a)- että b)-kohdan toimiva ratkaisu:

Ohjelmointi 1 Taulukot ja merkkijonot

Olio-ohjelmointi 2. välikoe HYV5SN

Ohjelmoinnin perusteet Y Python

Tietotyypit ja operaattorit

Ohjelmoinnin perusteet Y Python

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Ohjelmoinnin perusteet Y Python

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout:

ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Jukka Helle

Kääntäjän virheilmoituksia

Lyhyt kertaus osoittimista

Ohjelmoinnin perusteet Y Python

Olio-ohjelmointi Syntaksikokoelma

\+jokin merkki tarkoittaa erikoismerkkiä; \n = uusi rivi.

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Tietueet. Tietueiden määrittely

Ohjelmoinnin peruskurssi Y1

TAITAJA 2007 ELEKTRONIIKKAFINAALI KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmoinnin perusteet Y Python

Interaktiivinen tarinankerronta

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Ohjelmoinnin peruskurssi Y1

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

// // whiledemov1.c // #include <stdio.h> int main(void){ int luku1 = -1; int luku2 = -1;

Ohjelmoinnin perusteet Y Python

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

2 Haku ja lajittelu. 2.1 Luvun hakeminen taulukosta X?? n-1. Haku ja lajittelu 35

13. Hyvä ohjelmointitapa (osa 1) 13.1

Ohjelmoinnin perusteet Y Python

-ohjelmointikurssi luentomoniste ja tehtävät

11. Javan toistorakenteet 11.1

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Ohjelmoinnin perusteet Y Python

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Java-kielen perusteet

JavaScript alkeet Esimerkkikoodeja moniste 2 ( Metropolia)

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat:

ITKP102 Ohjelmointi 1 (6 op)

Loppukurssin järjestelyt

12 Mallit (Templates)

Java-kielen perusteet

Tietorakenteet ja algoritmit

Algoritmit 2. Luento 13 Ti Timo Männikkö

12. Javan toistorakenteet 12.1

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

1. Kun käyttäjä antaa nollan, niin ei tulosteta enää tuloa 2. Hyväksy käyttäjältä luku vain joltain tietyltä väliltä (esim tai )

Ohjeet. AS C-ohjelmoinnin peruskurssi Aalto-yliopiston sahkotekniikan korkeakoulu Tentti , Raimo Nikkila

Esimerkki: Laskin (alkua) TIEA341 Funktio ohjelmointi 1 Syksy 2005

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005

14. oppitunti. Operaattorin ylikuormitus. Osa. Operaattorin ylikuormittaminen

12. Javan toistorakenteet 12.1

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

Moduli 5: Kehittyneitä piirteitä

Ohjelmoinnin perusteet Y Python

Loppukurssin järjestelyt C:n edistyneet piirteet

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

Ohjelmoinnin peruskurssi Y1

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Kirjoita, tallenna, käännä ja suorita alla esitelty ohjelma, joka tervehtii käyttäjäänsä.

Esimerkki 1: Kahviautomaatti.

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

14. Hyvä ohjelmointitapa 14.1

Ohjelmoinnin peruskurssi Y1

ITKP102 Ohjelmointi 1 (6 op)

Algoritmit 2. Demot Timo Männikkö

Java-kielen perusteet

Luennon sisältö Tyypit int, char, float, double signed, unsigned short, long Vakiot const Rakenteet if, for, while, switch, do-while Syöttö ja tulostu

Tietorakenteet ja algoritmit

Sisältö. 2. Taulukot. Yleistä. Yleistä

Algoritmit 2. Demot Timo Männikkö

UML -mallinnus Viestiyhteyskaavio EERO NOUSIAINEN

Luento 5. Timo Savola. 28. huhtikuuta 2006

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Osa. Toimintojen toteuttaminen ohjelmissa vaatii usein haarautumisia ja silmukoita. Tässä luvussa tutustummekin seuraaviin asioihin:

Ohjelmoinnin perusteet Y Python

Johdatus ohjelmointiin / Lausekielinen ohjelmointi 1 & 2

T Olio-ohjelmointi Osa 3: Luokka, muodostin ja hajotin, this-osoitin Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

Algoritmit 2. Luento 13 Ti Timo Männikkö

Transkriptio:

Plagioinnin tunnistaminen lähdekielisistä ohjelmista Plagiointi- ja tutkimusetiikka seminaari 30.09.2003 Kirsti Ala-Mutka TTY/Ohjelmistotekniikka

Sisältö Plagiointi ohjelmointikursseilla Tyypillisiä ulkoasumuutoksia Plakki-työkalu Plagioinnin tarkistus kursseilla Työkalun käyttökokemuksia

Plagiointi ohjelmointikursseilla Plagioinnin määritelmä ohjelmointiharjoitustöissä TTY:lla on elektronisessa muodossa tapahtuva ohjelmakoodin siirto Plagiointi on helppoa, koska ohjelmat ovat tekstimuotoisia tiedostoja Kiinnijäämisen riski suurissa opiskelijaryhmissä on usein pieni On mahdollista tehdä näennäisiä ulkoasumuutoksia vaikeuttamaan plagioinnin tunnistusta

Tyypillisiä ulkoasumuutoksia Merkkijonojen muuttaminen Kommenttien muuttaminen Erilaiset nimeämiskäytännöt Ohjelman osien järjestyksen vaihtaminen Lausekkeiden kirjoitusasun muokkaus // Jakolaskun toteuttava funktio int jaa(const int jaettava, const int jakaja) { float tulos = 0; // tarkistetaan ettei jakaja ole 0 if (jakaja == 0){ cout << Jakaja ei saa olla 0 ; else { tulos = jaettava/jakaja; cout << Tulos on << tulos; return EXIT_SUCCESS; // assignment no 1 int divide ( int a, int b ){ if ( b == 0 ) cout << Illegal divisor ; // no div else { float tmp = 0; tmp = a/b; // do div cout << Result: << tmp; return 0;

Plakki-työkalu Toteutettu UNIX-ympäristöön C/C++-kielisille ohjelmille Pelkistää ohjelmien ulkoasuyksityiskohdat ennen käsittelyä Vertaa annettuja ohjelmia pareittain ja tuottaa samankaltaisuusprosenttilistan, esim. 100%/ 96% : pekka.cc maija.cc 90% / 93% : ville.cc pekka.cc 85% / 90% : ville.cc maija.cc 75% / 80% : kalle.cc maija.cc... Tuloksen tulkinnassa huomioitava ohjelman koko ja annetun ohjeistuksen määrä

// Ohjelma, joka muuntaa kirjainjonoja Caesar-salauksella #include <string.h> #include <iostream.h> // Määritellään vakioiksi käytettävät aakkostot ja kirjainmäärä const char* alphabets = "abcdefghijklmnopqrstuvwxyzåäö"; const char* capitals = "ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ"; const int amount = 28; // Apufunktio joka laskee annettua merkkiä vastaavan merkin char caesar(int, int); char caesar(int charno, int key) { charno = (charno+key) % 29; return charno; // Pääohjelma int main() { int key=0; char ch=' '; int index=0; // Kysytään käyttäjältä salausavain cout << "Anna merkkijonon muunnoksessa käytettävä avain ; cin >> key; // Luetaan ja koodataan viesti while (cin.get(ch)){ if (ch==' ' ch=='\n' ch=='\t'){ cout << ch ; else { while(index<=amount){ if(alphabets[index]==ch){ cout << alphabets[caesar(index, key)]; break; if(capitals[index]==ch){ cout << alphabets[caesar(index, key)]; break; // Kirjainta ei löytynyt aakkostoista if (index==amount+1){ cerr << "Tuntematon kirjain!" << endl; index++; return 0; #include <iostream.h> #include <string.h> int kirjainmaara = 28; // aakkoston pituus char* aakkosto = "abcdefghijklmnopqrstuvwxyzåäö"; // pienet char* isoaakkosto = "ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ"; //isot char caesar( int merkkinro, int avain ); int main() { int avain = 0; cout << "Anna salausavain: "; // kysytään avain cin >> avain; // luetaan avain char merkki = ' '; while ( cin.get(merkki) ) { // luetaan syötettä if ( merkki == '\n' merkki == '\t' merkki == ' ' ) cout << merkki ; // tulostetaan suoraan else { int monesko = 0; while ( monesko<=kirjainmaara ) { if( isoaakkosto[monesko] == merkki ) { // iso cout << aakkosto[ caesar(monesko, avain) ]; break; if( aakkosto[monesko] == merkki ) { // pieni cout << aakkosto[ caesar(monesko, avain) ]; break; if ( monesko == kirjainmaara + 1 )//tunnistamaton cerr << "Tunnistamaton poistettu." << endl; monesko++; return EXIT_SUCCESS; char caesar(int merkkinro, int avain) { merkkinro = ( merkkinro + avain ) % 29; return merkkinro; // palautetaan muunnettu merkki

Plagioinnin tarkistus kursseilla Harjoitustöitä vertaillaan palautusmääräajan päätyttyä o Vertailua voidaan tehdä myös aiempien vuosien töihin Työkalu toimii hälytyskellona, opettaja tarkastaa tapaukset henkilökohtaisesti o Tutkii tarkemmin esim. lausekkeiden järjestystä, työn versiohistoriaa, näkymättömiä merkkejä o Epäillyt opiskelijat kutsutaan haastatteluun Plagioitua työtä ei hyväksytä suoritukseksi, myös tietoisesti plagiointiin työnsä luovuttaneen opiskelijan kurssisuoritus keskeytyy

Työkalun käyttökokemuksia Plakin käyttöönotto selvästi auttanut plagioinnin tunnistamista o Ensimmäisillä käyttöönottokerroilla plagiointitapauksia löytyi hyvin runsaasti o Edelleenkin harjoitustöistä paljastuu aina muutamia kopiointitapauksia Työkalu ei ole antanut vääriä hälytyksiä Lisäkehityskohteita löytyy monikäyttöisyyden, tehokkuuden ja kopioiden tunnistamisen suhteen Työkalu on ollut hyödyllinen ja tarpeellinen apuväline ohjelmointikurssien opettajille

Kiitoksia mielenkiinnosta! Yhteystiedot: Kirsti Ala-Mutka TTY/Ohjelmistotekniikka kirsti.ala-mutka@tut.fi