Jalle_88 skrev:
Jag pluggar till ingenjör, och därför måste jag läsa en del numerisk analys.
Jättebra!
Då skriver jag resten av kommentaren så att den verkligen ser ingenjörsmässig ut.
Jalle_88 skrev:
... om någon kunde ge lite konstruktiv kritik så vore jag mycket tacksam
Jag kan väldigt lite om Fortran och ingenting om Matlab, men det hindrar
mej inte från att komma med lite kritik.
1. Stil
1.1 Skiftläge
Fortran90 tillåter små bokstäver både i ord reserverade i språket och i namn du själv hittar på (för variabler, funktioner och sånt). Att använda stora bokstäver överallt ser väldigt skrikigt ut. Att använda små precis överallt kan å andra sidan se mesigt och o-fortran-manligt ut. Så utveckla en snygg stil. Det bör inte vara en alltför personlig stil, utan kolla runt vad som verkar standard, och skapa en egan som bara är lite personlig.
1.2 Indentering
Även om kompilatorn inte kräver det så underlättar det läsbarhet om indenteringen följer programmets struktur.
2. Strukturerad programmering
Det finns oändligt mycket att lära i ämnet: strukturerad programmering, programmeringsparadigm, design patterns, programmeringsmetoder, etc, och om man vidgar perspektivt hur main specificerar och testar program, projektplanering, gruppdynamik och även användargränssnitt, abstraktioner, mentala modeller, världsfattigdomen och liv i rymden. Oj, nu drogs jag med lite. Här räcker med några exempel ur ditt lab13-program.
2.1 Goto-fri programmering
2.1.1 DO-loop
Din loop har ett avslutnings-test
Kod: Markera allt
IF (ABS(DX)>0.01) THEN
CYCLE
ELSE
EXIT
END IF
Default beteende är att DO-loopen fortsätter om man inte gör EXIT, så man kan ta bort CYCLE. Den loopar ändå. Så här:
CYCLE är i strikt mening inte goto, men det här sammanhanget är det ett slags godtyckligt hopp som inte behövs.
2.2 Var sak på sin plats
2.2.1 Renodla RAMANUJAN
Funktionen RAMANUJAN borde beräkna omkretsen av en ellips. Det gör den också, men inte bara. Den subtraherar CIRF från värdet innan det returnarar det. Funktionens namn antyder att den BARA beräknar omkretsen, så man skulle kunna säga att namnet är fel, att den skulle heta RAMANUJAN_MINUS_TARGET_CIRCUM eller FUNC_FOR_A_SECANT_SEARCH. Men jag skulle nog välja att behålla namnet RAMANUJAN och renodla funktionen så att den faktiskt är bara Ramanujan. D.v.s inte subtrahera CIRF i RAMANUJAN, utan göra det på de ställen där RAMANUJAN anropas.
2.2.2 Renodla SEKANT
Funktionen SEKANT borde söka efter ett nollställe för en funktion. Det gör den också, men som den är skriven nu verkar den bara kunna göra det för funktionen RAMANUJAN. Om man vill söka efter nollställe för en annan funktion måsta man skriva om SEKANT. Dels är SEKANT bunden till namnet på funktionen den ska anropa, dels förutsätter den att funktionen den ska anropa har tre argument och att första och tredje argumentet ska vara respecktive 80 och 400. Ett sätt att generalisera argumentbiten är att döpa om SEKANT till SEKANT_FOR_THREE_ARGS och lägga till två argument vilka konstander den ska använda som första och tredje argument. Men jag skulle nog göra en SEKANT med enklast möjliga gränssnitt, vilket är att den tar en funktion med precis ett argumet, och söker vilket värde på just det argumentet som ger noll.
2.2.3 Binda samman RAMANUJAN och SEKANT
Om en
ren RAMANUJAN tar två argument och vi söker resultatet 400, och en
ren SEKANT förutsätter en funktion med ett argument och söker resultatet 0, så har vi en missmatch. Det behövs en
hjälpfunktion. Du kan se hur den ser ut i bifogat program. Har kallat den PARTIALRAMANUJAN.
2.2.4 Cohesion och Coupling
Det är lätt hänt att funktioner inte bara utför själva kärnan i vad de borde göra utan att det också hamnar lite extra funktionalitet i dem. Det gör att de blir anpassade för eller beroende av andra funktioner som de egentligen inte har att göra med, och programmet blir svårare att överblicka, och det blir lättare för buggar att slinka in när man ändrar i nån del av programmet. Teorin om splittring inom funktioner/moduler och beroenden mellan funktioner/moduler kallas Cohesion och Coupling. Se wikipedia.
3. Val av språk
Det har jag för närvarande ingen synpunkt på.