- Pseudocode compiler
- Comment compiler des pdf - Guide
- Inno setup compiler - Télécharger - Édition & Programmation
- Compiler plusieurs fichiers excel - Guide
- Code blocks compiler - Télécharger - Langages
- Compiler mp3 - Télécharger - Audio & Musique
7 réponses
23 juin 2023 à 11:12
Bonjour,
je ne suis pas capable de l'écrire dans un langage gratuit (lisp ?)
Tous les langages sont gratuits, le choix de lisp, c'est au hasard ou c'est vraiment une volonté de travailler avec ce langage ?
Parce que clairement ce n'est pas le premier auquel on penserait.
Quant à ton pseudo-code, il est insuffisant, on est plus sur une réécriture de la question que sur un vrai traitement du problème.
23 juin 2023 à 12:52
Bonjour
Solve n'existe pas de base. Soir quelqu'un l'a écrit quelque part et tu as la chance de le trouver, soit tu la code toi-même.
Il y a eu une question là dessus, il y a plusieurs mois à ce sujet en C# et elle n'a pas été résolue.
C'est en ça que KX te dis que ta proposition n'est pas un algorithme. Il faudrait y écrire la fonction solve.
Y'a quand même Excel qui dispose d'un solveur, mais ne l'ayant jamais utilisé, je ne sais pas ce qu'il vaut.
23 juin 2023 à 13:27
Maple, Mathematica, WolframAlpha etc. sont des logiciels de calculs, ils feront peut-être ce que tu veux, mais avec une analyse des symboles, en appliquant des formules mathématiques de résolution, etc.
Exemple : x²-3x+1=0
Lisp ou Scheme, ainsi que les différents langages de programmations de ce forum, vont plutôt devoir résoudre le problème en appliquant un algorithme qui manipulera des nombres, en itérant sur un grand nombre de valeurs possibles, pour calculer les différentes fonctions, et les comparer aux contraintes qu'on s'est fixé jusqu'à tomber sur une solution satisfaisante.
C'est une tout autre manière de réfléchir. Exemple d'algorithme :
I={0.33 ; 0.36; 0.56; 0.6}
J=[-0.1 ; 0.1]
pour chaque X allant de 0 à 360 avec un pas de 1
pour chaque Y allant de 0 à 360 avec un pas de 1
calcul de A = arctan(Y*tan(45)/(2X+Y))
calcul de B = arctan((Y+X/2)tan(45)/(Y+3X/2))
calcul de C = arctan(X*tan(45)/(2X+Y))
calcul de D = arctan((X+Y)*tan(45)/(2X+Y))
pour chaque E sur l'ensemble I
calcul de eA = min(abs(A - E), eA)
calcul de eB = min(abs(B - E), eB)
calcul de eC = min(abs(C - E), eC)
calcul de eD = min(abs(D - E), eD)
si eA dans J et eB dans J et eC dans J et eD dans J
afficher X, Y, A, B, C, D, eA, eB, eC, eD
Quant au choix du langage de programmation, pour faire ça je dirais qu'ils seront tous capables de le faire, mais la syntaxe variera d'un langage à l'autre.
Je comprends ce pseudocode, et je vous remercie de l'avoir explicité.
Je suis limité au smartphone jusqu'à 15h30, je vais chercher à l'écrire en lisp ou autre depuis le googlestore
Même si le calcul abouti je publierai les résultats par la fonction Minimize de Maple à titre de documentation mais je ne pourrai commencer que dans la nuit.
Oh bien sûr, dans ce cas particulier du problème où on utilise tan(45), on peut le remplacer par tan(45)=1
J'utilise pour l'instant le langage Pascal sur smartphone grâce à l'application Online Compiler - Code on Mobi j'apprends petit à petit la syntaxe et j'ai pour l'instant réussi à exécuter cela :
var
I : array[1..2] of integer ;
j : integer ;
begin
I[1]:=1;
I[2]:=2;
for j:= 1 to 2 do
writeln(I[j]);
end.
C'est un début.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionBon je dois vous laisser, le programme était terminé mais a planté et je l'ai perdu, voici le début de sa réécriture qui compile :
uses math ;
var
I : array[1..4] of real ;
x : integer ;
y : integer ;
j : integer ;
A : real;
B : real ;
C : real ;
D : real ;
begin
I[1]:=0.33;
I[2]:=0.36;
I[3]:=0.56;
I[4]:=0.6;
for x:= 10 to 25 do begin
for y:=10 to 45 do begin
A :=arctan(Y/(2*X+Y)) ;
B :=arctan((Y+X/2)/(Y+3*X/2)) ;
C :=arctan(X/(2*X+Y)) ;
D :=arctan((X+Y)/(2*X+Y)) ;
writeln(I[j]);
end ; end ;
end.
Bon je réécris dans les transports, le code ne compile plus à partir de cette étape à mon avis parce que les données deviennent trop grosses :
uses math ;
var
I : array[1..4] of real ;
x : integer ;
y : integer ;
j : integer ;
k : integer ;
l : integer ;
m : integer ;
n : integer ;
A : real;
B : real ;
C : real ;
D : real ;
begin
I[1]:=0.33;
I[2]:=0.36;
I[3]:=0.56;
I[4]:=0.6;
for x:= 10 to 25 do begin
for y:=10 to 45 do begin
A :=arctan(Y/(2*X+Y)) ;
B :=arctan((Y+X/2)/(Y+3*X/2)) ;
C :=arctan(X/(2*X+Y)) ;
D :=arctan((X+Y)/(2*X+Y)) ;
for k :=1 to 4 do
for l :=1 to 4 do
for m := 1 to 4 do
for n := 1 to 4 do
writeln(I[k]);;;;
end ; end ; end .
23 juin 2023 à 16:41
"le code ne compile plus à partir de cette étape à mon avis parce que les données deviennent trop grosses"
Il ne faut pas confondre compilation et exécution. Si ton code ne compile pas, c'est que la syntaxe est fausse, il n'est pas encore question de données, que l'on ne retrouvera qu'à l'exécution.
Remarque : ici les données ne sont pas trop grosses, tu ne consommes quasiment rien en mémoire, c'est le temps qui en revanche va se démultiplier, en particulier à cause ta monstrueuse quadruple boucle k/l/m/n qui ne sert à rien...
23 juin 2023 à 18:39
Compilation n'est peut-être pas le bon mot, j'aurais dû dire exécuter Jcar il y a quand même un writeln et j'ai un résultat à la fin... Je me suis dit que l'application peut-être non optimisée et l'utilisation d'un smartphone qui ont fait qu'avec la quadruple boucle le calcul n'aboutissait pas, je vais le faire tourner sur ordi.
Je pense que la quadruple boucle est nécessaire car sinon on a A=B=C=D au lieu de A et B et C et D in I, à moins que j'ai mal compris le "for E in I" ( sans compter que je ne vois pas comment écrire ça en Pascal)
Si je n'ai pas totalement oublié mon Pascal ... il y a 7 boucles imbriquées. Tout ça pour réécrire je ne sais combien de fois la même chose.
À quoi servent les calculs de A, B, C,D, ... ?
Tu es sur quel système sur ton ordi? Est-ce que tu utilises Visual Studio Code ou un autre IDE?
Si tu voulais "saturer" ton processeur, tu as réussi. Je compte plus de 147 000 writeln().
A, B, C, D ne dépendent que de X et Y, pas de k, l, m, n.
Si tu nous expliquais autrement ce que tu voulais calculer, on pourrait sans doute mieux t'aider.
j'ai allégé le code pour éviter de saturer voir sui j'arrivais à éxécuter, avec ceci :
uses math ;
var
I : array[1..4] of real ;
x : integer ;
y : integer ;
j : integer ;
k : integer ;
l : integer ;
m : integer ;
n : integer ;
A : real;
B : real ;
C : real ;
D : real ;
begin
I[1]:=0.33;
I[2]:=0.36;
I[3]:=0.56;
I[4]:=0.6;
writeln(I[1]);
readln;
end.
et ça ne marche pas. la touche run ferme freepascal. Je n'ai pas d'écran noir avec un résultat visible. Je ne sais pas l'utiliser.
je viens de voir que j'utilise "free pascal ide for win32" il n'y a pas d'autre nom pour l'ide.
EDIT j'ai changé pour un IDE nommé Lazarus et ce code simplifié tourne. Celui qui ne tourne pas est le free pascal proposé à l'installation sur CCM.
probleme résolu, il n'a pas de solution. la plus petite valeur trouvée pour l'erreur e est environ 2 (hors tolérence) trouvée avec ce code qui tourne sur ordinateur mais pas sur l'application smartphone :
uses
math ;
var
I : array[1..4] of real ;
x : integer ;
y : integer ;
z : boolean ;
j : integer ;
e : real ;
k : integer ;
l : integer ;
m : integer ;
n : integer ;
A : real;
B : real ;
C : real ;
D : real ;
eA : real ;
eB : real ;
eC : real ;
eD : real ;
begin
I[1]:=0.33;
I[2]:=0.36;
I[3]:=0.56;
I[4]:=0.6;
z:=FALSE;
for j:=1 to 100 do begin
e:= j/10;
for x:= 10 to 25 do begin
for y:=10 to 45 do begin
A :=arctan(Y/(2*X+Y)) ;
B :=arctan((Y+X/2)/(Y+3*X/2)) ;
C :=arctan(X/(2*X+Y)) ;
D :=arctan((X+Y)/(2*X+Y)) ;
for k :=1 to 4 do
for l :=1 to 4 do
for m := 1 to 4 do
for n := 1 to 4 do
begin
eA :=abs((pi/4)/A - I[k]) ;
eB := abs((pi/4)/B - I[l]) ;
eC := abs((pi/4)/C - I[m]) ;
eD :=abs((pi/4)/D - I[n]) ;
if (((((eA < e) and (eA >-1*e))
and ((eB < e) and (eB >-1*e)))
and ((eC < e) and (eC >-1*e)))
and ((eD < e) and (eD >-1*e)))
then begin
writeln(e:8:2,x,y,(pi/4)/A:8:2,I[k]:8:2,(pi/4)/B:8:2,I[l]:8:2,(pi/4)/C:8:2,I[m]:8:2,(pi/4)/D:8:2,I[n]:8:2) ;
readln ;end;
end;
end;
;;;;
end ;
end; ;end.
merci pour tout, bonne soirée.
EDIT : je ne vois pas comment afficher le sujet en résolu
Modifié le 23 juin 2023 à 22:49
"probleme résolu, il n'a pas de solution. la plus petite valeur trouvée pour l'erreur e est environ 2 (hors tolérence)"
Mouais... Pourquoi te limiter à x et y entiers ?
Et pourquoi te limiter également à x entre 10 et 25 et y entre 10 et 45 ?
Il y a une infinité de solutions réelles.
Exemple : x=23.52 ; y=24.77
a=0.33+0.002158 ; b=0.56-0,013481 ; c=0.33-0.013481 ; d=0.6-0.007991
Modifié le 24 juin 2023 à 08:52
Whoa je ne sais pas comment vous avez trouvé ça !
Malheureusement comme je l'ai corrigé par la suite ce n'est pas A,B,C,D qui doivent valoir 0,6 etc mais (pi/4)/A , (pi/4)/B...
X et Y sont entiers car cela correspond à des contraintes de construction cela peut être négociable notamment pour y malheureusement je ne pense pas que ça change grand-chose de prendre des réels car (pi/4)/A etc semblent varier en fonction de x/Y qui valent chacun au moins 10 donc le rapport ne changera pas beaucoup avec des réels
Toutefois je vais vous écouter et écrire avec y s'incrémente en 0,1 un peu plus tard
Modifié le 23 juin 2023 à 12:03
Je ne souhaite pas particulièrement utiliser lisp, c'est juste un langage que j'ai trouvé en cherchant des langages gratuits.
Quel langage serait adapté avec une fonction solve ? Il faut une licence je crois pour les langages scheme ou maple que j'avais utilisé pendant mes études (mais j'ai tout oublié)
Je ne cherche pas à ce qu'on fasse le travail à ma place mais seulement de l'aide.
Avec une référence de nom de langage je posterai mes propres essais de code
Cordialement