Program. Kapitel make Program Interpreterande och kompilerande program

Relevanta dokument
Kapitel 12. Mer om program Att rapportera buggar och problem make

Avslutning. Kapitel Komprimering av filer

Programmering i C++ Kompilering från kommandoraden

NetBeans 5.5. Avsikt. Projektfönster

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Introduktion till programmering och Python Grundkurs i programmering med Python

IDA kursmaterial Informationsblad make. make

TDP005 Projekt: Objektorienterat system

Lab 7, 48 steg till ett bättre liv i Unix-labbet

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Kapitel 11. Program Att köra program Skript Interpreterande och kompilerande programspråk Att kompilera program

NetBeans 7. Avsikt. Projektfönster

Textbearbetning i skalet och man-sidor

Föreläsning 3. Programmering, C och programmeringsmiljö

Instruktioner för att kunna programmera på skolans datorer

Introduktion till programmering, hösten 2011

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Filer. DA2001 (Föreläsning 16) Datalogi 1 Hösten / 19

Konsolfönster i Windows Momentet ingår i kursen PDA DTR1206 Lab 1 DOS Konsolfönstret

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Introduktion till datormiljön och Python

Översikt. Texthantering med bl.a. kommandona cat, less och grep Omdirigering och piping Gnuplot. Linux 2 2 / 12

Omkoppling av in- och utmatning. In- och utmatning i Unix. Kommando exempel, ls, pipe forts. Kommando exempel, ls, pipe

Inledande programmering med C# (1DV402) Introduktion till C#

Program & programmering

Kapitel 11. Program Skript Att köra program Interpreterande och kompilerande programspråk Att kompilera program

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

DD1310 Programmeringsteknik för Open1 och Med2 Laborationer läsåret 2014/2015

Editering, Kompilering och Exekvering av Javaprogram

OOP Objekt-orienterad programmering

UNIX. Laborations-PM Anders Egneus, Henrik Lindgren, 2004, Raphael Corsoski, Erik Eliasson, Christian von Schultz, 2008.

Objektorienterad programmering i Java I

Instruktion för laboration 1

Boken?!?! Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program Variabler printf

Laboration 10: LaTeX. Redovisning. Omgivningen document. Början. Instruktionerna nedan. Repetitionsuppgifter

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Föreläsning 2. Operativsystem och programmering

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 3. Programmering, C och programmeringsmiljö

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

kommando -fl argument

Programmeringsteknisk översiktskurs för yrkeshögskoleprogram

Kapitel 3. Mer om skalet. 3.1 Kommandorör ( )

UNIX. 2D1339 Programkonstruktion Hösten 2001 Datorintroduktion Laboration 1. Mål. Vad laborationen går ut på. Redovisning

Kapitel 11. Program Skript Att köra program Interpreterande och kompilerande programspråk

Uppgifter teknik HT17 (uppdaterad v. 40)

TDP005: Introduktion till Make

Laboration 10 - Eclipse

Besvara de elektroniska frågorna (se kurshemsidan). Läs kapitel i kursbok.

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

Objektorienterad programmering i Java

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Grundkurs i programmering - intro

DD1310 Programmering för OPEN1 LAB1: Laborationer i Python läsåret 2011/2012

Att komma igång. Föreläsning 1

Datorsystem och programmering

kl Tentaupplägg. TIPS 4: Du kan kompilera din kod med följande kommandon g++11, w++11 (för mer varningar)

prog: prog.c gcc -g -Wall prog.c /usr/local/bib/c/58an/modules/modul.o -o prog

Om e-post. Introduktion till Emacs. Att skicka e-post. ÅÄÖåäö i pine. Varför Emacs? Vad är Emacs? Emacs en editor/textbehandlare

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Laboration: Whitebox- och blackboxtesting

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Mjukstart i programmering

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Datorer och datoranvändning Föreläsningar 2014/15. Föreläsning 1 Unix. Operativsystem. Unix

