Anders Sjögren Modulär programutveckling. Anders Sjögren Ett programmeringsprojekt, flera personer utvecklar ett program Vi ska utveckla ett ränteberäkningsprogram.

Slides:



Advertisements
Liknande presentationer
void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
Advertisements

Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Datavetenskap för teknisk kemi 10p, moment 1
Programstruktur: C för enchipsdatorer
Funktioner och programorganisation
De fundamentala datatyperna
Operatorer.
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Lite mer rekursivitet -Sorterrings algoritmer -- Kapitel 8 Algoritmer.
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
Arrays Indicerade variabler.
C-programmering ID120V William Sandqvist Länkad lista
Att programmera i språket Java
Realtidsprog. - Anders Arvidsson1 Realtidsprogrammering En introduktion – Implementering (med exempel från PIC)
i olika programmeringsspråk
Iteration i C ”upprepa”
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT C++ - förbättrat C?  Procedurellt program ser ut som C: sekvens, selektion, iteration  /* kommentar.
Sid 1 CD5250 OOP med C++ Daniel Flemström MDH/IDT CD5250 OOP med C++
Repetition inför slutprovet
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Deklarera en struct som kan användas för att representera en rät linje Använd den I main för att deklarera en variabel som du initierar så att den representerar.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
Programspråk Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande program och kompilerande program. Python är ett interpreterande.
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Modulär programutveckling
Namnrum, räckvidd och rekursion Linda Mannila
Objektorienterad Programmering i C++ I
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Anders Sjögren ANSI - standard ?. Anders Sjögren ANSI - standard ? Om man skriver ett bra C-program och kompilerar fram ”exe”-filen så vore det ju trevligt.
Anders Sjögren Bitfält exempel Nu kommer ett förbättrat program. Det är funktions- uppdelat och kan lägga till poster som lagras på fil.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Problemlösningsmetodik
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
15 September, Lexikala element mm Eftersom C är ett språk, har det ett alfabet och regler för hur bokstäverna kan bilda ord och hur olika strukturella.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Språket för inbyggda system 2
Anders Sjögren Filer - långtidslagring. Anders Sjögren Filtyper i DOS talet ett ( intx=1; ) lagrat i en –textfil, (en sekvens av tecken ( bytes )) enligt.
Programmeringsteknik Föreläsning 17 Skolan för Datavetenskap och kommunikation.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
Anders Sjögren Deklarationsområde och funktioner.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
William Sandqvist Funktionsbibliotek När man utvecklat en funktion så långt att den är "färdigutvecklad" kan man lika gärna spara den på.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
OOP&M - teori1 OOP&M – Föreläsning 3 kap 2-4 Repetition Föreläsning-datayper-syntax-tilldelning.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
Anders Sjögren Enkelt program med funktion /* two_func.c - a program that uses two functions in one file */ /* from Stephen Prata C Primer Plus ISBN
Selektion jämförande och logiska operatorer
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
Språket för inbyggda system. C:s verktygslåda är välfylld! William Sandqvist
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
Anders Sjögren Funktioner något in och något annat ut.
Föreläsning 3: Booleans, if, switch
Iteration – Repetitionssats - while
Presentationens avskrift:

Anders Sjögren Modulär programutveckling

Anders Sjögren Ett programmeringsprojekt, flera personer utvecklar ett program Vi ska utveckla ett ränteberäkningsprogram !

Anders Sjögren Programmets struktur modulariserad programmering Iteration * Selektion o Blir en funktion

Anders Sjögren Programmets struktur arbetsfördelning Jag fixar main()!

Anders Sjögren Programmets struktur arbetsfördelning

Anders Sjögren Filer i projektet

Anders Sjögren Programmets struktur, gemensam headerfil /* ranta.h */ #ifndef ranta_h #define ranta_h #define RANTESATS 8.5 extern const doubleranteFaktor ; /* definierad i main.c */ #endif

Anders Sjögren Programmets struktur arbetsfördelning och filer /* inmatnin.h */ #include "ranta.h" #include #include /* ej ANSI, clrscr() används */ #if !defined(inmatnin_h) #define inmatnin_h void Inmatning(double* kapitalPek,int*antalArPek); #endif

