Programmation en C
Bonsoir
On m'a dit que si l'on connaît l'algorithmique et un langage de programmation, on peut facilement passer à un autre langage. Ce n'est pas le cas pour moi. Mon objectif est de programmer en C les 5 méthodes d'intégration dans un même programme (rectangles à gauche, rectangles à droite, rectangle de milieu, trapèze et Simpson). Je sais le faire en PYTHON, je veux que le programme me demande d'entrer la borne inférieure de l'intégrale, puis la borne supérieure de l'intégrale, puis le nombre n et enfin une fonction. Le résultat qui doit être affiché :
Une valeur approchée de l'intégrale par la méthode des rectangles à gauche est...
Une valeur approchée de l'intégrale par la méthode des rectangles à droite est...
...
Une valeur approchée de l'intégrale par la méthode de Simpson est.
On m'a dit que si l'on connaît l'algorithmique et un langage de programmation, on peut facilement passer à un autre langage. Ce n'est pas le cas pour moi. Mon objectif est de programmer en C les 5 méthodes d'intégration dans un même programme (rectangles à gauche, rectangles à droite, rectangle de milieu, trapèze et Simpson). Je sais le faire en PYTHON, je veux que le programme me demande d'entrer la borne inférieure de l'intégrale, puis la borne supérieure de l'intégrale, puis le nombre n et enfin une fonction. Le résultat qui doit être affiché :
Une valeur approchée de l'intégrale par la méthode des rectangles à gauche est...
Une valeur approchée de l'intégrale par la méthode des rectangles à droite est...
...
Une valeur approchée de l'intégrale par la méthode de Simpson est.
Je débute le C. Est-ce que quelqu’un peut partager avec moi son code en C.
Je partage mon code en python ; voici ce que j'ai fait et ça marche bien
Je partage mon code en python ; voici ce que j'ai fait et ça marche bien
def integration(a, b, n, f): h = (b-a)/n rect_gauche_result = 0 rect_droite_result = 0 rect_milieu_result = 0 for i in range(n): x = a + i*h rect_gauche_result += f(x)*h for i in range(1, n+1): x = a + i*h rect_droite_result += f(x)*h for i in range(n): x = a + (i + 0.5) * h rect_milieu_result += f(x)*h trapeze_result = (rect_gauche_result+ rect_droite_result)/2 simpson_result =(1/6)*(rect_gauche_result+ rect_droite_result +4*rect_milieu_result) return rect_gauche_result, rect_droite_result, rect_milieu_result,trapeze_result, simpson_result a = float(input("Entrez la valeur de a : ")) b = float(input("Entrez la valeur de b : ")) n = int(input("Entrez le nombre n : ")) f = input("Entrez la fonction (exemple : x**2): ") f = eval("lambda x: " + f) result_rect_gauche, result_rect_droite, result_rect_milieu, result_trapeze, result_simpson = integration(a, b, n, f) print("Resultat de la methode des rectangles à gauche : ",result_rect_gauche) print("Resultat de la methode des rectangles à droite : ",result_rect_droite) print("Resultat de la methode des rectangles au point milieu : ",result_rect_milieu) print("Resultat de la methode des trapezes : ",result_trapeze) print("Resultat de la methode de simpson : ",result_simpson)Edit. Après je dois améliorer l pour demander au programme de m'afficher 5 graphiques (la méthode, la fonction, les rectangles ou trapèzes ou la courbe de Simpson)
Le 😄 Farceur
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
De plus il a ajouté les précisions suivantes :
Il est possible de permettre à l'utilisateur d'entrer une fonction sous forme de chaîne de caractères en utilisant une bibliothèque telle que
<i>libmatheval</i>
. Cette bibliothèque permet d'évaluer des expressions mathématiques saisies sous forme de chaînes de caractères...Il est important de noter que pour utiliser
<i>libmatheval</i>
, vous devez installer cette bibliothèque et inclure les fichiers d'en-tête appropriés dans votre programme. En outre, il est important de noter que cette méthode peut être moins précise que d'autres méthodes de calcul d'intégrales et peut avoir des limitations en termes de fonctions prises en charge.Voilà gebrane, fais du ChatGPT plutôt que du C...
-- Schnoebelen, Philippe
Que signifie ce " " dans le code Python ?
Cordialement,
Rescassol
[J'ai supprimé le code " " inutile (il spécifie une espace). AD]
Je pense que c’est juste un problème d’affichage (ça ne fait pas partie du code).
Pour revenir à ta question, écrire sérieusement en C ne s'improvise pas du tout. D'ailleurs, on dit que quand il est sorti, des gens aurait râlé : "Oh non, encore un assembleur !" ChatGPT a dû beaucoup bosser pour y arriver.
C’est assez dingue de confondre ce qu’est un enseignant avec une personne qui a telle ou telle capacité technique.
-- Schnoebelen, Philippe
#include <math.h>
double f(double x) {
return x*x;
}
double rectangle_gauche (double a, double b, int n)
{
double h = (b - a) / n;
double sum = 0;
for (int i = 0; i < n; i++)
{
sum += f(a + i*h)*h;
}
return sum;
}
int main() {
double a, b;
int n;
printf("On cherche une valeur approchée de l'intégrale de x² entre a et b ");
printf("Donner a : ");
scanf("%lf", &a);
printf("Donner b : ");
scanf("%lf", &b);
printf("Donner le nombre de rectangles n : ");
scanf("%d", &n);
printf("Une valeur approchée par la méthode des rectangles à gauche est %lf\n", rectangle_gauche(a, b, n));
}
J'suis perdu dans l'noir comme un chat
On m'a confié un TP d'analyse numérique Sur la programmation en C,
C'est l'enfer
J'plonge dans les livres, les tutos et les forums
Espérant découvrir les secrets d'ce langage
Mais chaque ligne d'code me paraît un abîme
C'est l'enfer
Et j'me sens comme un naufragé sur un rivage
Et si demain, j'arrive pas à coder avec aisance
Et maîtriser ce langage qui me semblait si étrange
J'code en Python, mon amour, et j'laisse le C pour mes chéris apprentis.
C'est l'enfer
-- Schnoebelen, Philippe
-- Schnoebelen, Philippe
---------------------------------------
Est-ce un passe-temps ? Non
---------------------------------------
Qui doit le faire ce travail ? Moi
--------------------------------------
Qui veut le faire ce passe-temps ?
Sont ceux qui ont la compétence, l'expérience et le temps libre. Sont ceux qui partagent leur lumière. Sont ceux qui ont acquis la sagesse des années et peuvent transmettre leur savoir avec bienveillance et générosité. Sont ceux qui offrent Leur temps libre comme un cadeau précieux et surtout avec bonheur . Sont ceux qui éclairent les autres, pour élever les esprits.
--------------------------------------
Il faut surtout démontrer que les deux suites sont convergentes, ce qui rend la définition rigoureuse. C'est une définition qu'on doit donner sans démonstration (car le prix à payer est un peu cher, elle s'adresse donc à un public qui ne va pas faire carrière en mathématiques) et (surtout ne pas croire que les deux suites sont adjacentes même si on suppose que $f$ est positive) je la trouve meilleure que la définition qu'on donne : que l'intégrale d'une fonction continue positive est par définition l'aire sous la courbe ou la définition qui dit que $\int_a^b f(x) dx = F(b) - F(a)$ avec $F$ une primitive de $f$.
Ça donne quelque chose comme ça
f = eval("lambda x: " + f)
Voici un exemple de code qui demande à l'utilisateur de saisir une fonction sous forme de chaîne de caractères, utilise tinyexpr pour évaluer cette fonction, puis l'applique à un argument donné:
#include <stdio.h>
#include <tinyexpr.h>
int main() {
char function[100];
double x, result;
printf("Entrez la fonction (exemple : x**2): ");
scanf("%s", function);
te_variable vars[] = {{"x", &x}};
te_expr *expr = te_compile(function, vars, 1, 0);
x = 2;
result = te_eval(expr);
printf("f(%lf) = %lf\n", x, result);
te_free(expr);
return 0;
}
Notez que vous devez installer la bibliothèque tinyexpr et inclure l'en-tête tinyexpr.h pour utiliser les fonctions décrites dans ce code .