tips för en Fortran-nybörjare?

Här diskuteras programmering och utveckling
Jalle_88
Inlägg: 104
Blev medlem: 28 jun 2010, 18:50
OS: Ubuntu

tips för en Fortran-nybörjare?

Inlägg av Jalle_88 »

Hej :)

Jag pluggar till ingenjör, och därför måste jag läsa en del numerisk analys. Problemet är att min skola har bestämt att all undervisning i ovannämnda skall ske i matlab, och jag känner (kanske just därför) en stark motvilja mot matlab. :)

Så jag tänkte lära mig fortran, och försöka övertala dem att låta mig skriva i det istället. Hittills har jag skrivit om ett av mina (mycket enkla) matlabprogram i fortran. Jag bifogar koden här nedan (som .txt... tydligen var inte f90 ett tillåtet filformat), och om någon kunde ge lite konstruktiv kritik så vore jag mycket tacksam :)

Jag skulle också vara tacksam för tips på bra fortran-guider/böcker, gärna med bra övningsuppgifter, då det saknas i den bok jag har för tillfället, och för tips på ett bra, modernt och lagom enkelt grafikbibliotek.
Bilagor
lab13.txt
(1.06 KiB) Nerladdad 104 gånger
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: tips för en Fortran-nybörjare?

Inlägg av David Andersson »

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:

Kod: Markera allt

   IF (ABS(DX)<=0.01) THEN
      EXIT
   END IF
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å.
Bilagor
lab13.f90.txt
(1.37 KiB) Nerladdad 113 gånger
Jalle_88
Inlägg: 104
Blev medlem: 28 jun 2010, 18:50
OS: Ubuntu

Re: tips för en Fortran-nybörjare?

Inlägg av Jalle_88 »

tack så hemskt mycket för det uttömmande svaret! :)
o-fortran-manligt
Exakt min känsla! :) Men jag kanske skulle börja skriva variabler och konstanter i gemener, fast det är ju skönt att bara trycka caps lock....

Det var väldigt bra tips angående att renodla funktionerna, det skall jag komma ihåg.

Jag har ju hamnat lite efter i nummen pga min motvilja mot matlab, så jag har en hel del att ta igen, så förhoppningsvis blir det lite större program snart.

Kan någon rekomendera en bra bok eller hemsida för att lära sig fortran? Och framför allt ett bra grafikpaket jag kan lära mig.
Skriv svar

Återgå till "Programmering och webbdesign"