Anders Sjögren Programmets struktur arbetsfördelning och filer /* inmatnin.c */ #include "inmatnin.h" void Inmatning( double* kapitalPek, int* antalArPek ){ clrscr(); /* ej ANSI-C */ printf("\nBeräknar kapitaltillväxt vid %0.1f ränta",RANTESATS); printf("\n============================================="); printf("\nPositivt kapital räknar framåt i tiden."); printf("\nNegativt kapital räknar bakåt i tiden."); printf("\n\nInsatt kapital och antal år ? "); printf("(-->(+/-) )-->"); scanf("%lf%d", kapitalPek, antalArPek); return; }

Anders Sjögren Programmets struktur arbetsfördelning och filer /* tabell.h */ #include "ranta.h" #include #if !defined(tabell_h) #define tabell_h #defineABS( x )( (x) > 0 ? (x) : -(x) ) void TabellPaSkarmen( double kapital, int antalAr ); #endif

Anders Sjögren Programmets struktur, arbetsfördelning och filer #include "tabell.h" static double NastaAr( double kapital ); void TabellPaSkarmen( double kapital, int antalAr ) { int ar ; printf("\n År Saldo\n == =====\n"); for ( ar = 1; ar <= antalAr; ar++ ) { kapital = NastaAr( kapital ); /* enheter i tabellen */ if ( -10 < kapital && kapital < 10 ) printf("%3d%11.2f kr\n", ar, ABS( kapital )); else if ( -100 < kapital && kapital < 100 ) printf("%3d%11.2f da(deka)kr\n", ar, (ABS( kapital ))/10); else if ( < kapital && kapital < 1000 ) printf("%3d%11.2f h(hekto)kr\n", ar, (ABS( kapital ))/100); else printf("%3d%11.2f kkr\n", ar, (ABS( kapital ))/1000); } return; } forts

Anders Sjögren Programmets struktur arbetsfördelning och filer static double NastaAr( double x ) { if ( x > 0 ) x = x * ( 1 + ranteFaktor ); /* denna */ else x = x * 1/( 1 + RANTESATS/100 ); /* eller denna */ return x ; }

Anders Sjögren Programmets struktur arbetsfördelning och filer /* kalkylat.h */ #include "ranta.h" #include #if !defined(kalkylat_h) #define kalkylat_h voidKalkylator( void ); #endif

Anders Sjögren Programmets struktur arbetsfördelning och filer /* kalkylat.c */ #include "kalkylat.h" void Kalkylator( void ) /* Enkel kalkylator */ { float x, y; char c; printf( "\nKalkylator som klarar de fyra räknesätten t ex "); printf("3+2\n"); printf( "A, avslutar\n"); forts

Anders Sjögren Programmets struktur arbetsfördelning och filer while (printf("-->"), scanf("%f%c%f", &x, &c, &y ) == 3) { switch(c) { case '+': printf("%f\n", x + y); break; case '-': printf("%f\n", x - y); break; case '*': printf("%f\n", x * y); break; case '/': if (y != 0) printf("%f\n", x / y); else printf("Division med noll\n"); break; default: printf("Felaktig operator\n"); break; } scanf("%*s"); return; }

Anders Sjögren Programmets struktur arbetsfördelning och filer /* main.h */ #include "ranta.h" #include "inmatnin.h" #include "tabell.h" #include "kalkylat.h" #include"ranta.h" #include #if !defined(main_h) #define main_h const double ranteFaktor = RANTESATS / 100; #endif

Anders Sjögren Programmets struktur arbetsfördelning och filer /* main.c */ #include "main.h" int main( void ) { charkalkylera, upprepa = 'j' ; intantalAr; double kapital; while ( upprepa == 'j' || upprepa == 'J' ) { Inmatning( &kapital, &antalAr ); TabellPaSkarmen( kapital, antalAr ); printf("\nÖnskas kalkylator? ( j/n ) --> "); scanf(" %c", &kalkylera ); if ( kalkylera == 'j' || kalkylera == 'J' ) Kalkylator(); printf("\nUpprepa programmet? (j/n) --> "); scanf(" %c", &upprepa); } printf("\nSLUT"); return 0; }

Anders Sjögren Filer i projektet

Anders Sjögren Filer i projektet Istället för *.c - filer kan man låta färdigkompilerade filers objektkod ingå i projektet.

