Bonjour,
J'ai besoin d'un code source pour un sablier qui marche avec le temp, svp.
Et merci d'avance.
Bonjour,
J'ai besoin d'un code source pour un sablier qui marche avec le temp, svp.
Et merci d'avance.
Bonjour et bienvenue,
Pourrais-tu être plus précis dans ta demande ? S'agit-il d'afficher un curseur d'attente pendant une opération, ou autre chose ?
Règles du forum
Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
Mes tutoriels et sources Pascal
Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]
J'ai un exemple en C++.
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
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
84
85
86
87
88
89
90
91
92
93 /* File: hourglass.cpp Created by: Creation Date: 10/8/2014 Synopsis: prints an hour glass using asterisks and an maximum top row from user */ #include <iostream> #include <cmath> using namespace std; int main() { // Declare and initialize variables int row_top(0); int row(0); int i(0); int k(0); int j(0); // Repeatedly prompt for top row size until valid value is entered cout << "Enter size of the top row: " ; cin >> row_top; while(row_top < 3) { cout << "Size of the top tow must be at least three." << endl; cout << "Enter size of the top row again: "; cin >> row_top; } // Repeatedly prompt for the number of rows until valid value is entered cout << "Enter number of rows: "; cin >> row; while(row == 0 || row_top/row < 2.0 || row < 1.0 ) { cout << "Invalid number of rows." << endl; cout << "Enter number of top row again: "; cin >> row; } // Print the hour glass cout << endl; for (i=1; i <= row * 2 ; i++) { if (i <= row+1) { for (j=1; j <= i-1; j++) { cout << " "; } for (k=1; k <= row_top-(i*2-2); k++) { cout << "*"; } if (row != i) { cout << endl; } } else { for (j=row; j >= i-(row-1); j--) { cout << "o"; } for (k=1; k >= row_top-(i*2-2); k--) { cout << "*"; } cout << endl; } } // end program return 0; }
![]()
L'idéal quand on aborde ce genre de problème, c'est de tenter de le résoudre sur une feuille de papier, en essayant de trouver un algorithme que l'on transpose ensuite en Pascal.
Tu peux t'inspirer de ce petit exercice, qui consiste en l'affichage d'un carré (mais qui nécessite deux boucles imbriquées) : https://www.developpez.net/forums/d1...l-utilisateur/. Exécute-le sur papier puis vois comment passer du carré au sablier.
![]()
Règles du forum
Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
Mes tutoriels et sources Pascal
Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]
Bonjour,
Je vois trois questions à résoudre dans le cas de ton projet:
1°) La définition de la zone de l'écran texte occupée par le sablier: ici deux trapèzes adjacents, soit pas moins de 7 frontières rectilignes à définir ! Pas très simple finalement, pour un schéma d'apparence élémentaire ... Cependant la symétrie permet des simplifications.
2°) Le transfert progressif des (N) "particules" de sable (ici des caractères) de la moitié supérieure du domaine à l'autre, réalisable à l'aide d'un tableau de coordonnées (x, y) de longueur supérieure à (2*N); cette question est de fait intimement liée à la précédente, dans la mesure où la liste en question mémorise, au-delà de l'ensemble des positions actuelles des particules, celui des positions possibles - soit par conséquent la forme du sablier.
Il faut d'ailleurs, à ce stade, régler un petit détail: la figure doit comporter non pas un mais deux sortes de caractères , afin de bien distinguer les cases occupées ('*', 'o' ou 'O') de celles qui sont vides (' ' ou '█').
3°) Le couplage éventuel de l'évolution de la figure affichée à l'horloge interne, algorithme qui bien que peu décrit n'est pas très difficile.
Tu pourrais justement commencer par ce dernier point, en t'en tenant provisoirement à un ensemble d'étoiles alignées.
Tu trouveras ici le lien vers un programme classique de Turbo Pascal, sur un sujet apparenté; il te suffit de n'en retenir que ce qui est en lien direct avec la procédure GetTime.
Si cela te paraît trop compliqué, il te reste encore une solution très simple, qui consiste à intercaler un délai d'attente entre deux déplacements d'étoiles, par l'instruction Delay(1000) - dont la durée vaut ici 1000 ms = 1s .
Partager