Lektion C1 - BestOnline.SE

Värmdö Gymnasium
Datainstitutionen
Programmering A
110123
Lektion C1 Grunder
Att programmera handlar mycket om att lära sig att analysera det problem eller den funktion man vill att
programmet ska ha, och översätta det från talspråk till programkod. Många tar vägen över denna via s.k.
pseudokod, ett mellanting mellan vanligt språk och programkod. I dagens första lektion ska du dels
bekanta dig med de verktyg du ska använda för att skriva dina program, dels lära dig de första stegen i det
programmeringsspråk som kallas C++. Men allra först programspråkens historia.
OBS! All teori i detta och följande dokument kompletteras med genomgångar på lektionerna. Så
det är viktigt att närvara och göra egna anteckningar.
Programspråk (de större)
FORTRAN
1954
1:A HÖGNIVÅSPRÅKET
COBOL
1959
ekonomi
ALGOL
1960
påverkat senare språk
SIMULA
1967
möjligt att skriva objektorienterade program
PASCAL
1971
undervisningsspråk, TURBOPascal
C
ca 1973
”högnivåspråk på låg nivå”
Smalltalk
1980
objektorienterande, interpreteras
Ada
1983
amerikanska försvaret, ISO-standard
C++
1985
utökning av C, Bjarne Stroustrup (AT&T)
JAVA
1995
Sun Microsystem, plattformsoberoende, interpreteras, C++ förebild
Börja programmera
Nu ska du börja så smått med att programmera. Programmering innebär
1.
2.
3.
att du först gör klart för dig vilket problem som ska lösas. Vad ska programmet göra? Vilka data
ska matas ut från programmet? Vilka data måste matas in i programmet för att det ska fungera?
att du därefter tänker igenom hur programmet ska konstrueras (i stora drag) och gör en stegvis
beskrivning, en s.k. algoritm, som datorn kan använda sig av för att ge rätt utdata från de indata
du matar in. En sån beskrivning kallas ofta för pseudokod.
att du till sist skriver själva koden i programmeringsspråk, samt testkör och dokumenterar
programmet. Dokumentationen bör dels innehålla en handledning för användaren, dels en
konstruktionsbeskrivning som underlättar för den som ska underhålla programmet.
Första programmet
Vi kommer i denna kurs att ta hjälp av en färdig miljö där många saker är tillrättalagda. På samma sätt
som när vi ska skriva vanlig textdokument så utnyttjar vi t ex Word-programmet. Här använder vi ett
freewareprogram som heter Dev-C++ från Bloodshed. Till din hjälp för att komma in i miljön se häftet
”Snabbintro Dev-C++”.
Vårt första program:
#include <iostream> //inkludera ett paket med saker för utskrift och inläsning
// inkludera ett paket med bl a hantering av system("PAUSE")
#include <stdlib.h>
// för att komma åt de nya standardpaketen utan .h-ändelser
using namespace std;
int main()
{
//utskrift på skärmen
cout<<"Hej svejs!"<<endl;
system(”PAUSE”); //så att fönstret ligger kvar till man tycker på en tangent
return 0;
}
Sida 1 (7)
Värmdö Gymnasium
Datainstitutionen
Programmering A
040108
Vägen till ett körbart program
Editorn
Kompilatorn
Länkaren
här skriver vi programtexten, dvs källkoden
sparar som en *.cpp fil
kollar att syntaxen stämmer med givna regler och en *.obj fil skapas
översätter koden till en objektfil, den vanliga
texten (källkoden) översätts till maskinkod
sätter ihop flera objektfiler till ett körbart
en *.exe fil skapas
program, dvs en exekverbar fil
den exekverbara filen startas och programmet
körs
Andra programmet
Ex. Du vill skriva ett program som ska räkna ut kostnaden för en bokbeställning. Här vill vi mata in antal
och pris. En expeditionsavgift på 50 kr ska också läggas till. Slutligen ska kostnaden skrivas ut.
1. Indata i detta fall: antal och pris, som vi förkortar a respektive p. Utdata är kostnaden, som vi
förkortar k. Problemställningen framgår av texten ovan.
2. Algoritm (pseudokod):
Mata in antal a och priset p
Kostnaden k beräknas som a∗p+50
Skriv ut k
3. Nu börjar vi översätta pseudokoden till programkod.
Variabeltyper
Här kommer en lista på några typer av variabler som man kan deklarera, och vilka sorts tal de kan lagra:
Typ
Betyder
Talområde
long double
flyttal, reellt tal (decimaltal)
double
flyttal, reellt tal
(decimaltal)
float
long int
flyttal, reellt tal (decimaltal)
heltal (positiva och negativa)
int
heltal (positiva och
negativa)
Här: -2147483648 till
2147483647
short int
signed char
heltal (positiva och negativa)
Tecken men lagras som heltal
-32768  32767
-128  127
ca. 2,2*10-308 – 1,8*10308
15 siffrors noggrannhet
Antal bytes
16
8
4
4
2 eller 4 *
här: 4
2
1
* Antal bytes beror på implementationen i varje dator.
För heltalen finns också varianter som bara hanterar positiva tal, dessa har unsigned framför sig som t.ex. unsigned char och unsigned int. Det
är viktigt att du håller koll på att dina tal håller sig innanför variabeltypens gränser, eftersom kompilatorn i allmänhet inte gör det. Skulle dina
beräkningar råka överskrida dessa, kan du få oväntade resultat.. (T ex när short int används.)
Sida 2 (7)
Värmdö Gymnasium
Datainstitutionen
Programmering A
040108
Andra programmet, koden
Pseudokoden i exemplet ovan blir följande programkod (kallas ofta för källkod).
//Exempel 2
#include <iostream> //inkludera ett paket med saker för utskrift och inläsning
#include <stdlib.h>
// inkludera ett paket med bl a hantering av system("PAUSE")
using namespace std;
// för att komma åt de nya standardpaketen utan .h-ändelser
int main()
//huvudfunktionen, endast ett per program
{
int a;
//deklaration av en variabel för heltal
double p, k;
//deklaration av variabler för flyttal
cout << ”Mata in antal böcker : ”;
//skriv på skärmen
cin >> a;
//läs in från skärmen
cout << ”Mata in bokpriset : ”;
cin >> p;
k=a*p+50;
//gör en beräkning och lagra resultatet i variabeln k
cout << ”Kostnaden blir ” << k << ” kronor” << endl;
system(”PAUSE”);
return 0;
//skriv ut
}
För att en programsnutt ska bli mera lättläst (framför allt för någon som inte skrivit programmet), kan
man lägga in s.k. kommentarer i programmet, som inte kompilatorn bryr sig om när man kompilerar
koden. För att få kompilatorn att strunta i resten av raden, skriver man // (dubbelt snedstreck). Allt som
står efter detta kommer då att hoppas över. Om man istället vill lägga in en lång kommentar som sträcker
sig över flera rader, kan man inleda med /* och avsluta med */. Allting mellan dessa två markeringar
kommer då att ignoreras av kompilatorn.
Prioritet
När du skriver matematiska uttryck så har olika operatorer olika prioritet, dvs behandlas av datorn i en viss
förutbestämd ordning. (Samma som i matematiken.)
Prioritetsnivå
1 (högst prioritet)
2
3
4
5 (lägst)
Operator
( )
* /
+ < >
=
tilldelning
Operatorer på samma nivå har samma prioritet.
För operatorer på samma nivå utförs de i ordningen vänster till höger, utom för tilldelningsoperatorn där
de utförs från höger till vänster.
Parenteser kan på vanligt sätt bryta ordningen.
Ex 1
x=2,5 + 12,0 / 2,0 / (2,0 + 1,0)
z=y=3+2
x=
z=
y=
Sida 3 (7)
Värmdö Gymnasium
Datainstitutionen
Programmering A
040108
Omvandlingar
Om vi blandar olika typer i uttryck sker omvandlingar enligt nedanstående regler.
X op Y med op menas här en aritmetisk operator som t ex +-/* dvs X+Y , X-Y , X/Y , X*Y
Om X och Y är av samma typ blir resultatet av den typen.
Om X och Y är av olika typ omvandlas den lägre typen (den som står under i tabellen Variabeltyper) till
den högre. Därefter sker beräkningen och resultatet blir av den högre typen.
T ex 4,5 + 4 (decimaltal + heltal) ger efter hopslagning ett decimaltal eftersom double står ovanför int
X = Y dvs vid tilldelning
Om X och Y är av olika typ omvandlas Y till X’s typ.
(Konstigheter kan uppstå om man överskrider talområdet vid omvandlingen.)
T ex :
int x;
double y;
y=44,5;
x=y;
// Här får x värdet 44 eftersom ett decimaltal omvandlas till heltal genom att decimalerna suddas bort
Ex.2
double x;
x=8,0/3 + 8/3 Æ x=
/* Ledtråd:
8,0/3 Æ 8,0/3,0 Æ 2,666
8/3 Æ 2 (typen heltal, resultatet trunkerat, dvs decimalsiffrorna stryks)
Ex3
double d=0, b=0;
d=d+1/100; detta ger d=
b=b+1,0/100; detta ger b=
Svar till ovanstående exempel:
Ex1 : x=4,5 z=5, y=5
Ex2 : x=4,666
Ex3 : d=0 b=0,01
Extra för den snabbe, hit kan du återkomma senare i kursen om du inte hinner med detta just nu
Standardfunktioner i biblioteket math
För att komma åt dessa inkluderas cmath (#include <math.h>) .
Alla funktioner returnerar ett flyttal ( t ex double). Både x och y ska vara av typen flyttal.
( t ex z=pow(x,y); )
pow(x,y)
xy
sqrt(x)
roten ur x
sin(x), cos(x), tan(x)
exp(x)
x anges i radianer
ex (exponentialfunktionen)
Sida 4 (7)
*/
Värmdö Gymnasium
Datainstitutionen
Programmering A
040108
Övningar
Övning C1.1
Du ska få börja med att skriva ett mycket enkelt program, som ska skriva ut ditt namn på skärmen.
Skriv in programmet och gör nödvändiga ändringar.
//Ett enkelt program som skriver ut ditt namn
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
cout << ”Kalle Kula”;
system(”PAUSE”);
return 0;
}
När du skrivit in programmet är det dags att köra det. Kör aldrig ett program som du skapat eller ändrat
utan att först sparat dina ändringar (ibland råkar man tyvärr ut för att datorn kraschar, och då kan det vara
lite tråkigt om man inte sparat på länge…). Spara programmet som namn.cpp. Programmet kompileras,
(länkas) och körs om det inte finns några syntaxfel (språkfel).
Övning C1.2
Skriv in följande enkla program och spara det med namnet prod1.cpp. Kör sedan programmet och
kontrollera att du får en korrekt utskrift. Pröva sedan med några andra värden för tal1 och tal2. Får du
alltid en korrekt produkt?
//Ett enkelt program med heltalsvariabler
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int tal1, tal2, produkt;
tal1=5;
tal2=11;
produkt=tal1*tal2;
cout << ”Produkten är”<<produkt;
system(”PAUSE”;
return 0;
}
Övning C1.3
Ändra i föregående program så att du får lite mera utskrift. Spara sedan programmet som prod2.cpp. Du
ska få följande utskrift när du kör programmet (om du har samma tal som i övningen ovan).
RESULTAT
============
Produkten är 55
Övning C1.4
Du ska nu förbättra programmet ytterligare. Den stora nackdelen med programmet är att man som
användare inte kan påverka vilka tal som multipliceras med varandra. Ändra programmet så att man själv
får mata in tal1 och tal2, och spara sedan programmet som prod3.cpp. En körning av programmet ska se
ut enligt följande:
Ange första talet:
(Här ska man få skriva in ett tal, t.ex. 24, och trycka RETUR)
Ange andra talet:
(Samma sak här, t.ex. 17…och sedan ska resultatet skrivas ut:)
RESULTAT
============
Produkten av 24 och 17 är 408
Sida 5 (7)
Värmdö Gymnasium
Datainstitutionen
Programmering A
040108
Övning C1.5
Du ska nu ändra ännu mer i programmet, så att man förutom produkten av talen får ut även summan,
differensen och kvoten av dessa. Spara programmet som uppg5.cpp. Om du t.ex. matar in 30 och 10 ska
du få följande utskrift:
RESULTAT
============
Produkten : 30 * 10 = 300
Summan : 30 + 10 = 40
Differensen : 30 – 10 = 20
Kvoten : 30 / 10 = 3
Testa programmet och kontrollera om det verkligen fungerar för alla tal. Om inte (det gör det inte), försök
fundera ut varför.
Övning C1.6
Läs in tre decimaltal a, b och c och beräkna och skriv ut deras medelvärde (a+b+c)/3.
Övning C1.7
Läs in ett belopp och aktuell momssats i procent. Skriv ut momsbeloppet.
Övning C1.8
Deklarera två variabler A och B och tilldela dessa värden. Skriv sedan de satser som gör att A och B byter
värde med varandra. Ledtråd: Det måste till någonting extra.
NU KOMMER 3 SVÅRA UPPGIFTER
Övning C1.9
Den här uppgiften behöver du inte skriva något program till, bara med hjälp av tidigare teori i detta häfte
ta reda på svaren. Ange resultat och typ för vart och ett av de aritmetiska uttrycken nedan. Tal skrivna
utan decimaler är heltal.
Operatorn % heter modulo och betyder resten vid heltalsdivision. T ex 7%3 blir 1 (3 tas bort 2 gånger, då
återstår 1).
a) 17/5
b) 17%5
c) 39/3
d) 15/0
e) 3/2*2
f) 18.0/5
g) 15.0/5
h) 18.0/5
i) sqrt(25)
Övning C1.10
Skriv ett program som läser in ett datum som ett åttasiffrigt tal, t.ex. 20000107, och skriver ut datumet på
följande sätt: 7/1-2000.
Övning C1.11
Skriv programkod för att beräkna följande uttryck i C++. Deklarera variabler som flyttal.
Läs in lämpliga värden och beräkna resultatet. (Kolla att programmet räknar rätt!!)
a)
v = 2⋅ y2 +
b)
s = 1 + sin x
c)
t=e
4x
3
x +3
Sida 6 (7)
Värmdö Gymnasium
Datainstitutionen
Programmering A
040108
Minitest
G-nivå:
1. Nämn 3 högnivåspråk.
2. Vilka är de tre stegen till ett körbart program? Vilka filer skapas?
3. Vad är pseudokod? Ge ett exempel.
4. Vilken variabeltyp är vanligast för heltal?
5. Vilken variabeltyp är vanligast för decimaltal?
6. Vad blir x i följande programkod: x=2,5 + 12,0 / 2,0 / (2,0 + 1,0)'
7. Vad blir x i följande programkod: x=8,0/3 + 8/3
8. Skriv ett program som läser in tre decimaltal a, b och c och beräkna och skriver ut medelvärdet
(a+b+c)/3.
VG-nivå:
1. Vilket var det första högnivåspråket.
2. Vilka två högnivåspråk är vanligast(används mest) idag?
3. Vad är kompilatorns respektive länkarens uppgift?
4. Ange resultat och typ för vart och ett av de aritmetiska uttrycken nedan. Tal skrivna utan decimaler är
heltal.
a) 17/5 b) 17%5 c) 18.0/5
5. Skriv ett program som läser in ett datum som ett åttasiffrigt tal, t.ex. 20000107, och skriver ut datumet
på följande sätt: 7/1-2000.
6. Skriv programkod för följande uttryck i C++. Deklarera variablerna x, y, ARC som flyttal.
ARC = 2 ⋅ y 2 +
4x3
3
Läxa
Läs detta häfte och gör minitestet..
Lös övningarna genom att skriva kod på papper eller programmera på datorn.
Sida 7 (7)