Kommentarer til opgave 4-6

Relaterede dokumenter
Python 3 kursus lektion 1:

Python programmering. Per Tøfting. MacFest

Jeg har i forbindelse med it og programmering designet og udviklet et it-produkt, som kan beregne rødder i en anden gradsligning.

Lær Python dag 1 - modul 1

Aarhus Universitet, Science and Technology, Computer Science. Exam. Wednesday 27 June 2018, 9:00-11:00

DM536. Rapport og debug

2) Det er let at være produktiv med Python, da Python som regel kun har mellem 67 og 80% færre linier end tilsvarende C eller Java kode.

Dokumentation af programmering i Python 2.75

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

#AlleKanKode. Lektion 4 - Kontrol flow

Algoritmer og invarianter

Det er muligt at chekce følgende opg. i CodeJudge: og

Programmering for begyndere Lektion 2. Opsamling mm

Mircobit Kursus Lektion 1

It og informationssøgning Forelæsning december 2006 Jakob Grue Simonsen. Diverse emner af almen interesse

Programmeringscamp. Implementer funktionerne én for én og test hele tiden.

Programmering I Java/C#

Noter til C# Programmering Iteration

Sproget Rascal (v. 2)

DDD Runde 2, 2015 Facitliste

Terese B. Thomsen 1.semester Formidling, projektarbejde og webdesign ITU DMD d. 02/

Programmering C RTG

klient Webside Forespørgsel/ Nye data Python program Database kommando svar Database

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter Abstract

Introduktion Til Konkurrenceprogrammering

Lær Python - Dag 3, modul 1 Læse og skrive filer

Introduktion til programmering. Uge 38.1 Python 2 Learning Python, kap 8-12.

Introduktion til funktioner, moduler og scopes i Python

It og informationssøgning Forelæsning september 2006 Nils Andersen. Gentagelser og tekster

Sammenlign og byt. Et eksempel på dokumentering af et program

Lær Python - Dag 4, modul 2 Objektorienteret programmering

DANMARKS TEKNISKE UNIVERSITET

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16,

1 Opsumering fra tidligere. 2 Dagsorden 3 BIMS. 4 Programtilstande. Statements/kommandoer (Stm) i bims. 3.1 Abstrakt syntaks for bims

PHP Snippets. De små korte. Skrevet af Daniel Pedersen

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

LØKKER METODER C S HISTORIE. Grundlæggende programmering Lektion 4

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

It og informationssøgning Forelæsning oktober 2006 Nils Andersen

#AlleKanKode. Lektion 2 - Konstanter og Variabler

Mircobit Kursus Lektion 3 (Du skal her vælge Lets Code Og nederst Microsoft Block Editor.)

Aarhus Universitet, Science and Technology, Computer Science. Mock Exam. Wednesday 27 June 2018, 9:00-11:00

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

Python 3 Matematik Programmerings kursus:

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

Exceptions i Delphi. Try except

SWC eksamens-spørgsmål. Oversigt

I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen.

Forelæsning Uge 2 Torsdag

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

Computer Science Camp

Denne rapport vil beskæftige sig med hvordan computere bruger matematiske algoritmer til at sortere tal efter størrelse.

It og informationssøgning Forelæsning 5 4. oktober 2006 Nils Andersen. Tilfældige tal. Statistisk test. Sæt og associationslister.

Kapitel 4 Løkker i C#

En karakteristik af de regulære sprog. Ugens emner. FA minimering [ ] MyHill-Nerode-sætningen en algoritme til minimering af FA er

Ide med Diff. Mål. Tidsplan. 1.uge: 2.uge:

Netværk & elektronik

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Programmering i C. Lektion september 2009

26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler.

Bemærk, der er tale om ældre versioner af softwaren, men fremgangsmåden er uændret.

Start på Arduino og programmering

Data load og udtræk. 2. iteration: implmentation (test af backend) PHP mysql. Loade og parse XML (SimpleXML, Xpath) Filhåndtering i PHP JSON

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. "10") til heltal (10). if (udtryk) else

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

Under 'Microsoft Block Editor', klik 'New project' for at åbne block editor-værktøjet.

Ugeseddel 4 1. marts - 8. marts

Brug sømbrættet til at lave sjove figurer. Lav fx: Få de andre til at gætte, hvad du har lavet. Use the nail board to make funny shapes.

Sproget Limba. Til brug i G1 og K1. Dat1E 2003

#AlleKanKode. Lektion 3 - Operatorer

It og informationssøgning Forelæsning september 2006 Nils Andersen. Underprogrammer og betingelser. Standardfunktioner, typeomsætning

Programmering i C. Lektion september 2009