Övning 1. Datateknik A, Java I, 5 poäng. Att ladda hem och installera Java Att skriva ditt första Javaprogram Att kompilera och exekvera ditt program

2D1311 L1 och Bio2 2001/ Laboration 1: Introduktion till Nadas datormiljö och Java Nyckelord: katalog, fil, källkod, kompilera, avlusa, program,

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Föreläsning 5 Programmeringsteknik DD1310. Modulen doctest. Exempel. Doctest Dictionary Filhantering

Att komma igång. Föreläsning 1

Använda Python Laboration 1 GruDat, DD1344

DD1315 Programmeringsteknik och Matlab för I1 Laborationer läsåret 2013/2014

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Övningar i 2D2050. Per-Anders Staav (kallas Pa) Epost: eller

Filers innehåll. Grundläggande databehandling. Representation av text. pffb = påhittat filformat för bilder

kl Tentaupplägg

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Introduktion till programmering SMD180. Föreläsning 1: Programmets väg

2D1310 Programmeringsteknik för CL1 Laborationer läsåret 2004/2005

Laboration 0. Enhetsbokstaven anges med ett kolon efter och man läser ofta ut detta, exempelvis C:(sekolon).

Kompilera och exekvera Javakod

KPP053, HT2016 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Föreläsning 1: Intro till kursen och programmering

Ordlistor, filhantering och ut på webben. Linda Mannila

Det finns många flaggor till g++,

TDP003 Projekt: Egna datormiljön

Statistikens grunder 1 och 2, GN, 15 hp, deltid, kvällskurs

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

GitHub for Windows och GitShell

Transkript:

Kapitel 11 Program Detta kapitel är som synes mycket kort och nämner inte allt från föreläsningen. 11.1 Program Ett datorprogram är en samling instruktioner som beskriver något som en dator ska utföra. Med datorprogram kan man avse dessa instruktioner så som de skrivits i något programspråk i en eller flera textfiler källkoden. Man kan också avse en binärfil med instruktioner i en maskinnära form (maskinkod) som kan utföras (exekveras, köras) direkt av datorn. 11.2 Interpreterande och kompilerande program 11.3 make Ett större program består normalt en mängd filer som använder sig av varandra, och för att kompilera detta kan det krävas flera steg. I Unix-världen används oftast make för att tillverka den körbara filen då. Med det programmet kan man tala om hur olika filer kan tillverkas utifrån andra filer så att det kan utföras automatiskt. Det kan även vara användbart till andra filer som genereras från varandra. Regler för vilka filer som är beroende av vilka kan man lägga in i en särskild fil Makefile och med make filnamn tillverkas filen filnamn på nytt ifall någon av filerna den är beroende av dess prerekvisit har ändrats sen sist. I de flesta programspråk skriver man instruktioner som ligger långt ifrån den typen av instruktioner som datorn kan utföra direkt. Det finns olika sätt att då få datorn att utföra instruktionerna i källkoden: kompilering och interpretering. Kompilering är att översätta källkoden till maskinkod. Översättningen sker med en kompilator ett särskilt program. Sen kör man den resulterande koden. (Källkoden behövs inte längre för att kunna köra programmet. Men om man behöver göra ändringar i programmet behöver man källkoden igen och får lov att kompilera om den efteråt.) Interpretering är att tolka källkoden bit för bit istället. Ett särskilt program, en interpretator, läser och utför dessa instruktioner. (Det finns även mellanlägen mellan kompilering och interpretering.) 111

