Datorövningar. Grunderna i C/C++



Relevanta dokument
C++ Slumptalsfunktioner + switch-satsen

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

C++ Lektion Tecken och teckenfält

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

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

Enkla datatyper minne

Användarhandledning Version 1.2

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

Instuderingsfrågor, del D

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

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

Föreläsning 3-4 Innehåll

2D1339 Programkonstruktion för F1, ht 2004

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

TDIU01 - Programmering i C++, grundkurs

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Chapter 3: Using Classes and Objects

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Tentamen i Programmering C, Fri, Kväll,

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

JavaScript Block Editor:

KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: 8-13, den 18 februari 2012

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

Datorteknik 2 (AVR 2)

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

Objektorienterad Programmering (TDDC77)

TDIU01 (725G67) - Programmering i C++, grundkurs

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

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

F4. programmeringsteknik och Matlab

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Tentamen EDAF30 Programmering i C++

Mer källkod. Styrstrukturer Val Slingor Operatorer Källkodsexempel med minne. Erik Forslin. Rum 1445, plan 4 på Nada

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Kompilera och exekvera Javakod

HI1024 Programmering, grundkurs TEN

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

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

FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I

OOP Tentamen

Tentamen FYTA11 Javaprogrammering

HI1024 Programmering, grundkurs TEN

TENTAMEN OOP

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

Objektorienterad Programmering (TDDC77)

Frekvenstabell över tärningskast med C#

TDIU01 - Programmering i C++, grundkurs

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Programmeringsteknik med C och Matlab

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

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

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

Introduktionslaboration

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

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

Programmering för språkteknologer I, VT2012. Rum

HI1024 Programmering, grundkurs TEN

Föreläsning 5-6 Innehåll

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Omtentamen i Programmering C, Fri, Kväll,

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

TENTAMEN MOM1 GRUNDLÄGGANDE PROGRAMMERINGSTEKNIK OCH

TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00

Björn Abelli Programmeringens grunder med exempel i C#

NetBeans 7. Avsikt. Projektfönster

Chapter 4: Writing Classes/ Att skriva egna klasser.

ID1004 Laboration 3, 5-6 November 2012

DD1311 Programmeringsteknik för S1 Laborationer läsåret

Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr,

Redovisning av inlämningsuppgifter

Editering, Kompilering och Exekvering av Javaprogram

PROGRAMMERING-Java TENTAMINA

ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13.

SMD 134 Objektorienterad programmering

Tentamen OOP

PROGRAMMERING-JAVA TENTAMINA

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Introduktionslaboration

C++ - En introduktion

En kort text om programmering i C.

NetBeans 5.5. Avsikt. Projektfönster

Extramaterial till Matematik Y

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

C-programmering, föreläsning 2 Jesper Wilhelmsson

Laboration 4: Digitala bilder

OOP Tenta

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

TDDC77 Objektorienterad Programmering

Laboration: Grunderna i MATLAB

Transkript:

Datorövningar Grunderna i C/C++

övning 1 Innehåll: Editering, kompilering, länkning och exekvering av C++-program. Något om funktioner/procedurer. 1. Ett program är ett antal rader text som beskriver lösningen till ett problem. Om problemet är att på datorns skärm skriva ut texten Hello, world!, så ser programmet ut så här (i programspråket C++): #include <iostream.h> void main() cout << Hello World! ; 2. När du skall skriva ett C++-program måste du ha en texteditor. I princip går det bra att använda vilken enkel editor som helst, exv dtpad, emacs eller vi. Den C++-kompilator som vi använder på kursen är gnu c plus plus (g++). Den innehåller alla verktyg som behövs för att skriva fungerande C++program. 3. Logga in på ditt användarkonto. 4. Skapa en mappstruktur på din hårddisk för de filer som du skapar under kursen. Skapa exv mappen c_prog. I denna kan du sedan efterhand skapa lämpliga undermappar för datorlaborationer etc. Det gör det lättare för dig att hålla ordning på dina filer. 5. Du kan behöva installera gcc och tillhörande dokumentation, den återfinner du på www.sunfreeware.com. Följ instruktionerna i så fall, testa dock först genom att skriva gcc och g++, kommer det upp ett meddelande av typen no input files, är gcc redan installerat. 6. Skriv in programmet i 1 ovan. Ta för vana att alltid spara källkoden innan du börjar kompilera. Spara 7. För att kompilera ett enkelt program skriver du g++ <programnamn.cpp> Eventuella fel vid kompileringen visas därefter. Vid kompileringen skapas en utfil a.out som innehåller det översatta programmet. Vid kompilering i flera steg kan man notera att en.out fil också finna. Du måste sedan göra denna a.out fil körbar med chmod u+x a.out. Den färdiga a.out-filen kan sedan exekveras med./a.out. Notera att ett otal kompilatordirektiv finns. 8. #include <iostream.h> void main() int tal1, tal2; cout << Ange två tal (åtskilda med mellanslag): ; cin >> tal1 >> tal2; clrscr(); cout << Produkten av << tal1 << och << tal2 << är: ;

