Exemples

publicité
Solutionnaire du laboratoire # 3
Question #1
La force que deux corps exercent l’un sur l’autre est proportionnelle au produit de leurs
masses et inversement proportionnelle au carré de leur distance. Voici cette loi sous
forme mathématique :
F = G m1 m2
r2
où
G est la constante gravitationnelle (6.67 x 10-11 N.m2/kg2),
m1 est la masse de l’objet 1 (kg),
m2 est la masse de l’objet 2 (kg),
r est la distance qui sépare les deux masses (mètre).
Écrire un programme qui prend en entrée les masses m1 et m2 et la distance r puis,
affiche la valeur de la force gravitationnelle.
En particulier, fournissez en entrée les données suivantes :
m1 : 5.98 x 1024 kg (masse de la terre),
m2 : 82 kg (masse d’une personne),
r : 6.38 x 106 m. (rayon de la terre),
le programme affichera alors le poids de cette personne.
#include <iostream.h>
void main()
{
const double G = 6.67E-11;
double m1, m2;
// Masse de chaque objet.
double r;
// Distance entre les 2 masses.
double F;
// Force gravitationnelle.
cout << "Entrez dans l'ordre les 2 masses puis, la distance entre les 2 masses."
<< endl << endl;
cin >> m1 >> m2 >> r;
F = G * m1 * m2 / r / r;
cout
<< endl << endl
<< "Affichez la valeur de la force gravitationnelle : "
<< F
<< endl;
}
Question #2
Deux marathoniens A et B terminent leur course presqu’en même temps. Le gagnant A
affirme avec conviction que son temps est meilleur que celui obtenu par B de 10 sec. au
moins. Écrire un programme qui prend en entrée le temps (heures, minutes et secondes)
de chaque coureur et affiche comme résultat 1 ou 0 selon que le coureur A a raison ou
non.
#include <iostream.h>
void main()
{
const int minute = 60;
const int heure = 3600;
int Ah, Am, As;
int Bh, Bm, Bs;
// Temps obtenu par le coureur A.
// Temps obtenu par le coureur A.
bool Qui_dit_vrai;
cout << "Temps obtenu par le coureur A : " << endl;
cin >> Ah >> Am >> As;
cout << "Temps obtenu par le coureur B : " << endl;
cin >> Bh >> Bm >> Bs;
Qui_dit_vrai =
((Bh * heure + Bm * minute + Bs) (Ah * heure + Am * minute + As)) < 10;
cout << endl << Qui_dit_vrai << endl;
}
Question #3
En mathématiques, un nombre parfait est un nombre entier n strictement supérieur à 1
qui est égal à la somme de ses diviseurs, excluant n.
Exemples
Les 4 premiers nombres parfaits sont connus depuis l'antiquité. Depuis, le total est passé
à 44 nombres parfaits seulement (au 11/09/2006).
Les douze premiers nombres parfaits sont :












(i)
6=1+2+3
28 = 1 + 2 + 4 + 7 + 14
496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248
8 128 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 127 + 254 + 508 + 1 016 + 2 032 + 4 064
33 550 336
8 589 869 056
137 438 691 328
2 305 843 008 139 952 128
2 658 455 991 569 831 744 654 692 615 953 842 176
191 561 942 608 236 107 294 793 378 084 303 638 130 997 321 548 169 216
13 164 036 458 569 648 337 239 753 460 458 722 910 223 472 318 386 943 117
783 728 128
1 447 401 11 546 645 244 279 463 731 260 85 988 481 573 677 491 474 835 889
066 354 349 131 199 152 128
Construire un algorithme qui prend en entrée un entier naturel n et affiche comme
résultat oui ou non selon que n est un nombre parfait ou non.
Étape 1.
Lire un nombre n.
Étape 2.
Si n est plus petit ou égal à 1 alors écrire non.
Étape 3.
Initialiser une variable somme à 0.
Étape 4.
Pour chaque valeur de i allant de 1 à la division entière de n par 2
4.1
Étape 5.
Si i est un facteur de n alors ajouter i à la variable somme.
Si somme est égale à n
alors écrire oui
sinon écrire non.
Étape 6.
(ii)
Fin de l’algorithme.
D’après vous, en écrivant cet algorithme en C++ et en déclarant les variables de
type long int, combien de nombres parfaits pourriez-vous retrouver ?
En considérant le type de donnée unsigned long int, le plus grand entier que l’on
peut manipuler est : 4 294 967 295. Par conséquent, on pourrait en retrouver 5.
Question #4
Nous avons construit un algorithme qui prend en entrée un entier naturel n, calcule
l’expression suivante :
n2
 (i2 – 2 i + 5)
i=1
et affiche le résultat obtenu.
1.
Lire un entier naturel n.
2.
Placer dans m la valeur de n * n.
3.
Placer dans somme la valeur 0.
4.
Pour chaque valeur de i allant de 1 à m
Calculer i * i – 2 * i + 5.
Ajouter le résultat à somme.
5.
Afficher la valeur de somme.
Nous avons ensuite calculé le nombre d’opérations élémentaires nécessaires pour
exécuter cet algorithme.
5+
n2
 (6) = 5 + 6 n2.
i=1
Reconsidérez l’algorithme précédent pour réduire le nombre d’opérations élémentaires.
Posons f(i) = (i2 – 2 i + 5); on a alors f(i) = f(i-1) + 2i - 3.
L’algorithme peut alors s’écrire :
1. Lire un entier naturel n.
2. Placer dans m la valeur de n * n.
3. Placer dans somme la valeur 5.
4. Pour chaque valeur de i allant de 1 à m
a. Calculer 2 * i - 3.
b. Ajouter le résultat à somme.
5. Afficher la valeur de somme.
Nous pouvons ensuite calculer le nombre d’opérations élémentaires nécessaires pour
exécuter cet algorithme.
5+
n2
 (4) = 5 + 4 n2.
i=1
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Téléchargement