Laboration 11: Program Redovisning Skicka svar på frågorna till Per senast måndagen den 20/12. Att kompilera Skapa en ny underkatalog för denna labb, under en katalog där du redan har GDB-saker. Ändra så att du har den katalogen som aktuell katalog. Uppgift 11.1 Vad heter katalogen du har använt? Kopiera till denna katalog filen /local/kurs/ gdb06/trappa.c samt några valfri textfiler med namn på.txt att använda till olika tester. (I flera exempel nedan antas det finnas en saga.txt, men du kan använda något annat.) Kompilera programmet med cc trappa.c. Det skapas då en ny fil med det körbara programmet. Uppgift 11.2 Vad heter denna fil? Kör detta program med någon av textfilerna som input. (Använd en textfil som är minst nåt dussin rader lång.) Uppgift 11.3 Hur skrev du kommandot för att göra detta? Normalt skulle man vilja att detta program vars källkod ligger i trappa.c skulle heta trappa istället. Du kan tillverka en sådan fil trappa med hjälp av kommandot make. Kör make trappa. Det skriver ut vilket kommando det i sin tur utför. Uppgift 11.4 Vilken väljare till cc använde make för att tala om vad det kompilerade programmet skulle heta? Uppgift 11.5 Vilken tumregel om ordningen i skalkommandon bryter det kommando som make just utförde mot, förresten? (Den tumregeln är bara en tumregel, som oftast gäller.) Uppgift 11.6 Om du gör om make trappa vad får du du för meddelande från make? Såg du vad programmet gjorde med textfilen? Även om du antagligen inte kan C, så öppna källkoden med Emacs ändå och se om du kan förstå en del av hur programmet fungerar. Uppgift 11.7 Vissa delar av programmet är kommentarer de har ingen effekt på vad programmet gör, utan finns där för att underlätta läsningen och förståelsen av programmet. Vad skriver man tydligen före respektive efter kommentarer i C? Uppgift 11.8 Vad heter den funktion som används i detta program för att skriva ut ett tecken? Makefile Vissa saker vet make redan från början hur den ska tillverka. När du sa åt den att tillverka trappa så såg den att det fanns en fil trappa.c och hade då ett recept för att komma från nånting.c till nånting. Nya sådana recept kan man lära make genom att skriva in dem i en fil Makefile. Öppna en sådan fil i samma katalog som förut och skriv in 3-%.txt: echo $* $* $* >$@ Tryck på TAB för indraget av den andra raden! TAB-tecken har en särskild betydelse i denna fil och det duger inte med några vanliga mellanslagstecken istället. 113

LABORATION 11: PROGRAM Detta är en ny regel för make som talar om hur den kan tillverka filer som har namn som börjar med 3- och slutar med.txt. I dessa mönster kan procenttecknet stå för vad som helst, i stil med asterisken i skalet. Spara denna Makefile och ge kommandot make 3-foo.txt. Om du har skrivit rätt kommer filen 3-foo.txt att skapas. Uppgift 11.9 Vilket kommando utförde make nu? I receptet som talade om hur dessa filer 3-nånting.txt ska tillverkas så har $* bytts ut mot det som procenttecknet stod för i detta fall (nånting). Även andra kombinationer med dollartecken byts ut mot annat. Uppgift 11.10 Varifrån har ersättningen av $@ tagits? Nästa regel du ska skriva är en som dubblerar en fil. Om du har en fil med innehållet så ska resultatet bli t. ex. Om originalfilen hette t. ex. saga.txt så låt den nya filen heta saga2.txt. I make-termer: Om originalet heter %.txt så låt den nya heta %2.txt. %2.txt: %.txt cat $*.txt $*.txt >$@ Här har något nytt tillkommit jämfört med den förra regeln, nämligen något efter kolonet. Det anger prerekvisit, vilket betyder filer som måste finnas för att regeln ska användas och som antagligen används som input. I detta fall finns det bara ett prerekvisit, men det kan finnas flera. Det kan även finnas flera kommandon i en regel, även om det räckt med ett enda i dessa exempel. När det finns flera kommandon utförs de i tur och ordning allihop och ska alla skrivas med ett indrag med ett TAB-tecken. Använd regeln för att tillverka en fil saga2.txt. I denna regel användes $* i uttrycket $*.txt för att skriva namnet på prerekvisitet. Det finns även en särskild beteckning för det första prerekvisitet. Uppgift 11.11 Ta fram Info-dokumentationen för make. Det finns ett menyalternativ»automatic«1 där det står om sådana som du redan sett, som $*. Hur betecknar man första prerekvisitet enligt detta? Ändra så att du använder detta istället, och använd detta sätt även i fortsättningen. * * * Skapa nu en regel i din Makefile som utifrån en fil som saga.txt skapar en fil saga-trappa.txt genom att köra programmet trappa på den. Lägg till trappa som ett andra prerekvisit för att visa att detta kräver att det programmet finns. Uppgift 11.12 Hur lyder denna regel i sin helhet? Prova att make saga-trappa.txt funkar och att resultatet ser ut som det bör. Uppgift 11.13 Ändra sen i trappa.c så att mellanslag används istället för understrykningstecken och gör om make saga-trappa.txt. Vad händer då? Varför? Uppgift 11.14 Vad kan du skapa för ytterligare filer nu med make genom att kombinera de regler du skrivit där utan att skriva något nytt i Makefile? Lite Python Skriv idle & och tryck på RET. Det nya fönstret visar en kommandotolk för programspråket Python där prompten är >>>. Titta på webben på http://nltk.sourceforge. net/lite/doc/en/programming.html, och följ instruktionerna i avsnitt 2.1 2.5. (Observera att sidan fortsätter med 2.6 osv. som inte ingår nu.) Istället för att köra idle kan du också köra python direkt i skalet. Gör exemplen i texten själv också, och lös uppgifterna i slutet av varje avsnitt. 1 Obs, inte det som heter»automatic Prerequisites«, utan det som heter bara»automatic«. 114