Anders Sjögren Filer i projektet Objektfiler kan man dessutom stoppa in i *.LIB - filer m h a t ex Borlands DOS-program TLIB

Anders Sjögren TLIB 4.00 Copyright (c) 1987, 1993 Borland International Syntax: TLIB libname [/C] [/E] [/P] [/0] commands, listfile libname library file pathname commands sequence of operations to be performed (optional) listfile file name for listing file (optional) A command is of the form: modulename, where is: + add modulename to the library - remove modulename from the library * extract modulename without removing it -+ or +- replace modulename in library -* or *- extract modulename and remove it /C case-sensitive library /E create extended dictionary /PSIZE set the library page size to SIZE /0 purge comment records to continue from file "filepath". Use '&' at end of a line to continue onto the next line. Denna hjälp får man om man bara ger kommandot TLIB i DOS

Anders Sjögren Kommandot TLIB

Anders Sjögren Projektets filer *.c *.obj *.lib

Anders Sjögren Headerfiler i main().c

Anders Sjögren Kommandon make och build När man kompilerar och länkar ett större programprojekt kan tiderna för detta bli långa –make-kommandot minskar dessa tider genom att hålla reda på vilka filer som har ändrats sedan förra kompileringen. Det är bara dessa filer som kompileras på nytt innan länkning sker. –build- kommandot kompilerar samtliga filer innan länkning

Anders Sjögren Preprocessorn något om dess användning i projektet preprocessorn är ett textmanipuleringsinstrument som används/utförs före kompilering alla preprocessordirektiv föregås av # - tecknet de vanligaste preprocessovarianterna är –makro utan argument - ”konstantdefinition” –makro med argument –filinkludering –villkorligt medtagande/uteslutande av text

Anders Sjögren Preprocessorn något om dess användning i projektet de vanligaste preprocessovarianterna är –makro utan argument - ”konstantdefinition” /* ranta.h */ #ifndef ranta_h #define ranta_h #define RANTESATS 8.5 extern const doubleranteFaktor ; /* definierad i main.c */ #endif Texten RANTESATS kommer i källkoden att bytas ut mot 8.5. För att styra konstantens typ kan man istället använda konstanta variabler.

Anders Sjögren Preprocessorn något om dess användning i projektet de vanligaste preprocessorvarianterna är –makro med argument /* tabell.h */ #include "ranta.h" #include #if !defined(tabell_h) #define tabell_h #defineABS( x )( (x) > 0 ? (x) : -(x) ) void TabellPaSkarmen( double kapital, int antalAr ); #endif Makro med argument liknar funktioner. De används för att förenkla uttryck som anses ”för små” för att göra funktion av. Man kortar exekverings- tiden pga att inget funktions- anrop görs ty uttrycket expanderas i källkods- texten.

Anders Sjögren Preprocessorn något om dess användning i projektet de vanligaste preprocessovarianterna är –makro med argument /* tabell.h */ #include "ranta.h" #include #if !defined(tabell_h) #define tabell_h #defineABS( x )( (x) > 0 ? (x) : -(x) ) void TabellPaSkarmen( double kapital, int antalAr ); #endif Slösa med parenteser! - hetalsMinne + 5 är inte lika med - (heltalsMinne + 5) om x == heltalsMinne + 5

Anders Sjögren Preprocessorn något om dess användning i projektet de vanligaste preprocessovarianterna är –filinkludering /* kalkylat.h */ #include "ranta.h" #include #if !defined(kalkylat_h) #define kalkylat_h voidKalkylator( void ); #endif Angivna textfilers innehåll kommer att expanderas här. ” ” betyder att filen hämtas från en egen katalog medans betyder att filen hämtas från en i utvecklingsmiljön fördefinierad katalog.

Anders Sjögren Preprocessorn något om dess användning i projektet de vanligaste preprocessovarianterna är –villkorligt medtagande/uteslutande av text /* kalkylat.h */ #include "ranta.h" #include #if !defined(kalkylat_h) #define kalkylat_h voidKalkylator( void ); #endif För att förhindra att viss text kommer med på flera ställen kan denna konstruktion användas. kalkylat_h används som en flagga att testa på.

Anders Sjögren Slut Övning, se nedan.