cout << (tal1*tal2); Skriv in och provkör programmet ovan! 6) 9. När du arbetar med vanlig text på bildskärmen fungerar den som ett rutnät med normalt 25 x 80 tecken. Raderna (y-koordinaten) är då numrerade 1 t o m 25 med den första raden överst. Kolumnerna (x-koordinaten) är numrerade 1 t o m 80 med kolumn 1 längst till vänster. Modifiera programmet i 8 så att inmatningstexten för det första talet skrivs ut på rad 5 och det andra på rad 6. Resultatet skall sedan skrivas ut på rad 10.

övning 2 Innehåll: Uttryck, satser och program flöden. Slumptal Skriv ett program först läser in antalet värden och som sedan läser värdena ett och ett, därefter beräknar och skriver ut medelvärdet och standardavvikelsen för värdena. Skärmen skall rensas före inmatning av varje nytt värde. 1. I biblioteket stdlib finns funktionerna int random(int max) och void randomize(). Med funktionen random kan du själv bestämma inom vilket intervall slumptalen skall hamna. Parametern max anger den övre gränsen vilken inte får användas. random(5) ger således slumpmässigt ett av värdena 0,1,2,3 och 4. Funktionerna är inte heller dessa standardiserade men finns i de flesta system. Funktionen randomize() används för att ge slumptalsgeneratorn ett slumpmässigt startvärde ( seed ), annars erhålles samma slumptalsserie varje gång och det är ju inte meningen. Innan du i programmet börjar generera slumptal, skall du således anropa randomize(). Fˆljande program ( Gissa tal ) fˆrekom under Java-kursen: import dna.util.simplerandom; import dna.util.simpleinput; class GissaTal public static void main(string[] args) int nbrcomp, nbrme, nbrguess; nbrguess = 0; nbrme = 0; nbrcomp = SimpleRandom.randInt(1,1000); System.out.println("VILKET TAL TÄNKER JAG PÅ?"); while (nbrcomp!= nbrme) nbrme = SimpleInput.readInt(); nbrguess += 1; if (nbrme > nbrcomp) System.out.println("FEL! FÖR HÖGT!"); if (nbrme < nbrcomp) System.out.println("FEL! FÖR LÅGT!"); System.out.println("RÄTT! DU BEHÖVDE "+nbrguess+" GISSNINGAR!"); Skriv om programmet i C++! Hyfsa dessutom till utskriften lite så att du får en programexekvering

liknande den nedan: 2. Skriv ett program som bestämmer största respektive minsta värde bland ett godtyckligt antal inmatade tal. Antalet tal som skall matas in skall anges av användaren först då programmet körs. 3. Skriv ett program som skriver ut siffrorna 0-9 (slumpmässigt) i slumpmässigt genererade punkter (x,y), där x=1,2,.80 och y=1,2,.25, på skärmen tills användaren trycker på en tangent. (Tips: lägg in en fördröjning med en for-loop någonstans i programmet annars går det lite väl fort!) övning 3 1. Skriv ett program med en main-funktion och en funktion int dice(), vilken ger antalet prickar vid kast med en tärning. Simulera 100 000 kast med tärningen och beräkna sedan sannolikheten för att få sex prickar. Vad bör svaret bli? 2. Skriv ett program med en main-funktion och tre andra funktioner med följande namn och parametrar: float box(float langd, float bredd, float hojd) float kon(float diameter, float hojd) 2 float cylinder(float diameter, float hojd) I var och en av funktionerna skall begränsningsytan för produkten i fråga beräknas. I mainfunktionen skall användaren, genom att mata in exv 1=Box, 2=Kon eller 3=Cylinder, välja någon av produkterna och tillsammans med ett inmatat materialpris (kr/m2) få besked om materialkostnaden för att tillverka produkten i fråga. Som framgår av utskriften ovan skall programmet fråga användaren efter en beräkning, om ny beräkning skall utföras. I biblioteket conio finns exempelvis funktionen getch(), som tar emot ett tecken utan att eka det tillbaka på skärmen. Vilken tangent/tecken som trycktes ner kan testas exempelvis i en while eller if-sats. Ex. char tkn; tkn=getch(); if (tkn== J tkn== j ).. 3. Skriv en main-funktion som låter dig ställa klockan och sedan med hjälp av klassen Clock visar en digital klocka som kontinuerligt visar tiden.