Indholdsfortegnelse If-sætningen... 3 Opgaver... 4 OR, AND sammen med if-sætningen... 5 Rand() funktion... 5 Opgave... 5 Include() funktionen...

Kontrol-strukturer i PHP

Forelæsning Uge 4 Torsdag

De 10 JavaScript eksamensspørgsmål

BOSK F2011, 1. del: Udsagnslogik

Induktive og rekursive definitioner

IT sikkerhed Whitelist

Programmering og Problemløsning, 2017

dmasark Aflevering - Uge 50

DM507 Algoritmer og datastrukturer

Procedurer og funktioner - iteration og rekursion

Password-beskyttelse af visse filer

Manual: Ergometer ET6

Denne artikel er en detaljeret gennemgag af det fundamentale i batchfiler til hjemmebrug :-) FEEL THE POWER! ;-)

Rettelser til Pilen ved træets rod

Abstrakte datatyper C#-version

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Visualiseringsprogram

Fable Kom godt i gang

Programmering i C. Lektion november 2008

Hvordan vælger jeg dokumentprofilen?

Eksempel: Skat i år 2000

"# $%$ " # $ % $ $ " & ( ) *+!,! Sum_Cost >= 5000SirName = Beltov Continue = %!- + ( ( - True) Continue *! If Antal <= 20 Then EnhedsOmk = 1.

Fable Kom godt i gang

Skriftlig Eksamen Beregnelighed (DM517)

Transkript:

Kommentarer til opgave 4-6 Opgaverne er stort set OK. De viser at tankegangen er rigtig. Nogle programmer virker ikke, men kræver blot en enkelt rettelse. De bliver godkendt, men I bør selv altså gøre opmærksom på at jeres løsning ikke virker. 1 Rekursionsopgaven nr. 4 Her havde en del problemer. Jeg synes Vinca Nielsen og Hanne Lynghøj lavede en korteste og smarteste løsning: def IsP(word): return word == "" or (word[0]==word[-1]) and IsP(word[1:-1]) Mange, men ikke alle, kommenterer deres løsninger. Det er en rigtig god ide at kommentere for så er det nemmere for mig at gennemskue jeres tankegang, og vurdere om ideen er rigtig. Det er specielt vigtigt når programmet ikke virker. I det tilfælde er det en god ide at gøre som Karina Svanborg. Hun giver en kommentar til programmet # Dette program er baseret på rekursion. Det vil sige et program, der kalder den samme funktion igen # og igen indtil programmet er udført og status enten er sandt eller falsk. Hvis alt det der spørges om # er sandt er ordet et palindrom. Hvis der undervejs opstår noget der ikke er sandt, er det ikke et # palindrom.som udgangspunkt er status sandt. # Jeg starter med at danne en funktion. Denne gentages sålænge det indtastede ord er større end 1. Kommentaren viser at ideen er rigtig nok. Dernæst beskriver Karina hvad problemet er: # Mit program virker ikke, for hvis jeg ændre "kajak" til "kajik" skriver det stadig at det er sandt. # Jeg har svært ved at finde fejlen. # Den rykker ind i ordet som den skal -jeg kan se at den efter "kajak" tjekker at "aja" også er # et palindrom. Det er derfor ikke der fejlen skal findes. Det må være status = True, der er problemet. # Det er ligesom om at det overskygger det hele og gør at den hele tiden skriver at status er True. # Har prøvet at rykke rundt på Status = True, men intet jeg har prøvet har virket. # Håber du kan fortælle mig hvad jeg kan gøre om for at det virker. Det gør det meget nemmere at foreslå rettelser. Der skal blot en enkelt rettelse til før Karinas program virker for det er tænkt rigtigt. Louise Krogh har det samme problem. Hendes program ser således ud: def ispalindrom(string): # Således tager programmet højde for store bogstaver: string = string.lower() # Status er True hvis længden af strengen er over 1 og første bogstav # er det samme som det sidste og så videre indad mod midten. Er dette ikke

