Bonjour,
Je me remets au Pascal en ayant installé Free Pascal sur ma machine Linux. J'ai voulu comparer les performances avec C++/Gcc. En temps d'exécution user/système j'arrive à peu près au même temps sur le même programme. mais par contre sur le temps réel mon temps d'exécution est doublé sous FP. Je pense que ce temps vient d'un délai plus long pour écrire sur la sortie standard. D'ailleurs en enlevant les write j'arrive au même temps que le programme C++.
D'où ma question existe-t-il une biliothèque free pascal optimisé pour Linux ? un moyen d'optimiser les sorties sous linux avec FP ?
Ci-dessous les deux extraits de codes (FP et C++). Le but n'est pas d'optimiser l'algorithme je sais qu'il existe des façons de faire beaucoup plus efficace les deux programmes sont juste un moyen de faire deux boucles imbriquées afin d'avoir une complexité thêta2 donc ne jugez pas s'il vous plaît l'algorithme en lui même. Merci.
J'aurais pu construire ma chaîne puis afficher le résultat qu'à la fin, mais la question est vraiment de savoir si on peut rendre les write plus efficaces en Free Pascal sous Linux. D'ailleurs c'est un peu ce qu'à lair de faire cout car l'affichage se fait par "à coup" comme s'il y avait une sorte de bufferisation alors qu'avec write sous FP on voit bien que chaque sortie est écrite au fur et à mesure.
et en C++ on a la même chose :
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 program Premiers; uses sysutils; var limite,i,j: integer; prim : boolean; begin limite := strtoint(paramstr(1)); for i := 1 to limite do begin prim := true; for j := 2 to (i-1) do begin prim := prim and (0<>(i mod j)); end; if prim then write(i,', '); end; writeln(); end.
Code c++ : 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 #include <iostream> #include <cstdlib> using namespace std; int main(int argc, char* argv[]){ if (argc < 2) { cout << "donnez un entier" << endl; return 1; } else if (argc >2) { cout << "donnez qu'un seul argument" << endl; return 2; } int x = atoi(argv[1]); for (int i = 1;i<=x;i++){ bool prim = true; for(int j = 2; j < i ;j++) prim = prim && (i%j!=0); if (prim) cout << i << ", "; } cout << endl; return 0; }
A vous lire.
Partager