| Voulez-vous relever ce challenge? | |
|
|
Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Voulez-vous relever ce challenge? Sam 2 Juil 2022 - 22:47 | |
| Salut les Panoramiciens.
Je vous propose un mini challenge. Ecrire deux fonctions MAXI(a,b) et MINI(a,b) qui retournent respectivement le maximum et le minimum de 2 valeurs a et b passées en paramètres. Contrainte : Ne pas utiliser la structure conditionnelle du genre IF ... THEN ni les opérateurs de comparaisons =, >, <, <>, etc.. Il va de soi qu'il ne faut pas utiliser non plus les fonctions dejà implementées MIN et MAX, sinon le défi n'aura plus de sens!
NB : Il n'y a rien à gagner (rien à perdre non plus). Si personne ne relèvera le défi, je satisferais votre curiosité dans la journée.
Dernière édition par papydall le Sam 2 Juil 2022 - 23:59, édité 1 fois | |
|
| |
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Voulez-vous relever ce challenge? Sam 2 Juil 2022 - 23:30 | |
| Bonsoir Papydall ! Pour une fois le défi semble à ma porté ! A moins qu'il y ai un piège... - Voilà ma solution :
DIM a , b
INPUT "Premier nombre : ";a INPUT "Deuxième nombre : ";b
DLIST 1 : SORT_ON 1: ITEM_ADD 1,a : ITEM_ADD 1,b
PRINT "Le plus petit nombre est "+STR$(MINI(a,b)) PRINT "Le plus grand nombre est "+STR$(MAXI(a,b))
END
FNC MINI(mi1,mi2) RESULT ITEM_READ$(1,1) END_FNC
FNC MAXI(ma1,ma2) RESULT ITEM_READ$(1,2) END_FNC
Dernière édition par Minibug le Sam 2 Juil 2022 - 23:54, édité 3 fois | |
|
| |
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Voulez-vous relever ce challenge? Sam 2 Juil 2022 - 23:41 | |
| Bonjour Papydall ! Je n'ai pas de mérite, tu m'avais communiqué la technique dans un autre post. - Spoiler:
- Code:
-
dim a, b
a = 15.59 b = 18
print maxi(a,b) print mini(a,b) end
fnc maxi(a1,b1) result max(a1,b1) end_fnc
fnc mini(a1,b1) result min(a1,b1) end_fnc
Bon week-end ! | |
|
| |
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Voulez-vous relever ce challenge? Sam 2 Juil 2022 - 23:48 | |
| Ah oui bien sûr en utilisant les fonctions MIN et MAX !!! Moi je croyais qu'il fallait chercher la solution sans cela justement sinon ça me semblait vraiment trop simple !!!!
Dernière édition par Minibug le Dim 3 Juil 2022 - 0:03, édité 1 fois | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Voulez-vous relever ce challenge? Sam 2 Juil 2022 - 23:48 | |
| Merci Minibug pour la solution. Mais l'utilisation d'un DLIST et surtout le SORT_ON fait en sorte que le DLIST se trouve ordonné. Bon, c'est une solution et tu seras sans doute surpris de l'élégance et de la concision de la mienne. | |
|
| |
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Voulez-vous relever ce challenge? Sam 2 Juil 2022 - 23:51 | |
| | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Voulez-vous relever ce challenge? Sam 2 Juil 2022 - 23:52 | |
| - Minibug a écrit:
- Ah oui bien sûr en utilisant les fonctions MIN et MAX !!!
#Marc Justement, il NE FALLAIT PAS utilisr les fonctions dejà existantes MIN et MAX! | |
|
| |
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Voulez-vous relever ce challenge? Sam 2 Juil 2022 - 23:59 | |
| - Papydall a écrit:
- Justement, il NE FALLAIT PAS utilisr les fonctions dejà existantes MIN et MAX!
Je ne le savais pas Ce n'est pas interdit dans l'énoncé du challenge. | |
|
| |
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Voulez-vous relever ce challenge? Dim 3 Juil 2022 - 0:02 | |
| | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Voulez-vous relever ce challenge? Dim 3 Juil 2022 - 0:06 | |
| Merci Marc pour la tentative. Je viens de rectifier l'énoncé du défi dans le 1er message.
Tente une autre approche.
Indication : Et si on utiliserait la moyenne arithmétique de deux nombres à laquelle on ajouterait (ou retrancherait) une certaine quantité ... | |
|
| |
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Voulez-vous relever ce challenge? Dim 3 Juil 2022 - 0:18 | |
| Autre approche : - Spoiler:
- Code:
-
dim a, b
a = 15.59 b = 12.28
print maxi(a,b) print mini(a,b) end
fnc maxi(a1,b1) result (a1+b1+abs(a1-b1))/2 end_fnc
fnc mini(a1,b1) result (a1+b1-abs(a1-b1))/2 end_fnc
| |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Voulez-vous relever ce challenge? Dim 3 Juil 2022 - 0:33 | |
| BRAVO Marc !On part de la moyenne de deux nombres : (a+b) / 2 puis on ajoute (respectivement on retranche) la moitié de la valeur absolue de l'intervalle [a,b] abs(a-b) / 2 Ce qui donne - Code:
-
rem ============================================================================ ' Exemples print "Le maximum de 1 et de 15 est : " ; maxi(1,15) print "Le minimum de 3 et de -5 est : " ; mini(3,-5) print print "Le maximum de -123 et 456 est : " ; maxi(-123,456) print "Le minimum de -123 et 456 est : " ; mini(-123,456) end rem ============================================================================ FNC maxi(a,b) result ((a+b) + abs(a-b))/2 END_FNC rem ============================================================================ FNC mini(a,b) result ((a+b) - abs(a-b))/2 END_FNC rem ============================================================================
| |
|
| |
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Voulez-vous relever ce challenge? Dim 3 Juil 2022 - 0:53 | |
| Merci à tous les 2 pour ce petit cours de mathématique !!!! | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Voulez-vous relever ce challenge? Dim 3 Juil 2022 - 1:39 | |
| Comme vous êtes aussi forts en mathématiques qu'en Panoramic, voici un autre challenge s'il vous plait: Ecrire une fonction Racine_Carree(a) qui retourne la racine carrée de son argument. Il ne faut utiliser bien sûr ni SQR ni POWER | |
|
| |
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Voulez-vous relever ce challenge? Dim 3 Juil 2022 - 8:28 | |
| Désolé Papydall mais là je suis perdu ! Quand il s'agit de logique ou de programmation, Ok pas de problème ! Mais pour les math, l'algèbre et tout le reste alors là c'est autre chose... | |
|
| |
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Voulez-vous relever ce challenge? Dim 3 Juil 2022 - 11:19 | |
| - Papydall a écrit:
- Ecrire une fonction Racine_Carree(a) qui retourne la racine carrée de son argument.
Il ne faut utiliser bien sûr ni SQR ni POWER Ma proposition est une adaptation en langage Panoramic d'un code C++ Source : http://coliru.stacked-crooked.com/a/c1caaf3e67313aa8 - Code:
-
dim a a=3
if a < 0 message "Nombres négatifs interdits !" terminate end_if print sqr(a) print racine_carree(a) end fnc racine_carree(a1) dim_local i,rc i = 1 rc = a1*a1 while abs(rc-i) > 1E-15 i = rc rc = 0.5*(rc + a1/rc) end_while result rc end_fnc | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Voulez-vous relever ce challenge? Dim 3 Juil 2022 - 22:42 | |
| Merci Minibug et merci Marc. Ma proposition: - Code:
-
rem ============================================================================ rem Racine carrée rem ============================================================================ print Racine_Carree(123) print Racine_Carree(10000) print Racine_Carree(2) end rem ============================================================================ FNC Racine_Carree(a) dim_local x,y x = (1+a)/2 repeat y = x : x = (y+a/y)/2 until x >= y result x END_FNC rem ============================================================================
Une autre approche dite la méthode de Héron - Code:
-
rem ============================================================================ rem Racine carrée rem ============================================================================ print Racine_Carree(2) print Racine_Carree(625) print Racine_Carree(123) print Racine_Carree(123456789)
end rem ============================================================================ ' Méthode de Héron FNC Racine_Carree(a) dim_local long,larg, epsilon if (a < 0) message "!!! ERREUR !!! L'argument doit être un nombre positif" exit_fnc end_if long = a larg = 1 epsilon = 0.0000001 while abs(long - larg) > epsilon long = (long + larg) / 2 larg = a / long end_while result long END_FNC rem ============================================================================
| |
|
| |
Contenu sponsorisé
| Sujet: Re: Voulez-vous relever ce challenge? | |
| |
|
| |
| Voulez-vous relever ce challenge? | |
|