Lite Python * * * Uppgift 11.15 Skriv in alla dina kommandon från uppgift 1 i avsnitt 2.5.4 i en fil shells.py i Emacs. (Använd TAB för indentering.) Även i Python mode i Emacs finns det ett kommando för att utföra alla Python-kommandon i bufferten. Sök upp det i Python-menyn och prova det. Uppgift 11.16 Hur kan du köra det från tangentbordet? Från skalet kan du utföra alla Pythonkommandon i filen med python shells.py. För att kunna köra det på samma sätt som ett kompilerat program så måste det framgå inne i filen vilket interpretator som ska tolka programmet, i detta fall Python. En fullständig sökväg till python är /usr/bin/python så lägg därför till en rad #!/usr/bin/python först i shells.py. (Denna speciella rad måste stå allra först i filen.) Jämför med avsnitt 3.7 på s. 33 för att få fram svar på följande: Uppgift 11.17 Vad behöver du mer göra för att det ska gå att köra shells.py direkt? (Gör det!) Med print i Python-övningarna har du skrivit ut text. Den hamnar på standard output. Ett sätt att läsa rader från standard input visas i följande exempel. Den första raden import sys behövs för att det ska gå att använda sys.stdin. Raderna kan läsas en efter en med for som ovan. Raderna avslutas med nyradstecken. Det är därför det sista tecknet på varje rad tas bort med line[:-1] ovan. Uppgift 11.18 Vad gör ovanstående program? Uppgift 11.19 Skriv ett program rev.py som skriver ut varje rad i sin input baklänges. Så en rad»staffan var en stalledräng«ska bli»gnärdellats ne rav naffats«. Uppgift 11.20 Skriv ett program countwords.py som skriver ut rad för rad av sin input, men först på varje rad inom parentes hur många ord det är på den raden. Med inputten Natten är stor och stum. Nu hör det svingar i alla tysta rum sus som av vingar. ska outputten därför blir (5) Natten är stor och stum. (4) Nu hör det svingar (4) i alla tysta rum (4) sus som av vingar. import sys for line in sys.stdin: line = line[:-1] if len(line) > 30: print line[:30] + "..." else: print line Detta program läser text från standard input, en rad i taget, och skriver ut varianter av dessa rader på standard output. Standard input betecknas med sys.stdin. 115