övning 5 Innehåll: Mera om klasser. Vektorer 1. Vi har tidigare i ett antal exempel simulerat olika företeelser med hjälp av slumptal. Metodiken har då varit s k dragning med återläggning, dvs ett och samma slumptal har kunnat dras flera gånger, exv vid simulering av kast med en tärning. Men hur skall man förfara om ett slumptal bara får komma upp en gång? Ett exempel på detta utgör dragningen i det svenska Lotto-spelet, där ju sju nummer plus två tilläggsnummer mellan 1 och 35 skall dras varje vecka. Om exv talet 12 dras, så skall ju detta tal inte kunna komma upp som något av nästföljande tal osv. Hur skall man lösa detta om man skall låta datorn generera slumptalen mellan 1 och 35? Ett sätt är att använda vektorer och låta programmet hålla reda på vilka nummer som gått. Använd exempelvis en heltalsvektor, kontroll med plats för 35 element (0-34) som samtliga sättes lika med 0 innan själva dragningen startar. För varje nytt nummer som datorn sedan slumpar fram, skall elementet med motsvarande plats i vektorn som det dragna numret kontrolleras. Om elementet har värdet 0 har numret inte tidigare gått och kan användas, varvid programmet också måste sätta elementets värde lika med 1 för att markera att det använts. Är elementet däremot redan lika med 1, har numret redan gått och ett nytt värde måste slumpas fram. Ex. Datorn drar talet 23. Programmet skall då kontrollera värdet i elementet kontroll[22]. Om elementets värde är 1, måste ett nytt nummer dras. Är det däremot lika med 0, har siffran 23 inte tidigare gått och kan därför användas. Elementet kontroll[22] sätts samtidigt lika med 1, för att markera att numret nu är använt. 2. Följande main-funktion visar metodiken: #include <iostream.h> #include <stdlib.h> #include <conio.h> void main() int dragetnr; int kontroll[35]; for (int k=0; k<=34; k++) kontroll[k]=0; randomize(); cout << "LOTTODRAGNING\n"; cout << "=============\n"; for (k=1; k<=9; k++) do dragetnr = random(35)+1; while (kontroll[dragetnr-1]==1);

endl; kontroll[dragetnr-1] = 1; if (k<=7) cout << "Nummer " << k << ": " << dragetnr << endl; else cout << "Tilläggsnummer " << (k-7) << ": " << dragetnr << // fördröjning i programmet för att dragningen inte skall gå // så snabbt for (long i=1;i<=20000000;i++); Programmet som heter lotto finns färdigskrivet. Hämta in och provkör! 3. En klass som beskriver en bingobricka av modell Bingolotto har följande deklaration: class BingoBricka public: /* skapa en BingoLotto-bricka med övre vänstra hörnet i punkten ixstart, iystart med 15x5 rader som ritas i fönstret iw och som i första kolumnen har siffrorna 1-15 slumpmässigt fördelade, i andra kolumnen siffrorna 16-30 osv. */ BingoBricka(int ixstart, int iystart); // konstruktor ~BingoBricka(); // destruktor /* rita upp den fyllda brickan i ritfönstret */ void ritabricka(); /* markera draget nummer på brickan i ritfönstret genom att ringa in siffran */ void marknbr(int dragetnr); /* gå igenom raderna på brickan och kontrollera om bingo erhållits. 1=bingo, 0=ej bingo */ int bingo(); private: element /* tag reda på radnumret vid Bingo */ int getrownbr(); int bricka[15][5]; // en bricka int check[75]; // kontrollvektor med 75