# tilfældet er status False. Til sidst returneres status. Desværre virker det # ikke og jeg kan simpelthen ikke begribe hvorfor. Den rykker ikke ind men tjekker # bare de to yderste bogstaver i ordet. status = True if len(string) >1: if string[0]==string[-1]: print ispalindrom(string[1:-1]) print string status = False return status print ispalindrom("kajek") Fejlen ligger her: Først kigger programmet på de to k er i kajek. De er ens og det næste rekursive kald kigger på a og e i aje. De er forskellige, men Louise har en print-sætning i det tilfælde. Det vil sige der ikke returneres noget veldefineret resultat til den kaldende funktion. Ydermere påvirker dette resultat af at analysere aje ikke statusvariablen i det kald der analyserer "kajek". Dette kald tror stadig at Status = True og returnerer True. Derfor rubriceres "kajek" som et palindrom. Rettelsen er den samme som ved Karina. Faktisk kan vi igen få programmet rigtigt ved én enkelt rettelse (markeret med fed): status = True if len(string) >1: if string[0]==string[-1]: status = ispalindrom(string[1:-1]) print string status = False return status print ispalindrom("otto") Samme problem findes hos Martin Philipsen hvor isp(string[1:-1]) skal erstattes med status = isp(string[1:-1]) samt hos Rune Lippert, Sofie Juul Jensen og Torbjørn Stridbæk. 2 Barebones opgaven nr. 5 2.1 Opgave a Clear AUX; Incr AUX; While X not 0 do; Clear X; Clear AUX; End; While AUX not 0 do; Incr X; Clear AUX End; Forslaget Clear AUX While X NOT 0

DECR X DECR AUX While AUX NOT 0 INCR X DECR AUX vil ikke virke, alene af den grund af AUX bliver negativ. 2.2 Opgave b Funktionen ganger X med 2 og lægger resultatet i Z 2.3 Opgave c BNF Grammatik over Bare Bones: Prog ::= Stmlist Stmlist ::= Stm Stmlist Stm Stm ::= CLEAR id ; Stm ::= INCR id ; Stm ::= DECR id ; Stm ::= WHILE id NOT ZERO ; Stmlist ; END ; id = <word> <word> = [a-za-z][a-za-z0-9]* Udvidelse med SET: Stm ::= SET id id Realisering af SET X Y: Først sætter vi y til en værdi fx 3: clear Y; Og så kommer en sekvens hvor Y s værdi kopieres over i X clear AUX; clear X; while Y not 0 do; decr Y; incr X; incr AUX; end; while AUX not 0 do; decr AUX; end; Opgaverne: I opgave c glemmer mange af jer at sørge for statement-listen kan indholde vilkårligt mange statements: det er det den rekursive regel Stmlist ::= Stm Stmlist Stm sørger for: en statement-liste kan bestå af én statement eller af en ny statement-liste efterfulgt af én statement.

Obl øvels 6. Opsummering på Python. 3 Fejlfindingsopogaven nr. 6 Følgende opgaver er en repetition. De går ud på at finde og rette fejl. a. If-statements # a) if a <= 10: print "a is in range 0-10" if a <= 20: print "a is in range 11-20" # b) if a <= 10: print "a is in range 0-10" elif a <= 20: print "a is in range 11-20" (a) Forklar hvad forskellen på blok a) og blok b) er. Blok a: udfører (fejlagtigt) anden print-sætning hvis a er mindre end 10 Blok b: udfører anden printsætning hvis a er mellem 10 og 20 (b) Hvad for en af de 2 blokke regner så rigtigt i den forstand at den udskriver det sande udsagn? Blok b er rigtigt 2. I disse opgaver skal vi se på for- og while-statements list=[12, sild,34, torsk ] for var in range(len(list)): print list[var] (a) Hvordan kan du omskrive ovenstående udtryk med en while-konstruktion, så det stadig gør det samme? Hint: brug var som en tæller der forøges med én for hver iteration. var = 0 while var < len(list): print list[var] var += 1 numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] (a) Lav en for-løkke der udskriver hvert andet element fra ovenstående numbers liste. Hint: brug slicen [::2] der laver en ny liste bestående af hvert andet element i den gamle. numbers1 = numbers[::2] for var in range(len(numbers1)): print numbers1[var] Det kan også gøres sådan: Numbers = [1,2,3,4,5,6,7,8,9,10] for i in range(0, len(numbers),2): print Numbers[i]

(b) Lav nu en while-løkke der udskriver hvert andet element. Hint: Brug løsningen fra (a) men udskriv nu kun hver anden. var = 0 while var < len(numbers): if divmod(var,2)[1] == 0: print numbers[var] var += 1 Det kan også gøres sådan: numbers = [1,2,3,4,5,6,7,8,9,10] i = 0 while i < (len(numbers)): print numbers[i] i += 2 Nedenstående kode skal udprinte tallene 0..9, men gør det ikke (lad være at køre programmet som det er!!). run = True a = 0 while run: print a a +=1 (a) Hvad er fejlen i ovenstående kode? Run påvirkes ikke af a s værdi. Den kører i uendelig løkke (b) Ret fejlen og lav en løsning der kan køre. run = True a = 0 while run: if a < 10: print a a += 1 run = False 3. I disse opgaver skal vi se på fil input/output file = open("myfile", "w") lines = file.readlines() print "number of lines in %i = %s" %(file.name, len(lines)) (a) Hvad er der galt i ovenstående kode? Hint: kig på print-sætningen. File.name er en streng, men er markeret som integer (%i) i udskriftsordren. Omvendt for linjeantallet. Endvidere åbnes filen i writemode, den skulle åbnes i readmode. (b) Ret fejlene i ovenstående kode file = open("readme.txt", "r") lines = file.readlines() print "number of lines in %s = %i" %(file.name, len(lines)) number of lines in readme.txt = 1227

