-
Notifications
You must be signed in to change notification settings - Fork 1
/
app_exercises.tex
316 lines (295 loc) · 10.2 KB
/
app_exercises.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
%---------------------------------------------------------------------
%---------------------------------------------------------------------
\chapter{Exercises} \label{app:exercises}
%---------------------------------------------------------------------
%---------------------------------------------------------------------
\newcommand{\excn}[1]{\textsf{\textbf{#1}}}
%---------------------------------------------------------------------
\section{Fortran}
%---------------------------------------------------------------------
\fmode
%---------------------------------------------------------------------
\begin{tabular}{lp{0.8\textwidth}}
\excn{1-1} & Which of the following names can be used as Fortran variable names? \\
& \\
& a) \fvar{number\_of\_stars} \\
& b) \fvar{fortran\_is\_a\_nice\_language\_to\_use}\\
& c) \fvar{2001\_a\_space\_odyssey} \\
& d) \fvar{more\$\_money}\\
& \\
\excn{1-2} & Declare the following variables in Fortran: 2 scalar integers
\fvar{a}, and \fvar{b}, 3 floating point scalars \fvar{c}, \fvar{d}
and \fvar{e}, 2 character strings \fvar{infile} and \fvar{outfile}
and a logical variable \fvar{f}.\\
& \\
\excn{1-3} & Declare a floating point variable \textit{a} that can
represent values between 10$^{-150}$ and 10$^{150}$ with 14 significatn numbers. \\
& \\
\end{tabular}
%---------------------------------------------------------------------
\begin{tabular}{lp{0.8\textwidth}}
\excn{1-4} & What is printed by the following program?\\
&
\begin{minipage}{0.8\textwidth}
\begin{lstlisting}
program precision
implicit none
integer, parameter :: ap = &
selected_real_kind(15,300)
real(ap) :: a, b
a = 1.234567890123456
b = 1.234567890123456_ap
if (a==b) then
write(*,*) 'Values are equal.'
else
write(*,*) 'Values are different.'
endif
stop
end program precision
\end{lstlisting}
\end{minipage} \\
& \\
\excn{1-5} & Declare a $[3 \times 3]$ floating point array
,\fvar{Ke}, and an 3 element integer array, \fvar{f}\\
& \\
\excn{1-6} & Declare an integer array, \fvar{idx}, with the following indices \\
&\fvar{[0, 1, 2, 3, 4, 5, 6, 7]}.\\
& \\
\excn{1-7} & Give the following assignments:\\
& Floating point array, \fvar{A}, is assigned the value 5.0 at
(2,3).\\
& Integer matrix, \fvar{C}, is assigned the value 0 at row 2.\\
& \\
\excn{1-8} & Give the following if-statements:\\
& \\
& If the value of the variable,\fvar{i}, is greater than 100
print 'i is greater than 100!'\\
& \\
& If the value of the logical variable, \fvar{extra\_filling},
is true print 'Extra filling is ordered.', otherwise print
'No extra filling.'.\\
& \\
\excn{1-9} & Give a case-statment for the variable, \textit{a},
printing 'a is 1' when a is 1, 'a is between 1 and 20' for
values between 1 and 20 and prints 'a is not between 1 and 20'
for all other values. \\
\end{tabular}
%---------------------------------------------------------------------
\begin{tabular}{lp{0.8\textwidth}}
\excn{1-10} & Write a program consisting of a do-statement 1 to 20 with the control variable, \fvar{i}.
For values, \fvar{i}, between 1 till 5, the value of \fvar{i} is printed, otherwise 'i>5' is printed.
The loop is to be terminated when \fvar{i} equals 15.\\
& \\
\excn{1-11} & Write a program declaring a floating point matrix, \fvar{I}, with the dimensions
$[10 \times 10]$ and initialises it with the identity matrix. \\
\excn{1-12} & Give the following expressions in Fortran: \\
& \\
& a) $\frac{1}{\sqrt{2}}$ \\
& b) $e^{x} \sin ^{2} x$ \\
& c) $\sqrt{a^{2} +b^{2}}$ \\
& d) $\left| x-y\right|$ \\
& \\
\excn{1-13} & Give the following matrix and vector expressions in Fortran.
Also give appropriate array declarations: \\
& \\
& a) $\mathbf{AB}$ \\
& b) $\mathbf{A^{T} A}$ \\
& c) $\mathbf{ABC}$ \\
& d) $\mathbf{a\cdot b}$ \\
& \\
\excn{1-14} & Show expressions in Fortran calculating
maximum, mininmum, sum and product of the elements of an array.\\
& \\
\excn{1-15} & Declare an allocatable 2-dimensional floating point array and
a 1-dimensional floating point vector. Also show program-statements how memory
for these variables are allocated and deallocated.\\
& \\
\excn{1-16} & Create a subroutine, \fname{identity}, initialising a {\underline {arbitrary}}
two-dimensionl to the identity matrix. Write a program illustrating the use of the subroutine.\\
& \\
\excn{1-17} & Implement a function returning the value of the the following expression: \\
& \\
& $e^{x} \sin ^{2} x$ \\
\end{tabular}
%---------------------------------------------------------------------
\begin{tabular}{lp{0.8\textwidth}}
\excn{1-18} & Write a program listing \\
& $f(x)=\sin x$ from $-1.0$ to $1.0$ in intervals of $0.1$. The output from the program
should have the following format:\\
&
\begin{minipage}{0.8\textwidth}
\begin{lstlisting}
111111111122222222223
123456789012345678901234567890
x f(x)
-1.000 -0.841
-0.900 -0.783
-0.800 -0.717
-0.700 -0.644
-0.600 -0.565
-0.500 -0.479
-0.400 -0.389
-0.300 -0.296
-0.200 -0.199
-0.100 -0.100
0.000 0.000
0.100 0.100
0.200 0.199
0.300 0.296
0.400 0.389
0.500 0.479
0.600 0.565
0.700 0.644
0.800 0.717
0.900 0.783
1.000 0.841
\end{lstlisting}
\end{minipage} \\
& \\
\excn{1-19} & Write a program calculating the total length of a piecewise linear curve. The curve is defined
in a textfile \ffname{line.dat}. \\
& \\
& The file has the following structure:\\
& \\
&\{number of points n in the file\}\\
&\{x-coordinate point 1\} \{y-coordinate point 1\}\\
&\{x-coordinate point 2\} \{y-coordinate point 2\}\\
&.\\
&.\\
&\{x-coordinate point n\} \{y-coordinate point n\}\\
& \\
&The program must not contain any limitations regarding the number of points in
the number of points in the curve read from the file.\\
\end{tabular}
%---------------------------------------------------------------------
\begin{tabular}{lp{0.8\textwidth}}
\excn{1-20} & Declare 3 strings, \fvar{c1}, \fvar{c2} and
\fvar{c3} containing the words 'Fortran', 'is' och 'fun'. Merge these into a
new string, \fvar{c4}, making a complete sentence.\\
& \\
\excn{1-21} & Write a function converting a string into a floating point value.
Write a program illustrating the use of the function.\\
& \\
\excn{1-22} & Create a module, \fmodule{conversions}, containing the function in 1-21
and a function for converting a string to an integer value. Change the program in 1-21 to
use this module. The module is placed in a separate file, \ffname{conversions.f90} and
the main program in \ffname{main.f90}. \\
\end{tabular}
%%---------------------------------------------------------------------
%\section{Object Pascal}
%%---------------------------------------------------------------------
%
%\pmode
%
%\begin{tabular}{lp{0.8\textwidth}}
%\excn{2-1} & Vilka av följande beteckningar kan användas som variabelnamn
%i Object Pascal? \\
%& \\
%& a) \fvar{number\_of\_stars} \\
%& b) \fvar{pascal\_is\_a\_nice\_language\_to\_use}\\
%& c) \fvar{2001\_a\_space\_odyssey} \\
%& d) \fvar{more\$\_money}\\
%& \\
%\excn{2-2} & Deklarera följande variabler i Object Pascal: två
%heltalsskalärer \pvar{a} och \pvar{b}, tre flyttalsskalärer
%\pvar{c}, \pvar{d} och \pvar{e}, två
%teckensträngar \pvar{infile} och \pvar{outfile} och en logisk variabel \pvar{f}.\\
%& \\
%\excn{2-3} & Ange följande if-satser:\\
%& \\
%& Om värdet på variabeln i är större än 100 skriv ut
%'i större än hundra!'\\
%& \\
%& Om värdet på den logiska variabeln extra\_fyllning är sann
%skrivs 'Extra fyllning beställd.', annars skrivs 'Ingen extra
%fyllning.'.\\
%& \\
%\excn{2-4} & Ange en case-sats för variabeln \pvar{a} som skriver
%ut 'a är 1' för värdet 1, 'a är mellan 2 och 20' för värden mellan
%2 och 20, och skriver ut 'a är inte mellan 1 och 20' för alla
%andra tal.\\
%& \\
%\excn{2-5} & Ange en slinga 1 till 20 med styrvariabeln \pvar{i}.
%För \pvar{i} mellan 1 till 5 skrivs värdet på \pvar{i} ut på
%skärmen, annars skrivs
%'i>5' ut.\\
%& \\
%\excn{2-6} & Skriv ett program som deklarerar en flyttalsmatris
%\pvar{I} med storleken $[10 \times 10]$ och sedan initialiserar denna med enhetsmatrisen.\\
%& \\
%\excn{2-7} & Ange följande uttryck i Object Pascal: \\
%& \\
%& a) $\frac{1}{\sqrt{2}}$ \\
%& b) $e^{x} \sin ^{2} x$ \\
%& c) $\sqrt{a^{2} +b^{2}}$ \\
%& d) $\left| x-y\right|$ \\
%& \\
%\end{tabular}
%
%%---------------------------------------------------------------------
%
%\begin{tabular}{lp{0.8\textwidth}}
%\excn{2-8} & Deklarera en dynamisk flyttalsmatris och en dynamisk
%flyttalsvektor. Visa med programsatser hur minne allokeras och
%frigörs för dessa variabler\\
%& \\
%\excn{2-9} & Skapa en subrutin identity som initialiserar en
%godtycklig matris till enhetsmatrisen. Visa genom att skriva ett
%huvudprogram
%hur subrutinen anropas.\\
%& \\
%\excn{2-10} & Skapa en funktion som returnerar värdet av uttrycket \\
%& \\
%& $e^{x} \sin ^{2} x$ \\
%& \\
%& Skriv också ett program som skriver ut funktionsvärdet när $x =
%1.0$.\\
%& \\
%\excn{2-11} & Skriv ett program som listar \\
%& $f(x)=\sin x$ från --1.0 till 1.0 i steg om 0.1. Utskriften från programmet skall ha följande utseende:\\
%&
%\begin{minipage}{0.8\textwidth}
%\begin{lstlisting}
% 111111111122222222223
%123456789012345678901234567890
% x f(x)
%-1.000 -0.841
%-0.900 -0.783
%-0.800 -0.717
%-0.700 -0.644
%-0.600 -0.565
%-0.500 -0.479
%-0.400 -0.389
%-0.300 -0.296
%-0.200 -0.199
%-0.100 -0.100
% 0.000 0.000
% 0.100 0.100
% 0.200 0.199
% 0.300 0.296
% 0.400 0.389
% 0.500 0.479
% 0.600 0.565
% 0.700 0.644
% 0.800 0.717
% 0.900 0.783
% 1.000 0.841
%\end{lstlisting}
%\end{minipage} \\
%\end{tabular}
%
%%---------------------------------------------------------------------
%
%\begin{tabular}{lp{0.8\textwidth}}
%\excn{2-12} & Deklarera tre strängar \pvar{c1}, \pvar{c2} och \pvar{c3} som innhåller orden
%'Object Pascal', 'är' och 'kul'. Slå ihop dessa till en ny sträng
%\pvar{c4}, så att de bildar en komplett mening.\\
%& \\
%\excn{2-13} & Skriv en enhet/unit med funktionerna: \pmethod{identity}
%för att initialisera en matris till enhetsmatrisen, \pmethod{zero}
%för att nollställa en matris och \pmethod{transpose} för att
%transponera en matris. Funktionerna skall använda
%\ptype{variant}-matriser och kunna hantera godtyckligt stora
%\ptype{variant}-matriser. Skriv
%också ett huvudprogram som använder rutinerna i enheten.\\
%\end{tabular}