Bonjour,
Je débute en Fortran et j'ai de nouveau besoin de l'aide de la communauté.
J'ai écrit un petit programme qui, dans une série de nombres, détermine ceux qui sont premiers. Ceux-ci sont alors est classés dans des tableaux lignes par lignes, une colonne après l'autre. J'arrive à écrire (write) des tableaux de taille connu, de façon séquentielle. Mais, j'ai donc 3 problèmes:
- je suis obligé de mettre une condition (instruction if) sur le remplissage du tableau afin qu'il soit écrit: tant que celui-ci n'est pas plein, il ne sera pas écrit. J'ai compensé, en demandant l'écriture du dernier tableau, plein ou pas, lorsque la série de nombre à tester est fini. Je me demande s'il n'y a pas un moyen pour éviter cela, si oui comment?
-ma deuxième préoccupation porte sur le dernier tableau. Au début et à chaque cycle, le tableau est réinitialisé à 0. De ce fait lorsque j'écris le dernier tableau, il contient des 0 dans les 'cases' non remplis. Ma question est: comment faire pour avoir juste des cases vides en lieu et place des 0?
- enfin, je souhaite pouvoir écrire chaque tableau dans un fichier (texte pour faire simple) losque celui est prêt, plein ou pas, en serie avec des noms consécutifs. C'est à dire, si pour une série de nombre je peux remplir i tableaux (xlines, ycolon) alors j'aurais 1 fichier présentant successivement les i tableaux tableaux (tab1, tab2, ..., tabi) avec des noms indicatifs (tabi).
Je sais que c'est beaucoup mais je patauge à l'intérieur sans succès depuis un certain temps déjà. Je suis prêt à apprendre et je suis preneur de toutes explications, tous conseils et autres lignes de codes qui peut me faciliter la compréhension de la tâche à accomplir. je joint le code de mon programme.
Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 program prime_func implicit none integer, parameter :: nlinemax= 4, ncolumnmax = 4 integer, dimension (nlinemax, ncolumnmax) :: tt integer:: i, j, k, ntest, mtest, ierr, a, b logical:: Lans, Lprimefunc print*,'Entrer two numbers' read (*,*) ntest, mtest do while (ntest > mtest) print*, 'Wrong, give the smallest before' read (*,*) ntest, mtest end do tt = 0 j=1 print*, 'the list of prime number, from', ntest, 'to', mtest do i = ntest, mtest Lans = Lprimefunc (i, ierr) if (ierr == 1) then else if (ierr == 0) then if (Lans .eqv. .true.) then b=(j-1)/nlinemax+1 a=j-(b-1)*nlinemax tt(a,b) =i j=j+1 if (j==ncolumnmax*nlinemax+1) then do k = 1, nlinemax write(*,*) tt (k, : ) enddo write(*,*) j=1 tt = 0 end if end if end if if (i==mtest) then do k = 1, nlinemax write(*,*) tt (k, : ) enddo end if end do end program prime_func *Lprimefunc ************************************************************************ * * logical function Lprimefunc (i, ierr) * * ************************************************************************ * Logical prime function * ************************************************************************ * * implicit none integer :: i, idiv, idivmax, ierr * * initialization * ierr = 0 Lprimefunc = .false. * * condition on error flag value regading the value of the number to be * tested, and evaluation of the primality * if (i <= 0) then ierr = 1 else if (i == 1) then else if (i == 2) then Lprimefunc = .true. else idivmax = int (sqrt (dble (i))) do idiv = 2, idivmax if (mod (i, idiv) == 0) return end do Lprimefunc = .true. end if return end
Partager