; int nbr, nbrstrue, radnr, xstart, ystart,isbingo; char str[10]; Klassen finns färdigskriven under namnet bingobr. 4. Skriv ett program bingo med en main-funktion som låter datorn genomföra en omgång Bingolotto med tre brickor. Själva dragningen går till så att datorn får generera heltalsslumptal i intervallet 1 till 75 tills någon av brickorna får bingo, dvs har fem dragna nummer på samma rad. Då bingo har erhållits skall texten längst upp på skärmen nedan skrivas ut, dvs vilken bricka bingo har erhållits på samt vilken rad, jämte totalt antal dragna nummer. övning 6 Innehåll: Enkel filhantering. Stränghantering och tecken-vektorer. 1. På en fabrik som tillverkar elektronikkomponenter tillverkas bl a kondensatorer. Just nu tillverkar man en stor batch med kondensatorer märkta med kapacitansen 2.5 pikofarad. För att kontrollera produktkvalitén tar man varje dag slumpmässigt ut ett antal kondensatorer som kontrollmäts med avseende på kapacitansen. Driftingenjören matar in de uppmätta värdena i en binär datafil märkt med dagens datum. Som produktchef vill du naturligtvis datorisera bearbetningen av materialet och bestämmer dig för att skriva ett C++-program som hjälper dig utvärdera materialet. Programmet skall göra följande: läsa in samtliga uppmätta värden lagrade i dagens fil. (Testfil: 990328) beräkna medelvärde, standardavvikelse, största och minsta värde i stickprovet skriva ut stickprovets storlek, dvs antal inlästa värden 2. En sträng är en följd av tecken som deklareras som ett fält av typen char, ex: char namearray[50]; De enskilda tecknen i strängen kan du få fram på vanligt sätt då det gäller vektorer genom att ange index för det/de element (tecken) du är intresserad av, exv namearray[0] för det första tecknet, namearray[3] för det fjärde osv. Prova att skriva in följande program: #include <iostream.h> void main() char namearray[50]; cout << Ange ditt namn: ; cin >> namearray;

cout << Jaså, du heter << namearray << endl; cout << namearray[1]; Om du matar in exv namnet Larsson kommer du att få utskriften: Jaså, du heter Larsson a 3. Kör ovanstående program och undersök vad som händer för inmatningar som inleds med mellanslag och som innehåller mellanslag. 4. Som du ser gäller vid inläsning av strängar med cin att: inledande mellanslag hoppas över läsningen sker fram till nästa blanktecken Detta innebär att du inte kan mata in ett helt namn som innehåller mellanslag eller löpande text. Om du ändrar programmet i 2 ovan och byter ut raden med cin mot: cin.getline(namearray,50); kommer du att kunna läsa in en sträng, i det här fallet med mindre än 50 tecken som får innehålla mellanslag. Prova detta! 5. För att få fram längden på en sträng, dvs det faktiska antalet tecken i strängen just nu, kan du använda funktionen strlen() i biblioteket string. lengd=strlen(namearray); ger variabeln lengd värdet på det antal tecken som finns i strängen namearray. Komplettera programmet ovan med en utskrift även av längden på strängen som du matar in. (Glöm inte att inkludera <string.h> när du använder funktionen.) 6. I datafilen secret finns en text lagrad på max 500 tecken som dessutom är kodad baserad på följande kodnyckel: Alfabetet: ABCDEFGHIJKLMNOPQRSTUVwXYZÅÄÖ.,?! Kodnyckel: FXIPVGOÅZWKRAECHLÄYUBDÖJMQSTN.,?! dvs ett kodat P motsvarar i verkligheten bokstaven D, ett C motsvarar bokstaven O osv. Skriv ett program med en main-funktion, som läser in den kodade texten i filen secret, dechiffrerar den och skriver ut den i klartext på skärmen. Läs in den kodade texten exv med hjälp av följande

instruktionssekvens till strängen thecode[500]:.. ifstream fin("secret", ios::binary); fin.read((char *)&thecode, sizeof(thecode)); fin.close();..