mystring = Hello, here is a special offer for you... YOU WANT TO LOSE WEIGHT? The most powerful weightloss is now available without prescription. All natural Adipren 100% Money Back Guarantee! - Lose up to 19% Total Body Weight. - Loss of 20-35% abdominal Fat. - Up to 300% more Weight Loss while dieting. - Reduction of 40-70% overall Fat under skin. - Suppresses appetite for sugar. - Increase metabolic rate by 76.9% without Exercise. - Burns calorized fat. - Boost your Confidence level and Self Esteem. Now with the exclusive NePirem Cinicia Process. file = open("output.txt", "r") file.close() file.write(mystring) (a) Kig på ovenstående kode, og forstå hvad der sker. Hint: I skal huske at lægge en file med navnet output.txt i jeres pyton-mappe. Det er ikke den fejl vi er ude efter. Der er to andre fejl to koden. (b) Ret fejlene i koden og få programmet til at køre. Fejlene er: (1) filen åbnet i read-mode man vi vil skrive på den, og (2) filen lukkes før vi skriver. Den rigtige løsning er: mystring = '''Hello, here is a special offer for you... YOU WANT TO LOSE WEIGHT? The most powerful weightloss is now available without prescription. All natural Adipren 100% Money Back Guarantee! - Lose up to 19% Total Body Weight. - Loss of 20-35% abdominal Fat. - Up to 300% more Weight Loss while dieting. - Reduction of 40-70% overall Fat under skin. - Suppresses appetite for sugar. - Increase metabolic rate by 76.9% without Exercise. - Burns calorized fat. - Boost your Confidence level and Self Esteem. Now with the exclusive NePirem Cinicia Process.''' >>> file = open("output.txt", "w") >>> file.write(mystring) >>> file.close() >>> file = open("output.txt", "r") 4. I disse opgaver skal vi se på funktioner def dict2tuplelist(dict): dict2tuplelist(dict) -> list Input : dictionary Output: liste af tupler af formen (key,value) pass (a) Se på ovenstående definition af en funktion, prøv ud fra dette at danne dig et billede af hvad funktionen skal kunne. Funktionen laver en dictionary om til en liste af tupler. (b) Implementer ovenstående funktion så den liste, den returnerer, har tupler som elementer.

Altså: hvis dictionary en er {'hest': 'horse', 'ko': 'cow', 'faar': 'sheep'} så skal programmet konvertere denne til en liste af tupler: [('hest', 'horse'), ('ko', 'cow'), ('faar', 'sheep')]. Hints: brug listens append-metode. def dict2tuplelist(adict): tupelliste = [] for index in adict: tupelliste.append((index,adict[index])) return tupelliste Det kan også gøres meget simpelt: >>> x = {'hest': 'horse', 'ko': 'cow', 'faar': 'sheep'} >>> x.items() [('ko', 'cow'), ('hest', 'horse'), ('faar', 'sheep')] 5. I denne opgave skal vi se på import af moduler # This is mymodule.py mylist = [2,5,8,10,17,34,37,53] def add(x,y): return x+y def sub(x,y): return x-y # This is myprogram.py import mymodule.py indexes = range(len(mymodule.mylist)) for x in indexes: if mymodule.mylist[x] % 2 == 0: print add(x,mymodule.mylist[x]) print sub(x,mymodule.mylist[x]) (a) Kig på de to ovenstående stykker kode. De tilhører hver sin fil, mymodule.py og myprogram.py. Myprogram.py importerer modulet mymodule.py for at bruge de ting som ligger der. Myprogram.py skal være placeret i mappen site-packages i mappen Lib i Python mappen. Alligevel går det galt. Hvad er der galt? Der er fejl to steder. Hint: 1. kig på navnet på modulet. 2. overvej to former for import-ordrer: import <modulnavn>, og from <modulnavn> import * (1) Når man importerer et modul skal man ikke skrive.py bagefter (2) Når man importerer et modul importerer man ikke de enkelte metoder og variable. Det kan man gøre ved kommandoen from mymodule import * (b) Ret eventuelle fejl så programmet kører og giver følgende output! 2-4 10 13-13 39-31 -46 En mulig løsning: from mymodule import * for x in indexes: if mylist[x] % 2 == 0: print add(x,mylist[x]) print sub(x,mylist[x])